Repository navigation
Home
no-php-no-cry is the source of a personal site and work journal built with Hugo: no PHP, no database, no third-party scripts, and a build that fails when it breaks its own rules. It replaced a WordPress site, and it is published so others can read it, learn from it and reuse it.
These pages are written in the repository under docs/wiki/, so they change in
the same pull request as the code they describe. The README is the short
version: README.
| Page | What it covers |
|---|---|
| Getting started | Install the pinned Hugo, preview, build, run the checks. |
| Architecture | How the repository, templates, data and output fit together. |
| Writing a post | From an empty folder to a pull request. |
| Journal entries | The work journal section and how it differs from posts. |
| Images and alt text | The image render hook and every rule it enforces. |
| Headline images | The optional featured image, thumbnail and social card. |
| Share links | The Share row under a post, its targets and its one script. |
| Search and tags | The no-JavaScript search page, its pinned script and tags. |
| Build checks and budgets | Every check, what it fails on and the size budget. |
| Deploy overview | CI, the deploy gate, staging versus production. |
| Migrating from WordPress | The converter, redirects and the scrub pass. |
| Performance | Page weight, fonts, images and the browser measurements. |
| Accessibility | What is built in, what is checked and what is not proven. |
| Contributing | Issues, pull requests and the rules that never bend. |
| FAQ | Short answers to common questions. |
The repository is meant to be read in an order. Each stop names the idea it teaches. Paths are relative to the repository root.
| # | Read | The idea it teaches |
|---|---|---|
| 1 |
.hugo-version, scripts/check-hugo-version.sh
|
Pin the toolchain and check the pin, so every build is the same build. |
| 2 | hugo.toml |
Site configuration as the contract: output formats, taxonomies, one environment switch for staging versus production. |
| 3 |
layouts/baseof.html, layouts/single.html, layouts/list.html
|
Templates written from scratch instead of a theme: one stylesheet per page, native HTML for the menu and accordions. |
| 4 |
layouts/_markup/render-image.html, layouts/_partials/featured-image.html
|
Make bad input a build error. An image without alt text cannot be published. |
| 5 |
archetypes/posts/index.md, scripts/test-archetype.sh
|
Guardrails for authors: the starting file explains itself, and a test proves a post made from it builds. |
| 6 | static/_headers |
A Content Security Policy that allows only the site's own files. |
| 7 |
scripts/check-output.sh, scripts/artifact-rules.sh
|
Turn the policy into a checker that reads the built files. |
| 8 | scripts/test-check-output.sh |
Negative tests: every rule has a case that must fail, so a check that stopped checking is caught. |
| 9 |
scripts/check-budget.py, scripts/browser-gate.py
|
Measure page weight and run a real browser with an accessibility engine in CI. |
| 10 |
brand/tokens.json, scripts/gen-tokens.py, scripts/check-contrast.py
|
Generate the stylesheet tokens from one source and compute the contrast ratios. |
| 11 |
.github/workflows/ci.yml, docs/ci-parallel.md
|
Reusable workflows pinned by commit, one required check named CI green. |
| 12 |
.github/workflows/deploy.yml, scripts/wait-for-ci-green.sh, scripts/check-site-artifact.sh
|
Deploy a prebuilt folder only after the checks passed on that exact commit. |
| 13 | tools/wxr2hugo/ |
Migrate from WordPress with a scrub pass that stops on private data. |
| 14 |
scripts/gate.sh, scripts/test-gate.sh
|
One local command that runs what CI runs, and a test of that command. |
| 15 |
analytics/, functions/, docs/analytics-deploy.md
|
A privacy-first page-view counter that is built and tested but not deployed, and why. |
If you only have an hour, read steps 4, 6, 7 and 8: they show the whole idea (rules in the build, with tests that prove the rules bite).
The site is in alpha and runs on a staging host while it is checked against the old WordPress site. Features that exist only in an open pull request are marked "lands with PR" on their page, and that note is removed when the pull request merges.
Code is Apache-2.0, written content including this wiki is CC BY 4.0, and the brand art is all rights reserved. See the BRAND.md notice.