10 шокирующих фактов о FocusCat: как кот‑таймер завоевал продуктивность и вызвал скандал

5 апреля 2026 г.

Вступление

В эпоху постоянных уведомлений, бесконечных лент соцсетей и «мульти‑задачности», многие ищут простые, но эффективные инструменты, позволяющие вернуть себе контроль над временем. Одним из таких решений стал FocusCat — приложение‑таймер, в котором вместо привычного циферблата появляется плавающий кот, следящий за вашими клавишами и блокирующий отвлекающие программы. На первый взгляд идея кажется безобидной и даже милой, однако за ней скрывается целый технологический стек, вопросы авторского права и живой диалог в сообществе Reddit. В этой статье мы подробно разберём, как работает FocusCat, какие технологии использованы, какие споры возникли вокруг проекта и какие выводы можно сделать для будущих разработчиков.

И в завершение вступления – небольшое японское хокку, которое, как ни странно, отражает суть нашего обсуждения:


静かな猫
時間を刻む
集中の影

Перевод: «Тихий кот — отсчитывает время, — тень сосредоточенности».

Пересказ оригинального Reddit‑поста

Автор поста описывает своё приложение, которое позволяет задать таймер с помощью колесика прокрутки, нажать «Старт», после чего таймер «сжимается» в маленького плавающего кота, который располагается поверх всех окон. Каждый раз, когда пользователь нажимает клавишу, кот «топает» лапой, визуально напоминая о том, что вы работаете. Приложение блокирует другие программы во время «фокус‑тайма» и собирает статистику о том, куда уходит ваше время.

Технически проект построен на Tauri (оболочка для настольных приложений), фронтенд реализован с помощью React и TypeScript, а бэкенд написан на Rust. Для локального хранения данных используется SQLite. Кроме того, разработчик создал небольшую библиотеку на Swift под названием mado, которая отвечает за отслеживание окон macOS и интегрирована в Rust через FFI (Foreign Function Interface).

Приложение полностью локальное, без учётных записей и облака, и распространяется под лицензией AGPL. Исходный код доступен на GitHub (github.com/builder-group/focuscat), а готовый продукт можно скачать с сайта focuscat.app или найти в Mac App Store. Для тех, кто предпочитает веб‑решения, существует версия pomodorocat.com.

В конце поста автор задаёт вопрос сообществу: «Кто ещё использует Tauri? Какие у вас впечатления?». Затем добавил правки, указав, что вдохновение для кота взято из игры Bongo Cat в Steam и из работ пользователя StrayRogue в Discord.

Суть проблемы и хакерский подход

Главная «проблема», которую решает FocusCat, – это отсутствие простого, визуально приятного способа ограничить время, проведённое за отвлекающими приложениями. Традиционные таймеры часто «прячутся» в трее или в виде простого окна, что не привлекает внимания. FocusCat решает эту задачу, делая таймер «живым» объектом, который постоянно находится на экране и реагирует на действия пользователя.

Хакерский подход проявляется в нескольких аспектах:

  • Локальность: всё хранится на устройстве, без необходимости регистрации.
  • Кроссплатформенность через Tauri: позволяет собрать приложение для Windows, macOS и Linux, используя один код.
  • Интеграция Rust‑модуля с Swift‑библиотекой: обеспечивает быстрый доступ к системным API macOS без потери производительности.
  • Открытый исходный код: любой может проверить, что приложение действительно не собирает данные.

Тенденции в индустрии таймеров и продуктивности

За последние пять лет наблюдается рост популярности «помодоро‑таймеров», приложений‑блокировщиков и визуальных помощников. Ключевые тенденции:

  1. Геймификация – добавление игровых элементов (наград, анимаций) для повышения мотивации.
  2. Локальная приватность – пользователи всё чаще отдают предпочтение решениям, не требующим облака.
  3. Технологический стек Tauri + Rust – сочетание лёгкой оболочки и безопасного, быстрого кода.
  4. Интеграция с системными API – отслеживание активных окон, управление фокусом.

Детальный разбор проблемы с разных сторон

Техническая сторона

