Architektur-Übersicht
Projektstruktur
roestify/
├── roestify-app/ # Next.js Anwendung
│ ├── src/
│ │ ├── app/ # App Router (Pages + API Routes)
│ │ ├── components/ # React-Komponenten
│ │ │ └── ui/ # shadcn/ui Primitives
│ │ ├── hooks/ # Custom React Hooks
│ │ ├── lib/ # Utilities (Supabase Client, etc.)
│ │ └── types/ # TypeScript Typen
│ ├── supabase/ # DB-Migrationen
│ └── features/ # Feature-Spezifikationen
├── roestify-docs/ # Docusaurus Dokumentation
└── .claude/ # Claude Code Regeln
Multi-Tenancy
Roestify ist multi-tenant — jede Rösterei hat isolierte Daten. Die Isolation wird durch 6 Schichten sichergestellt:
- RLS aktiviert auf jeder Tabelle
- RLS-Policies nutzen
get_tenant_id() tenant_idistNOT NULL+ FK →tenants- Default-Wert
get_tenant_id()— App muss tenant nie setzen - Immutable
tenant_id— UPDATE-Policy verhindert Änderung - CASCADE Delete — Tenant-Löschung entfernt alle Daten (DSGVO)
API-Pattern
Alle API-Routes folgen dem Schema:
/api/v1/{resource} # GET (Liste), POST (Erstellen)
/api/v1/{resource}/{id} # GET, PUT, DELETE
- Zod-Validierung auf allen Inputs
- Authentifizierung über Supabase Session
- RLS als zweite Verteidigungslinie