Skip to content

My New Website — How I Built It

This site is built the same way as Fabio Akita’s blog (source), with two changes: the helper scripts are Python instead of Ruby, and mise controls everything — tool versions, the Python environment and every task.

The stack

  • Hugo turns Markdown into static HTML. No database, no server.
  • Hextra is the theme: dark mode, search (Ctrl K), tags, RSS and code highlighting.
  • Netlify builds and publishes on every push to main.
  • mise pins Hugo, Go and Python, so my laptop, GitHub Actions and Netlify run exactly the same versions.

Three languages

Each post is one folder with one file per language:

content/2026/10/30/new-website-how-i-built-it/
├── index.en.md      → /en/2026/10/30/my-new-website-how-i-built-it/
├── index.es.md      → /es/2026/10/30/mi-nueva-web-como-la-hice/
└── index.pt-br.md   → /pt-br/2026/10/30/meu-novo-site-como-eu-fiz/

Hugo links the translations, so the language switch takes you to the same post.

The workflow

mise install                 # Hugo, Go, Python
mise run setup               # Python deps
mise run new "Post title"    # creates the 3 language files as drafts
mise run tags:search "ai"    # reuse existing tags
mise run dev                 # http://localhost:1313/en/
mise run check               # what CI runs: tags, indexes, tests, build
git push                     # Netlify publishes

The home page and the archive are generated by scripts/generate_index.py (Akita’s generate_index.rb, ported), and scripts/tag_catalog.py keeps tags consistent across the three languages.