Was macht replica-architect?
Liest replica/recon.md und replica/features.csv. Schreibt replica/architecture.md (Vorlage: architecture.md in diesem Ordner).
Wenn es keine Recon-Karte gibt, anhalten und zuerst /replica-recon ausführen. Einen Klon aus dem Gedächtnis zu planen, wie eine App funktioniert, ist der sicherste Weg, die Hälfte zu übersehen.
Schritt 1: Der Stack
Verwende, was der Benutzer bereits kennt, wenn er einen Stack hat. Ansonsten die Voreinstellung, denn jeder Teil ist gemanagt, dokumentiert und bei null Benutzern günstig:
| Ebene | Standard | Austausch gegen |
|---|---|---|
| Web-App | Next.js (App Router) + TypeScript | Remix, SvelteKit, Rails |
| Styling | Tailwind, Tokens von replica-design | CSS Modules |
| Mobil | Expo (React Native) | SwiftUI, Kotlin |
| Datenbank | Postgres auf Supabase oder Neon | PlanetScale, SQLite (Turso) |
| ORM | Drizzle oder Prisma | reines SQL |
| Authentifizierung | Supabase Auth oder Auth.js | Clerk |
| Zahlungen | Stripe Checkout + Billing | Lemon Squeezy, Paddle |
| Resend oder Postmark | SES | |
| Jobs | Vercel Cron, Inngest oder Trigger.dev | ein Worker auf Fly |
| Dateien | Supabase Storage oder Cloudflare R2 | S3 |
| Hosting | Vercel | Netlify, Fly, Render |
Schreibe jede Wahl mit einer Zeile Begründung. Eine Datenbank. Keine Microservices. Der Klon braucht nicht die Architektur des Originals, er braucht seine Funktionen.
Schritt 2: Das Schema
Wandle das abgeleitete Datenmodell in SQL um. Für jede Tabelle:
id uuid primary key default gen_random_uuid(),created_at,updated_at- eine Besitzerspalte (
user_idoderorg_id) für alles, was einem Benutzer gehört - Fremdschlüssel mit einer festgelegten
on delete-Regel, nicht dem Standardwert - Indizes auf jedem Fremdschlüssel und jeder Spalte, nach der du filterst oder sortierst
- Enums oder Check-Constraints für Statusfelder
- Zeiten als
timestamptz, immer, gespeichert in UTC - Geld als Integer-Cents plus eine Währungsspalte
- Zugriffsregeln: Row-Level-Security in Postgres auf Supabase oder eine Autorisierungsprüfung pro Query in der Datenebene. Schreibe, welche.
Beispiel für eine Buchungs-App:
create table bookings (
id uuid primary key default gen_random_uuid(),
event_type_id uuid not null references event_types(id) on delete cascade,
host_id uuid not null references users(id) on delete cascade,
start_at timestamptz not null,
end_at timestamptz not null,
guest_name text not null,
guest_email text not null,
guest_timezone text not null,
status text not null default 'confirmed'
check (status in ('confirmed','cancelled','rescheduled')),
answers jsonb not null default '{}',
created_at timestamptz not null default now(),
constraint no_zero_length check (end_at > start_at)
);
create index on bookings (host_id, start_at);
Dann die harten Constraints, die die Recon gefunden hat. Zwei Gäste, die denselben Slot buchen, ist ein Datenbankproblem (ein Exclusion-Constraint oder ein eindeutiger Index), kein UI-Problem.
Schritt 3: Die API
Ein Tabelle pro Flow aus der Recon-Karte. Für jeden Endpunkt oder Server-Action:
methode pfad | was es tut | wer es aufrufen darf | eingabe | ausgabe | flow
Plus eingehende Webhooks (Stripe, Kalender-Anbieter) und ausgehende, sowie Hintergrundjobs (Erinnerungen, Sync, Bereinigung) mit ihrem Zeitplan.
Nur offizielle, öffentliche APIs mit den eigenen Schlüsseln des Benutzers. Niemals die privaten Endpunkte der ursprünglichen App, selbst wenn sie im Browser sichtbar sind.
Schritt 4: Die kniffligen Teile
Schreibe einen Satz zu jedem zutreffenden Punkt: Zeitzonen und Sommerzeit, Idempotenz (Webhooks kommen doppelt an), Wettlaufbedingungen, Ratenbegrenzungen, Dateigrößenbeschränkungen, Suche, Echtzeit, Offline, E-Mail-Zustellbarkeit, Multi-Tenancy, Löschung nach DSGVO.
Schritt 5: Build-Reihenfolge
- Vertikaler Schnitt. Der Kernablauf End-to-End, hässlich: Registrieren, die eine Sache tun, das Ergebnis sehen. Beweist den Stack.
- Muss-Haben aus
features.csv, nach Bereich. - Sollte-Haben, dann könnte-Haben.
- Die Reparaturen, die replica-entrepreneur findet, sobald es ausgeführt wurde.
Jeder Meilenstein listet seine Bildschirme (S-IDs), Tabellen und Endpunkte auf.
Ausgabe
replica/architecture.md, das SQL in replica/schema.sql oder als erste Migration, und eine Zusammenfassung: Stack in einer Zeile, Tabellenanzahl, Endpunktanzahl, die drei riskantesten Teile und der nächste Schritt: /replica-design.