Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
d0e8dfa
feat: Initialize project — PRD and feature map for ZUSAMMEN
Jun 21, 2026
91aefa1
docs(PROJ-1): Add technical design for Supabase Infrastructure Setup
Jun 21, 2026
6406065
feat(PROJ-1): Activate Supabase client with hard-fail env validation …
Jun 21, 2026
82ef215
test(PROJ-1): Add QA test results for Supabase Infrastructure Setup
Jun 21, 2026
44bd609
chore(PROJ-1): Approve feature — all High bugs fixed, status → Approved
Jun 21, 2026
cdb64ab
docs(PROJ-1): Fix .env.local.example with ZUSAMMEN-specific placehold…
Jun 21, 2026
9f9537e
feat(PROJ-2): Write feature specification for Authentifizierung & Use…
Jun 21, 2026
27317cb
docs(PROJ-2): Close all open questions in auth spec
Jun 21, 2026
80e926a
docs(PROJ-2): Add technical design for Authentifizierung & User Accounts
Jun 21, 2026
4ecf144
refine(PROJ-2): Defer OAuth to pre-launch — E-Mail/Passwort only for …
Jun 21, 2026
e46e372
feat(PROJ-2): Apply profiles.status migration and clean up TypeScript…
Jun 21, 2026
602371f
fix(PROJ-2): Fix all QA bugs — logout, callback error handling, pendi…
Jun 21, 2026
4cf43df
test
jawi-lab Jun 21, 2026
1c9c64e
deploy(PROJ-2): Deploy Authentifizierung & User Accounts to production
jawi-lab Jun 22, 2026
f966c57
docs(PROJ-3): Add technical design for Gruppe & Mitglieder-Management
jawi-lab Jun 22, 2026
6531298
feat(PROJ-3): Implement backend — DB schema, RLS, RPC, Edge Function
jawi-lab Jun 22, 2026
0e30e13
test(PROJ-3): Add QA results, unit tests, and E2E tests for Gruppe & …
jawi-lab Jun 22, 2026
ac78010
fix(PROJ-3): Fix all QA bugs — deleteGroup cascade, delete button gua…
jawi-lab Jun 22, 2026
015c9f7
deploy(PROJ-3): Deploy Gruppe & Mitglieder-Management to production
jawi-lab Jun 22, 2026
c8a8b72
docs(PROJ-4): Add technical design for Aktivitäts-Vorschläge & Voting
jawi-lab Jun 22, 2026
74408bd
feat(PROJ-4): Implement backend — DB schema, RLS, triggers, Edge Func…
jawi-lab Jun 22, 2026
e74c948
test(PROJ-4): Add QA results, unit tests, and E2E tests for Aktivität…
jawi-lab Jun 22, 2026
f6a2b5b
docs(PROJ-4): Update PRD status — Aktivitäts-Vorschläge & Voting Appr…
jawi-lab Jun 22, 2026
e90cab4
deploy(PROJ-4): Deploy Aktivitäts-Vorschläge & Voting to production
jawi-lab Jun 22, 2026
f77f0da
fix(PROJ-3): Fix signup profile creation and onboarding RLS errors
jawi-lab Jun 22, 2026
268fac7
docs(PROJ-5): Add technical design for Kanban-Board
jawi-lab Jun 22, 2026
101099d
feat(PROJ-5): Implement Kanban-Board frontend + DB migration
jawi-lab Jun 22, 2026
084c2b1
test(PROJ-5): Add QA results, unit tests, and E2E tests for Kanban-Board
jawi-lab Jun 22, 2026
aab2978
fix(PROJ-5): Fix all QA bugs — empty action menu, stale date picker, …
jawi-lab Jun 22, 2026
b31a9b5
chore(PROJ-5): Approve feature — all bugs fixed, status → Approved
jawi-lab Jun 22, 2026
6c05762
deploy(PROJ-5): Deploy Kanban-Board to production
jawi-lab Jun 22, 2026
bc68fce
feat(PROJ-6): Write feature specification for Aktivitäts-Detail
jawi-lab Jun 22, 2026
8c93b21
feat(PROJ-6): Add Jira-like rich text comments with inline images to …
jawi-lab Jun 22, 2026
59fecf0
docs(PROJ-6): Add technical design for Aktivitäts-Detail
jawi-lab Jun 22, 2026
a781bdc
test(PROJ-6): Add QA results, unit tests, and E2E tests for Aktivität…
jawi-lab Jun 22, 2026
3b7f44e
fix(PROJ-6): Fix all QA bugs — mobile delete, edit lock, photo deleti…
jawi-lab Jun 22, 2026
be3950f
feat(PROJ-6): Implement Aktivitäts-Detail — hooks, types, and compone…
jawi-lab Jun 22, 2026
ad0375e
deploy(PROJ-6): Mark Aktivitäts-Detail as Deployed
jawi-lab Jun 22, 2026
1dc3c42
docs(PROJ-8): Add technical design for Nutzerprofil & Archiv
jawi-lab Jun 23, 2026
dcd1d94
test(PROJ-8): Add QA results, unit tests, and E2E tests for Nutzerpro…
jawi-lab Jun 23, 2026
a45f895
feat(PROJ-8): Implement Nutzerprofil & Archiv — profile sheet, avatar…
jawi-lab Jun 23, 2026
024e68c
deploy(PROJ-8): Mark Nutzerprofil & Archiv as Deployed
jawi-lab Jun 23, 2026
943de96
docs(PROJ-7): Add technical design for Terminfindung & Kalender-Export
jawi-lab Jun 23, 2026
e5bccb8
test(PROJ-7): Add QA results, unit tests, and E2E tests for Terminfin…
jawi-lab Jun 23, 2026
ed7006e
fix(PROJ-7): Fix all QA bugs — DTEND timezone, grammar, stale E2E tests
jawi-lab Jun 23, 2026
38a79ea
feat(PROJ-7): Complete Terminfindung & Kalender-Export implementation
jawi-lab Jun 23, 2026
6e559b8
deploy(PROJ-7): Mark Terminfindung & Kalender-Export as Deployed
jawi-lab Jun 23, 2026
5006862
fix(PROJ-2): Detect duplicate email on signup & add logout to onboarding
jawi-lab Jun 23, 2026
150dc14
fix(PROJ-2): Fix logout race condition — redirect after SIGNED_OUT event
jawi-lab Jun 23, 2026
f4475a1
fix(PROJ-3): Create group via SECURITY DEFINER RPC to fix RLS error
jawi-lab Jun 23, 2026
edef906
fix(PROJ-2): Fix logout button and email-confirmation callback
jawi-lab Jun 23, 2026
c6b7bd8
fix(PROJ-2): Manage profile status server-side via email-confirmation…
jawi-lab Jun 23, 2026
95262cf
fix(PROJ-3): Fix RLS recursion on group reads + harden onboarding red…
jawi-lab Jun 23, 2026
0650e9d
fix(PROJ-6): Fix storage RLS object-path self-reference for comment i…
jawi-lab Jun 23, 2026
2012bef
fix(PROJ-2): Surface real signup error instead of generic "Verbindung…
jawi-lab Jun 23, 2026
0c4acbc
fix(PROJ-3): Refresh member count on focus + fix mobile horizontal cu…
jawi-lab Jun 23, 2026
2ec0f68
feat(PROJ-4,PROJ-5): Per-group routes for backlog & kanban + kanban d…
jawi-lab Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .env.local.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Supabase (Optional - remove if not using backend)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url_here
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here

