The platform doesn't run a cron daemon. A single Node tick loop runs every WORKER_TICK_MS (default 60s) and executes four idempotent jobs in sequence. Notification fan-out goes through a NotificationEvent row with a unique dedupeKey so retries can't double-send. Email goes through Nodemailer with a console fallback for local dev. Same image, same env, same idempotent shape — it just runs forever.
- reminder-scan — surfaces upcoming sessions.
- renewal-scan — checks subscription windows + payment evidence.
- no-show-sweep — auto-ends abandoned sessions.
- notification-dispatch — drains pending NotificationEvents.
- Nodemailer with console fallback for local dev.

- Deep dive · 01
Three-app monorepo
web · api · worker, plus one shared zod-contracts package. Postgres 16 + Redis 7 underneath. npm workspaces, no Turborepo.
- Deep dive · 02
Credit ledger booking model
Every booking action emits a typed ledger entry with a deterministic key. Reschedule preserves the hold; cancel inside the window writes a release; complete writes release + use.
- Deep dive · 03
Encryption at rest
AES-256-GCM via a single EncryptionService, shared across messages, therapist notes, and Daily-room join payloads. Round-trip + tamper-detection unit tests.
- Deep dive · 04
Stripe webhook + payment ledger
Adapter pattern with a Mock twin for local. Signature-verified raw-body Nest route. Payment.eventId unique. Renewal pipeline gates credits on exact-period payment evidence.
- Deep dive · 06
Hardened, reproducible deploy
CI typechecks + tests every push and builds signed images for the three apps. One shell script on the host pulls + migrates + restarts. Edge proxy isolates everything behind automated TLS.
Got something
this size?
Big ambitions, we match the energy. Drop a brief — reply within one working day.