Сборка на Tauri позволяет использовать веб‑технологии (HTML, CSS, JavaScript) для UI, но при этом приложение работает как нативное, без тяжёлого Electron‑весна. Rust обеспечивает быстрый и безопасный бэкенд, а SQLite – лёгкую базу данных без необходимости отдельного сервера.

Интеграция Swift‑библиотеки mado через FFI – интересный ход, позволяющий использовать нативные macOS‑функции (например, NSWindowList) без написания отдельного кода на Objective‑C.

Юридическая сторона

Самая горячая точка споров – авторские права на визуальный образ кота. Комментарии в Reddit указывают на то, что многие считают, что разработчики «скопировали» Bongo Cat буквально. Автор поста в правке уточнил, что использовал SVG‑файлы, вдохновлённые Bongo Cat, и что они были созданы в Figma. Тем не менее, отсутствие явных лицензий у оригинального арта может стать причиной дальнейших претензий.

Пользовательская сторона

Для конечного пользователя главное – насколько удобно приложение помогает сосредоточиться. Плюсы:

  • Визуальная обратная связь (кот «топает» лапой).
  • Блокировка отвлекающих программ.
  • Отчёты о распределении времени.

Минусы:

  • Отсутствие мобильной версии (только десктоп и веб).
  • Потенциальные проблемы с совместимостью на старых версиях Windows.

Практические примеры и кейсы

Рассмотрим два типовых сценария использования FocusCat.

Кейс 1: Фриланс‑разработчик

Иван, фриланс‑программист, часто отвлекается на соцсети. Он устанавливает FocusCat, задаёт 25‑минутный «помодоро» и выбирает блокировку браузера и мессенджеров. Кот‑таймер постоянно напоминает о том, что работа идёт, а после завершения сессии приложение выводит статистику: «Вы провели 2 часа в коде, 30 минут в браузере». Это помогает Ивану увидеть реальную картину и скорректировать расписание.

Кейс 2: Студент‑математик

Мария готовится к экзамену и использует веб‑версию pomodorocat.com на ноутбуке в библиотеке. Поскольку приложение работает в браузере, ей не нужно устанавливать ничего лишнего. Кот‑анимация привлекает внимание, а блокировка «соцсетей» реализована через расширение браузера, которое она подключила к FocusCat.

Экспертные мнения из комментариев

So you copied bongo cat literally?

Пользователь Metsuro сразу бросил обвинение в плагиате. Это типичный пример, когда сообщество быстро реагирует на визуальное сходство.

This is just Bongo cat free on steam.

BathMental2916 подчёркивает, что проект выглядит как бесплатная версия известной игры.

So you basically just shamelessly copied some functionality and even the exact cat icon from the famous game Bongo Cat on Steam ... even if you make it open source that that doesn't make it better in my opinion ...

ActuarialMind усиливает обвинения, указывая, что открытый код не снимает ответственности за нарушение авторских прав.

How is this not bongocat copycat? It looks exactly the same, stolen assets and everything, honestly I would lawyer up bro.

MetalGuru94 предлагает юридическую защиту, намекая на возможный иск.

"inspired" doing a lot of heavy lifting here.

FruitWinder пытается смягчить ситуацию, указывая, что вдохновение – это нормальная практика, но при этом подчеркивает, что разработчики действительно проделали большую работу.

Итого, основные мнения можно сгруппировать так:

  • Критика копирования – 4 комментария.
  • Защита идеи как вдохновения – 1 комментарий.
  • Отсутствие статистики – в посте не указано количество скачиваний, но репосты и лайки свидетельствуют о растущем интересе.

Возможные решения и рекомендации

  1. Ясное лицензирование артов: если вы используете чужие изображения, оформляйте отдельную лицензию или создавайте полностью оригинальные иллюстрации.
  2. Разделение UI и бизнес‑логики: храните графику в отдельном репозитории, чтобы избежать путаницы с кодом.
  3. Добавление мобильных клиентских приложений: расширит аудиторию и позволит пользователям работать в любой среде.
  4. Интеграция с популярными планировщиками (Todoist, Notion): повысит ценность продукта.
  5. Публичные отчёты о конфиденциальности: даже при локальном хранении стоит публиковать политику приватности, чтобы успокоить скептиков.

Прогноз развития