NEXT_PUBLIC_SUPABASE_URL=platzhalter-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=platzhalter-supabase-anon-key
# Add more environment variables as needed
# STRIPE_SECRET_KEY=sk_...
# SMTP_HOST=smtp.sendgrid.net
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# MCP config (contains secrets)
.mcp.json

# dependencies
/node_modules
/.pnp
Expand Down
225 changes: 225 additions & 0 deletions Konzept_Freundes-Planungs-App.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
# Konzept – Freundes-Planungs-App

Mobile-First App, in der Freundesgruppen Unternehmungen demokratisch auswählen (Voting), über ein Kanban-Board planen, mit Kalender-Sync terminieren und nach Abschluss als persönliche Erinnerung archivieren.

---

## 1. Zielbild & Kernidee

- Gruppen organisieren gemeinsame Aktivitäten von der Idee bis zum Abschluss.
- Demokratische Auswahl per Upvote-Voting mit individuell festgelegter Schwelle.
- Strukturierte Umsetzung über ein Kanban-Board.
- Kalender-Synchronisierung für Terminfindung und Kalender-Export.
- Persönliches Archiv abgeschlossener Aktivitäten je User.

### 1.1 Plattformen & Verfügbarkeit

Die App soll auf folgenden Plattformen nutzbar sein:

