01
Apple platforms
Native apps for Apple Watch, iPhone and Mac, written in Swift and SwiftUI with Xcode. The Apple Watch is my speciality: a screen where every tap, every second of attention and every percent of battery counts, so design and engineering have to work as one.
- watchOS apps and complicationsSwiftUI interfaces designed for glanceable use on the wrist, complications with WidgetKit and ClockKit, and scheduled content such as bPositive's hourly affirmations from 8am to 9pm.
- iPhone and Apple Watch togetherApps that work across both devices, such as Tipple Units, which tracks drinks against UK government guidelines on iPhone and Apple Watch. Keeping the two in step with WatchConnectivity is covered in my articles.
- Mac utilitiesLightweight macOS tools such as AiCuttr, which filters AI-generated clutter out of search results.
- Watch face designStromaScape: a collection of Apple Watch faces with live complications, fully editable layers and a typeface I designed for the brand.
- Performance and battery lifeProfiling with Instruments, efficient background work and lean SwiftUI views, covered in depth in my article on battery efficiency.
- Accessible by defaultVoiceOver labels, Dynamic Type and clear contrast built in from the start rather than added at the end.
- Modern Swiftasync/await, Combine, actors and the wider Swift standard library, documented in my Swift A–Z reference for other developers.
02
Websites and web apps
Mobile-first websites and web applications, chosen to fit the job: hand-built static sites where speed matters most, a CMS where content changes often, and full web apps where people need to search, compare and interact.
- Hand-built HTML, CSS and JavaScriptFast static sites with no framework overhead. evalu8 delivers 117 reviews, a tool finder, side-by-side comparison and a cost calculator in plain HTML, CSS and vanilla JavaScript.
- PHP 8 and Kirby CMSContent-managed sites on Kirby, from StromaScape's shop window to Scamdetectr, a search-first directory of 8.9 million sourced records with a moderated report queue (Kirby 5, PHP 8.3).
- React web appsStat Monkey and Monkey Book are phone-first React apps on TanStack Start: live tables, match sheets, a paper bet slip and private mini-leagues.
- AI-assisted developmentUsing tools such as Grok Build and v0 to move quickly, as with Grok Booth, a Next.js avatar maker, while I keep control of the product, the content and the checks.
- Mobile first, alwaysEvery page is designed and tested at phone width (390px) first, then scaled up to desktop, in light and dark themes.
- Clear, honest interfacesPlain-English copy, sources shown next to the numbers, and no dark patterns.
See it in
03
Data and analytics
Turning official and public data into pages that ordinary people can read on a phone, and measuring websites without tracking the people who visit them.
- Pipelines from official statisticsPython pipelines that fetch releases from the Home Office, Ministry of Justice, HMPPS, the Youth Justice Board and the Scottish Courts and Tribunals Service, aggregate them in SQLite and build a page for every court, police force and prison in Court Day UK.
- Charts, sharing and feedsBuild-time SVG charts, 1200×630 share images for any figure, Atom feeds and embeds, all generated with the data.
- Provenance on every figureThe source and date sit under every number on Court Day UK and on every record in Scamdetectr, with careful 'reported' and 'alleged' wording where it matters.
- Sports data and modelsxG, shot maps and per-90 rates in Stat Monkey; model prices for every fixture in Monkey Book, graded openly with hit rates and a Brier score.
- Privacy-first analyticsquietstats, my own analytics product: an 845-byte script, no cookies, no stored IP addresses, daily-salted visitor hashes, AI assistants as their own traffic channel, UTM campaigns, goals, alerts and a stats API.
- Search that copes with real peopleTypo-tolerant site search and a postcode lookup that runs in the browser, so the postcode never reaches the server.
See it in
04
Infrastructure, security and performance
I run what I build. That means hosting, domains, deploys and the protections around them, set up so the sites stay fast, private and hard to abuse.
- Cloudflare Workers, D1 and static assetsEdge applications and APIs: quietstats and this site run on Workers, with D1 (SQLite) for data, edge redirects and byte-range video streaming.
- Traditional hostingSiteGround for PHP and static sites, including Court Day UK, evalu8, Scamdetectr and StromaScape.
- Domains, DNS and HTTPSDNS, HTTPS everywhere, HSTS, app icons and web manifests set up properly on every site.
- Secure forms and APIsCSRF tokens, honeypots, rate limiting, Origin and domain checks, bot filtering and signed payment webhooks.
- Privacy by designNo cookies, no stored IP addresses, Do Not Track and Global Privacy Control respected, and privacy notices written for UK GDPR.
- Speed and search visibilitySecurity headers and a strict Content Security Policy, structured data (JSON-LD), sitemaps, llms.txt, Open Graph share images and small, fast pages.
See it in
05
Product and delivery
From the first idea to a live product, including the parts that make people trust it: clear content, careful wording and checks before anything ships.
- End to endIdeation, prototyping, design, build, testing and deployment, handled by one person who understands the whole product.
- User-centred designStarting from what the user actually needs, then designing the smallest thing that does it well.
- Payments and subscriptionsStripe Checkout subscriptions, the Customer Portal and signed webhooks, built into quietstats.
- Responsible contentMonkey Book is 18+, paper-only and points to BeGambleAware; Court Day UK never names anyone; evalu8 prices tools in pounds with VAT and keeps a public changelog of every correction.
- Release disciplinePreview first, automated checks for broken links and phone-width layout, publish gates, changelogs and an operations dashboard for each project.
- Writing and teachingStep-by-step articles and a Swift A–Z reference with beginner, intermediate and advanced examples.
See it in
Have a project in mind?
Tell me what you're trying to build or fix, and I'll reply personally with honest next steps.
Start a project