Backend service for habit tracking based on the Atomic Habits methodology,
with authentication, background processing and Telegram notifications.
AtomicHabits API is a production-ready backend service that allows users to:
- manage personal habits,
- schedule reminders,
- receive notifications via Telegram,
- track progress asynchronously.
The project focuses on clean architecture, business rules enforcement and testability.
- JWT token authentication
- CRUD habits with business validation
- Public habits (read-only)
- Scheduled reminders (Celery + Beat)
- Telegram integration via deep-link (
/start <token>) - Full OpenAPI / Swagger documentation
- High test coverage (unit, API, E2E)
- Backend: Python 3.12, Django, Django REST Framework
- Async: Celery, Redis
- Auth: JWT
- Database: PostgreSQL
- Docs: drf-spectacular (OpenAPI 3)
- Testing: pytest, DRF APIClient, mocks
- CI/CD: GitHub Actions, Docker
flowchart TD
Client -->|REST API| DjangoAPI
DjangoAPI -->|JWT auth| Auth
DjangoAPI -->|CRUD habits| DB[(PostgreSQL)]
DjangoAPI -->|enqueue tasks| Celery
Celery --> Redis[(Redis)]
Celery -->|send notifications| Telegram[Telegram Bot API]
📂 Project structure (simplified)
AtomicHabits/
├── accounts/ # registration & auth
├── habits/ # core business logic
│ ├── validators.py
│ ├── tasks.py # Celery tasks
│ └── tests/
├── notifications/ # Telegram integration
│ └── tests/
├── config/ # settings, URLs, Celery config
├── tests/ # E2E tests
└── manage.py
🔐 Authentication Token-based authentication (JWT).
POST /api/auth/register/
POST /api/auth/login/
Usage:
Authorization: Bearer
Swagger UI supports Authorize button.
📘 OpenAPI / Swagger
Swagger UI: /api/docs/OpenAPI schema: /api/schema/
🎬 Demo
Demo shows: authentication → create habit → scheduled reminder → Telegram notification.🧪 Testing & code quality
The project is heavily tested to ensure reliability and safe refactoring.
Covered by tests:
unit tests for models and validators
API tests (permissions, pagination, business rules)
Celery tasks (mocked execution)
Telegram API (mocked HTTP calls)
E2E flow: habit → reminder → notification
Run tests:
pytest -q
CI runs tests with:
CELERY_TASK_ALWAYS_EAGER=True
CELERY_TASK_EAGER_PROPAGATES=True
This allows testing async logic without Redis in pipeline.
🚀 Quickstart (local)
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver
Run Redis and Celery:
redis-server
celery -A config worker -B -l info
🐳 Deployment (production-ready)
The project includes automated CI/CD with GitHub Actions + Docker Compose:
build & test pipeline
Docker image build
zero-touch deployment on server
Full deployment details are documented in .github/workflows.
📌 What this project demonstrates
real-world REST API design
background task processing
strict business rule validation
external service integration
production-oriented CI/CD
emphasis on maintainability and clarity
👨💻 Author
Built as a showcase of production-ready backend development with a focus on
architecture, testability and scalability.