- **Android** (Smartphone, native App)
- **iOS** (Smartphone, native App)
- **Web-App** (Desktop, responsive)

Konsequenzen für Konzept/Prototyp: plattformübergreifend konsistente UI, responsives Layout (Mobile-First, Desktop-Erweiterung), Account- und Daten-Sync über alle Geräte, geräteübergreifende Kalender-Synchronisierung.

---

## 2. Rollen & Berechtigungen

Jedes Projekt hat einen oder mehrere Admins, die Berechtigungen verteilen.

| Rolle | Rechte |
|---|---|
| **Admin** | Berechtigungen vergeben, Aktivitäten erstellen, alles verwalten |
| **Redakteur** | Aktivitäten erstellen, an Planung mitwirken |
| **Beobachter** | Ansicht und Voting |

---

## 3. Account & Authentifizierung

Jeder User benötigt einen eigenen Account mit Profil und Benachrichtigungs-Einstellungen.

- **Login-Optionen:** E-Mail (mit Double-Opt-In) sowie SSO via Google, Apple, Facebook.
- **Kalender:** synchronisierbar pro User.

### 3.1 Registrierungs-Flow mit Double-Opt-In (E-Mail)

1. **Registrierung:** E-Mail, Passwort, optional Name, Checkbox AGB/Datenschutz.
2. **Hinweis-Screen:** „Bestätigungs-Mail an [Adresse] gesendet.“ Account-Status `pending`. Optionen: Mail erneut senden, Adresse ändern.
3. **Bestätigungs-Mail:** enthält Verifizierungs-Link mit zeitlich begrenztem Token.
4. **Verifizierung:** Link-Klick → Status wechselt auf `active` → Weiterleitung/Auto-Login.
5. **Erstanmeldung:** Projekt erstellen oder beitreten.

**Statusmodell:** `pending` → `active`. Nur `active`-Accounts können Projekten beitreten oder voten.

**Edge Cases:** Link abgelaufen → neuen anfordern; bereits bestätigt → direkt zum Login; Mail nicht erhalten → erneut senden (mit Rate-Limit).

### 3.2 SSO-Abgrenzung

Bei Login via Google/Apple/Facebook entfällt Double-Opt-In (E-Mail durch Provider verifiziert). Diese Accounts starten direkt als `active`.

---

## 4. Projekt & Gruppe

Beim Start entscheidet der User: **Projekt erstellen** („Name der Freundesgruppe“) oder einer bestehenden **Gruppe beitreten** (per Code/Einladung).

---

## 5. Voting & Upvote-Schwelle

- Admin/Redakteur erstellen Aktivitäts-Vorschläge.
- Mitglieder voten per Upvote.
- Beim Erstellen legt der Initiator die **benötigte Upvote-Anzahl** fest (Feld „Benötigte Upvotes für Planungsstart“).
- Eine Aktivität wandert erst von „Zu Planen“ in „In Planung“, sobald diese Schwelle erreicht ist.
- Kartenanzeige zeigt Fortschritt (z. B. „3/5“).

---

## 6. Kanban-Board (Workflow)

Vier Spalten:

1. **Zu Planen** – Aktivität hat die Upvote-Schwelle erreicht; Initiator legt über Kalender-Sync einen Zeitraum fest.
2. **In Planung** – Unteraufgaben, Verantwortlichkeiten und Details werden bearbeitet.
3. **Planung abgeschlossen** – Termin steht; beteiligte User können die Aktivität zu ihrem Kalender hinzufügen.
4. **Abgeschlossen** – Aktivität fand statt; Bilder-Upload und Archivierung im Profil.

