# AGENTS.md — Thanwer's Blog ## Project Hugo blog (multilingual EN + PT-BR) using the **anubis2** theme as a git submodule (`themes/anubis2`, v1.6.0). Deployed via rsync to a VPS. ## Commands ```bash hugo server # dev server at localhost:1313 hugo # build to ./public/ (no minify) ./deploy.sh # pre-commit → hugo --minify → rsync pre-commit run --all-files # quality check (lint, spell, links) ``` ## Quality toolchain - **pre-commit** — runs on `./deploy.sh` or manually via `pre-commit run --all-files`. Includes: YAML/TOML/JSON check, EOF fixer, trailing whitespace, large file check, markdownlint, cspell (EN + PT-BR), lychee (link checker). - **markdownlint** — config: `.markdownlintrc`. MD013 (line-length) disabled. - **cspell** — config: `.cspell.config.yaml`. Adds `@cspell/dict-pt-br` via `additional_dependencies`. Custom word list for technical terms. - **lychee** — config: `.lychee.toml`. Run locally with `--root-dir static` to resolve `/images/...` links. Excludes social media domains and `sshaudit.com`. All quality tooling must pass before deploy. No separate test framework. ## Content conventions - **Posts**: `content/posts/.md` (EN), `content/posts/.pt.md` (PT-BR) - **Images**: `static/images/` — referenced as `/images/` in markdown - **PT translations** set `canonical = "/posts/"` in frontmatter - **`lastmod`** must use bare TOML datetime (no quotes): `lastmod = 2026-05-09T00:00:00Z`. - **Archetype**: `hugo new posts/.md` → `archetypes/default.md` - **Tags** only (no categories): `tags = ["GNU/Linux", "Tools"]` ## Configuration quirks - Theme requires **all lowercase keys** under `params.anubis2`: `colortheme`, `enablecolorthemeswitcher`, `readnextposts`, `socialicons`, etc. See `themes/anubis2/PARAMS.md`. - `[params.anubis2.services.umami]` keys are lowercase: `id`, `url`. - Analytics inject only in production (`hugo.IsProduction`). Test locally: `hugo server --environment production`. - Config uses modern Hugo keys: `locale` (not `languageCode`), `label` (not `languageName`). - `enableGitInfo = true` — `.Lastmod` derives from git; template prefers `.Params.lastmod` when set. ## Frontmatter reference ```toml date = 2024-10-26T16:59:23-03:00 lastmod = 2026-05-09T00:00:00Z title = 'Post Title' description = "One-line summary for SEO and RSS" tags = ["tag1", "tag2"] canonical = "/posts/original-post" # PT translations only ``` ## Deprecated keys (avoid) - `languageCode` → `locale`; `languageName` → `label`; `.Site.LanguageCode` → `.Site.Language.Locale` ## Theme overrides (`layouts/` shadows theme) - `layouts/partials/head.html` — canonical from `Params.canonical`, Umami analytics (prod only) - `layouts/partials/post-info.html` — prefers `.Params.lastmod`, shows "[Last modified]" when different from date - `layouts/partials/footer-extra.html` — Ko-fi widget - `layouts/robots.txt` — custom sitemap for both languages