Веб-приложение для трекинга эмоционального состояния. Идея простая: каждый день записываешь, как прошёл день и какое было настроение, а потом можно посмотреть статистику за неделю или месяц.
Часто не замечаешь, что настроение портится каждый понедельник или что после спорта всегда становится лучше. Хочется иметь простой инструмент, куда можно быстро записать своё состояние и потом увидеть закономерности на графике, а не копаться в заметках телефона.
- Запись настроения — выбираешь одну из пяти категорий (отличное, хорошее, нейтральное, плохое, ужасное) и по желанию пишешь заметку
- Календарь — каждый день подсвечивается цветом в зависимости от настроения, что-то вроде heatmap на гитхабе
- Статистика — простая диаграмма: сколько каких дней было за период
- История — можно пролистать прошлые записи
- Теги (работа, учёба, спорт) для фильтрации
- Аналитика по дням недели — в какой день обычно лучше/хуже
- Авторизация, чтобы можно было пользоваться с разных устройств
- Нормальная мобильная версия
Классическая клиент-серверная схема. Фронт общается с бэкендом по REST API, бэкенд ходит в базу.
Frontend (HTML/CSS/JS)
|
| REST API (JSON)
v
Backend (Python, FastAPI)
|
| SQL-запросы
v
Database (SQLite)
mood-journal/
├── backend/
│ ├── main.py # точка входа
│ ├── models.py # модели данных
│ ├── database.py # подключение к БД
│ ├── routers/
│ │ └── entries.py # эндпоинты для записей
│ └── requirements.txt
├── frontend/
│ ├── index.html
│ ├── css/
│ │ └── style.css
│ └── js/
│ ├── app.js # основная логика
│ └── charts.js # графики и heatmap
├── tests/
│ ├── test_api.py
│ └── test_models.py
├── Dockerfile
├── docker-compose.yml
├── .github/
│ └── workflows/
│ └── ci.yml
└── README.md
| Что | Чем | Почему |
|---|---|---|
| Backend | Python 3.12 + FastAPI | Быстро пишется, есть автодокументация через Swagger |
| ORM | SQLAlchemy | Удобно работать с БД, не писать сырой SQL |
| БД | SQLite | Для MVP хватит, не нужно поднимать отдельный сервер |
| Frontend | Vanilla JS + Chart.js | Без лишних фреймворков, Chart.js для графиков |
| Контейнеризация | Docker | Чтобы у всех одинаково запускалось |
| CI | GitHub Actions | Встроено в GitHub, удобно |
| Линтер | Ruff | Быстрый, заменяет flake8 + black |
| Тесты | pytest + httpx | Стандартный стек для тестирования FastAPI |
| Безопасность | Semgrep, Trivy | Статический анализ кода и проверка зависимостей |
- Идея, описание проекта, репозиторий
- Базовая реализация — работающий backend + frontend
- CI pipeline — линтер и проверки при PR
- Docker — упаковать приложение в контейнер
- Тесты — unit, API, e2e
- Статический анализ безопасности
- SCA — анализ зависимостей, SBOM
- Финальная документация
git clone https://github.com/TohaProLife/mood-journal.git
cd mood-journal/backend
# Создаём виртуальное окружение (рекомендуется)
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/macOS
# Ставим зависимости
pip install -r requirements.txt
# Запускаем
uvicorn main:app --reloadПосле запуска:
- Приложение: http://localhost:8000
- Swagger (документация API): http://localhost:8000/docs
git clone https://github.com/TohaProLife/mood-journal.git
cd mood-journal
docker build -t mood-journal .
docker run -p 8000:8000 mood-journalИли через docker-compose:
docker-compose up --buildMIT