Karten zeigen: Titelbild, Name, Initiator, Zeitraum.

### 6.1 Terminfindung (Übergang in „Zu Planen“)

Kalender-Ansicht mit als geblockt angezeigten Slots der Gruppenmitglieder (Sync). Initiator wählt den Zeitraum.

### 6.2 Kalender-Export (bei „Planung abgeschlossen“)

- Button „Zu meinem Kalender hinzufügen“ in der Detailansicht, für jeden beteiligten User.
- Übernimmt Name, Zeitraum und ggf. Ort in den synchronisierten Kalender.
- **States:** nicht hinzugefügt → Button; hinzugefügt → „Im Kalender“ (Häkchen); kein Kalender verbunden → Weiterleitung zur Kalender-Verbindung.

---

## 7. Aufbau einer Aktivität

Eine Aktivität enthält:

- **Name**
- **Titelbild** (Link oder Upload)
- **Initiator**
- **Zeitraum** der Durchführung
- **Benötigte Upvotes** (Planungsschwelle)
- **Unteraufgaben** mit Deadlines
- **Verantwortlichkeiten** (Zuweisung an User)
- **Kommentar-Funktion**
- **Bild-Upload** (insb. nach Abschluss)
- **Dauer-Kategorie:** spontan (ein Tag) / Wochenende / längerer Zeitraum

---

## 8. Profil

- Account- und Benachrichtigungs-Einstellungen (Push, Mail).
- Kalender-Verbindung verwalten.
- **Archiv:** Galerie aller abgeschlossenen Aktivitäten mit eigener Beteiligung, inkl. hochgeladener Bilder.

---

## 9. Screen-Übersicht (für Prototyp)

1. Onboarding / Auth (Login + Registrierung mit Double-Opt-In)
2. Projekt erstellen / beitreten
3. Projekt-Übersicht (Vorschläge + Voting, Filter nach Dauer)
4. Aktivität erstellen (inkl. Upvote-Schwelle)
5. Kanban-Board (4 Spalten)
6. Aktivitäts-Detail (Unteraufgaben, Verantwortlichkeiten, Kommentare, Bilder, Kalender-Export)
7. Terminfindung (Kalender-Modal)
8. Profil (Einstellungen + Archiv)

---

## 10. Backlog (spätere Ausbaustufen)

- Reminder per Push, Mail und WhatsApp.
- Aktivitäts-Vorlagen basierend auf Standort.

---

# Teil B – Technische Umsetzung (Build-Vorgaben)

Dieser Teil ist die verbindliche Bauanleitung für den umsetzenden AI-Agenten. Gewählter Ansatz: **Variante A – Next.js Static Export + Capacitor + Supabase.**

## 11. Tech-Stack

- **Framework:** Next.js 16 + TypeScript, App Router.
- **Styling:** Tailwind CSS + shadcn/ui (bereits installiert).
- **Formulare/Validierung:** react-hook-form + Zod.
- **Backend:** Supabase – Postgres, Auth, Storage, Realtime, Edge Functions (MCP-Server bereits via `.mcp.json` verbunden).
- **Native Verpackung:** Capacitor (iOS + Android).
- **Tests:** Vitest (Unit), Playwright (E2E).
- **Web-Deploy:** Vercel.
- **OTA-Updates (nativ):** Capgo (Open Source) oder Appflow.

## 12. Architektur – Variante A (verbindlich)

- Next.js mit **`output: 'export'`** (statischer Export). Die App wird als statische Assets gebaut und in die nativen Capacitor-Container gebündelt.
- **Keine** Server Components, SSR, Server Actions oder API-Routes als Pflichtpfad. Datenlogik läuft **client-seitig** gegen Supabase.
- Eine Codebasis bedient Web (Vercel) und native Apps (Capacitor) identisch.
- Supabase-Zugriffe (Auth, DB, Storage, Realtime) erfolgen über den Supabase-Client direkt aus dem Frontend; sensible Operationen über RLS-Policies und Edge Functions absichern.

### 12.1 Konsequenzen für die Implementierung

