rswag-online/README.md

88 lines
2.2 KiB
Markdown

# rSwag
Merchandise store for the **rSpace ecosystem** at **rswag.online**
## Stack
- **Frontend**: Next.js 15 + shadcn/ui + Tailwind CSS + Geist font
- **Backend**: FastAPI + SQLAlchemy + Alembic
- **Database**: PostgreSQL
- **Payments**: Mollie (EU data residency)
- **Fulfillment**: Printful (apparel) + Prodigi (stickers/prints)
- **AI Design**: Gemini API for on-demand design generation
## Architecture
```
rswag.online
Cloudflare Tunnel → Traefik
│ │
▼ ▼
Next.js (3000) FastAPI (8000)
┌───────────────┼───────────────┐
▼ ▼ ▼
PostgreSQL Mollie POD APIs
```
## Development
### Quick Start
```bash
cp .env.example .env
# Edit .env with your API keys
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# Backend: http://localhost:8000
# Frontend: http://localhost:3000
```
### Local Development (without Docker)
```bash
# Backend
cd backend
pip install -e .
uvicorn app.main:app --reload
# Frontend
cd frontend
pnpm install
pnpm dev
```
## Project Structure
```
rswag/
├── backend/ # FastAPI Python backend
│ ├── app/
│ │ ├── api/ # Route handlers
│ │ ├── models/ # SQLAlchemy ORM
│ │ ├── schemas/ # Pydantic models
│ │ ├── services/ # Business logic
│ │ └── pod/ # POD provider clients
│ └── alembic/ # Database migrations
├── frontend/ # Next.js 15 frontend
│ ├── app/ # App Router pages
│ ├── components/ # React components
│ └── lib/ # Utilities
├── designs/ # Design assets (in-repo)
│ ├── stickers/
│ ├── shirts/
│ └── misc/
└── config/ # POD provider config
```
## Deployment
Deployed on Netcup RS 8000 via Docker Compose with Traefik reverse proxy.
```bash
ssh netcup "cd /opt/apps/rswag && git pull && docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build"
```