Zamonaviy e-commerce platforma β backend (FastAPI), frontend (Next.js) va Telegram bot dan iborat.
- Architecture
- Tech Stack
- Quick Start
- Environment Setup
- Backend
- Frontend
- Bot
- Docker
- API Documentation
- Project Structure
- Development
- Deployment
- Contributing
βββββββββββββββ HTTPS ββββββββββββββββ
β Browser β ββββββββββββββΊ β Nginx β
βββββββββββββββ β (Frontend) β
ββββββββ¬ββββββββ
β REST
ββββββββ΄ββββββββ
β FastAPI β
β (Backend) β
ββββ¬ββββ¬ββββ¬βββ
β β β
βββββββββββ β ββββββββββββ
β β β
βββββββ΄ββββββ βββββ΄ββββ ββββββββ΄βββββββ
β PostgreSQLβ β Redis β β MinIO β
βββββββββββββ βββββββββ βββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, React 19, TypeScript, Tailwind CSS v4 |
| shadcn/ui, TanStack Query v5, Zustand | |
| Backend | FastAPI, Python 3.12, SQLAlchemy 2 (async) |
| PostgreSQL, Redis, MinIO (S3) | |
| Bot | Aiogram 3, httpx |
| Infra | Docker, Docker Compose, Nginx |
- Docker + Docker Compose
- uv (for local dev without Docker)
- Node.js 22+ + pnpm (for frontend local dev)
# 1. Clone & setup
git clone <repo-url>
cd ecommerce-platform
cp .env.example .env # edit .env for your needs
make install # install all dependencies
make dev # start all services via DockerServices will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/api/docs
- MinIO Console: http://localhost:9001 (minioadmin/minioadmin)
cp .env.example .env
# Edit .env β at minimum set SECRET_KEY and BOT_TOKEN# Backend
cd backend && uv sync && uv run uvicorn src.main:app --reload
# Frontend
cd frontend && pnpm install && pnpm dev
# Bot
cd bot && uv sync && uv run python -m bot.mainbackend/src/
βββ main.py # App factory
βββ config.py # Settings (env-based)
βββ models_registry.py # All ORM models
βββ models/ # SQLAlchemy models
βββ modules/ # Feature modules
β βββ auth/ # JWT auth (register, login, refresh)
β βββ users/ # User CRUD
β βββ catalog/ # Categories & Products
β βββ inventory/ # Stock management
β βββ cart/ # Redis-based cart
β βββ orders/ # Order lifecycle
β βββ payments/ # Click, Payme, Stripe
β βββ shipping/ # Shipping methods
β βββ reviews/ # Product reviews
β βββ vendors/ # Marketplace vendors
β βββ notifications/ # Email/SMS/Telegram
β βββ tasks/ # Celery background tasks
β βββ admin/ # Admin dashboard API
βββ core/ # Shared infrastructure
β βββ base_repository.py # Generic CRUD repo
β βββ dependencies.py # DI providers
β βββ exceptions.py # App exceptions
β βββ middleware.py # CORS, timing, etc.
β βββ pagination.py # Page<T> pagination
β βββ rate_limit.py # slowapi limiter
β βββ redis.py # Redis client
β βββ schemas.py # Base Pydantic schemas
βββ utils/ # Helpers
cd backend
uv run uvicorn src.main:app --reload # dev server
uv run alembic upgrade head # DB migrations
uv run alembic revision --autogenerate -m "msg" # new migration
uv run pytest -v # tests
uv run ruff check . --fix # lint
uv run mypy src/ # type check| Prefix | Method | Description | Auth |
|---|---|---|---|
/api/v1/auth |
POST | register, login, refresh | Public |
/api/v1/users |
GET/PATCH | admin user management | Admin |
/api/v1/users/me |
GET/PATCH | current user profile | User |
/api/v1/catalog |
GET | categories, products | Public |
/api/v1/catalog |
POST/PATCH/DELETE | product CRUD | Admin |
/api/v1/cart |
GET/POST/DELETE | cart operations | User |
/api/v1/orders |
POST | create from cart | User |
/api/v1/orders |
GET | my orders | User |
/api/v1/orders/{id} |
GET/PATCH | order detail + status | Admin |
/api/v1/payments |
POST | init payment | User |
/api/v1/shipping |
GET | available methods | Public |
/api/v1/admin |
GET | dashboard stats | Admin |
Full interactive docs: http://localhost:8000/api/docs
frontend/src/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout (providers, header, footer)
β βββ page.tsx # Homepage (hero + featured products)
β βββ globals.css # Design tokens + animations
β βββ (shop)/ # Public pages
β β βββ products/ # Product listing + detail
β βββ (auth)/ # Auth pages
β β βββ login/ # Login form
β β βββ register/ # Register form
β βββ cart/ # Cart page
β βββ checkout/ # Multi-step checkout
β βββ account/ # User account
β β βββ orders/ # Order history
β β βββ addresses/ # Address management
β βββ admin/ # Admin dashboard
β β βββ products/ # Product CRUD table
β β βββ orders/ # Order management
β βββ success/ # Order confirmation
β βββ api/ # Next.js API routes (auth proxy)
βββ components/
β βββ layout/ # Header, Footer, Sidebar
β βββ product/ # ProductCard, Grid, Filters, Images
β βββ cart/ # CartDrawer, CartItem, Summary
β βββ common/ # LoadingSpinner, ErrorMessage, etc.
β βββ providers/ # QueryProvider, AuthProvider
β βββ ui/ # shadcn/ui primitives
βββ lib/
β βββ design-system.ts # Color tokens, spacing, animations
β βββ config.ts # App config
β βββ api/ # Typed API modules
β β βββ client.ts # Base fetch (401 refresh + retry)
β β βββ auth.ts # login, register, logout
β β βββ products.ts # list, detail, CRUD
β β βββ cart.ts # get, add, remove, clear
β β βββ orders.ts # create, list, detail
β β βββ users.ts # profile, update
β βββ stores/ # Zustand stores
β βββ auth.store.ts # user, tokens, login/logout
β βββ cart.store.ts # items, total, sync
βββ types/
βββ api.ts # All API TypeScript types
cd frontend
pnpm install # install deps
pnpm dev # dev server (localhost:3000)
pnpm build # production build
pnpm lint # ESLint
pnpm typecheck # TypeScript type checkAll design tokens are in src/lib/design-system.ts:
- Colors: primary, secondary, accent, surface, muted, border (HSL)
- Spacing: xs(4px) β 2xl(40px)
- Border Radius: sm/md/lg/full
- Shadows: sm/md/lg/xl
- Animations: fade-in, slide-up, scale-in, shimmer, pulse-ring
- Breakpoints: sm(640px) β 2xl(1536px)
| Animation | Duration | Use Case |
|---|---|---|
fade-in |
300ms | Page transitions |
slide-up |
400ms | Page transitions |
slide-in-right |
350ms | Toasts, Cart drawer |
scale-in |
200ms | Modals, Dropdowns |
shimmer |
1.5s | Loading skeletons |
pulse-ring |
1.5s | Cart badge, notifications |
Apply via Tailwind classes: animate-fade-in, animate-slide-up, animate-shimmer, etc.
Telegram bot for order management.
cd bot
uv sync
uv run python -m bot.mainBot features:
- Browse products
- Add to cart via messages
- Place orders
- Track order status
- Telegram auth login
make dev # Start all services
make stop # Stop all services
make logs # Backend logs
make shell-backend # Bash inside backend container
make shell-db # psql inside postgres# Build and start in production mode
make prod
# Build images only
make build| Service | Port | Description |
|---|---|---|
| frontend | 3000 | Next.js (dev) / Nginx (prod) |
| backend | 8000 | FastAPI REST API |
| postgres | 5432 | PostgreSQL 16 |
| redis | 6379 | Redis 7 (caching, sessions) |
| minio | 9000 | S3 storage API |
| minio-console | 9001 | MinIO web console |
Interactive Swagger UI: http://localhost:8000/api/docs
ReDoc alternative: http://localhost:8000/api/redoc
# Backend
make lint # ruff check + autofix
make test # pytest
make verify # import check + frontend typecheck
# Frontend
pnpm lint # ESLint
pnpm typecheck # tsc --noEmit- Set all
.envvariables (see .env.example) SECRET_KEYβ at least 32 characters, generate with:python -c "import secrets; print(secrets.token_urlsafe(32))"BOT_TOKENβ from @BotFather on Telegram- Domain and SSL certificate for Nginx
# 1. Pull latest code
git pull
# 2. Copy .env (production values)
cp .env.production .env
# 3. Build and start
make build
make prod
# 4. Run migrations
docker-compose exec backend uv run alembic upgrade headAdd to frontend/nginx.conf:
listen 443 ssl;
ssl_certificate /etc/ssl/certs/domain.crt;
ssl_certificate_key /etc/ssl/private/domain.key;- Create feature branch:
git checkout -b feature/name - Follow Backend and Frontend standards
- Run
make lintandmake testbefore committing - Submit PR with description
Private β E-Commerce Platform