- Alle Seiten als Client-Komponenten oder statisch generierbar konzipieren.
- Datenabruf via Supabase-Client + React-Hooks (kein `getServerSideProps`).
- Board-Updates in Echtzeit über Supabase Realtime.

## 13. Datenmodell (Supabase, Grundgerüst)

Mindestens folgende Tabellen mit Beziehungen modellieren:

- `profiles` – User-Profil, Benachrichtigungs-Einstellungen, Kalender-Verbindung, Account-Status (`pending` / `active`).
- `projects` – Freundesgruppe.
- `project_members` – User ↔ Projekt mit Rolle (`admin` / `editor` / `observer`).
- `activities` – Aktivität inkl. Name, Titelbild, Initiator, Zeitraum, Dauer-Kategorie, benötigte Upvotes, Board-Status (`zu_planen` / `in_planung` / `planung_abgeschlossen` / `abgeschlossen`).
- `votes` – Upvotes je Aktivität und User (eindeutig pro User/Aktivität).
- `subtasks` – Unteraufgaben mit Deadline und Verantwortlichem.
- `comments` – Kommentare je Aktivität.
- `activity_images` – hochgeladene Bilder (Supabase Storage-Referenz).

**Logik-Regeln:**
- Aktivität wechselt von `zu_planen` → `in_planung`, sobald `votes`-Anzahl ≥ benötigte Upvotes.
- Nur `active`-Accounts dürfen Projekten beitreten oder voten.
- Rollenrechte über Row-Level-Security-Policies durchsetzen.

## 14. Authentifizierung

- **Supabase Auth.**
- E-Mail-Registrierung mit **Double-Opt-In** (Bestätigungs-Link, Status `pending` → `active`).
- OAuth-Provider: Google, Apple, Facebook (SSO-Accounts direkt `active`).
- **Pflicht:** Wird Google- oder Facebook-Login angeboten, muss laut Apple auch **Sign in with Apple** verfügbar sein.

## 15. Native Features & Plattform-Weichen

- **Push:** `@capacitor/push-notifications` + FCM (Android) / APNs (iOS). Nur in nativen Builds aktiv.
- **Kalender:** Capacitor-Kalender-Plugin (z. B. `@ebarooni/capacitor-calendar`) für Geräte-Kalender-Export. Echter Zwei-Wege-Sync mit Google-/Apple-Kalendern zusätzlich über die jeweiligen Cloud-APIs.
- **Weichen:** Native-only-Funktionen über `Capacitor.isNativePlatform()` kapseln; in der Web-App entfallen sie oder erhalten Web-Fallbacks (optional Web-Push).

## 16. Deployment & Release

- **Web:** statischer Export → Vercel.
- **Nativ:** Capacitor-Builds für iOS (App Store) und Android (Play Store).
- **Simultane Updates:**
- JS-/UI-/Logik-Änderungen → Web sofort via Vercel + nativ via OTA (Capgo/Appflow), nahezu gleichzeitig ohne Store-Review.
- Native-Code-Änderungen (neue Plugins, Berechtigungen, SDK-Upgrades) → neue Store-Builds mit Review-Verzögerung.
- **Grundsatz:** Native Anteile klein und stabil halten, damit der Großteil der Releases simultan ausgespielt werden kann.

## 17. Build-Reihenfolge (für den AI-Agenten)

1. **Web-App vollständig zuerst** – kompletter Kernflow (Voting → Board → Terminfindung → Abschluss → Archiv) als statisch exportierbare Next.js-App gegen Supabase.
2. Auth inkl. Double-Opt-In und OAuth.
3. Supabase-Schema + RLS-Policies anlegen.
4. Tests (Vitest/Playwright) für Kernflows.
5. **Erst danach Capacitor ergänzen** – `output: 'export'` konfigurieren, iOS/Android-Plattformen hinzufügen, Push- und Kalender-Plugins integrieren.
6. OTA-Pipeline (Capgo) und Vercel-Deploy an gemeinsamen Release-Trigger koppeln.

**Wichtig:** Web-App und Capacitor nicht parallel starten – Capacitor ist der letzte Schritt.
Loading