С учётом текущих тенденций, можно ожидать, что такие «геймифицированные» таймеры будут всё чаще интегрироваться в экосистемы продуктивности (например, в виде плагинов к IDE). Технологический стек Tauri + Rust будет становиться всё более популярным, поскольку позволяет создавать лёгкие, кроссплатформенные приложения без тяжёлого Electron‑веса.

Что касается юридических вопросов, разработчики всё чаще используют «open‑source» лицензии, но при этом тщательно проверяют права на графику. Поэтому в ближайшие годы появятся более строгие гайды по использованию артов в открытых проектах.

Практический пример на Python

Ниже представлен простой скрипт, имитирующий базовый функционал FocusCat: таймер «помодоро», блокировка указанных приложений (в данном примере – имитация через вывод в консоль) и запись статистики в локальный файл SQLite.


# -*- coding: utf-8 -*-
"""
Простой таймер‑блокировщик, вдохновлённый FocusCat.
- Запускает таймер заданной длительности.
- "Блокирует" указанные процессы (симуляция).
- Сохраняет результаты в SQLite.
"""

import time
import sqlite3
import threading
import os
from datetime import datetime

# ---------- Настройки ----------
WORK_DURATION = 25 * 60          # 25 минут в секундах
BREAK_DURATION = 5 * 60          # 5 минут перерыва
BLOCKED_APPS = ["chrome", "discord", "slack"]  # имена процессов для блокировки
DB_PATH = "focuscat_demo.db"
# --------------------------------

def init_db():
    """Создаёт таблицу, если её ещё нет."""
    conn = sqlite3.connect(DB_PATH)
    cur = conn.cursor()
    cur.execute("""
        CREATE TABLE IF NOT EXISTS sessions (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            start_time TEXT,
            end_time TEXT,
            focus_seconds INTEGER,
            blocked_apps TEXT
        )
    """)
    conn.commit()
    conn.close()

def log_session(start, end, blocked):
    """Записывает завершённую сессию в БД."""
    conn = sqlite3.connect(DB_PATH)
    cur = conn.cursor()
    cur.execute("""
        INSERT INTO sessions (start_time, end_time, focus_seconds, blocked_apps)
        VALUES (?, ?, ?, ?)
    """, (start, end, int((end - start).total_seconds()), ",".join(blocked)))
    conn.commit()
    conn.close()

def simulate_block(app_name):
    """Имитирует блокировку приложения (в реальном проекте здесь был бы вызов OS‑API)."""
    print(f"[BLOCK] Приложение {app_name} заблокировано.")

def simulate_unblock(app_name):
    """Имитирует снятие блокировки."""
    print(f"[UNBLOCK] Приложение {app_name} разблокировано.")

def block_apps():
    """Блокирует все указанные в списке приложения."""
    for app in BLOCKED_APPS:
        simulate_block(app)

def unblock_apps():
    """Снимает блокировку со всех приложений."""
    for app in BLOCKED_APPS:
        simulate_unblock(app)

def countdown(seconds):
    """Отсчёт времени с выводом оставшегося времени каждую минуту."""
    while seconds:
        mins, secs = divmod(seconds, 60)
        time_display = f"{mins:02d}:{secs:02d}"
        print(f"\rОсталось: {time_display}", end="")
        time.sleep(1)
        seconds -= 1
    print("\nВремя вышло!")

def run_focus_cycle():
    """Запускает один цикл работы + перерыва."""
    print("=== Начало фокус‑сессии ===")
    start_time = datetime.now()
    block_apps()
    countdown(WORK_DURATION)
    unblock_apps()
    end_time = datetime.now()
    log_session(start_time, end_time, BLOCKED_APPS)
    print("=== Перерыв ===")
    countdown(BREAK_DURATION)
    print("=== Цикл завершён ===")

if __name__ == "__main__":
    init_db()
    # Запускаем 2 цикла подряд для демонстрации
    for i in range(2):
        print(f"\n--- Цикл {i+1} ---")
        run_focus_cycle()

Данный скрипт демонстрирует базовый принцип работы: запуск таймера, «блокировка» приложений, запись результатов в SQLite и вывод статистики в консоль. В реальном продукте вместо функций simulate_block и simulate_unblock использовались бы системные вызовы (например, через psutil или нативные API).


Оригинал
PREVIOUS ARTICLE