- Replace the hugo-theme-stack submodule with the tsuki theme vendored in themes/tsuki; drop .gitmodules - config/_default/hugo.yml: theme: tsuki - config/_default/permalinks.yml: keep /p/:slug/ for posts to preserve existing URLs (matches Stack default) - config/_default/markup.yml: add parser.autoHeadingIDType: github-ascii for ASCII heading slugs - config/_default/params.yml: add tsuki-required keys (search.enable, home.recentPostsCount); restructure comments.giscus to tsuki schema (repoId/categoryId lowercase, theme, lang, etc.). Stack-only params kept for now in case of rollback (silently ignored by tsuki). - Move content/page/archives -> content/archives (tsuki uses kind=section) - Move content/page/search -> content/search (drop json output; Pagefind index built in CI replaces Fuse.js search) - Add data/profile.yaml driving the homepage hero - Copy assets/img/avatar.png -> static/img/ for tsuki's relURL resolution Verified: 717 pages build clean, 280 aliases preserve old URLs. Posts at /p/<slug>/, comments + TOC + archives + search all render.
blog
Source of miti99.com — personal blog (VN/EN) built with Hugo and the Stack theme.
Quick start
git submodule update --init --recursive
hugo server -D
Site available at http://localhost:1313.
Content structure
Posts live under content/post/YYYY/MM/DD/index.md. Each post is a Hugo leaf bundle — images and assets sit next to index.md in the same directory.
content/
post/
2024/
03/
15/
index.md ← post content (Vietnamese / English)
cover.jpg ← optional cover image
page/ ← standalone pages (about, projects, …)
Theme customization
Theme config lives in config/ (Hugo config directory split). Key overrides:
config/_default/params.toml— sidebar, avatar, footer, color schemeconfig/_default/menu.toml— navigation linksassets/— custom CSS/JS overrides loaded on top of the Stack themelayouts/— template overrides (add a file here to override any Stack partial)
The Stack theme is pulled in as a git submodule under themes/hugo-theme-stack/.
Working with AI tools
This repo runs from Claude Code, OpenCode, or Codex off one shared engine (scripts/newsletter/, Node — run npm ci once, then node scripts/newsletter <command>; see docs/newsletter/engine-commands.md) and one instruction file (AGENTS.md). Repository-scoped Codex skills use the official .agents/skills/ format; no installer is required. Setup, invocation per tool, and how to pick one and remove the rest: see docs/multi-tool-usage.md.
License
Apache-2.0 — see LICENSE.