Field notes on building with AI
30 posts
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 →I had a dozen automated jobs quietly calling Claude and no idea what any of it cost, so I built a weekly audit that inventories every AI-calling job, splits real dollars from subscription load, and flags any new job that sneaks in. The answer: real spend is under $2 a month.
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 →From keyword matching to meaning-based search using pgvector, Supabase, and Hugging Face — and why it's the foundation for Ask Goose
Read post →An Express API on the Alienware that lets me trigger jobs, check system health, and pull reports — secured with API key auth, systemd, and port knocking
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 →Layered security for an always-on home machine — UFW firewall, Fail2ban brute-force protection, SSH key-only auth, port knocking for remote access, and instant login alerts
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 →From architecture decision to React portal — why a simple search bar required a codebase refactor, a build script, and fixing a CSS rule I didn't know existed
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 non-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 →Google’s AI evaluates how hard it actually was to build joseandgoose.com from scratch
Read post →A non-developer builds a website from scratch with AI in three sessions
Read post →