Add first-run setup wizard, README, remove default users, add easter egg

This commit is contained in:
InviteMe Developer
2026-08-31 13:27:32 +03:00
parent 391650cf88
commit 8120ab4c3c
7 changed files with 167 additions and 112 deletions
+77 -62
View File
@@ -1,88 +1,103 @@
# InviteMe
Приложение для регистрации гостей на корпоративные мероприятия. Аналог Timepad с упрощённым функционалом.
Система регистрации гостей, рассылки приглашений и контроля входа на мероприятия.
## Возможности
- Управление пользователями (админ, организатор, сотрудник на входе)
- Создание и управление несколькими мероприятиями
- Загрузка списка гостей из Excel в рамках мероприятия
- Хранение фото гостей и привязка по названию файла
- Генерация персональных QR-кодов
- Автоматическая рассылка приглашений на email
- Ручное добавление/удаление/блокировка участников
- Проверка входа по QR-коду или поиску по ФИО
- Аналитика посещаемости для администратора
- Выгрузка отчётов в Excel
## Стек
- Python 3.10+
- Flask + Flask-SQLAlchemy
- SQLite
- Bootstrap 5
- html5-qrcode
- SMTP
- Создание мероприятий и управление ими.
- Импорт гостей из Excel.
- Генерация QR-кодов и персональных пригласительных билетов.
- Конструктор билетов с логотипом, цветами и предпросмотром.
- Рассылка приглашений по SMTP, EWS (Exchange) или через локальный Outlook.
- Проверка приглашений на входе (сканирование QR / поиск по списку).
- Ролевая модель: администратор, организатор, стафф.
- Аудит действий пользователей.
- Поддержка Docker.
## Быстрый старт
### Вариант 1: Docker (рекомендуется)
Требования: установленный Docker и Docker Compose.
```bash
cd C:\Projects\Integrita\InviteMe
git clone ssh://git@192.168.1.101:2222/insight/inviteme.git
cd inviteme
# Собрать и запустить
docker compose up -d --build
# Приложение будет доступно по адресу http://localhost:8888
```
При первом запуске откройте `http://localhost:8888` — вас встретит страница создания первого администратора.
### Вариант 2: Запуск вручную
Требования: Python 3.12.
```bash
git clone ssh://git@192.168.1.101:2222/insight/inviteme.git
cd inviteme
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
# Windows:
venv\Scripts\pip install -r requirements.txt
# Linux/macOS:
# venv/bin/pip install -r requirements.txt
# Запуск
venv\Scripts\python run_waitress.py
```
Создайте файл `.env` в корне проекта (см. `docs/DEPLOY.md`) и запустите:
Приложение запустится на `http://localhost:8888`.
```bash
flask --app run.py run --host=0.0.0.0 --port=5000
```
## Первый запуск
## Учётные записи по умолчанию
1. Откройте приложение в браузере.
2. На странице приветствия создайте первого администратора.
3. Войдите под созданной учётной записью.
4. Создайте мероприятие и настройте почту в разделе «Рассылка → Настройки почты».
При первом запуске автоматически создаются:
## Настройка почты
- Админ: `admin` / `admin`
- Сотрудник на входе: `staff` / `staff`
В разделе **Рассылка → Настройки почты** можно выбрать один из способов отправки:
После входа администратор может создавать новых пользователей и мероприятия через веб-интерфейс.
- **SMTP** — указать сервер, порт, логин и пароль.
- **EWS** — для Microsoft Exchange, указать URL вида `https://mail.company.com/EWS/Exchange.asmx`.
- **Локальный Outlook** — работает только если приложение запущено на Windows-компьютере с установленным Outlook.
> Обязательно смените пароли в production через переменные окружения или `.env`.
## Безопасность
- Сразу после первого запуска задайте сильный `SECRET_KEY` через переменную окружения.
- Не храните реальные пароли в репозитории — используйте `.env` файл или переменные окружения.
- Папка `instance/` (SQLite) и `app/static/uploads/` не попадают в git.
## Переменные окружения
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `SECRET_KEY` | Секретный ключ для сессий | `dev-secret-key-change-in-production` |
| `BASE_URL` | Базовый URL приложения | — |
| `TIMEZONE` | Часовой пояс | `Europe/Moscow` |
| `DATABASE_URL` | URI базы данных (SQLite по умолчанию) | `sqlite:///instance/inviteme.db` |
## Структура проекта
```
InviteMe/
├── app/
│ ├── __init__.py
│ ├── models.py # Модели User, Event, Guest и CheckIn
│ ├── routes.py # Все маршруты приложения
│ ├── services/ # QR, email, Excel
│ ├── static/
│ │ ├── css/
│ │ ├── js/
│ │ └── uploads/ # Фото и QR-коды
│ └── templates/
│ ├── admin/
│ ├── checkin/
│ └── email/
├── config.py # Конфигурация
├── docs/
│ └── DEPLOY.md # Подробная инструкция по развёртыванию
├── requirements.txt
├── run.py
└── README.md
├── app/ # Flask-приложение
│ ├── services/ # QR, билеты, почта, Excel
│ ├── templates/ # HTML-шаблоны
│ ├── static/ # CSS, JS, изображения
│ └── utils/ # Вспомогательные утилиты
├── instance/ # SQLite-база (не в git)
├── app/static/uploads/ # Загруженные файлы (не в git)
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
```
## Контекст проекта
## Лицензия
Проект разрабатывается для компании **Integrita**. Планируется развёртывание на виртуальной машине.
- Подробный контекст, бизнес-процесс и чеклист — в `docs/CONTEXT.md`.
- Инструкции по настройке SMTP, запуску в production и резервному копированию — в `docs/DEPLOY.md`.
## Ссылки на документацию
- `docs/CONTEXT.md` — контекст, роли, поток данных, чеклист
- `docs/DEPLOY.md` — развёртывание, настройка SMTP, запуск в production
Проект распространяется как есть для внутреннего использования.