Volver al portfolio

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
RepeatMD patient cart with membership pricing applied — the discount engine in action

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

.NET 8C# 12PostgreSQL 16EF Core 8DapperReact 18TypeScriptViteTanStack QueryTailwindCapacitorStripe ConnectLaunchDarklyHangfireReqnrollxUnitDatadog APMDocker

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.

Aprendizaje

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

Contacto

Escríbeme.

Las capturas provienen de un entorno no productivo usado durante el contrato. No se muestra código propietario, datos de clientes ni código fuente específico. Los nombres internos de entidades y las métricas cuantitativas se han generalizado u omitido; el trabajo y las decisiones descritas son míos.