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.