Tech-Stack
This site is a static Hugo project with no JavaScript and no framework. Here is how it fits together.
Static by default
Every page is generated ahead of time by Hugo and served as plain HTML, CSS, and images. There is no application server and no client-side JavaScript, so there is nothing to fail at runtime and nothing to hydrate.
What lives in the repository
content/— Markdown: the posts, the standalone pages, and the imageboard.layouts/— the templates, plus render hooks for images and tables.assets/— the stylesheet and the social card, processed and fingerprinted by Hugo Pipes.data/— structured data such as the licenses list.static/— files served verbatim, like the fonts and the favicon.
How it ships
The repository is the single source of truth. Pushing the main branch triggers
the deploy: Uberspace receives the push, runs Hugo, and publishes the built
public/ directory, which its Caddy front end serves over HTTPS with
zstd compression. The same push mirrors the repository to GitHub.
The image pipeline
Images are the heaviest thing a site like this ships, so they get their own
stage in the build. A raster image lives in its post’s page bundle and is
referenced with plain Markdown; the render hook
(layouts/_default/_markup/render-image.html) turns it into a responsive
<picture> — an AVIF <source> and a WebP <img>, each a srcset of widths
up to the image’s natural size, with sizes, intrinsic width/height (so
nothing shifts), loading="lazy", and decoding="async". Nothing is upscaled,
and an image is not fetched until it scrolls into view. The imageboard reuses the
same idea for its thumbnails.
Link previews get the same care in miniature. scripts/make-og-card.py draws the
Open Graph card from the IBM Plex Mono glyph outlines and writes assets/og.png;
the build then fingerprints it, so the og:image URL changes whenever the card
does and messengers refresh their cached preview instead of serving a stale one.
Small, fast, and accessible on purpose
- Fonts are self-hosted, subset, and (for Inter) instanced to the weights in use.
- Images and the social card are processed ahead of time — nothing is resized or transcoded in the browser.
- The whole thing targets WCAG 2.2 Level AA, with system-preference theming.
The diagram was generated with the diagram-design
skill.