A modern restaurant booking platform that enables customers to discover restaurants and make reservations, while providing restaurant owners with powerful admin tools to manage their businesses.
Reservo is a restaurant booking platform I'm building as a side project — a sandbox for running a multi-service, multi-client product end-to-end rather than yet another single-service demo. The backend, data model, and API surface are my work; AI agents (see AGENTS.md) assist with scaffolding and documentation under review. Deployed to Railway; the full stack runs locally under one docker compose up.
Why this stack:
- Django + DRF for the API — mature ORM, batteries-included auth and admin, and a strong ecosystem around DRF (drf-spectacular for the OpenAPI schema at
/api/docs/, SimpleJWT for tokens).
- React + Vite + TanStack Query for both web apps — fast iteration, solid TypeScript ergonomics; TanStack Query removes most of the state-management glue a REST-backed UI needs.
- Kotlin + Jetpack Compose for Android, Swift for iOS — native on both platforms, no cross-platform framework.
- Celery + Redis for async work (notifications, seeding, background jobs). MinIO for S3-compatible media storage.
- Docker Compose for local dev; Railway for staging deploys.
Reservo is a full-stack restaurant reservation system consisting of:
- Backend API - Django REST Framework with PostgreSQL, Redis, and Celery
- Admin Web App - React + TypeScript + Tailwind CSS dashboard for restaurant management
- Customer Web App - React + TypeScript + Tailwind CSS for browsing and booking
- Android App - Native Kotlin + Jetpack Compose (in progress)
- iOS App - Native Swift (early MVP)
| Component |
Technology |
| Backend |
Python 3.11, Django 4.2, Django REST Framework |
| Database |
PostgreSQL 15 |
| Cache/Broker |
Redis 7 |
| Task Queue |
Celery with Django Celery Beat |
| Admin Web |
React 18, TypeScript, Vite, Tailwind CSS |
| Customer Web |
React 18, TypeScript, Vite, Tailwind CSS |
| Android |
Kotlin, Jetpack Compose |
| iOS |
Swift |
| State Management |
React Query (TanStack Query) |
| API Docs |
drf-spectacular (OpenAPI 3.0) |
| File Storage |
MinIO (S3 compatible) |
| Authentication |
JWT (SimpleJWT) |
| Containerization |
Docker & Docker Compose |
# Clone and start all services
git clone https://github.com/MukhammadIbrokhimov/reservo.git
cd reservo
cp .env.example .env
docker compose up -d
# Seed sample data (optional)
docker compose exec backend python manage.py seed_data
# Access the services
# - API: http://localhost:8000/api/
# - API Docs: http://localhost:8000/api/docs/
# - Admin Web: http://localhost:3000/
# - Customer Web: http://localhost:3001/
# - MinIO Console: http://localhost:9001/
# - Django Admin: http://localhost:8000/admin/
reservo/
├── backend/ # Django REST API
│ ├── apps/
│ │ ├── bookings/ # Booking management & availability
│ │ ├── core/ # Core utilities & health checks
│ │ ├── restaurants/ # Restaurant, Table & Photo management
│ │ └── users/ # Authentication & user profiles
│ ├── config/ # Django settings & configuration
│ └── requirements.txt
├── admin-web/ # React admin dashboard
│ ├── src/
│ └── package.json
├── web/ # React customer web app
│ ├── src/
│ └── package.json
├── android/ # Android app (Kotlin + Compose)
├── ios/ # iOS app (Swift)
├── docs/ # Documentation
├── docker-compose.yml # Local development
└── docker-compose.staging.yml
| Document |
Description |
| Developer Onboarding |
Start here — prerequisites, setup, common issues |
| Local Development |
Docker setup, environment variables, troubleshooting |
| API Conventions |
Standards, response formats, headers |
| Admin Web App |
Admin dashboard setup & usage |
| Authentication |
Registration, login, token management |
| Restaurants |
Restaurant and Table management APIs |
| Tables |
Table specific API endpoints |
| Launch Checklists |
Pre-launch, post-launch, rollback plan |
| Method |
Endpoint |
Description |
| POST |
/api/v1/auth/register/ |
Register new user |
| POST |
/api/v1/auth/login/ |
Login and get tokens |
| POST |
/api/v1/auth/refresh/ |
Refresh access token |
| GET |
/api/v1/auth/me/ |
Get current user profile |
| Method |
Endpoint |
Description |
| GET |
/api/v1/restaurants/ |
List all restaurants |
| GET |
/api/v1/restaurants/{slug}/ |
Get restaurant details |
| GET |
/api/v1/restaurants/{id}/tables/ |
List restaurant tables |
| GET |
/api/v1/restaurants/{id}/photos/ |
List restaurant photos |
| Method |
Endpoint |
Description |
| GET |
/api/bookings/ |
List user's bookings |
| POST |
/api/bookings/ |
Create booking |
| POST |
/api/bookings/{id}/cancel/ |
Cancel booking |
# Run all backend tests
docker compose exec backend pytest
# With coverage
docker compose exec backend pytest --cov=apps
# Specific test file
docker compose exec backend pytest apps/bookings/tests/test_booking_api.py -v
This project is proprietary and confidential.