replica-backend
Liest replica/architecture.md. Schreibt Migrationen und Servercode und hält replica/backend.md (siehe Checkliste unten) auf dem aktuellen Stand.
Die Regeln
- Nur offizielle, öffentliche APIs mit den eigenen Schlüsseln des Benutzers. Niemals die privaten Endpunkte der Original-App aufrufen, niemals deren OAuth-Client wiederverwenden, niemals über sie proxyen.
- Der Benutzer erstellt Konten und Schlüssel. Der Agent meldet sich nie für Dienste an, gibt nie ein Passwort, eine Kreditkarte oder einen Live-Schlüssel ein. Der Benutzer erstellt das Stripe-, Supabase-, Resend- oder Google Cloud-Projekt und hinterlegt die Schlüssel in
.env.local. Der Agent schreibt.env.examplemit jedem Variablennamen und ohne Werte. - Zuerst im Testmodus. Stripe-Testschlüssel und Testkarten bis zum replica-deploy.
Authentifizierung
- E-Mail-Registrierung mit Verifizierung, Passwort zurücksetzen, Magic Link, falls das Original dies hat. OAuth (Google, Apple) mit den eigenen Developer-Apps des Benutzers.
- Sitzungen: http-only sichere Cookies. Überall abmelden.
- Rollen und Teams, falls die Recon-Map sie enthält: Eigentümer, Admin, Mitglied, mit einer Funktion, die beantwortet: „Kann dieser Benutzer diese Aktion mit diesem Datensatz durchführen?“.
- Kontolöschung, die tatsächlich löscht. Apple verlangt dies für Apps mit Registrierung.
Datenbank
- Migrationen aus
architecture.md, eingecheckt, über ein Skript ausgeführt. - Zugriffsregeln für jede Tabelle: Row-Level-Security-Richtlinien bei Supabase oder die Autorisierungsfunktion, die in jeder Abfrage aufgerufen wird. Testen: Ein zweiter Benutzer darf keine Daten sehen.
- Seed-Skript mit realistischen Testdaten (keine echten Personen).
- Backups aktiviert (die täglichen Backups des Hosts zählen, prüfen, ob sie aktiviert sind).
Zahlungen
- Stripe Checkout für die Anmeldung zu einem Tarif, das Kundenportal für Änderungen und Kündigungen. Keine Kartenformulare bauen.
- Webhooks: Signatur verifizieren, Ereignis-ID speichern, jeden Handler idempotent machen (Stripe wiederholt). Behandle
checkout.session.completed,customer.subscription.updated,customer.subscription.deleted,invoice.payment_failed. - Der Abonnementstatus lebt in Ihrer Datenbank, wird von Webhooks aktualisiert und von Ihrer App gelesen. Niemals dem Client vertrauen.
- Kündigung ist ein Klick. Schwierig kündbare Abrechnung ist die häufigste Beschwerde über die meisten Apps und in vielen Ländern illegal.
E-Mail und Jobs
- Transaktions-E-Mails über Resend oder Postmark von Ihrer eigenen Domain. Vorlagen werden neu geschrieben.
- Jobs für alles Zeitbasierte (Erinnerungen, Zusammenfassungen, Synchronisation, Bereinigung) mit Wiederholungen und einer Dead-Letter-Queue. Zeiten in UTC, Anzeige in der Zeitzone des Benutzers.
Integrationen
Für jede Integration in der Feature-Matrix: die offizielle API, die benötigten OAuth-Bereiche (so wenige wie möglich), der Überprüfungsprozess des Anbieters, Ratenbegrenzungen. Google-Bereiche wie Kalender benötigen vor der öffentlichen Veröffentlichung die OAuth-Überprüfung von Google, die Wochen dauert. Frühzeitig damit beginnen und dies in backend.md vermerken.
Sicherheits-Checkliste
- Geheimnisse nur in Umgebungsvariablen,
.env*in.gitignore, nichts in Client-Bundles - Eingaben serverseitig validieren (zod oder ähnlich) für jede Route
- Autorisierung bei jedem Lese- und Schreibzugriff geprüft, mit einem zweiten Benutzer getestet
- Ratenbegrenzungen für Authentifizierung, Anmeldung und alles, was E-Mail oder SMS sendet
- Webhooks prüfen Signaturen
- Uploads: Größen- und Typenbeschränkungen, Auslieferung von einer separaten Domain oder einem separaten Bucket
- Keine Benutzerdaten in URLs oder Logs
- Abhängigkeiten auditieren (
npm audit) - Datenschutzerklärung listet jeden Verarbeiter auf (Stripe, Resend, Host, Analysetools)
Ausgabe
Funktionierende Authentifizierung, Datenbank, Zahlungen im Testmodus, E-Mail und die Integrationen, .env.example, replica/backend.md mit der abgehakten Checkliste und aktualisierte Feature-Matrix-Zeilen. Nächstes: /replica-test.