Веб-приложение для офлайн/ивент-квестов: участники проходят этапы по паролям и таймерам, а администратор и редактор управляют контентом через веб-панель.
-
🎨 Обновлённый компактный UI: фиксированная мини-навигация, glass-карточки, адаптивные формы и таблицы.
-
🔐 Раздельные роли
admin/editorс единым входом через/admin/login, сессия сохраняется в cookie до 8 часов (пока не выполнен logout). -
🧩 Единый экран
/admin/quest/edit: список квестов (поиск/фильтр/сортировка), быстрые действия и редактор этапов. -
🚀 Запуск квеста по токену/ID (
/play/<token>), отслеживание прогресса участника. -
🕒 Таймер этапа с предупреждением о малом времени.
-
🛡️ Ограничение попыток входа и ввода паролей (rate-limit).
-
📦 Импорт квестов из JSON, экспорт квестов в JSON и участников/аудита в CSV.
-
🧾 Журнал аудита действий в админке.
-
🏠 Техническая админка для главной: заголовок/описание, путь к логотипу и компактный переключатель показа логотипа.
-
🌐 Опциональная поддержка английского контента (через app settings).
-
🐳 Запуск в Docker Compose.
app.py— запуск HTTP-сервера и инициализация приложения.canno/http/handlers.py— роутинг, HTML-ответы, обработка форм, авторизация.canno/services/quest_service.py— бизнес-логика и валидация данных.canno/services/stores.py— сессии и хранилище попыток для rate-limit.canno/repositories/db.py— репозиторий и миграции БД (SQLite/PostgreSQL).canno/templates/html.pyиstatic/— UI-шаблон, стили и графические ассеты.
export CANNO_ADMIN_USER=admin
export CANNO_ADMIN_PASSWORD='change-me-please'
export CANNO_EDITOR_USER=editor
export CANNO_EDITOR_PASSWORD='change-me-editor'
python3 app.pyДля доступа с телефона в той же локальной сети открывайте http://<IP_КОМПЬЮТЕРА>:8000
(например http://192.168.1.15:8000).
Опционально можно задать хост/порт:
export CANNO_HTTP_HOST=0.0.0.0
export CANNO_HTTP_PORT=8000PYTHONPATH=. pytest -qДополнительные сценарии: docs/TESTING.md.
Подробная инструкция по production-развёртыванию: docs/DEPLOY.md.
Проект построен по слоям:
- HTTP-слой (
canno/http/handlers.py) — маршруты, формы, HTML/API-ответы, авторизация. - Сервисный слой (
canno/services/quest_service.py) — бизнес-правила квеста, валидация, таймеры и переходы этапов. - Слой данных (
canno/repositories/db.py,canno/repositories/sqlite_repo.py) — подключения, SQL-операции, миграции. - UI-слой (
canno/templates/html.py,static/style.css) — разметка и стили интерфейса. - Точка входа (
app.py) — инициализация конфигурации, репозитория, сервисов и запуск сервера.