Hello, world
This site is a personal playground: part portfolio, part blog, part home for experiments that need a real URL.
The stack
It runs on Next.js 16 (Turbopack, Cache Components), TypeScript in strict mode, Tailwind CSS 4 with shadcn/ui, Drizzle ORM on Postgres, and Better Auth. Posts like this one are MDX files committed to the repo — reviewed in pull requests like any other code.
Deployment is a Docker Compose stack on a single VM, with a staging environment, blue-green swaps, and automatic rollback. No CI service — every gate runs locally before code ever leaves the machine.
Every external input crosses a Zod boundary before it touches anything:
export const postFrontmatterSchema = z.object({
title: z.string().min(1),
description: z.string().min(1),
date: z.iso.date(),
published: z.boolean().default(true),
});Built for agents
The codebase is organized so AI coding agents can work on it safely: vertical feature modules, one data-access seam, validation at every boundary, and a toolchain that catches mistakes mechanically. The humans set direction; the guardrails keep everyone honest.