Personal project, built solo · May 2026 – present
I feel close to Form:at, a Glasgow music collective. To get away from the big platforms, many of them paid, like SoundCloud, YouTube and Mixcloud, we decided it would be great to have our own player. From there I kept adding features that other platforms charge for, and here they're free.
- Saves 90-minute mixes (100–220MB each) to play with no signal: IndexedDB with a storage check first, a service worker that serves Range requests for seeking, and lock-screen playback.
- All on Cloudflare: TanStack Start on Pages/Workers, D1 for the catalogue and analytics, R2 for audio, presigned uploads straight to R2 for 220MB files, and Web Push from Workers.
- An admin dashboard behind Cloudflare Access, with server-side JWT checks on every write.
- A pnpm and Turborepo monorepo with a shared design system (Storybook, Chromatic), Vitest and Playwright on Chromium and WebKit, and CI/CD on GitHub Actions; built with Claude Code.
Personal project · October 2026 – present
I wanted one project that brought my CV together and showed that I can use and apply AI, both in how the product works and in how it's built. A CV bot fitted exactly what I was looking for. The Highland landscape is a nod, and a thank you, to the country that has welcomed me so well, where I live and which I enjoy.
- An assistant on Claude, through the Vercel AI SDK, whose read-only tools only return facts I've confirmed; every fact it cites must be one it looked up.
- Daily limits in Cloudflare D1: 30 questions a visitor and a spend cap, with visitors counted by a hash that changes every day, never by their IP.
- LLM evals in CI: the real assistant answers the cases, and a second model, calibrated before each run, judges every sentence.
- Built with Claude Code under a written agent setup: AGENTS.md, rules, hooks, skills and reviewer subagents.
- A live Highland glen whose season follows the date, its sky the sun over Glasgow, and its weather Glasgow's own.