Overview
A marketplace where brands surface products to retail buyers and buyers discover what is about to take a category. My work concentrated on two things: making the platform fast under real catalogue load — endpoint optimisation, query bottlenecks, caching — and making the brand-to-retailer connection more flexible, so more matches were possible in the first place.
The problem
Two problems compounding each other. The platform slowed down as catalogues grew, with expensive database queries behind the endpoints buyers hit most — and slow discovery on a marketplace is not an inconvenience, it is abandonment. Underneath that, the ways a brand could reach a retailer were too rigid, so matches that should have happened simply had no path.
Approach
- 01Profiled the hot endpoints and rewrote the queries behind them — the latency was concentrated in a handful of paths, not spread evenly, so the work was finding them rather than optimising everything.
- 02Fixed MySQL bottlenecks with indexing and query restructuring, cutting database load rather than masking it with more hardware.
- 03Added caching on the read paths that dominated traffic, so repeat discovery did not re-run the same expensive work.
- 04Widened the brand-to-retailer connection paths, giving both sides more ways to find a viable match instead of one rigid route.
- 05React and TypeScript frontends with role-based dashboards, real-time notifications and dynamic forms, tuned for code-splitting and lazy loading.
Decisions & trade-offs
Fixing the queries instead of scaling the database
The straightforward response to a slow marketplace is a bigger instance. Profiling showed the load was concentrated in a few unindexed query paths, so indexing and restructuring cut database load 45% and peak API latency 35% — a permanent fix at no recurring cost, where scaling up would have been a monthly bill that hid the same problem.
Caching the read paths, not everything
Discovery traffic is overwhelmingly repeat reads of the same catalogue data, so that is where caching earns its keep. Caching writes or rarely-hit paths would have bought little and added invalidation bugs — the class of bug that shows up as a buyer seeing stale inventory, which on a marketplace costs trust rather than milliseconds.
More paths between brands and retailers, not a better ranking
The instinct on a marketplace is to rank harder. But ranking only reorders matches that are already reachable — if the connection model itself is rigid, a good match has nowhere to surface. Widening how the two sides could connect grew the set of possible matches, which is the lever that actually moves marketplace growth.
What it does not do
- This predates my AI work. It is here as full-stack evidence, and because it is the one project in this set anyone can open and verify unaided.
- The performance work was targeted at the paths that dominated traffic; it was not an exhaustive audit of every endpoint.
- The product has continued to evolve since my involvement — the live site reflects work beyond mine.