Campus Coach: monetization and internationalization on a coaching SaaS
- Role
- Frontend Engineer (freelance), 7-person frontend team
- Period
- Jul 2024 to Apr 2026
- Stack
- ReactTypeScripti18n
Context
Campus Coach is a B2C coaching platform for runners, with more than 40,000 paying users. I joined as a freelance frontend engineer inside a 7-person frontend team and stayed for close to two years, from July 2024 to April 2026. The platform already existed and had users: my work was to grow it, not to build it from scratch.
Problem
A subscription product with a large free audience has two permanent questions. How do you turn free users into subscribers without degrading the experience for everyone? And how do you keep giving existing subscribers reasons to stay? Both are frontend problems as much as product problems, because they are settled in the flows people actually walk through.
My role
Frontend engineer on the product team, in React and TypeScript. In practice the job went beyond implementation: I reviewed specifications, Figma mockups and user flows before development started, and acted as a technical sounding board for the product managers on feasibility, scope trade-offs and the requirements nobody had written down yet.
What I shipped
Monetization flows
I implemented the monetization paths: freemium, free trial and upsell. This opened a new conversion funnel from free users to paid subscriptions, which had not existed in that form before.
Internationalization
I worked on the internationalization of the platform, the effort that opened the English-speaking market. That meant two languages, but the interesting part was everything that is not translation: unit systems (a runner in London does not think in kilometres) and country-based restrictions on what can be offered where.
New product verticals
I shipped new product verticals in partnership with the product team: trail running, nutrition and gut training modules. Each one is a new surface with its own data, its own screens and its own edge cases inside an existing codebase.
Technical approach
Internationalization is the piece with the longest tail. Adding a second language to a mature product surfaces every hardcoded string, every layout that assumed French text length, and every place where a unit was implicitly metric. The discipline that makes it survivable is doing the boring structural work first, then translating, rather than the reverse.
The monetization flows carried a different constraint: they touch money and they touch trust. A checkout path that fails silently or double-charges is worse than one that never shipped, so the work leaned heavily on making every state explicit.
Challenges
Working inside an established codebase with a team of seven means your personal preferences matter less than consistency. The harder skill was upstream: reading a specification and finding what it did not say before the sprint started, which is where most expensive rework actually comes from.
Result
The monetization flows opened a conversion funnel from free to paid that did not previously exist, and the internationalization work opened the English-speaking market for the product.
[ADD RESULT: conversion or revenue figures, only once you can share and verify them.]