Серверный рендеринг без SPA
Страницы рендерятся через Jinja2 на сервере. Alpine.js обрабатляет inline-формы, SortableJS — drag-and-drop карточек и колонок. Это даёт быструю загрузку, SEO и простоту поддержки.
Открытый Kanban-трекер на Python/FastAPI: доски, drag-and-drop, метки, чек-листы, вложения, голосование, глобальный поиск и статистика. Без SPA — серверный рендеринг с Alpine.js и SortableJS.
Командам малого бизнеса нужен доступный трекер задач: колонки, карточки, перемещение drag-and-drop, базовая структура без перегруза. Существующие решения либо слишком сложные (Jira), либо закрывают данные (Trello), либо требуют SPA-фреймворка для разработки.
Архитектурно нужно было решить: сделать плавный drag-and-drop без SPA; обеспечить поддержку нескольких досок с изоляцией данных; реализовать ролевую модель доступа (owner / editor / viewer); собрать полноценные детали карточки (метки, чек-листы, вложения, голосование, комментарии) в серверном рендеринге; и добавить глобальный поиск, фильтры и ленту активности.
Open Board — это открытая веб-система управления задачами, которую я спроектировал и разработал с нуля как open-source альтернативу Trello. Серверный рендеринг на FastAPI + Jinja2, интерактив через HTMX, Alpine.js и SortableJS.
Проект построен вокруг архитектуры с поддержкой нескольких досок: у каждой доски свои колонки, карточки, метки и участники. Drag-and-drop карточек и колонок, голосование, чек-листы, вложения, комментарии, глобальный поиск и календарный вид — всё работает без единой строки SPA-кода.
Система написана на Python (FastAPI + SQLAlchemy + Jinja2), работает на SQLite для быстрого старта и поддерживает PostgreSQL. Интерфейс — серверный рендеринг с Alpine.js и SortableJS для интерактивности. Tailwind CSS через CDN — без шага сборки фронтенда.
Проект с открытым исходным кодом — развивается и дополняется. Исходники доступны на GitHub.
Монолит с фабрикой FastAPI: вся бизнес-логика и маршруты в одном модуле. Схема БД — декларативно через SQLAlchemy. Интерактив — Alpine.js + SortableJS поверх серверного рендеринга.
Страницы рендерятся через Jinja2 на сервере. Alpine.js обрабатляет inline-формы, SortableJS — drag-and-drop карточек и колонок. Это даёт быструю загрузку, SEO и простоту поддержки.
Каждая доска изолирована: свои колонки, метки, карточки, участники и настройки. Доступ через sys_board_members с ролями owner, editor, viewer.
Карточка включает описание, приоритет (0–4), срок, исполнителя, метки, чек-листы с пунктами, вложения с обложкой, голосование и комментарии — всё на отдельной странице.
Перемещение карточек между колонками и изменение порядка колонок отправляют JSON через fetch. Сервер обновляет позиции в БД, страница не перезагружается.
Поиск по карточкам и доскам с подсветкой результатов. Фильтры по меткам, исполнителю, сроку и приоритету прямо на доске. Календарный вид карточек с дедлайнами.
bcrypt-хеширование, подписанные сессии, проверка доступа к доске на каждом запросе. admin видит страницу пользователей, member — только свои доски. Вложения изолированы по доске.
Простой и прозрачный трекер, который покрывает дневные сценарии командной работы без перегруза.
технологический стек
SQLAlchemy ORM, Jinja2, Alpine.js, SortableJS, Tailwind CDN. SQLite для старта, PostgreSQL для продакшена.
в карточке
Описание, приоритет, срок, исполнитель, метки, чек-листы, вложения, голосование, комментарии — всё в одном интерфейсе.
на уровне доски
Owner, editor, viewer — плюс системные admin и member. Проверка прав на каждом запросе.
серверный рендеринг
Быстрая загрузка, SEO-дружелюбность, простой деплой. Drag-and-drop через SortableJS, формы через Alpine.js.