Year

2026

Healthcare · Therapy SaaS

Duration

12+

Engagement · development only — design and product direction by the practice

A boutique therapy practice, built like a SaaS.

End-to-end therapy + relationship-support platform for professionals whose work breaks normal therapy logistics. Bookable consultation, subscription credit ledger, encrypted messaging, video sessions, automated reminders. Three-app TypeScript monorepo, deployed reproducibly to a hardened EU-region private cloud. Studio scope: engineering, infrastructure and CI; design and product direction belong to the practice.

← All works
trs.wd-staging.comOpen ↗
trs hero
Apps shipped
3
web · api · worker
Prisma models
15
domain core
Worker jobs
4
per tick
Encryption
AES-256-GCM
messages · notes · join payloads
The story

Therapy that fits a career, not the other way around.

TRS targets a specific wedge — executives, athletes, entertainers, service members, healthcare and shift workers. People whose schedule, mobility or visibility makes traditional therapy logistics fail. The product side is a clinic. The engineering side is a SaaS that has to behave correctly under retries, late webhooks, missed sessions and rescheduled bookings.

We shipped both: a Next.js 16 marketing surface that explains the wedge, and an operational backbone — Nest + Prisma API, encrypted message + notes layer, Stripe-signed webhook ledger, and a single tick-loop worker that does the boring renewal math correctly.

trs.wd-staging.com/
Homepage
HomepageHero, audiences, how-it-works, FAQ.
trs.wd-staging.com/services
Services
Services£80 consultation + 2 / 4 / 8-session monthly plans.
What's there

Bookable, billable, encryptable, deployable.

Clients sign in, book the £80 / 80-min consultation, get assigned a therapist, then run on a 2- / 4- / 8-sessions-per-month subscription. Every booking action writes a typed entry to a credit ledger so reschedules preserve the original hold and webhook retries can never double-credit.

Messages and therapist notes are encrypted at rest with AES-256-GCM. Video sessions are wired through an adapter with a mock-twin for local dev. The worker runs reminders, renewals, no-show sweep and notification dispatch on a single tick loop with idempotent dedupe keys. Deploy is one shell script: pull signed images, run schema migrations, bring the stack up. The data plane and queue layer never face the internet directly.

Marketing surface — wedge, audiences, values, FAQ.
Marketing surface — wedge, audiences, values, FAQ.
trs.wd-staging.com/values
Values
ValuesConfidentiality, fit, flexibility — the wedge spelled out.
trs.wd-staging.com/about
About
AboutPractice philosophy + audiences supported.
Stack
  • Next.js 16 · React 19
  • NestJS 11
  • Prisma 6 · PostgreSQL 16
  • Redis 7 · BullMQ
  • Stripe (adapter pattern)
  • Daily.co video adapter
  • AES-256-GCM at rest
  • Tailwind CSS 4
  • Tick-loop worker (tsx)
  • Hardened EU-region deploy
  • Signed-image CI/CD
  • Playwright · TypeScript
Delivered
  • Marketing site
  • Role-aware client / therapist app
  • Bookable 80-min consultation
  • Subscription credit ledger
  • Encrypted messaging + therapist notes
  • Video session adapter (Daily + mock)
  • Therapist availability + blackouts
  • Tick-based worker (reminders, renewals, no-show)
Numbers

What moved.

Apps shipped
3
web · api · worker
Prisma models
15
domain core
Worker jobs
4
per tick
Public routes
21+
marketing + auth
Encryption
AES-256-GCM
messages · notes · joins
Webhook idempotency
100%
Payment.eventId unique
CI
Signed images
typecheck + tests + build
Studio scope
Engineering
design + product by client
trs.wd-staging.com/sign-up
Sign-up
Sign-upAccount creation gate before booking.
trs.wd-staging.com/sign-in
Sign-in
Sign-inJWT-cookie session, role-aware middleware downstream.
Read deeper

For the readers.

Each topic below opens its own page with the full story.

Got something
this size?

Big ambitions, we match the energy. Drop a brief — reply within one working day.