Starting with the user and ending with the user. Leveraging AI, but keeping core engineering principles front and centre.
A csv is the best way to represent data in a fast paced environment - said no one ever. Weather changes, often and continuously. For professional sailors being up to date with the newest information quickly and clearly is imperative. How do you communicate to the rest of the crew nav changes when they happen mid race? How do we brief the team the night before with the routing plan? How do we share updates during an offshore race with no internet connectivity?
Optimal takes Expedition routing csvs and represents the data in a clear and configurable way: users choose what weather data they want to plot and then view it side by side with the mapped route and a Windy weather embed. Sailors can see what's happening in real time and what's coming up next. Pre race analysis informs sail usages decisions. The offline app, hosted on one device can be shared across the boat network to any other device via QR code or url. Optimal is responsive to its core - built for 32 inch monitors and iPhones alike.
Same codebase ships two ways: a hosted app, and one signed, notarised double-clickable binary per platform that bundles Python, the built front end and its own database. Offshore users keep their routes across upgrades because the schema self-heals on launch.
Live and racing — see www.optimalroutings.com.






Most social networking applications were never actually about bringing people together. I wanted to create an app which allowed you to see what your family and friends were up to without feeling influenced to buy something new and with no pressure to reply/react immediately. Not purely a highlights reel or a shopping app — built so "what have you been up to lately" turns into, "wow I saw your peonies bloomed last week, what else are you growing?"
You can only share photos with people in your contacts, no concept of "following" here. You choose who you share every moment with explicitly. Someone else comments on a photo you shared - only you can see it. Consume yours and others moments in a feed so there's no "unread message" waiting for you to reply.
Expo / React Native client with Mapbox. TypeScript Lambdas behind API Gateway, HTTP and WebSocket. Postgres 15 + PostGIS on RDS via Kysely, S3 and CloudFront for media, SQS fan-out-on-write for feeds, SMS OTP. Every resource in Terraform.
In TestFlight since July — coming soon to the App Store and Google Play.
Lindus Health sells clinical trials — I was a founding engineer building the web application that runs them. Joined post seed round in 2022 with no trials running, left in 2026 with 20+ concurrent clinical trials running. Software engineer and technical lead: leading product teams, building complex safety functionality, owning and evolving the architecture, release processes and more.
Joined post series A in 2021 as a software engineer focusing on splitting the monolith into microservices, starting with the new events video streaming platform.
Promoted from graduate to mid-level in under a year. Part of the team building the new asset financing application, with extensive work on the existing Java/Angular codebase.
Early investor in the consumer goods space, and the part-time builder of mypearlco.com.
typescript · javascript
react · react native · expo
node · angular
python · java
django · fastapi · spring boot
postgres · postgis · mongodb
aws lambda · ecs · rds · s3 · sqs
terraform · github actions
route53 · cloudfront
London · GMT+1 · taking work from October 2026