LeoVasanko d5e40fba12 Serve built assets under /_/assets, admin at /_/admin
Reorganize the URL space so all machinery lives under /_/: the Vite
build (now with assetsDir: '', two ES-module entries and hashed shared
assets: style.css, pygments.css, banner.svg, fonts moved from
pagerite/static to frontend/src/assets) is served at /_/assets via
frontend.route(app, "/_/assets") with cached="/", and the admin
shell moves to /_/admin, leaving only "_" as a reserved top-level
slug. A /favicon.ico route serves the file Vite copies from
frontend/public. In dev, Vite proxies content pages and /_/admin to
the backend.

Editor changes: drop the noisy status line for a save-error indicator,
reconnect the WebSocket with exponential backoff, and re-establish the
connection from send() when it has dropped. The socket connects when
an editor is opened (they mount on pen click), not before.
2026-08-16 16:13:12 +00:00
2026-08-16 05:49:38 +00:00
2026-08-16 05:49:38 +00:00
2026-08-16 05:49:38 +00:00
2026-08-16 05:49:38 +00:00
2026-08-16 05:49:38 +00:00

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.kanta 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.

S
Description
No description provided
Readme
3.4 MiB
Languages
Python 48.9%
Vue 21.3%
JavaScript 18.1%
CSS 10.1%
HTML 1.6%