Architektur
StoreStash besteht aus 4 Docker-Services hinter einem Nginx Reverse Proxy.
Γbersichtβ
ββββββββββββββββββββ Docker Network ββββββββββββββββββββ
β β
β βββββββββββ ββββββββββββ ββββββββββββ β
β β Nginx βββββΊβ Frontend β β Backend β β
β β :80 β β SvelteKitβ β FastAPI β β
β β βββββΊβ :3000 β β :8000 β β
β βββββββββββ ββββββββββββ ββββββββββββ β
β β β β
β β /api/* βββββββββββββββ β
β β β β
β β ββββββΌβββββ β
β β β DB β β
β β β Postgresβ β
β β β :5432 β β
β β βββββββββββ β
β Port 3000 (nicht exponiert) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Request-Flowβ
- Browser β Nginx (
:3000) - Nginx routet:
/api/*β Backend (FastAPI:8000)/*β Frontend (SvelteKit:3000)
- Backend β PostgreSQL (intern
:5432)
Servicesβ
Nginxβ
- Reverse Proxy, TLS Termination (in Produktion)
- Rate-Limiting: 30 req/s pro IP, Burst 20
- Security Headers: CSP, X-Frame-Options, Permissions-Policy
- Body-Size-Limit: 2 MB
- Swagger UI blockiert in Produktion
Frontend (SvelteKit)β
- Server-Side Rendering via
adapter-node - Tailwind CSS mit CSS Custom Properties fΓΌr Themes
- PWA: Manifest, Service Worker, Shortcuts
- i18n: DE + EN, erweiterbar
Backend (FastAPI)β
- Async (asyncio + asyncpg)
- SQLAlchemy 2.0 ORM
- Pydantic v2 Schemas mit strikter Validierung
- Open Food Facts Proxy
PostgreSQLβ
- Version 16 (Alpine)
- Nur im Docker-Netzwerk erreichbar
- Healthcheck via
pg_isready - Volume-Mount fΓΌr Persistenz
Verzeichnisstrukturβ
backend/app/
βββ api/v1/ # Endpoint-Router (products, stock, barcode, ...)
βββ core/ # Config, Database, Seed
βββ models/ # SQLAlchemy ORM Models
βββ schemas/ # Pydantic Request/Response Schemas
βββ services/ # Business Logic (inventory_service)
frontend/src/
βββ lib/
β βββ api/ # Typed API Client
β βββ components/ # Svelte Components (ui/, inventory/, layout/)
β βββ i18n/ # Translations (de.ts, en.ts)
β βββ stores/ # Svelte Stores (state, themes, device)
β βββ types/ # TypeScript Interfaces
βββ routes/ # 10 SvelteKit Pages
βββ app.css # Tailwind + CSS Variables