-
Notifications
You must be signed in to change notification settings - Fork 0
Operational Architecture
Sardine is where the site is managed; the public site is served elsewhere. Publication is a cycle, never a one-off export: edit in the panel → build → publish to the configured destination → the destination serves the public site → further changes republish to the same destination.
flowchart LR
A[Admin panel<br/>editors, workflow, preview] --> B[(Editorial storage<br/>SQLite / PostgreSQL / MySQL / MSSQL)]
B --> C[Deterministic build<br/>same content, same bytes]
C --> D[Deployment target / provider<br/>host extras + transport]
D --> E[Public hosting<br/>SWA, Nginx, S3, Pages, Netlify, …]
E -.->|readers| F((Public site))
A -->|republish after every change| C
| Piece | Role | Notes |
|---|---|---|
| Admin panel | Where content is created, edited, reviewed and published | Never needs to serve the public site; can live on a laptop or private network |
| Editorial storage | The working store behind the panel | Four engines, one conformance-tested contract; the portable JSON/Markdown export stays the source of truth |
| Build | Editorial state → static artifact | Deterministic: same content + same clock → identical bytes; validation gates publication |
| Deployment target / provider | Shapes and transports the artifact | Targets swa, nginx, generic and providers filesystem, swa bundled; extensions add destinations (sardine-target-<name>, sardine-deploy-<name>) |
| Public hosting | Serves the site | Azure Static Web Apps, your own Nginx, S3/CloudFront, GitHub Pages, Netlify, any static host |
All five phases ship for two reference providers behind one contract: filesystem/Nginx (immutable releases, atomic symlink activation, health check with automatic rollback) and Azure Static Web Apps (authenticated upload, deployment tracking, health verification, rollback by re-sending a kept release; the token lives only in the environment). Publish, unpublish and scheduled windows deploy automatically; every operation is audited.
Providers resolve through a registry: [deploy] provider = "<name>"
selects one, the contract version and interface are validated at
selection time, and the panel adapts to each provider's declared
capabilities. Extensions ship further destinations (S3, GitHub Pages,
Netlify, SSH…) via Extension.deploy_providers with zero core
changes — a conformance suite runs the contract's rules against any
provider. Authoring guide and host-specific examples: the repository's
docs/DEPLOYMENT.md.
Sardine CMS — multilingual, static-first CMS framework · Repository · Live demo · Apache-2.0