nhanaz.io.vn
Personal blog, project archive, and living portfolio. Built with plain HTML, CSS, and a tiny bit of JavaScript, then validated and deployed to GitHub Pages with GitHub Actions.
Public machine-readable resources
- Live site: https://nhanaz.io.vn/
- Agent guidance: https://nhanaz.io.vn/agent.md
- Short and full context: https://nhanaz.io.vn/llms.txt and https://nhanaz.io.vn/llms-full.txt
- Resource schema and counter endpoint: https://nhanaz.io.vn/openapi.json
- Developer notes: https://nhanaz.io.vn/developers/
- Agent discovery: https://nhanaz.io.vn/.well-known/ai-catalog.json and https://nhanaz.io.vn/.well-known/agent-skills/index.json
The site has no account, authentication flow, or endpoint for changing content. It also exposes read-only MCP at /mcp, A2A at /a2a, A2UI at /a2ui, and NLWeb-compatible archive search at /ask. The OpenAPI document describes those surfaces, static GET resources, and the small public page-view counter at /api/views.
Preview locally
From the repository root, run any static file server, for example:
python -m http.server 4173
Then open http://localhost:4173.
Add a bilingual post
- Create the Vietnamese page in
posts/<slug>/index.htmland its manually edited English pair inen/posts/<english-slug>/index.html. - Update the title, description, canonical URL, dates, category, article body, and reciprocal
hreflanglinks on both pages. - Add the post to the relevant home and blog indexes, then update both search indexes in
assets/js/site.js. - Update
sitemap.xml,llms.txt,llms-full.txt, andentity.jsonwhen the new content changes those sources. - Run the validation commands below before deployment.
Update personal information
- Homepage copy:
index.html - Biography and contact:
about/index.html - Project case studies:
projects/index.html - Global styling:
assets/css/site.css - Space Grotesk files:
assets/fonts/
Deploy
Push to main. The workflow in .github/workflows/static.yml publishes the repository to GitHub Pages. The custom domain is preserved in CNAME.
Before pushing, run:
node --check assets/js/site.js
node --check assets/js/theme.js
node --check scripts/build-english.mjs
node --check scripts/check-seo.mjs
node --check scripts/build-vercel.mjs
node scripts/build-english.mjs
node scripts/check-seo.mjs
node scripts/build-vercel.mjs
git diff --check
Older versions of the site are preserved on the archive/legacy-notebook and archive/legacy-sunflower branches.
Security issues should be reported privately as described in SECURITY.md.
License
The site code is available under the MIT License. The bundled Space Grotesk font files remain under the SIL Open Font License 1.1. Personal writing and images are not relicensed by the MIT file unless a page says otherwise.