Employment record / chapter file

EveryRun

Product Engineer July 2023 – September 2024 5 exhibits

  • 80 → 17,659users, scaled solo
  • 14months as the only engineer
  • 30pages of handover

For fourteen months I was the only developer on EveryRun, a membership platform for runners and event organizers. It was handed to me at 80 users; I handed it back at 17,659. The honest version of that story: the CEO's marketing drove the growth — my job was to make sure the platform never buckled under it, and that the people who arrived stayed. I did it part-time alongside my Veedoo lead role, on call alone, around the clock.

Under a timber deck sagging beneath a packed stream of runners, the mascot braces his whole body into a fresh post and drives it up into the lowest point of the deck.
Fourteen months under the deck
The EveryRun events map, shown under its later Runday branding
The events map, 80 → 17,659 users — EveryRun, since rebranded Runday
  • Next.js
  • Expo
  • Neon
  • Drizzle
  • Stripe Connect
  • Postgres LISTEN/NOTIFY

The stack — one engineer behind every layer

Fourteen months, one engineer on all five — then a 30-page handover so it outlived me

Visit runday.org
Exhibit 01

Solo full-stack ownership

One accountable owner for everything: Next.js 14 on the App Router — an early bet on server components and Server Actions that paid off — React Native with Expo sharing TypeScript types and Zod schemas with the web app, PostgreSQL on Neon, Drizzle chosen over Prisma for serverless cold starts, and Lucia-Auth with Postgres-backed sessions, HTTP-only cookies, and CSRF protection.

Exhibit 02

Virtual runs that feel live

The core product loop: GPS-tracked runs from the mobile app, distances computed with the Haversine formula, achievements, and real-time leaderboards pushed over PostgreSQL LISTEN/NOTIFY — an event finishes moving while you watch it. Charitable giving ran through Stripe Connect with automatic fund distribution to registered charities.

Exhibit 03

Preview deployments with real data

Neon database branching wired into Vercel preview deployments meant every pull request carried its own isolated, production-like database. Stakeholders clicked a link and tested against real data before merge; schema changes never touched production until they'd been walked through.

Exhibit 04

Product decisions with evidence

PostHog everywhere: feature flags, A/B tests, session replays, and funnels decided what got built next. A bidirectional Fibery CRM sync kept event management, cohort analysis, churn tracking, and revenue reporting current without anyone exporting a spreadsheet.

Exhibit 05

A clean exit

When budget shifted fully to marketing, I wrote a 30-page handover: architecture decision records, ER diagrams, an API reference, deployment procedures, and an onboarding guide — so the product could outlive my involvement without losing its architectural memory. It did.