feat: v1.1 - random re-roll, shopping summary, offline PWA, auth prep, profile page

This commit is contained in:
clawd
2026-02-18 10:32:12 +00:00
parent de567f93db
commit c222c880a3
13 changed files with 290 additions and 6 deletions

63
features/AUTH-V2.md Normal file
View File

@@ -0,0 +1,63 @@
# AUTH v2 — Spezifikation
## Übersicht
Simple Authentifizierung für Luna Recipes, damit mehrere User die App nutzen können.
## Auth-Methode
- **Email + Passwort** (primär)
- **Optional: PIN-Login** (4-6 Ziffern, für schnellen Zugang auf vertrautem Gerät)
- **Kein OAuth/Social Login** — zu komplex für v2
## Token-Strategie
- **JWT Access Token** — kurze Laufzeit (15 min)
- **Refresh Token** — lange Laufzeit (30 Tage), httpOnly Cookie
- Token-Rotation bei jedem Refresh
- Logout invalidiert Refresh Token
## Multi-User Support
- Vorgesehene User: **Luna**, **Marc**, **Gäste**
- Gast-Zugang: Read-only, kein Login nötig (Feature-Flag)
- Jeder User hat eigene Favoriten und Notizen
- Rezepte gehören einem User (created_by)
- Einkaufsliste: Shared per Haushalt (alle sehen dieselbe)
## Datenmodell-Änderungen
```sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
password_hash TEXT NOT NULL,
pin_hash TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Bestehende Tabellen erweitern:
ALTER TABLE recipes ADD COLUMN created_by UUID REFERENCES users(id);
ALTER TABLE notes ADD COLUMN user_id UUID REFERENCES users(id);
ALTER TABLE favorites ADD COLUMN user_id UUID REFERENCES users(id);
```
## API-Endpunkte
- `POST /api/auth/register` — { email, password, name }
- `POST /api/auth/login` — { email, password } → { accessToken, user }
- `POST /api/auth/refresh` — Cookie → { accessToken }
- `POST /api/auth/logout` — Invalidiert Refresh Token
- `GET /api/auth/me` — Aktueller User
## Sharing
- Rezept-Links sind öffentlich teilbar (kein Login zum Ansehen nötig)
- Format: `/recipe/:slug` (bleibt gleich)
- Optional: "Rezept kopieren" Button für eingeloggte User
## Migration
- Alle bestehenden Rezepte werden dem Default-User (Luna) zugewiesen
- Bestehende Favoriten/Notizen → Luna
- Keine Breaking Changes für nicht-eingeloggte Nutzung in v2.0
## Nicht in v2
- Social Login (Google, Apple)
- Email-Verifizierung
- Passwort-Reset per Email
- Admin-Panel
- Rollen/Permissions