Flying jets by day. Shipping code on layovers.
A gamified tracker for my seven daily anchor habits, C.H.A.R.G.E.D.: Cold exposure, Health, Abstain, Read, Grow, Engineer and Decompress. It replaced a pen-and-paper checklist. Every tick earns XP towards one overall level. The curve is tuned so Level 20 lands on exactly 180 perfect days, and every level after that costs the same, so a level-up keeps arriving every few weeks for as long as I use it. Only Abstain can cost XP, and a slip can eat into progress but never drop a level. There are deliberately no streaks. The design leans on progress you keep (levels, lifetime badges, a personal-best week) rather than on the fear of losing something. It's a plain-JavaScript home-screen app that works offline and syncs to Supabase, with row level security as the boundary so only my account can read or write a row. Data that lives in one place eventually gets lost, so sync was in the spec from day one. Every scoring rule is a pure function with a test. On iOS 26 the only haptic a web app can get is a real tap on a native switch, so each habit button is a switch in disguise. Spec'd through a question-by-question interview and a PRD, then built with Claude in a single session.
- Open the demo. Hit "Open the demo" below. It runs in any browser, preloaded with three months of made-up history.
- Tick habits on Today to fill the battery. Light up all seven for the FULLY CHARGED bonus.
- Use the arrows to go back a day and fill it in. That's the quickest way to see a level-up.
- Badges shows the lifetime milestones, which can never be lost.
The demo runs entirely in your browser and resets when you reload. Sign-in is for my own account only, so the demo is the way in for everyone else.
A one-click tool that turns an educational YouTube video into a folder of finished notes. I watch a lot of tutorials and was taking notes by hand, downloading the linked PDFs by hand, and chasing the links by hand. Now I click a button in Chrome and a minute or two later I have a summary, a step-by-step action plan when the video actually contains a procedure, a list of every tool mentioned with working links, and any file linked in the description already downloaded — one dated folder per video. A small Chrome extension talks to a local server that runs in the background and starts at login. The server has no dependencies at all: yt-dlp supplies the transcript, and the writing is done by the Claude CLI already on the machine, so there is no API key and nothing leaves the Mac except the requests to YouTube and Anthropic. A video description is untrusted input, so downloads are fenced behind an extension allowlist, private-address blocking, size caps enforced while streaming, and content checked by magic bytes rather than by what the server claims. Built with Claude in a single session, each milestone proved against real videos before the next one started.
A habit tracker built around Noah Kagan's "Law of 100" — the idea that you commit to 100 reps of something (100 videos, 100 cold emails, 100 workouts) before you let yourself judge the results. Each challenge is a 10×10 grid: tap a cell to log a rep and watch the percentage climb. It runs fully offline with no account and no backend — all data stays on your device — and adds momentum tracking, streaks, a "finish-by" projection, milestone nudges at 25/50/75, backdating, quantity logging, and a JSON export/import backup. Written once in React Native and shipped three ways: as a web app, as an installable home screen app, and as a real native build. Spec'd, designed, and built with Claude in VSCode.
- Just open it. Hit "Open the app" below — it runs in any browser, on desktop or phone. No install, no sign-up, nothing to download.
- Add it to your home screen to use it like a real app, full-screen and offline. On iPhone: open it in Safari, tap the Share button, then "Add to Home Screen." On Android: open it in Chrome, tap the ⋮ menu, then "Install app."
- Tap New challenge, name your 100 (100 Reels, 100 cold emails, 100 workouts), and pick how a rep counts — one tap, a quantity, or once a day.
- Tap a cell in the grid each time you do a rep. Your streak, weekly pace and projected finish date appear once you're going.
- Moving devices? Settings → Export backup saves a JSON file; Import loads it on the other device.
Your data is stored only in your own browser — there's no account and no server, so nothing you log ever reaches me. That also means each device keeps its own separate set of challenges.
Prefer the real native version? The QR above opens it in Expo Go — scan it with your iPhone camera, or with Expo Go's own scanner on Android.
A browser game where you whack cartoon Donald Trumps as they pop out of the ground, racking up as many hits as you can in 60 seconds. It is a single HTML file with no framework and no backend, so it loads instantly and runs anywhere, including on a phone. The characters pop on a difficulty curve that speeds up as the clock runs down, each hit fires a synthesized smack sound built with the Web Audio API, and your best score is saved on the device. Spec'd, designed, and built with Claude in a single session, then deployed to Vercel.
An offline-first iPhone workout tracker I built to replace RepCount. It is a Progressive Web App with no framework and no backend, so it installs to the home screen and runs fully offline, with every bit of data kept on the device. It follows the 2-2-2 training method with automatic progression, a rest timer, progress charts, and a quick-log option for travel days. Spec'd, designed, and built with Claude across several sessions.
A personal portfolio site built in the style of a 1980s phosphor-green CRT terminal. Designed as a single HTML file with no build step or frameworks — just HTML, CSS, and a little vanilla JavaScript. The animated background is a faint Matrix-style code rain, rendered in phosphor green with the same code glyphs used throughout the terminal theme. The whole thing was spec'd, designed, and built collaboratively with Claude (Anthropic) across a single session.
I build weird and wonderful things with AI and share them here just to see what happens. This whole operation runs on curiosity, caffeine, and stolen hours between flights. If something on this site was useful (or just fun), buying me a coffee keeps the projects coming. ☕
buy me a coffee ☕- Airline Captain — Embraer E-195
- Australian expat living in Sweden
- Building AI-first side projects between flights
- Former professional photographer
- Learning to vibe-code with Claude, Bolt & Lovable
- Interests: Aviation, Reading, Movies, Photography, Motorsports, Poker
Get an AI-generated summary of who I am, straight from an assistant of your choice.