Field notes on building with AI
31 posts
Every weekday morning, a small script on my home server snapshots the same-day SPX options chain and saves it, so I can compare what the market expected to happen with what actually did.
Read post →My search bar used to run keyword search and only fall back to semantic search when that found nothing. Now it runs both on every query and merges them into one ranked list.
Read post →Google’s answer to a full mailbox is a bigger storage plan, but you can keep a synced copy of your mail on a computer you already own and let Gmail keep doing the delivering.
Read post →I ran evals on real past inputs to decide which of my AI automations should move to a local model, and one of the two failed.
Read post →Someone spent half an hour trying to break the chatbot on this site. This is the case file: what they sent, what they were after, why every attempt failed, and the extra layers I added on top anyway.
Read post →My camera kept logging bicycles that were actually jacaranda branches moving in the wind. No amount of tuning could fix it, so I fine-tuned the detector itself.
Read post →There’s a webcam on my block that counts how many of the seven street parking bays are taken. Now there’s also a 3D model of that block, running in a browser tab, where a car shows up in a bay only when the bay is actually occupied right now.
Read post →I have a parking space. My friends don’t — and the question they text before driving over is always some version of “is there parking on your street?” So I pointed a webcam at the seven bays outside my window and tried to answer it properly, once a minute.
Read post →Running several Claude Code agents at once with git worktrees and a small shell tool called cmux — one agent per branch, no file conflicts, on both my Mac and my home Linux server, all on a single Max subscription
Read post →The claude.ai Gmail connector can read and draft but can't archive, label, or trash. I built a self-hosted MCP server with modify scope so Claude can clean up my inbox — safely — plus the 7-day OAuth bug that took a month to understand
Read post →Schwab's market-data API hands you a token that hard-expires every 7 days by design. Instead of babysitting a renewal, I built a pipeline that renews itself before it dies and only emails me when it can't
Read post →Replacing buried email alerts with instant phone push notifications using self-hosted ntfy, kept private to my own devices over Tailscale with token auth — no third-party push service
Read post →I swapped the local AI that grades my chatbot for a bigger one and compared the two across 55 real conversations. Here's what a smaller model misses — and where Claude Haiku and Sonnet would sit on the same ladder.
Read post →A streaming AI chatbot grounded in 300+ content chunks, powered by Claude Haiku, Supabase pgvector, and a floating widget that follows you across the site
Read post →Using Claude Haiku for topic tags, Supabase vector embeddings for related posts, and build-time scripts to turn 18 blog posts into a connected content product
Read post →My site’s search bar started as a simple keyword filter, then learned to search by meaning with vector embeddings — here’s the difference, how each version works, and why the second one became the foundation for an AI chatbot
Read post →What started as three cron jobs grew into 100+ lines of scheduled automation — market briefings, game bots, security audits, AI job queues, and weekly reports, all orchestrated by a single crontab
Read post →A Python bot on a headless Linux server that manages a TrophyManager.com soccer club — scouting, bidding, lineup setting, training, and self-grading, all automated
Read post →A Python script on a headless Linux server scrapes market data, asks Claude to explain why markets moved, and delivers it to subscribers via Resend — every weekday at 8am
Read post →A map-based community tool where neighbors list backyard fruit trees and others can find them — styled like a 90s farming game, verified with email, and built with Claude Code
Read post →Website uptime, Supabase health, API monitoring, Fail2ban reports, Claude-generated changelog, and a weekly summary — all automated from a headless Alienware
Read post →The safest service on the internet is one that isn’t on it, so start with a private network, then stack simple, independent locks behind it.
Read post →Repurposing a 2011 gaming laptop into an always-on home server running Linux Mint — closed lid, no monitor, SSH access from anywhere
Read post →Using Claude Haiku to generate static summaries at publish time — and why the architecture decision matters more than the feature itself
Read post →Building a Mac automation that fetches Garmin health data at 7am, generates AI recaps with Claude CLI, and emails them — built across two sessions
Read post →Building a Supabase-backed contact form with email notifications in 2 hours — 4x faster than my first database project
Read post →Replacing 8 static words with time-aware messages — and learning why iteration beats perfection
Read post →Designing and deploying a production-ready footer component in under 30 minutes with terminal-based AI
Read post →A product manager who isn’t a full-time developer builds a full-stack web game from concept to deployment in four sessions
Read post →I finished building this site yesterday. Before I write anything else on it, I want to be certain Google can actually find what I publish — because publishing a page and having Google know it exists are two different things. On a hosted platform that gap is usually handled for you; on a custom-built site it can quietly go unchecked. So here is the setup, done first.
Read post →I’m a product manager who reads code but doesn’t write it for a living. Here’s how I built a custom Next.js personal site with Claude in about seven hours, and what actually took the time.
Read post →