blog/AGENTS.md

3.0 KiB

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

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/<slug>.md (EN), content/posts/<slug>.pt.md (PT-BR)
  • Images: static/images/<filename> — referenced as /images/<filename> in markdown
  • PT translations set canonical = "/posts/<en-slug>" in frontmatter
  • lastmod must use bare TOML datetime (no quotes): lastmod = 2026-05-09T00:00:00Z.
  • Archetype: hugo new posts/<slug>.mdarchetypes/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

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)

  • languageCodelocale; languageNamelabel; .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