- New-page flow: slug placeholder shows the slug derived live from the title (placeholders keep browser-default styling; slug values no longer muted). Committing PUTs empty markdown, which now creates an empty page rendering with its title instead of 404, then hands over to the page editor (CodeMirror focuses on mount) - Saving never deletes: REST PUT and WS save store empty content as an empty page; deletion is the page editor's explicit choice — saving trimmed-empty text issues a REST DELETE - Fonts: add Cormorant (variable 300-700, normal+italic) to the serif picks, replacing single-weight Gloock; Playfair Display files kept on disk but not offered
Pagerite
A single-user CMS/blog. FastAPI serves HTML rendered in Python with html5tagger, content is persisted in a kanta database and rendered on the fly per request. Vue is used only for interactive bits (the editing tools), not for the public pages.
Running
uv run pagerite # serves the built frontend
uv run scripts/devserver.py # dev mode with auto reloads (no build needed)
The database lives in pagerite.kantadb in the working directory
(PAGERITE_DB overrides). On startup, demo pages from pagerite/seed.py
are added only if missing.
Editing
Click the 🖊️ pen on any page: the article pen opens the page editor (Markdown with live server-rendered preview over a WebSocket), the banner pen opens the site editor (site brand, banner HTML, and the page structure tree). Everything saves immediately — no save buttons.
See docs/design-principles.md for the design and AGENTS.md for the
development conventions.