Python

Open Board: открытый Kanban-трекер задач на Python и FastAPI

05.08.2026 7 мин чтения

Я уже рассказывал о своём ERP-проекте, и вот очередная разработка из той же экосистемы — Open Board, Kanban-трекер задач. Открытый исходный код, без подписок, работает на любом компьютере. Trello, только свой.

Проект прошёл 12 фаз разработки (от scaffolding до документации), и на данный момент это зрелое приложение с 70+ тестами, экспортом/импортом, шаблонами досок, уведомлениями, аудитом и мультиязычностью.

Зачем понадобился свой Kanban

Небольшой команде нужен инструмент для управления задачами. Trello вырос в цене, Jira тяжёлая для двух-трёх человек, Asana и ClickUp — подписки навсегда. Open Source альтернативы тоже есть (Wekan, Focalboard, Kanboard), но у каждой свои компромиссы: MongoDB, устаревший PHP, отсутствие русской локализации.

Open Board решает конкретную задачу: лёгкий Kanban для маленькой команды, который ставится за пять минут и не требует ничего, кроме Python. SQLite из коробки, PostgreSQL опционально. Один executable, один файл базы данных.

Что умеет

Функциональность охватывает полный цикл работы с задачами:

  • Доски и колонки — неограниченное количество, drag-and-drop через SortableJS, WIP-лимиты на колонки, настраиваемые цвета
  • Карточки — приоритеты (0–4), дедлайны, назначение исполнителей, описания, чек-листы, вложения (до 10 МБ), голосование
  • Метки — цветные теги для категоризации, фильтрация по ним на доске
  • Комментарии — с @упоминаниями, которые генерируют уведомления
  • Уведомления — in-app, с counters в шапке, отметками прочитанного, watch/unwatch для карточек и досок
  • Активность — полный audit log: кто, что, когда и куда переместил, с before/after JSON
  • Статистика — графики Chart.js: распределение карточек по статусам, по исполнителям, динамика создания/завершения
  • Поиск — глобальный по всем доскам, карточкам, комментариям и чек-листам
  • Шаблоны — встроенные (Kanban Basic, Sprint Planning, Bug Tracker) плюс сохранение любой доски как шаблона и экспорт/импорт в JSON
  • Архив — доски, колонки и карточки не удаляются навсегда, а архивируются
  • Управление пользователями — роли admin/member, роли внутри доски (owner/editor/viewer), профили с аватарками и настройками
  • i18n — интерфейс на русском и английском, переключается в профиле

Архитектура

Серверная часть — FastAPI, один файл app.py на 2163 строки содержит все маршруты (более 60 эндпоинтов). ORM — SQLAlchemy 2.0 Core (table definitions, не декларативные модели). Шаблоны — Jinja2, 24 HTML-файла. Фронтенд — server-side rendering + HTMX для модальных окон и частичных обновлений, Alpine.js для реактивности в карточках, SortableJS для drag-and-drop, Tailwind CSS для стилизации.

Никакого React, никакого webpack, никаких node_modules в продакшене (есть только dev-зависимость для сборки Tailwind). Всё работает через шаблонизатор и JSON-эндпоинты для AJAX-вызовов.

Структура базы данных

Системные таблицы (префикс sys_): пользователи, доски, участники досок, audit log, лог операций, шаблоны. Пользовательские таблицы: columns, cards, labels, card_labels, comments, attachments, checklists, checklist_items, notifications, card_watchers, board_watchers, custom_fields, custom_field_values, card_votes.

Получается 28 таблиц — серьёзная схема для Kanban-приложения. База в SQLite по умолчанию, для продакшена поддерживается PostgreSQL через OPENBOARD_DATABASE_URL.

Интерфейс

Страница входа. Чистая форма: email + пароль. Аутентификация через bcrypt, сессия в signed cookie (itsdangerous).

Страница входа Open Board

Дашборд. После входа видишь сводку: карточки в работе (assigned to me), просроченные, завершённые за неделю. Ниже — список твоих досок с количеством колонок и карточек. Справа — недавняя активность. Можно сразу создать новую доску или загрузить шаблон.

