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.
PortMethodenAdapter
10ContentRepositorylistEntries, getEntry, saveEntry, deleteEntry, getTreeGitHubContentRepository, ProxyContentRepository, MockRepository
AuthProvider11getSession, getLoginUrl, handleCallback, logoutGitHubAuth, GoogleAuth, MockAuth
AssetStoreupload, delete, list, getUrlProxyAssetStore, MockAssets
54555555

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.