Delivery management system for sellers and delivery partners.
- Backend 🧠: FastAPI + SQLModel/SQLAlchemy (async) + Postgres
- Background jobs 🧵: Celery + Redis (broker/backend)
- Frontend 🖥️: React (React Router 7 + Vite)
backend/— FastAPI app, DB models/migrations, Celery tasks, email/SMS templates, testsfrontend/— React Router app
- Docker + Docker Compose (recommended), or
- Python 3.13+ (matches
backend/Dockerfile) and Node.js 20+
From backend/:
cd backend
docker compose up --build- API:
http://127.0.0.1:8000 - API docs (Scalar):
http://127.0.0.1:8000/docs
Notes:
- Docker Compose will read environment variables from
backend/.envautomatically. - In
backend/docker-compose.yaml, thedbservice does not setPOSTGRES_PASSWORD. If the Postgres container fails to initialize, addPOSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"to thedb.environmentsection (or set an auth method suitable for local dev).
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# fastapi-cli
fastapi devEnvironment:
- Settings are loaded from
backend/.envviaapp/config.py(Pydantic Settings).
Warning
Do not commit real credentials. Use your own local values.
cd frontend
npm install
npm run dev- App:
http://localhost:5173 - The API base URL is currently hardcoded in
frontend/app/lib/api.tstohttp://127.0.0.1:8000.
Alembic config lives in backend/alembic.ini and migrations are in backend/migrations/.
Important
backend/migrations/env.py currently sets sqlalchemy.url to a hardcoded database URL. Review/update this before running migrations locally.
Run migrations (after verifying the URL):
cd backend
alembic upgrade headRun the worker (requires Redis):
cd backend
celery -A app.worker.tasks worker --loglevel=INFOBackend:
cd backend
pytestFrontend:
cd frontend
npm run typecheck