§ 02 · Продукт
Двенадцать модулей,
разделённых на пять
рабочих зон
Архитектурно — модульный монолит на FastAPI: один процесс с двенадцатью изолированными модулями в api/modules/. Каждой группой владеет отдельный Claude-агент со своим git-worktree — разработка идёт параллельно без конфликтов.
Зона I · Foundation
Учёт и доступ
Кто пользуется системой, к чему имеет доступ, в каком часовом поясе работает.
- 01
Регистрация и приглашения
Регистрация по email, создание компании с указанием часового пояса, приглашение сотрудников по ссылке.
- 02
Профиль пользователя
Имя, аватар, привязка Telegram через одноразовый токен, настройки уведомлений по каждому типу события и каналу.
- 03
Аутентификация · JWT RS256
Вход по email/паролю, сброс пароля. Refresh-токены с rotation и denylist для мгновенного отзыва скомпрометированной сессии.
- 04
RBAC и группы
Роли админ / тимлид / сотрудник / наблюдатель. Группы пользователей: эффективные права = OR от персональных и групповых.
Зона II · Kanban
Канбан и задачи
Главное «место жизни» сотрудника: доски, карточки, drag-and-drop, файлы.
- 01
Доски и колонки
Личные и командные доски, настраиваемые колонки под процесс конкретной команды.
- 02
Карточки и Lanes
CRUD карточек, drag-and-drop через @dnd-kit + fractional indexing на бэке (sort_order — float между соседями, минимум апдейтов БД).
- 03
Регулярные задачи
Шаблон-расписание. Procrastinate-планировщик каждую минуту проверяет, кому пора получить новую задачу, и кладёт её в инбокс.
- 04
Должности — пресеты
Библиотека шаблонов компании. Импорт должности на сотрудника = копирование задач этому сотруднику. После импорта шаблон и копии живут независимо.
- 05
Вложения и метки
Файлы до 50 MB через локальный FileStorage + nginx X-Accel-Redirect. Метки — цветной тег per-доска.
- 06
Виды · канбан / список / календарь
Один набор карточек — три вида. Календарь через FullCalendar.io, список — виртуализированная таблица.
Зона III · Comms
Уведомления и поиск
Чтобы важное не терялось, а нужное находилось за секунды.
- 01
Уведомления · pluggable
Email + Telegram + in-app сразу в MVP. Каждый канал — реализация одного интерфейса; SMS / Max / push добавляются за день.
- 02
SSE-стрим в браузер
Postgres LISTEN/NOTIFY → один asyncpg-listener → fan-out → клиент держит EventSource с auto-reconnect. Без WebSocket, без long-polling.
- 03
Полнотекстовый поиск
Postgres FTS (tsvector + GIN) по русскому словарю. <300 мс на 10 000 карточек. Подсветка совпадений через ts_headline.
- 04
Multi-criteria фильтры
Фильтр по меткам, исполнителю, диапазону дат, статусу. Состояние фильтра — в URL, ссылку можно отправить коллеге.
Зона IV · Billing
Тарифы и оплата
Платный продукт после закрытой беты, с честной квотой и инвойсами.
- 01
Тарифные планы
Free / Pro / Enterprise. Лимиты в JSONB: пользователи, доски, карточки, объём файлов. Trial на 14 дней при регистрации.
- 02
ЮKassa и подписки
Платежи через ЮKassa. Webhook защищён IP allow-list + re-fetch объекта через API (у ЮKassa нет HMAC — единственная корректная защита).
- 03
Enforcement лимитов
FastAPI-dependency check_quota стоит на write-эндпоинтах. Превышение → HTTP 402 с указанием ресурса и текущего значения.
- 04
Инвойсы и история
PDF-инвойс с русскоязычными реквизитами при успешном платеже. Хранится в FileStorage, отдаётся через nginx X-Accel-Redirect.
Зона V · Quality
Контрольные листы
Шаблонизированные проверки повторяемых процессов с аудитом исполнения.
- 01
Шаблоны и применения
Контрольный лист = шаблон с пунктами (drag-drop порядок, required-флаги). Применяется к карточке или standalone (ежедневный обход).
- 02
Расписания · cron
Procrastinate periodic запускает шаблон по cron. Расписание валидируется croniter, есть готовые пресеты.
- 03
История и аудит
Завершённый run — append-only, нельзя редактировать. Подходит как compliance-доказательство.
§ 02.2 · Концепции
Шесть решений,
ради которых
стоит выбрать
- 01
Должность как шаблон, а не привязка
Когда руководитель назначает сотрудника на должность, регулярные задачи копируются как личные. Меняешь шаблон — текущие сотрудники не задеты. «Обновить из шаблона» — отдельная осознанная кнопка.
- 02
Регламент в двух версиях
К каждой регулярной задаче — markdown-инструкция. Сотрудник видит актуальную версию, но в момент создания задачи фиксируется снимок — на случай вопроса «по какой инструкции работал?».
- 03
Несколько ответственных за задачу
У задачи может быть несколько исполнителей; задача появляется в инбоксе каждого. Любой может закрыть — в completed_by_id останется конкретный человек. В отчётах задача засчитывается всем причастным.
- 04
Часовой пояс — у компании, не у человека
Расписания, дедлайны, утренний дайджест — всё считается в TZ компании. Владивосток и Калининград живут на одной инсталляции; каждой приходит по своим часам.
- 05
Идемпотентность write-операций
Любой POST/PUT/PATCH/DELETE принимает Idempotency-Key. Двойной клик «Создать», retry мобильника или повтор webhook → одно действие, один ответ. Стандарт Stripe и Yandex Cloud.
- 06
Защита от каскадных отказов
Telegram и SMTP обёрнуты в circuit breaker (5 ошибок → 60 секунд паузы). Мы не зависаем на таймаутах и не DDoS-им упавший внешний сервис ретраями.
§ 02.3 · Дорожная карта
Что будет,
когда и почему
Открыто рассказываем, что в MVP, что — после первого месяца, что — на горизонте полугода. Без «когда-нибудь».
-
Этап 01
MVP
3 – 4 нед.
- ▸ 12 модулей выше
- ▸ Закрытая бета на нашем офисе (~15 человек)
- ▸ Email + Telegram уведомления
-
Этап 02
+ 1 – 2 мес.
Биллинг
- ▸ Полноценные платежи через ЮKassa
- ▸ Per-company Telegram-бот для брендированных клиентов
- ▸ Дашборд руководителя — если будет реальный запрос после месяца Scoreboard
-
Этап 03
+ 3 – 4 мес.
Real-time и mobile
- ▸ WebSocket вместо polling в дашборде
- ▸ Мобильное приложение на React Native
- ▸ Совместное редактирование регламентов через Yjs
-
Этап 04
+ 6 мес.
Compliance
- ▸ Включение в Реестр отечественного ПО
- ▸ Аккредитация ИТ-компании Минцифры