Веб-приложение для трекинга привычек с GitHub-style визуализацией активности.
- Трекинг привычек — создавай привычки с иконкой, цветом и описанием
- GitHub-style сетка — 52 недели активности с градиентной интенсивностью
- Ежедневная цель — задай количество выполнений в день, цвет меняется пропорционально
- Спринты и дедлайны — отслеживай прогресс от старта до финиша, видишь % закрытых дней
- Сворачивание карточек — компактный режим с квадратиками текущей недели
- Саммари — на главной видно, какие привычки нужно выполнить сегодня
- Архив — убирай завершённые привычки, не теряя историю
- Drag & Drop — перетаскивай привычки в нужном порядке
- Профиль пользователя — аватар, смена имени и пароля
- Мобильная адаптация — работает на телефоне
| Слой | Технология |
|---|---|
| Backend | Python 3.10+, FastAPI, Uvicorn |
| ORM | SQLAlchemy 2.0 |
| База данных | SQLite (по умолчанию) / PostgreSQL |
| Auth | JWT (PyJWT) + bcrypt |
| Frontend | Vanilla JS, CSS Custom Properties |
git clone https://github.com/<your-username>/habit-tracker.git
cd habit-trackerpython -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
pip install -r requirements.txtcp .env.example .envОткрой .env и задай JWT_SECRET — любую длинную случайную строку.
Сгенерировать можно командой:
python -c "import secrets; print(secrets.token_hex(32))"uvicorn main:app --reload --port 3000Приложение будет доступно по адресу: http://localhost:3000
| Переменная | По умолчанию | Описание |
|---|---|---|
DATABASE_URL |
sqlite:///./habits.db |
Строка подключения к БД |
JWT_SECRET |
— | Обязательно. Секрет для подписи токенов |
JWT_EXPIRE_DAYS |
30 |
Срок жизни токена в днях |
PORT |
3000 |
Порт сервера |
DEBUG |
false |
true — включает Swagger на /api/docs |
Замени строку в .env:
DATABASE_URL=postgresql://postgres:PASSWORD@localhost:5432/habitsИ убедись, что установлен драйвер:
pip install psycopg2-binaryhabit-tracker/
├── main.py # FastAPI-приложение: API, модели, авторизация
├── requirements.txt # Python-зависимости
├── .env.example # Шаблон переменных окружения
└── public/ # Статические файлы фронтенда
├── index.html # Главная страница (SPA)
└── profile.html # Страница профиля
Если DEBUG=true, Swagger UI доступен на /api/docs.
| Метод | Путь | Описание |
|---|---|---|
| POST | /api/auth/register |
Регистрация |
| POST | /api/auth/login |
Вход |
| GET | /api/auth/me |
Текущий пользователь |
| PUT | /api/auth/profile |
Обновить имя / аватар |
| PUT | /api/auth/password |
Изменить пароль |
| GET | /api/habits |
Список привычек |
| POST | /api/habits |
Создать привычку |
| PUT | /api/habits/{id} |
Обновить привычку |
| DELETE | /api/habits/{id} |
Удалить привычку |
| PUT | /api/habits/{id}/completions |
Синхронизировать выполнения |
| PUT | /api/habits/reorder |
Изменить порядок |
- Пароли хранятся в виде bcrypt-хешей
- JWT-токены инвалидируются при смене пароля (
token_version) - Rate limiting на эндпоинты авторизации
- Защита от path traversal при отдаче статики
- CSP, X-Frame-Options, X-Content-Type-Options заголовки
- Все секреты только в
.env(не в коде)
MIT