__holm_name__, Welcome

A fresh holm application: file-system routing, server-rendered Python components, dynamic updates over HTMX.

The stack

Every piece is a well-documented tool. Click through for the details.

Where things live

See the design page or DESIGN.md for more details.

app/

The application package, the one holm walks. A page.py becomes a route, a layout.py wraps pages, and actions.py defines endpoints that return HTML fragments. The rotating greeting in the title comes from app/actions.py.

components/

BasecoatUI as pure Python htmy components, copied into the project by htmui. They live in your repo, so you can open and change them. They sit outside app/ so holm never treats them as routes. See the showcase.

assets/

The source files for the stylesheet and the JS bundle. Edit app.css for Tailwind and your own CSS, and app.js for HTMX, Basecoat, and your own scripts. Watchers and build tasks compile these into static/.

static/

The compiled stylesheet and JS bundle, served at /static. Don't edit these files; change assets/ and rebuild. The minified app.css and app.js belong in the repo so a fresh checkout can run and deploy without a production build.

Develop

One command starts everything: the app with auto-reload, plus watchers rebuilding the dev stylesheet and JS bundle on every save. Edit, save, refresh.

uv run poe start          # http://localhost:5000

uv run poe dev            # app only, dev assets
uv run poe preview        # app only, minified assets (what gets deployed)

Checks run with ruff and mypy (strict); uv run poe check runs them all. Deployments serve the minified builds, so run uv run poe build first, then any FastAPI host works. Vercel and FastAPI Cloud need no configuration. The details are on the design page.

Explore

Two more pages come with the application.