open to senior SWE and ML/AI roles
Mert Metin,
Senior Software Engineer.
I build full-stack web and mobile products end to end (APIs, apps, payments, cloud) and I measure whether they work. Search and machine learning are my favourite problems.
$ whoami Mert Metin · Senior Software Engineer · Ottawa, ON $ cat stack.txt TypeScript Python Ruby PHP Next.js React Native Rails FastAPI AWS Docker MySQL Stripe $ ls ~/projects rabbit/ searchbench/ geolocation/ real-estate/ $
// selected work
Rabbit
Grocery delivery in Ottawa, built end to end
3 apps, 1 backend
customer app, driver app, API and admin on AWS
searchbench
Product search, 2014 vs 2026, measured
0.706 → 0.772
NDCG@10 on 480 human-labelled queries
Geolocation-Prediction
My University of Ottawa thesis, rebuilt
88%
of users placed within 161 km of home
Real-estate platform
The software behind my real-estate practice
In production
used every week with real clients
// stack
Languages
- TypeScript
- Python
- Ruby
- PHP
- SQL
Frameworks
- Next.js
- React Native
- Expo
- Rails
- FastAPI
- Laravel
Data & ML
- MySQL
- Prisma
- scikit-learn
- pandas
- Embeddings
- LLM APIs
Infra
- AWS ECS / RDS / S3
- Docker
- GitHub Actions
- Stripe
- Twilio
// playground: bug hunt
Squash the bugs before they reach production. Every one is a real bug I found and fixed.
- squashed
- 0
- shipped
- 0
- time
- 30s
- best
- 0
fixed:
30 seconds. Click or tap bugs to squash them. Don't let them ship.
// lab: an AI learns rabbit run
This rabbit starts knowing nothing and learns by trial and error: +10 for a grocery, −10 for a crash. Pick a brain, press Train, and watch it go from crashing straight into walls to playing better than you, right here in your browser. No server, no libraries.
- Table: classic Q-learning over 11 yes/no senses. Learns in seconds, but it can only see one cell ahead, so its own trail traps it at around 18 groceries.
- Neural net: a Deep Q-Network I wrote from scratch (backprop, Adam, experience replay, target network). It also sees a 5×5 area and how much open space each move leads to, so it avoids traps. In my tests it averaged 73 groceries, 4× the table. Give it 15–30 seconds on Turbo.
- runs
- 0
- avg (last 20)
- 0
- best
- 0
- exploring
- 0
- situations seen
- 0
learning curve: score per run, and the 20-run average
what it senses
how much it likes each move
// writing
all posts →3 min read
The upgrade that made my search worse
I measured keyword, semantic and hybrid product search on 480 human-labelled queries. The fanciest model lost.
4 min read
Teaching a rabbit to play, with a neural network written from scratch
A Q-table learned my browser game in seconds, then hit a wall at 18 points. A from-scratch Deep Q-Network got to 73.
4 min read
I found seven bugs in my own thesis
Rebuilding my 2019 University of Ottawa research code turned up a one-line bug that had silently erased my best result.
// about
I like taking a product from an empty repo to something real people use: designing the data model, building the API and the apps on top of it, wiring up payments and notifications, and deploying it all with tests and CI behind it.
I also care about measuring whether things actually work. When I revisited my 2014 product search and my 2019 University of Ottawa thesis, the most useful thing I did was set up honest evaluations, which turned up bugs, models that had never learned anything, and an "upgrade" that made results worse.
Outside engineering I run a real-estate practice in Ottawa on software I wrote, so I'm used to being my own most demanding user.
- location
- Ottawa, ON · remote OK
- looking_for
- Senior SWE · ML/AI engineering
- education
- University of Ottawa
- github
- @mertmetin