Дашборд Open Board

Kanban-доска. Главное окно. Колонки с цветными заголовками, карточки с метками, приоритетами (цветная полоса слева: серый, синий, жёлтый, оранжевый, красный), аватарками исполнителей, датами дедлайна, индикаторами чек-листов (3/5), бейджами голосов. WIP-лимиты подсвечивают перегруженные колонки. Card aging — карточки, которые не обновлялись больше 7 дней, становятся полупрозрачными.

Kanban-доска Open Board

Перетаскивание работает плавно: SortableJS отправляет JSON-запрос на сервер, позиция сохраняется в транзакции. Одновременно можно перетаскивать карточки между колонками и сами колонки.

Карточка детально. Клик по карточке открывает модальное окно HTMX. Внутри: описание, чек-листы с прогресс-баром, вложения (картинки показываются превью), комментарии с @упоминаниями, назначение исполнителя, смена приоритета, дедлайн, метки, голосование. Всё редактируется inline, без перезагрузки страницы.

Детальная карточка Open Board

Активность. Хронологический лог всех действий по проекту. Кто создал карточку, кто переместил, кто оставил комментарий, кто изменил приоритет — всё с timestamp и иконками. Группировка по дням.

Лента активности Open Board

Статистика. Графики Chart.js: круговая диаграмма статусов карточек, столбчатая по исполнителям, линейная динамика за период. Фильтры по доскам и периоду. Для небольшой команды — достаточно, чтобы понять, где bottleneck.

Статистика Open Board

Шаблоны досок. Три встроенных (Kanban Basic, Sprint Planning, Bug Tracker) + сохранение любой доски как шаблона (экспорт структуры в JSON). Удобно: настроил идеальную доску для определённого типа проекта — и создаёшь копии одним кликом.

Шаблоны досок Open Board

Управление пользователями. Доступно только admin. Список всех пользователей, роли, статусы (active/inactive). Создание новых, смена паролей. Внутри доски owner может добавлять участников и назначать роли: owner (полный контроль), editor (редактирование), viewer (только просмотр).

Управление пользователями Open Board

Профиль. Имя, email, аватар (цветной круг с инициалами), смена пароля, предпочтения: язык интерфейса (русский/английский), тёмная тема (опция уже в схеме БД).

Профиль пользователя Open Board

Безопасность и контроль

  • Пароли — bcrypt, никогда в открытом виде
  • Сессии — signed cookies, секретный ключ генерируется автоматически (48 символов, secrets.token_urlsafe)
  • RBAC на двух уровнях: глобально (admin/member) и внутри доски (owner/editor/viewer)
  • Каждое действие логируется в audit log с before/after JSON — полный trail
  • Защита от удаления последнего admin (нельзя удалить/деактивировать)
  • Вложения проверяются по MIME-типу и размеру (10 МБ лимит)

Код и качество

Проект написан на Python 3.11+, без единого внешнего runtime-фреймворка на фронтенде (только Tailwind, собранный в CSS). Структура чистая:

src/openboard/
├── cli.py            # Typer CLI: init-db, seed-demo, run, set-password
├── config.py         # Settings (env vars OPENBOARD_*)
├── db.py             # Engine + transaction()
├── bootstrap.py      # init_engine()
├── i18n.py           # Gettext, locales/ru/, locales/en/
├── core/
│   ├── schema.py     # 28 таблиц SQLAlchemy
│   ├── security.py   # Auth, RBAC, board access
│   ├── audit.py      # log_audit + log_operation
│   ├── activity.py   # Activity feed formatting
│   ├── board_io.py   # Export/import JSON + CSV
│   ├── board_templates.py  # Built-in + custom templates
│   ├── notifications.py    # In-app notifications
│   ├── search.py     # Global search
│   ├── stats.py      # Chart data builders
│   ├── comments.py   # @mention parsing
│   └── naming.py     # unique_slug()
└── web/
    ├── app.py        # FastAPI, 2163 строки, 60+ routes
    ├── locale.py     # Per-request locale resolution
    ├── static/       # Tailwind CSS, Alpine, HTMX, SortableJS
    └── templates/    # 24 Jinja2 templates

