Posts
Writing, opinions, and longer-form thoughts.
Frankenformats: Stop Making Your Markdown Do Things
Markdown is text with structure—not a programming language, component system, or templating engine.
May 8, 2026TSX Pipeline Hello World
Building React components as first-class content alongside Markdown with dynamic imports and server rendering.
May 8, 2026Building the new-doc Skill
How we built a Cline skill for creating structured markdown posts, and the small fixes we made along the way.
May 7, 2026Data Sovereignty for AI-Assisted Writing
Why consumer AI chat apps are a dead end for serious writers, and what a real personal AI writing infrastructure looks like.
May 7, 2026Building Postmaster: A Local Markdown Draft Editor
Why I built a local Next.js app to review and dispatch markdown drafts written by AI agents, and the design decisions behind it.
May 7, 2026Project-Scoped Content Needs to Be a Thing
Test docs and demo artifacts are cluttering the front page because there's no way to scope content to a project automatically.
May 7, 2026Renaming the new-doc Skill to md-artifact
Why we renamed the new-doc skill to md-artifact and tightened up its trigger description.
May 7, 2026Test Doc for Fun
A test document written by Claude Sonnet 4.6 via Cline, just to see how things look.
May 7, 2026Why No Tailwind
Anti-Tailwind manifesto: why design tokens and CSS-in-JS beat utility classes
May 7, 2026AI Workflow Transparency: A Framework
Why transparency about AI use ultimately respects your audience and yourself.
May 7, 2026The Calculator Moment: AI as a Universal Information Innovation
AI isn't categorically different from any other tool innovation—it's just the calculator moment happening to every domain simultaneously at unprecedented speed.
May 7, 2026Building My Resume with React and CSS
How I ditched traditional design tools and built a print-perfect resume using React, Emotion, and CSS print media queries.
May 7, 2026Claude Skills, Generative Art, and Hosting Raw HTML in Next.js
Claude.ai now has skills and connectors. I used one to build a generative art visualizer in a minute. Then figured out the cleanest way to ship it.
May 7, 2026Cloudflare Tunnel + Vercel Webhook Deploy Notifications
My master plan to get a satisfying ding sound on my Mac every time a Vercel deployment goes live.
May 7, 2026Building a Health Data Dashboard with Garmin Data
Trying to analyze my fitness data better than Garmin, Strava, and Apple.
May 7, 2026Frontmatter Is a Dead End (And Everything I Changed to Prove It)
A marathon Copilot session that touched 70+ files, added relatedPosts everywhere — and the realization that this whole content system sorely needs a database.
May 7, 2026Quick Note: Git Commit Message Escaping Is Still Funny in 2026
A quick amusing observation: modern AI workflows are powerful, but shell escaping in git commit messages is still a thing.
May 7, 2026How I Learned to Code
I'm self-taught, and the path was anything but straight.
May 7, 2026How I Use AI
Why I'm obsessed with AI and what I do with it
May 7, 2026Why Markdown Works (And Why Obsidian Misses the Point)
Markdown philosophy: constraints force clarity, syntax serves the parser, not the writer
May 7, 2026MDX Does Not Win On This Day
I almost talked myself into MDX as the missing middle layer between markdown and TSX — then talked myself back out of it.
May 7, 2026The Metadata Paradox: Automating What You Don't Need Yet
Should every page have metadata? Should I automate adding metadata? Do I even need metadata on non-content pages? The irony of documenting this decision.
May 7, 2026Why I'm Finally Moving to SQLite (And Why I Waited Until Now)
After over 60 articles in one month, my file-based content system is breaking down. Here's why I'm migrating to SQLite, why now, and why I didn't do this sooner.
May 7, 2026PDF the Frankenformat
Me trying to publish all kinds of things (not just websites) in HTML/CSS/React
May 7, 2026Vibecoding Plasma Cosmos from One-Prompt Toy to Real App
A Claude skill generated a generative art app in one prompt. Then I spent an evening vibecoding it with Opus into something I actually want to keep.
May 7, 2026Why My Blog Posts Are Programs, Not Documents
My content is interactive programs, not static markdown. TSX enables publishing executable experiences.
May 7, 2026Semantic Controls for AI Workflows Part 2
AI as an intelligence building block
May 7, 2026Semantic Controls for AI Workflows
Exploring how to compress semantic meaning into symbolic syntax for more efficient AI prompting and higher-quality AI-generated outputs
May 7, 2026Agent Skills Are Insane
When you write a function you get one function. When you write a skill you get a new intern who works for you.
May 7, 2026I Made an AI App Builder?
I studied vibe coding tools, figured out why they produce better AI outputs than my usual prompting, and rebuilt my stack to match. Now I have my own personal AI app builder.
May 7, 2026Tailwind Wins: Making My Meta Stack Even More Meta
My migration plan from Emotion to Tailwind, CSS Modules, Shadcn, and CSS variables so styling stays fast, explicit, and AI-friendly.
May 7, 2026Why I Choose CSS-in-JS Over Tailwind
A personal defense of CSS-in-JS over Tailwind's utility-first approach
May 7, 2026Why React Components Rule
Encapsulation means I can write the most cursed code imaginable and it's totally fine
May 7, 2026The Financial Statistic That Runs My Life
The S&P 500 has never delivered negative returns over any 20-year rolling period—and that single fact shapes my entire investment philosophy.
March 30, 2026