Не список встреч, а честная картина дня: где работа, где еда, где отдых,
а где дыра, в которую утекло три часа.
Живёт на твоём компьютере. Без облака, без аккаунтов в чужих сервисах, без аналитики.
Обычный календарь показывает встречи. А день утекает между ними: полчаса на почту, час на «быстро глянуть», вечер, который куда-то делся. Календарь про это ничего не скажет — там пусто, значит свободно.
Здесь наоборот. В сутках 1440 минут, и каждая либо чем-то занята, либо видна как дыра в разметке. Планировщик считает: сколько ушло на глубокую работу, сколько на быт, сколько раз ты за день переключался и какое у тебя было самое длинное окно без прерываний.
Смысл простой: сначала решаешь, как пройдёт день, — потом живёшь его. А не наоборот.
Клик по пустой ячейке ставит блок. Красная линия — сейчас. Справа — что происходит прямо в эту минуту, сколько осталось и что дальше.
Время можно набрать как удобно: 9, 930, 9:30. Стрелками вверх-вниз — шагами по сетке.
Видно, где неделя провисает, а где забита под завязку. Клик по колонке открывает день, клик по часу — сразу ставит блок в нужный день.
Цветная полоса под числом — из чего состояли сутки. Издалека видно, какие недели были рабочими, а какие развалились.
Самое полезное. Обычный вторник настраивается один раз, а дальше уезжает на все будни, на весь месяц или на квартал вперёд. Выбираешь дни недели, решаешь — заменить существующее или положить поверх.
Любую раскатку можно отменить одной кнопкой — даже если она затронула шестьдесят дней.
Поставил пятнадцатиминутную паузу посреди четырёхчасовой работы — окно разделится на два, а не исчезнет. Наехал на соседний блок — тот подрежется по краю. Планировщик заранее пишет, что именно случится.
Три готовых («рабочий день», «глубокий фокус», «выходной») плюс возможность снять шаблон с любого удачно размеченного дня и применять его дальше.
Сколько всего размечено · сколько не размечено · сколько ушло на каждую категорию · самое длинное окно без переключений · сколько раз за день менялся род занятий.
Нужен только Docker. Одна команда:
docker run -d --name shff-planner \
-p 8787:8787 -v shff-planner-data:/data \
--restart unless-stopped \
heisenberg4441/shff-planner:latestИ на Raspberry Pi тоже. Образ собран под обычные компьютеры и под ARM, так что команда выше работает и на одноплатнике с 64-битной системой. В покое планировщик занимает около 30 МБ памяти — он не заметит, что живёт на плате размером с ладонь.
Открывай http://localhost:8787 — планировщик спросит, кто здесь хозяин:
Дома, в своей сети — смело жми «использовать без пароля». Если планировщик будет виден из интернета — заведи логин и пароль. Передумать можно в любой момент: настройки → доступ.
Вариант через docker compose (если хочешь править настройки файлом)
git clone https://github.com/Heisenberg4441/shff-planner.git
cd shff-planner
docker compose pull
docker compose up -dОбновление потом: docker compose pull && docker compose up -d.
- Ничего не уходит наружу. Ни аналитики, ни счётчиков, ни шрифтов с чужих серверов — при загрузке страницы браузер не делает ни одного запроса в интернет. Это проверяется на каждой сборке.
- Всё лежит в одном файле базы внутри Docker-тома. Не в браузере, не в «облаке аккаунта».
- Бекап — одна кнопка в настройках: скачивается обычный JSON. Им же всё восстанавливается на другом сервере.
- Работает без интернета. Совсем. Хоть в самолёте, если сервер с тобой.
Пять цветовых схем, размер ячейки (15 или 30 минут), начало суток, свои категории с любыми названиями и цветами.
![]() |
![]() |
| тема amber — одна из пяти | настройки: сетка, категории, бекап, доступ |
Горячие клавиши для тех, кто не любит мышь: D W M — вид, N — новый блок, C — раскатать, T — сегодня, ← → — соседние дни.
Это бесплатно? Да, MIT. Делай что хочешь, включая «поставить себе и никому не рассказывать».
Нужен аккаунт? Только локальный, который ты сам заводишь при первом запуске. Никакой регистрации «у нас на сайте» не существует — сайта нет.
А если я снесу контейнер? Данные лежат в отдельном томе и переживают удаление контейнера, обновление образа и переезд на другой сервер.
Я не программист, у меня всё сломается. Планировщик — это один контейнер и одна база. Если он
не поднялся, docker logs shff-planner покажет причину человеческим текстом.
Можно поделиться планом с кем-то? Нет, и это осознанно: планировщик рассчитан на одного человека. Совместные календари прекрасно делают другие.
Почему всё выглядит как терминал? Потому что это часть семьи SHFF — проектов про домашние серверы и цифровую независимость. Зелёный люминофор здесь не декорация, а опознавательный знак.
Архитектура, API, переменные окружения, разработка, сборка и публикация образа — docs/tech.md.
Если коротко: React + TypeScript на фронте, Node и SQLite на бэке, один Docker-образ, 89 тестов и пайплайн, который не публикует образ, пока не поднимет его и не проверит по-настоящему.
Freedom can only live at home.







