vi

blog

Blog

Notes on web development: Next.js, WordPress, performance, and the places I tripped up on real projects.

A dark dashboard with a 24-hour response time chart showing one spike, next to uptime, average TTFB and days of SSL left

Building my own uptime dashboard for 30 client websites

Clients called to say their site was down before I knew. How I track uptime, response time and SSL expiry for 30 sites without producing a pile of junk alerts.

Next.jsNode.jsTailwind CSS
Published
read more →
A four-step pipeline from content/*.md through the gray-matter parser and computed fields to out/*.html, with the counts 1 route, 10 layouts, 0 servers

1 route, 10+ layouts: the architecture of a Next.js site run entirely on Markdown

This whole site renders from exactly 1 route file. The pipeline behind it: frontmatter split into sections, computed fields, a layout registry and collections.

Next.js 16MDXTailwind CSS
Published
read more →
A browser window at localhost:3000 with code lines, the version number going from 15 to 16 and a Turbopack bolt

Upgrading Next.js 15 to 16: Turbopack, static export and three snags

Notes from upgrading this site to Next.js 16: why I kept static export for Nginx, where Turbopack is stricter than webpack, and the three bugs that ate the most hours.

Next.js 16Tailwind CSSTurbopack
Published
read more →
Diagram of KiotViet sending webhooks to a Node.js sync service with a queue, which pushes prices, stock and products to three WordPress sites

Syncing KiotViet with WordPress: why I stopped calling the API directly

Three retail websites called the KiotViet API straight from PHP and all hit the rate limit of the same account. How I moved the integration out into a Node.js service in the middle.

Node.jsREST APIMySQL
Published
read more →
Four boxes in a row, Commands, Architecture, Rules and Scale + Memory, each with a blue check mark showing it was checked against the official docs

Writing a good CLAUDE.md: four rule groups and the real limits of Claude Code

CLAUDE.md works well when it is split into four clear groups: commands, rules, path-scoped architecture, and how to scale as the project grows. How to write each group within the real technical limits of Claude Code, with examples that run.

Claude CodeCLAUDE.mdAI AgentLLM
Published
read more →
A staircase of six phases from Python up to getting hired, next to a panel listing three shipped projects

A 12-month roadmap to AI Engineer, no Computer Science degree required

Six phases, and each one ships something that runs: Python, LLM APIs, RAG, agents, evals and a portfolio. A roadmap for developers moving into AI, with a section on the Vietnamese job market.

AI EngineerLLMRAGAI Agent
Published
read more →
Page 3 of 3