Тесты — 73+ кейсов: auth, boards, cards, search, notifications, stats, archive, users, profile, export, checklist, phase 8 access, phase 10. Линтер — ruff (E, F, I, UP, B rules, line-length 100, target py311).

Лицензия — AGPL-3.0-or-later. Полная документация: README на 22 КБ, user-manual на 22 КБ, план разработки на 42 КБ (12 фаз), backlog с роадмапом до v0.3.

Запуск

git clone https://github.com/slesar/open-board.git
cd open-board
python -m venv .venv
.\.venv\Scripts\pip install -e ".[dev]"
.\.venv\Scripts\openboard init-db
.\.venv\Scripts\openboard seed-demo
.\.venv\Scripts\openboard run --port 8001

Открывай http://127.0.0.1:8001, логин admin@example.local, пароль admin. Команда seed-demo создаёт двух пользователей (admin + manager), демо-доску Product Development с 4 колонками, 10 карточками, 5 метками и комментарием.

Для продакшена — PostgreSQL через OPENBOARD_DATABASE_URL=postgresql+psycopg://user:pass@host/db и uvicorn за nginx.

Сравнение

Система Тип Цена Отличие от Open Board
Trello SaaS Бесплатно до 10 досок, $5–10/мес за Business Простая, но чужая. Лимиты, подписки, нет self-host
Wekan Self-hosted Бесплатно Trello-клон на Node.js/Meteor. Тяжелее, требует MongoDB
Focalboard Self-hosted Бесплатно От Mattermost. Go + React. Хороший, но сложнее в развёртывании
Kanboard Self-hosted Бесплатно PHP. Функциональный, но интерфейс из 2015-го
Open Board Self-hosted Бесплатно (AGPL-3.0) Python/FastAPI. Лёгкий, SQLite по умолчанию. Русский интерфейс из коробки

Главное отличие — вес. Open Board ставится на любую машину с Python 3.11+, включая Raspberry Pi. Один процесс, один файл базы. Для команды из 2–5 человек — более чем достаточно.

Кому подходит

  • Небольшая команда разработчиков — 2–10 человек, нужен Kanban без заморочек
  • Фрилансер — личный трекер проектов и задач, свой Trello без лимитов
  • Компания с заботой о данных — всё хостится на своём сервере, ничего не уходит наружу
  • Тот, кто хочет доработать под себя — код чистый, лицензия AGPL, структура понятная

Что в планах

Разработка не остановилась. Из активного backlog:

  • Полноценное управление участниками доски (/boards/{slug}/members) — сейчас роли есть в схеме, но UI управления не завершён
  • Доработка custom fields — CRUD, UI в карточке, фильтрация
  • Расширение audit log — покрытие всех POST-маршрутов
  • Тёмная тема — поле dark_mode уже в таблице пользователей, нужен CSS
  • Keyboard shortcuts — B для дашборда, / для поиска, N для новой карточки
  • Copy / move-to-board — дублирование карточек и перенос между досками
  • Экспорт в ZIP — JSON + вложения одним архивом
  • CI на GitHub Actions — pytest + ruff на каждый PR
  • Реструктуризация app.py — разбиение 2163-строчного монолита на модули маршрутов

До версии 1.0 roadmap выглядит реалистичным. Основной функционал Kanban уже работает стабильно, дальше — polish и расширение.

Итог

Open Board — не «убийца Trello». Это скорее доказательство, что небольшой команде не обязательно зависеть от SaaS, чтобы получать качественный инструмент управления задачами. Код открыт, интерфейс на русском, база в одном файле, установка за пять минут.

Для тех, кто уже использует Trello и не жалуется — смысла менять нет. Но если вы устали от растущих цен, хотите контролировать свои данные или просто需要一个 Kanban-инструмент, который работает сразу после pip install — стоит попробовать.

Евгений Слесаренко
Автор

Евгений Слесаренко

Частный разработчик на Bitrix и WordPress. Пишу о том, как делать сайты и сервисы понятнее, сильнее визуально и спокойнее в поддержке.