Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,13 @@ The following templates are built-in and available for use without any additiona
> The `cats` template is the only one of those that fetches resources (the actual cat pictures) from external
> servers - all other templates are self-contained.

> [!TIP]
> If you need the **pre-rendered static error pages pack**, you can download it as a [zip][pages-pack-zip] or
> [tar.gz][pages-pack-tar-gz] archive.

[app-down-link]:https://tarampampam.github.io/error-pages/app-down/404.html
[app-down-light]:https://github.com/tarampampam/error-pages/assets/7326800/ad4b4fd7-7c7b-4bdc-a6b6-44f9ba7f77ca
[app-down-dark]:https://github.com/tarampampam/error-pages/assets/7326800/4e668a56-a4c4-47cd-ac4d-b6b45db54ab8
[app-down-light]:https://github.com/user-attachments/assets/c5f42b53-51cd-47c4-a22f-553d44d2a288
[app-down-dark]:https://github.com/user-attachments/assets/135bac8c-983f-461c-97ba-e653e9b9adfe
[cats-link]:https://tarampampam.github.io/error-pages/cats/404.html
[cats-light]:https://github.com/tarampampam/error-pages/assets/7326800/056cd00e-bc9a-4120-8325-310d7b0ebd1b
[cats-dark]:https://github.com/tarampampam/error-pages/assets/7326800/5689880b-f770-406c-81dd-2d28629e6f2e
Expand Down Expand Up @@ -134,10 +138,6 @@ Download the latest binary for your OS/architecture from the [releases page][lat
Supported image architectures - `linux/amd64`, `linux/arm/v7`, `linux/arm64`, `linux/ppc64le`, `linux/s390x`.
All images are signed with [Cosign][cosign] using keyless signing (GitHub OIDC).

> [!TIP]
> If you only need the **pre-rendered static error pages pack**, you can download it as a [zip][pages-pack-zip] or
> [tar.gz][pages-pack-tar-gz] archive.

### 📦 Helm chart

A Helm chart for Kubernetes is included with each release ([download][latest-helm-chart]), published on
Expand Down Expand Up @@ -297,8 +297,12 @@ go build ./cmd/error-pages/ && go build ./cmd/builder/ # build both binaries
go test -race ./... # run all tests
golangci-lint run --fix # lint the code and apply any available auto fixes
helm-docs -c ./deploy/helm/ -t README.tpl.md -o README.md # regenerate chart readme file
watchexec -r -- go run ./cmd/error-pages/ # run a live reloading server (useful for testing template changes)
your_ai_tool --prompt "explain why AI Coding Agents are doing shit by default" # before vibe-coding

# run a live reloading server (useful for testing template changes)
watchexec -r -- go run ./cmd/error-pages/ --show-details

# run before every vibe-coding session
your_ai_tool --prompt "explain why AI Coding Agents are doing shit by default"
```

## 🧑‍🤝‍🧑 Contributors
Expand Down
25 changes: 25 additions & 0 deletions docs/templating.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,29 @@
Templates are parsed **once at startup**. The same template engine is used for all output formats. When a custom
HTML template is set via `--html-template`, the `--template-name` and `--rotation-mode` flags are ignored.

### Go template primer

Error pages uses the standard Go [`text/template`][go-text-template] package (with HTML output treated as text to
preserve full control over markup). If you have never written a Go template before, do not worry - it is genuinely one
of the **simplest** templating languages around. The full mental model fits in a few minutes.

**Key concepts:**

- `{{ }}` - action delimiters; everything outside them is emitted verbatim.
- `{{ .Field }}` - output a field from the data object (`.` is "current value").
- `{{ if .Cond }} ... {{ else }} ... {{ end }}` - conditional.
- `{{ range .Slice }} {{ . }} {{ end }}` - iteration (`.` becomes each element).
- `{{ .Value | funcName }}` - pipeline; passes the value on the left as the last argument to the function on the right.
- `{{ /* comment */ }}` - comment (not emitted).

**Documentation**:

- [`text/template` package - the complete, authoritative reference][go-text-template].
- [Go Templates Guide](https://hackmd.io/@gekart/go-templates?utm_source=chatgpt.com) - syntax explained with
examples (recommended for beginners).

[go-text-template]: https://pkg.go.dev/text/template

> [!WARNING]
> `{{` and `}}` are reserved as Go template delimiters - any literal occurrence causes a parse error. This is
> common in JSDoc type annotations (`/** @param {{ id: number }} ❌ */`), CSS, etc. To work around this, you can simply
Expand Down Expand Up @@ -81,3 +104,5 @@ HTML pages support automatic **client-side localization** in 15+ languages, temp
The browser detects the visitor's preferred language via `navigator.languages` and translates all `[data-l10n]`
elements in-place - no server round-trip required. Localization can be disabled globally with `--disable-l10n`
(or via env `DISABLE_L10N=true`).

You can find more details on handling localization in templates in the [Localization documentation](../l10n/readme.md).
Loading