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, 2026
TSX Pipeline Hello World
Building React components as first-class content alongside Markdown with dynamic imports and server rendering.
May 8, 2026
Building 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, 2026
Data 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, 2026
Building 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, 2026
Project-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, 2026
Renaming 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, 2026
Test Doc for Fun
A test document written by Claude Sonnet 4.6 via Cline, just to see how things look.
May 7, 2026
Why No Tailwind
Anti-Tailwind manifesto: why design tokens and CSS-in-JS beat utility classes
May 7, 2026
AI Workflow Transparency: A Framework
Why transparency about AI use ultimately respects your audience and yourself.
May 7, 2026
The 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, 2026
Building 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, 2026
Claude 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, 2026
Cloudflare 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, 2026
Building a Health Data Dashboard with Garmin Data
Trying to analyze my fitness data better than Garmin, Strava, and Apple.
May 7, 2026
Frontmatter 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, 2026
Quick 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, 2026
How I Learned to Code
I'm self-taught, and the path was anything but straight.
May 7, 2026
How I Use AI
Why I'm obsessed with AI and what I do with it
May 7, 2026
Why Markdown Works (And Why Obsidian Misses the Point)
Markdown philosophy: constraints force clarity, syntax serves the parser, not the writer
May 7, 2026
MDX 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, 2026
The 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, 2026
Why 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, 2026
PDF the Frankenformat
Me trying to publish all kinds of things (not just websites) in HTML/CSS/React
May 7, 2026
Vibecoding 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, 2026
Why My Blog Posts Are Programs, Not Documents
My content is interactive programs, not static markdown. TSX enables publishing executable experiences.
May 7, 2026
Semantic Controls for AI Workflows Part 2
AI as an intelligence building block
May 7, 2026
Semantic 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, 2026
Agent 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, 2026
I 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, 2026
Tailwind 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, 2026
Why I Choose CSS-in-JS Over Tailwind
A personal defense of CSS-in-JS over Tailwind's utility-first approach
May 7, 2026
Why React Components Rule
Encapsulation means I can write the most cursed code imaginable and it's totally fine
May 7, 2026
The 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