Skip to content

MukhammadIbrokhimov/reservo

Repository files navigation

Reservo

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.

About this project

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.

Overview

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)

Tech Stack

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

Quick Start

# 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/

Services

Service URL Description
Backend API http://localhost:8000/api/ REST API endpoints
API Documentation http://localhost:8000/api/docs/ Swagger UI
Django Admin http://localhost:8000/admin/ Django admin panel
Admin Web App http://localhost:3000/ Restaurant admin dashboard
Customer Web App http://localhost:3001/ Customer facing website
PostgreSQL localhost:5432 Database
Redis localhost:6379 Cache & message broker
MinIO Console http://localhost:9001/ Object storage management

Project Structure

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

Documentation

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

API Endpoints Overview

Authentication

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

Restaurants & Tables

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

Bookings

Method Endpoint Description
GET /api/bookings/ List user's bookings
POST /api/bookings/ Create booking
POST /api/bookings/{id}/cancel/ Cancel booking

Testing

# 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

License

This project is proprietary and confidential.

About

Full-stack restaurant booking platform — Django REST + React + Kotlin (Compose) + Swift. Docker-orchestrated, Railway-deployed.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors