Zum Inhalt springen

1Architektur

2Setzkasten folgt der Hexagonalen Architektur (Ports & Adapters). Das bedeutet: klare Grenzen, austauschbare Adapter, testbare Logik.

Packages3

@setzkasten-cms/core4

5Schema-Definition, Feldtypen, Validation (Zod), Serialization, Commands, Events, Port-Interfaces.

6@setzkasten-cms/ui

React-UI: Provider, FormStore (Zustand), Field Renderers, EntryForm, Hooks, Proxy-Adapter.

@setzkasten-cms/github-adapter

7ContentRepository-Implementation via GitHub API. Octokit, TreeBuilder, atomic commits.

@setzkasten-cms/auth

GitHub + Google OAuth via Arctic. Session-Management, Allowed-Emails-Filter.

@setzkasten-cms/astro

Astro Integration: Admin SPA, Auth Routes, GitHub Proxy, Preview Handler.

454555

555

8Ports (Interfaces)

9Alle externen Abhängigkeiten werden durch Ports abstrahiert. Die UI kennt nur die Interfaces – nie die konkrete Implementierung.
Port Methoden Adapter
10ContentRepository listEntries, getEntry, saveEntry, deleteEntry, getTree GitHubContentRepository, ProxyContentRepository, MockRepository
AuthProvider 11getSession, getLoginUrl, handleCallback, logout GitHubAuth, GoogleAuth, MockAuth
AssetStore upload, delete, list, getUrl ProxyAssetStore, MockAssets
5455 55 55

12Datenfluss

Schema FormStore ContentRepository GitHub API Git Commit
Schema definiert Felder → FormStore verwaltet Zustand → Repository persistiert → GitHub committet

Design-Prinzipien

Dependency Inversion

13UI hängt nur von Ports ab, nie von konkreten Implementierungen.

Schema-First

Alles leitet sich vom TypeScript-Schema ab – Typen, UI, Validierung.

Result Pattern

Keine Exceptions. Alle Operationen geben Result<T> zurück.

14Atomic Commits

Content + Assets werden als ein Git-Commit gespeichert.

Original Filenames

Upload-Dateien behalten ihren Namen. Kein Hashing, kein Renaming.

Zero Lock-in

15Content lebt im Git-Repo. Kein externer Service, keine Datenbank.