Full-Stack Engineer · Aug 2023 – Feb 2025
RepeatMD
B2B SaaS platform serving 4,000+ medspa and aesthetic clinic practices in the US. A white-label loyalty, memberships, and ecommerce engine that sits on top of each clinic's EMR — built to reverse the industry's ~70% annual patient churn through subscriptions, rewards, and automated re-engagement.
- Promotions
- Memberships
- Rewards
- Discounts

4,000+
Clinics on the platform this code serves
10s → 1s
API response time on a critical patient endpoint, after a LINQ rewrite
$50M
Series A funded SaaS scale
BDD-first
Real-database tests on every shipped feature
Stack
What I owned
- Promotions, discounts, rewards & membership lifecycle
- Cross-stack feature delivery (entity → admin → patient → Stripe)
- Patient self-service flows: cancel, keep, reactivate, dunning
What I didn't
- Original .NET monorepo, EF Core & LaunchDarkly setup
- Auth, Twilio/SMS pipeline, primary Stripe integration
- Admin frontend overall (owned specific pages only)
"I owned the engine that decides what discount applies to what item for what patient at what time."
The work
Owned end-to-end
Free-service redemption, end to end
Challenge
The platform supported monetary discounts (percent or fixed amount), but had no concept of a complimentary treatment as a benefit — "buy a membership, get a free facial". Clinics wanted that lever; the domain model had to grow to support it.
What I built
- A new domain entity for non-monetary benefits — schema, migration, validation rules
- Admin surface for attaching free services to existing offer types
- Patient API surfacing the available benefits alongside the rest of the promo response
- Stripe checkout integration for $0 line items, with guardrails against stacking benefits incorrectly
- BDD coverage running against a real database for the full vertical, not a mocked one
Outcome
The new model untangled a previously overgrown discount module by separating the benefit-rules concern into its own boundary. The added test coverage surfaced edge cases the prior duplication had hidden.
Aprenentatge
The hardest part of a vertical feature isn't shipping the new layer — it's untangling the legacy seam beneath it. The duplication you remove is worth more than the code you add.
Patient cart — the benefit engine surfacing applied pricing at the line-item level
Owned end-to-end
Free-service redemption, end to end
Challenge
The platform supported monetary discounts (percent or fixed amount), but had no concept of a complimentary treatment as a benefit — "buy a membership, get a free facial". Clinics wanted that lever; the domain model had to grow to support it.
What I built
- A new domain entity for non-monetary benefits — schema, migration, validation rules
- Admin surface for attaching free services to existing offer types
- Patient API surfacing the available benefits alongside the rest of the promo response
- Stripe checkout integration for $0 line items, with guardrails against stacking benefits incorrectly
- BDD coverage running against a real database for the full vertical, not a mocked one
Outcome
The new model untangled a previously overgrown discount module by separating the benefit-rules concern into its own boundary. The added test coverage surfaced edge cases the prior duplication had hidden.
Aprenentatge
The hardest part of a vertical feature isn't shipping the new layer — it's untangling the legacy seam beneath it. The duplication you remove is worth more than the code you add.
Patient cart — the benefit engine surfacing applied pricing at the line-item level
Les captures provenen d'un entorn no productiu emprat durant el contracte. No es mostra codi propietari, dades de clients ni codi font específic. Els noms interns d'entitats i les mètriques quantitatives s'han generalitzat o omès; el treball i les decisions descrites són meves.