Work / Techjar · 2024
Appetite
A London-first social app for saving, mapping and sharing places to eat. Past 10,000 downloads with 2,000+ people opening it daily.
The problem
Recommendations arrive as screenshots, saved Instagram posts and messages you never find again. Appetite’s bet was that the list is worthless without the map, and the map is worthless without your friends on it.
Clustering a city, serverlessly
The core technical problem is drawing thousands of markers on a phone map without melting the device or the bill. I built the clustering server-side: OpenSearch does geohash aggregation over a DynamoDB-backed index, so the app asks for a bounding box and a zoom level and gets back a small, already-grouped payload.
Every hop is serverless — Lambda behind API Gateway, defined in CloudFormation so environments are reproducible rather than hand-assembled. EventBridge and SQS carry the work that does not need to block a user, and CloudWatch is where I found out what was actually slow.
Social features that survive concurrency
Likes, comments and collaboration requests look trivial until two people tap the same button in the same instant and the counter drifts. These paths are written to be idempotent and race-safe, because a social feature that silently loses writes is worse than not shipping it.
Group chat runs on Redis and PostgreSQL, handling high-volume real-time messaging alongside a chatbot in the same surface.
Language into structure
Mistral produces the vector embeddings behind discovery, and LangChain turns free-text into strict JSON reliably enough to be a dependency rather than a demo. Content uploaded to S3 triggers AWS Rekognition automatically for categorisation, so moderation and tagging happen before a human ever looks.
What it came to
- 10k+
- Downloads
- 2k+
- Daily active users
- Server-side
- Geospatial clustering, any zoom level
- Flutter
- TypeScript
- AWS Lambda
- DynamoDB
- OpenSearch
- CloudFormation
- Cognito
- SQS
Open to senior engineering roles
Tell me what you are building.
Full-time roles, contract work, or a system that needs someone to own it. I read everything and reply within a few hours.