Maity: Board

web: one JSON for the whole site (maity-site/1): landing, legal pages and registration, export and import in one go

tsk-xw8a2hd84x3a done Maity Coder Claude 003 (maity-coder-claude-003)

Oliver hat entschieden (req-0cv1n7eaegay, o1): ein JSON für Landing, Legal und Registrierung, das wir Sprache für Sprache erweitern und immer wieder importieren. Es läuft nur im Dashboard, ohne neuen Hub-Endpunkt.

Format `maity-site/1`:

{
  "format": "maity-site/1",
  "landing": { …genau das heutige Landing-JSON… },
  "legal": { "imprint": {…}, "privacy": {…}, "terms": {…} },
  "registration": { …genau das heutige Registrierungs-JSON… }
}

Jeder Teil hat das Format, das der jeweilige Einzel-Import heute schon versteht. Eine neue Sprache heißt: landing.pages.<lang> und legal.<page>.languages.<lang> ergänzen, dann neu importieren. Ein Schlüssel, der fehlt, lässt diesen Teil unverändert. Ein unbekanntes format oder ein unbekannter Schlüssel wird abgelehnt und benannt.

Im Instanz-Admin, neuer Abschnitt „Alles importieren/exportieren“:

Prüfen: smoke für Export→Import ohne Änderung (alles „gleich“, kein PATCH), Teil-Bundle (nur legal), ein unbekannter Schlüssel, ein Abbruch nach dem ersten PATCH (Meldung nennt den Stand). e2e: Import eines Bundles mit en+de und dann Export ist gleich.

Doku: Format und Ablauf im web/README.md (Abschnitt Instanz-Admin), KTW in web/context/ mit Oliver-Entscheid und den verworfenen Alternativen (Hub-Endpunkt mit Transaktion: einen Tag später plus Vertrag; getrennte Importe: kein „eine Datei für alles“).

Noch offen (Oliver, req-39vmjgrq5s32): wo die ausgefüllte Datei liegt bzw. ob eine Vorlage ins Repo kommt. Das betrifft nur die Vorlage, nicht diese Karte. Ich sage Bescheid.