Sardine CMS admin panel: FastAPI API + server-rendered UI
Project description
cms-admin
The Sardine CMS admin panel: an authenticated FastAPI application serving both
the admin API and the server-rendered UI (ADR-0013). It drives cms-core,
cms-validation and cms-build through their public APIs — storage comes
from create_storage(url), so every supported engine works unchanged.
pip install -e apps/admin
SARDINE_STORAGE_URL="sqlite:///content.db" uvicorn --factory cms_admin.app:create_app
There are no default credentials — create the first account with the CLI,
then sign in at /login:
cms admin create-user editor-in-chief -p my-project --role admin
The UI is built on AdminLTE 4 (MIT, vendored verbatim with its license —
ADR-0017), used CSS-only: the admin ships zero JavaScript and serves
everything itself, no CDN. A small overlay adds the brand (local
Inter/Newsreader) and accessibility fixes. The dashboard shows
content by workflow status, the translation coverage matrix and a live
validation report. Articles and pages are edited in the browser: EN source
plus a side-by-side editor per translation, with state indicators from the
checksum model and a preview rendered by the builder's own Markdown
renderer (raw HTML disabled). The media library uploads with server-side
validation (MIME sniffed from bytes, size limit, parsed image dimensions),
manages mandatory EN + translatable alt text, and refuses to delete assets
that articles or sections still reference. The workflow moves content through
draft → review → published → archived with each transition owned by a rung
of the role ladder; publishing runs the validation gate. The Publishing
panel previews into /preview/ and builds/exports the project output with
target extras, with every run recorded on the dashboard.
Configuration is environment-only (no config files with secrets):
| Variable | Meaning | Default |
|---|---|---|
SARDINE_STORAGE_URL |
Storage URL for create_storage |
sqlite:///content.db |
SARDINE_ADMIN_SESSION_HOURS |
Session lifetime in hours | 12 |
SARDINE_ADMIN_COOKIE_SECURE |
Set 0 only for plain-http local dev |
1 |
SARDINE_MEDIA_DIR |
Media upload directory (the project's) | media |
SARDINE_ADMIN_UPLOAD_MAX_MB |
Upload size limit in MB | 10 |
SARDINE_PROJECT_DIR |
Project directory (sardine.toml) |
. |
SARDINE_ADMIN_PUBLISH_GATE |
Set 0 to publish despite validation errors |
1 |
The full admin guide — configuration, roles, workflow, publishing, security model — is docs/ADMIN_GUIDE.md (anti-drift-checked). Milestone 3 status and the phased plan live in docs/PLAN.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sardine_cms_admin-0.1.0.tar.gz.
File metadata
- Download URL: sardine_cms_admin-0.1.0.tar.gz
- Upload date:
- Size: 532.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec3c04836ac08c2285a3e98ae2af7f17f59ab1407cd2ba03fea73d94412aea12
|
|
| MD5 |
b7b7a380435fb3d217880dd451d90df2
|
|
| BLAKE2b-256 |
74812d1aea0e90ed6f49017bc109b84c133a4be8f66d7a519cb225f40cdc67fa
|
Provenance
The following attestation bundles were made for sardine_cms_admin-0.1.0.tar.gz:
Publisher:
release.yml on ph7x-Systems/sardine-cms
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sardine_cms_admin-0.1.0.tar.gz -
Subject digest:
ec3c04836ac08c2285a3e98ae2af7f17f59ab1407cd2ba03fea73d94412aea12 - Sigstore transparency entry: 2195716470
- Sigstore integration time:
-
Permalink:
ph7x-Systems/sardine-cms@d4102efd533f15e7401b53de4cb5013e30cbbd3e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ph7x-Systems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d4102efd533f15e7401b53de4cb5013e30cbbd3e -
Trigger Event:
push
-
Statement type:
File details
Details for the file sardine_cms_admin-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sardine_cms_admin-0.1.0-py3-none-any.whl
- Upload date:
- Size: 549.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5691df62560e68378c222c1b9d81c1703ff2eda25158d6e7356939d570eab0d1
|
|
| MD5 |
72de85474a113b67c3a11735875dfc36
|
|
| BLAKE2b-256 |
f684aade58407f3351d6c20e6869aa6e663cfc33eac1b7bba24c99cb5e2669e1
|
Provenance
The following attestation bundles were made for sardine_cms_admin-0.1.0-py3-none-any.whl:
Publisher:
release.yml on ph7x-Systems/sardine-cms
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sardine_cms_admin-0.1.0-py3-none-any.whl -
Subject digest:
5691df62560e68378c222c1b9d81c1703ff2eda25158d6e7356939d570eab0d1 - Sigstore transparency entry: 2195716474
- Sigstore integration time:
-
Permalink:
ph7x-Systems/sardine-cms@d4102efd533f15e7401b53de4cb5013e30cbbd3e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ph7x-Systems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d4102efd533f15e7401b53de4cb5013e30cbbd3e -
Trigger Event:
push
-
Statement type: