Odycy is a UK-based private healthcare marketplace that simplifies the patient journey through integrated search, booking, and payment. The platform connects patients with providers at optimal times, locations, and prices — replacing a No-Code prototype (Bubble + Airtable) with a production-grade, enterprise-ready platform. We worked as a lean team of three fullstack engineers and a product manager, designing and delivering the complete platform — a NestJS API powering React/Next.js frontends — transforming a validated concept into an enterprise-grade booking engine on an aggressive timeline. The result far exceeded the client's original expectations.
View Live Site
Key Outcome
Production-grade healthcare marketplace with multi-party booking, relay negotiation, and integrated payments
Odycy had proven strong demand for their private healthcare marketplace using Bubble and Airtable, but the No-Code stack was buckling under the weight of real-world booking complexity. The platform needed to handle three fundamentally different booking types, multi-party negotiation between patients and providers, integrated payments with pre-authorization, geospatial provider search, and a full referral management pipeline — all with proper security, scalability, and maintainability.
We architected a NestJS modular monolith from the ground up, establishing a clean domain-driven structure with shared TypeScript types across all five frontend applications. The backend uses a composable Specification Pattern for complex search queries, event sourcing for CRM-ready domain events, and a three-tier booking settings inheritance model that dramatically reduced provider onboarding friction. On the frontend, we built full CRUD admin interfaces, booking flows, and patient-facing search with map integration — all using Next.js 15 with React 19.
The Relay System — a genuinely novel approach to async booking negotiation that solved a real-world problem no off-the-shelf solution could handle.
How the three-tier settings inheritance eliminated 80% of provider onboarding friction — a simple concept with massive real-world impact.
The Smart Event Emission System using AsyncLocalStorage — automatic context-aware domain events without any manual wiring, ready for CRM and analytics consumers.
Magic link authentication that truly respects the user — no passwords, no apps to install, and links that self-invalidate the moment they're no longer relevant.
The specification pattern for search — every new filter or sorting strategy is a self-contained, composable, testable object.
How the entire email lifecycle keeps everyone informed — patients, providers, and coordinators always know what's happening without checking a portal.
The AI-powered referral intake pipeline — watching Gemini AI extract structured data from emailed referral letters with confidence scoring felt like real magic.
Their deep understanding of the UK private healthcare market — they knew exactly which pain points mattered most and prioritized ruthlessly.
The trust they placed in us to architect a complex, multi-party platform from scratch — they let us make the right technical decisions without micromanaging.
Always available for rapid feedback — decisions came fast, which meant we could iterate at startup speed without blockers.
Their willingness to evolve scope as the platform took shape — new booking types, relay messaging, and care coordinator workflows were added collaboratively, not as last-minute demands.
Their commitment to security and data protection from day one — in healthcare, this isn't optional, and they never treated it as an afterthought.
The genuine excitement when features exceeded their original expectations — their enthusiasm was contagious and pushed us to deliver even more.
The platform needed to support integrated bookings (real-time PMS sync), preferred time bookings (async relay negotiation), and redirect bookings (external links) — each with different payment flows, state machines, and user experiences. We designed a dynamic multi-step wizard that conditionally renders the right steps based on service configuration, with shared validation and Stripe integration across all paths.
Building a reliable async communication channel between patients, providers, and care coordinators required careful state machine design. Each relay transitions through well-defined states, triggers contextual email notifications, manages magic link lifecycle, and handles edge cases like simultaneous modifications from multiple parties.
Provider search needed PostGIS-powered proximity queries with ST_DWithin and ST_Distance, combined with service type, price range, CQC rating, and insurance network filters — all composable and sortable. The Specification Pattern gave us a clean, extensible architecture where each filter is an independent, testable specification object.
Healthcare data demands strong security, but patients and providers shouldn't need accounts or passwords. Magic links with one-use tokens, time-limited expiry, and terminal-state invalidation gave us strong security with zero-friction access. A global role-based sanitization interceptor strips sensitive fields automatically based on who's calling the API.
Private healthcare providers offer hundreds of services with different pricing, booking rules, and restrictions. The three-tier settings inheritance model (Service Definition → Provider Defaults → Service Offering) allows providers to set sensible defaults at each level, with lower levels only overriding what's different — reducing data entry by roughly 80%.
The existing Bubble + Airtable prototype was live and in use. We needed to build the production platform fast enough that the No-Code version didn't have time to accumulate more technical debt. The Nx monorepo with affected builds, shared TypeScript types, and incremental CI/CD kept the team shipping daily.
Every database mutation needed to be captured as a domain event with actor context. Using AsyncLocalStorage, we built automatic context propagation that tracks the current user through every database operation, emitting events via SSE in development and ready for production Pub/Sub consumers.
Processing emailed referral letters required chaining Gmail API, Gemini AI for intelligent data extraction, and Document AI for OCR — with confidence scoring to flag uncertain fields. The pipeline needed to be reliable, auditable, and gracefully handle the wide variety of formats that NHS referral letters come in.
Five Next.js frontends and a NestJS backend sharing types, utilities, and Prisma schemas required careful workspace architecture. Nx's affected build system reduced CI costs by 50-70%, and shared TypeScript types caught integration issues at compile time rather than in production.

Patients Main View

Provider View

Provider View Services

Provider View Availability

Appointment Request

Appointment Request Info

Appointment Request Payment

Appointment Request Sent

Relay Page Patient

Relay Page Provider Login

Relay Page Provider Administrator

Relay Page Provider Propose Time

Relay Page Provider View Events

Relay Page Patient View Events

Relay Page Booking Closed

Events Console Expanded Event

Events Console Events

Relay Management

Dashboard Admin

Payments Admin

Originator Admin

Edit Originator

Providers Admin

Provider Edit

Provider Integrated Booking

Provider Booking Settings

Provider Services Admin

Provider Edit Service

Patient Booking Request Email

Provider and Patient Confirmation

Provider Service Inheritance
Let's discuss how we can build a solution tailored to your business needs.
Book a Call
A multilingual SaaS platform for professionals who operate on an appointment basis — with booking, payments, and calendar integrations.

A travel platform transforming vacation dreams into reality — with tour operator integrations, real-time accommodation search, and seamless booking.

A direct-to-consumer wine subscription platform with data-driven taste recommendations, multi-brand checkout, and alternative payment integrations.