$ ls ~/projects
Projects
Every app and project I've built: ten iOS apps live on the App Store, designed and shipped end to end, and open-source work in Flutter and Node.js.
Apps
10 on the App Store
Pull to Refresh
An app blocker you unlock with reps. Pick the apps that eat your day, set a daily allowance, and buy more screen time with push-ups, squats or pull-ups.
- Counts reps from joint positions on device — no video is recorded, stored or uploaded
- Strict mode, per-hour limits and scheduled rules; sets are saved to Health and count toward the Move ring
Swift · SwiftUI · Screen Time API · Vision · HealthKit
Foilcase
Scans trading cards, prices them daily and tracks what a collection is worth. It reads the artwork and the collector number together, so it knows which printing you actually own.
- Daily prices from public marketplace data — every figure shows its source and date, and says so when it is stale
- No account and no server copy: the collection is an append-only ledger on the device
Swift · SwiftUI · Vision · On-device ledger
MealMate
AI calorie counter and food log. Point the camera at a plate and it estimates calories and macros — no barcode hunting, no 40-field entry form.
- Photo-based food recognition with manual entry as the fallback
- Personalised daily targets, macro breakdown and weight tracking
Swift · SwiftUI · StoreKit 2 · AI vision
PawVault
A health record for your pet. Vaccinations, vet visits, medications and documents in one place, with reminders for boosters, treatments and doses.
- Scans certificates and prescriptions into structured entries
- Vet-summary PDF export; sign in to sync records across iPhone, iPad and Mac
Flutter · Dart · Firebase · Gemini · PDF export
Reset
A sobriety tracker for quitting cannabis or taking a tolerance break — clean streak, withdrawal timeline, milestones and money saved.
- Cannabis-specific withdrawal timeline for sleep, mood and appetite
- No sign-up: an anonymous ID, synced privately in the background — no ads, nothing sold
Flutter · Dart · Supabase · Offline-first
Proofday
A sourdough planner that works backwards from when you want bread. It tells you when to feed the starter, mix, fold, shape and bake, adjusted for your kitchen temperature and kept out of the hours you sleep.
- Starter peak predictions from the feed ratio and kitchen temperature, with the rise measured from jar photos
- No account: starters, bakes and photos stay on the iPhone; only a Crumb Check you ask for goes to a server
Swift · SwiftUI · SwiftData · WidgetKit · ActivityKit
PremierCut
A video editor that edits and renders on the device: a multi-track timeline, speed curves, keyframes, captions from speech, and body effects that stay on the person as they move. Free, with no account, no ads and no watermark.
- Exports 720p, 1080p or 4K at 24, 30 or 60 fps, as HEVC or H.264
- Runs on iPhone, iPad and Mac; App Store privacy label: Data Not Collected
Swift 6 · SwiftUI · AVFoundation · Core Image & Metal · Vision
QT
A study timer that starts with a one-minute quiet time: one Bible verse, one question, one line. While the timer runs, the apps you picked stay locked through Screen Time.
- 25, 50 or 90-minute sessions that survive the app closing or the phone restarting, with a Live Activity on the Lock Screen
- No account and nothing collected — blocked apps stay opaque Screen Time tokens, and records stay on the device
Swift · SwiftUI · Screen Time API · GRDB · WidgetKit
Aquarium
A logbook for aquarium water tests, freshwater and saltwater. A blank field stays blank instead of becoming a zero, and free ammonia is worked out from the pH and temperature you logged.
- Every parameter on one time axis, with fish and coral losses marked across all of them
- Works fully signed out; an optional account syncs through Supabase, and CSV/JSON export is free
Flutter · Dart · Riverpod · Drift · Supabase
Easy Find Parking
A map of where you can park for free in European cities, kerb by kerb. It reads what councils publish and keeps "free" and "likely free" apart, because a wrong "free" costs a fine.
- Kerb-level free parking in Berlin, Madrid, Barcelona, València and Kraków, from city open data and OpenStreetMap
- Car parks with prices and height limits; a live space count older than 15 minutes is shown as history, not availability
Swift · SwiftUI · MapKit · Flask · PostGIS
Open source
2 on GitHub
svg_animate
A drop-in replacement for flutter_svg's SvgPicture that actually plays the animations baked into your SVG — SMIL elements and CSS @keyframes, rendered natively on every platform.
- Parses and drives <animate>, <animateTransform>, <animateMotion> and <set>
- Interpolates numbers, colours (hex / rgb / hsl / SVG keywords), lengths and transform lists
- AnimatedSvgController for play, pause and seek
- Asset, network, file, memory and string sources, with configurable frame rate and frame caching
- Android, iOS, macOS, Windows and Linux
flutter pub add svg_animate
Dart · Flutter · SMIL · CSS keyframes
torrentio-addon
A Stremio addon that answers stream requests from a scraped torrent database, with debrid resolution in front of it. Built on TheBeastLT's torrentio-scraper and rewritten around my own data layer.
- PostgreSQL for the torrent index, MongoDB for stream caching with a configurable TTL
- Falls back to an external scraper on a miss, then retries — and runs standalone without one
- RealDebrid, Premiumize, AllDebrid and Put.io resolution
- Ships as Docker Compose behind Traefik with automatic SSL
Node.js 20 · Express · PostgreSQL · MongoDB · Docker · Traefik
Let's build something
Open to interesting mobile work — contract or full-time. The fastest way to reach me is email.