Blog
Popular this month
- 1One Postgres, Two Lives: Neon in Production, Docker in Local Dev
- 2An RSS Feed in the Next.js App Router, in About Twenty Lines
- 3A PT/EN Toggle Without a Second Content Pipeline
- 4SPEC.md as the Source of Truth on a One-Person Project
- 5DNS-Only vs. Proxied on Cloudflare: Why the Orange Cloud Is Still Off
18 August 2026
Using an AI Pair Programmer as a Design Partner, Not Just an Implementer
The most useful sessions were not the ones spent writing code. They were structured interviews that talked a vague feature idea into a decision — or into the trash.
14 August 2026
Commit Conventions That Scale Down to a Team of One
[Type] Brief description, no commit body, no Co-Authored-By. A format that looks like it is for other people's benefit turns out to help the one person reading it back.
11 August 2026
Auto-Merge on Green CI: How Much Do You Trust Your Own Pipeline?
Every PR to dev-hub merges and deploys automatically once checks pass, with no manual approval step. That only works because of what "green" is required to mean.
7 August 2026
What Changes When a Personal Site Moves to a €4 Hetzner Box
A CX23 in Helsinki instead of a managed platform. More control, more responsibility, and a monthly bill that stops scaling with traffic.
4 August 2026
One Postgres, Two Lives: Neon in Production, Docker in Local Dev
Neon's serverless Postgres backs the live site; Docker Compose backs local iteration. What that split buys, and where dev-hub actually deviates from it.
31 July 2026
DNS-Only vs. Proxied on Cloudflare: Why the Orange Cloud Is Still Off
The proxy toggle looks like a free upgrade — CDN, DDoS protection, hidden origin IP. Turning it on for a single-server personal site is not free.
28 July 2026
The Dollar Sign That Broke My Bcrypt Hash
A bcrypt hash stored in .env stopped matching after a routine restart. The cause was not the hash — it was Next.js expanding $ as a shell-style variable reference.
24 July 2026
A PT/EN Toggle Without a Second Content Pipeline
Portuguese visitors get translated site chrome, not a second copy of every post and project. Here is the line drawn between "translated" and "not."
21 July 2026
An RSS Feed in the Next.js App Router, in About Twenty Lines
A /rss.xml route handler over the same published-posts query the blog already uses. Cheap to add now, easy to regret skipping later.
17 July 2026
SPEC.md as the Source of Truth on a One-Person Project
A living spec file with a dated changelog of decisions replaces the alignment meeting when the whole team is one person plus an AI agent.
14 July 2026
I Killed an AI Feature Before Writing a Line of Code
A "video digest with AI" idea, reframed twice under a structured interview, collapsed into "this is just a Post with extra steps." Here is how the interview got there.
10 July 2026
Why My Blog API Requires Login Even to Read
Unlike /api/projects, GET /api/posts is auth-gated. The reasoning is about what a draft is allowed to leak, not about performance or caching.
7 July 2026
One Field, Two States: Modeling Draft and Published with a Single Nullable Date
Why the Post model uses a single nullable publishedAt instead of a published boolean plus a date field, and what it saves at query time.