Современная система управления задачами. Обеспечивает работу в реальном времени, синхронизацию между пользователями и автоматическую обработку событий.
- Цель проекта
- Стек технологий
- Архитектура
- Функциональность
- Быстрый старт
- API Эндпоинты
- Роли пользователей
- Особенности реализации
- Развёртывание
Разработать канбан-систему, которая:
- Работает в реальном времени — все изменения мгновенно отображаются у всех участников
- Обрабатывает поток задач — создание, редактирование, перемещение, удаление
- Поддерживает автоматизацию событий — уведомления, дедлайны, приглашения
Система имитирует продукт уровня Jira/Trello с event-driven архитектурой.
- Пользователи: сотрудники и команды, управляющие задачами
- Администраторы: менеджеры и организаторы, контролирующие процессы
| Технология | Описание |
|---|---|
| React 18 | UI-библиотека |
| Vite | Сборщик проекта |
| React Router DOM v7 | Маршрутизация |
| @hello-pangea/dnd | Drag & Drop для карточек |
| Axios | HTTP-клиент |
| React Hot Toast | Уведомления |
| CSS3 | Адаптивная вёрстка |
| Технология | Описание |
|---|---|
| Go 1.21+ | Язык программирования |
| Gin | HTTP-фреймворк |
| GORM | ORM для PostgreSQL |
| JWT (golang-jwt) | Аутентификация |
| Gorilla WebSocket | Real-time коммуникация |
| bcrypt | Хеширование паролей |
| Технология | Описание |
|---|---|
| PostgreSQL 15+ | Реляционная база данных |
| Технология | Описание |
|---|---|
| Docker | Контейнеризация |
| Docker Compose | Оркестрация сервисов |
| Nginx | Веб-сервер (продакшен) |
| Railway | Платформа для деплоя |
Проект реализует event-driven подход, где все изменения мгновенно синхронизируются между пользователями через WebSocket.
┌─────────────────┐ HTTP/REST ┌─────────────────┐
│ │ ◄───────────────────── │ │
│ React SPA │ │ Go API Server │
│ (Vite + Nginx)│ ──── WebSocket ──────► │ (Gin + GORM) │
│ │ │ │
└─────────────────┘ └────────┬────────┘
│
┌──────▼──────┐
│ PostgreSQL │
│ Database │
└─────────────┘
- REST API — CRUD-операции над досками, колонками, задачами
- WebSocket — real-time синхронизация изменений
- PostgreSQL — хранение всех данных
- JWT-токены — аутентификация пользователей
- Создание задачи → уведомление всем участникам доски
- Перемещение задачи → мгновенное обновление канбан-доски
- Приглашение в доску → real-time уведомление пользователю
- Дедлайн задачи → предупреждение за 24 часа
- Принятие/отклонение приглашения → уведомление администратору
- ✅ Три стандартные колонки: To Do, In Progress, Done
- ✅ Создание кастомных колонок (название, цвет)
- ✅ Drag & Drop карточек между колонками
- ✅ Оптимистичное обновление UI
- ✅ Название и описание
- ✅ Приоритет (низкий, средний, высокий)
- ✅ Теги (bug, feature, improvement, design и др.)
- ✅ Дедлайн с визуальным отображением
- ✅ Дата создания
- ✅ Перемещение между колонками
- ✅ Персональная доска создаётся автоматически при регистрации
- ✅ Создание, переименование, удаление досок
- ✅ Приглашение пользователей по email
- ✅ Разграничение прав (владелец vs участник)
- ✅ Новые задачи на доске
- ✅ Перемещение задач между колонками
- ✅ Дедлайн менее 24 часов
- ✅ Принятие/отклонение приглашений
- ✅ Бейдж непрочитанных уведомлений
- ✅ Раздел «Уведомления» в боковом меню
- ✅ Автоматическая рассылка уведомлений при изменении задач
- ✅ Проверка дедлайнов с отправкой предупреждений
- ✅ Мгновенная синхронизация между всеми участниками доски
- ✅ Регистрация с выбором роли (Пользователь / Администратор)
- ✅ JWT-токены с сохранением сессии
- ✅ Защищённые маршруты на фронтенде и middleware на бэкенде
- Docker и Docker Compose
- Либо: Node.js 22+, Go 1.21+, PostgreSQL 15+
# 1. Клонируйте репозиторий
git clone https://github.com/LASTlK/unit_hack.git
cd unit_hack
# 2. Запустите все сервисы
docker-compose up --build
# 3. Откройте в браузере
http://localhostПервая сборка займёт 3-5 минут (загрузка образов, установка зависимостей).
Что будет запущено:
- PostgreSQL на порту 5432
- Go API сервер на порту 8080
- React приложение на порту 80
CREATE USER kanban_user WITH PASSWORD 'strong_password';
CREATE DATABASE kanbandb OWNER kanban_user;
GRANT ALL PRIVILEGES ON DATABASE kanbandb TO kanban_user;cd backend
go mod tidy
go run main.goСервер запустится на http://localhost:8080
cd frontend
npm install
npm run devОткройте http://localhost:5173
| Метод | URL | Описание |
|---|---|---|
| POST | /api/auth/register | Регистрация |
| POST | /api/auth/login | Вход |
| Метод | URL | Описание |
|---|---|---|
| GET | /api/boards | Список досок |
| POST | /api/boards | Создать доску |
| PUT | /api/boards/:id | Переименовать |
| DELETE | /api/boards/:id | Удалить |
| GET | /api/boards/:id/members | Участники |
| DELETE | /api/boards/:bid/members/:mid | Удалить участника |
| Метод | URL | Описание |
|---|---|---|
| GET | /api/columns?board_id= | Список колонок |
| POST | /api/columns | Создать колонку |
| PUT | /api/columns/:id | Обновить |
| DELETE | /api/columns/:id | Удалить |
| Метод | URL | Описание |
|---|---|---|
| GET | /api/tasks?board_id= | Список задач |
| POST | /api/tasks | Создать задачу |
| PUT | /api/tasks/:id | Обновить |
| DELETE | /api/tasks/:id | Удалить |
| Метод | URL | Описание |
|---|---|---|
| POST | /api/boards/:id/invite | Пригласить |
| GET | /api/invitations | Входящие |
| PUT | /api/invitations/:id/accept | Принять |
| PUT | /api/invitations/:id/decline | Отклонить |
| Метод | URL | Описание |
|---|---|---|
| GET | /api/notifications | Все уведомления |
| GET | /api/notifications/count-unread | Количество непрочитанных |
| PUT | /api/notifications/read-all | Отметить все прочитанными |
ws://localhost:8080/ws?token=JWT — канал real-time синхронизации
| Роль | Возможности |
|---|---|
| Пользователь | Создание/редактирование своих досок, Drag & Drop задач, получение уведомлений |
| Администратор | Всё, что у пользователя + приглашение других в доску, удаление участников |
При регистрации можно выбрать роль (user / admin).
Владелец доски автоматически становится её администратором.
- Все изменения мгновенно транслируются через WebSocket всем участникам
- Сервер генерирует события: создание/удаление/перемещение задачи, дедлайны, приглашения
- Клиенты автоматически обновляют UI при получении событий
- WebSocket-подключение с автоматическим переподключением
- Оптимистичные обновления UI при Drag & Drop
- Согласованное отображение у всех пользователей доски
- Автоматическая проверка дедлайнов (предупреждение за 24 часа)
- Рассылка уведомлений всем участникам доски
- Обработка принятия/отклонения приглашений
- JWT-токены с механизмом обновления
- Сохранение сессии в localStorage
- Автоматический редирект при истечении токена
- Обработка ошибок на фронтенде (ErrorBoundary)
- Адаптивный дизайн (мобильные устройства)
- Интуитивно понятный Drag & Drop
- Визуальные индикаторы: приоритеты, теги, дедлайны
- Бейджи непрочитанных уведомлений и приглашений
Не успели по таймингам хакатона :(