A marketplace for booking event venues and the supplier services that go with them — listings and onboarding, availability calendars, a request and negotiation flow, chat between guests and hosts, reviews, invoicing and contracts. The hard parts were the money — Stripe Connect deposits, holds, split charges, payouts, claims and refunds — and keeping host calendars in sync in both directions over iCal.

~228k lines of TypeScript across four repositories, plus ~3.3k lines of Terraform across three environments.
api, hola-place-front, holaplace-scheduler, holaplace-infra) plus a separate admin front, each with its own pipeline and Docker image.data_manager module owning every Mongoose model and repository, and a dedicated api module holding all HTTP controllers, guards and interceptors.exist_booking, exist_venue…) → ownership guards (is_host_booking, is_supplier_service…) → field-level response interceptors that whitelist what each role may see.Bun 1.x + Hono 4, rendering with puppeteer-core on system Chromium, Redis 7 caching the rendered HTML with an invalidation endpoint, Zod-validated config. A Traefik v3 HeaderRegexp(User-Agent, …) rule routes ~30 crawler and AI-bot agents here; everything else goes to the SPA, with static assets proxied through.
NestJS 8 on Node 16 with Croner 5 — a task registry of declarative cron expressions, task definitions and run records in DynamoDB, Axios + axios-retry callbacks into the API through a token service, Joi-validated env plus AWS Secrets Manager and Slack error reporting behind a health endpoint.
eu-west-3, state in a GitLab-hosted HTTP backend, three environments (dev / stage / prod) composed from a single reusable environment module plus small components modules.user_data bootstrap scripts that pull a docker-compose-<service>.yml from S3 and start the ECR image; lifecycle hooks for graceful drain, instance-refresh deploys.holaplace.internal, a WAFv2 web ACL and 8 security groups.mongodump to S3; ELK (Elasticsearch / Logstash / Kibana) on its own instance alongside the CloudWatch agent, with Grafana Loki and Prometheus metrics from the API.tsc + lint) → multi-stage Docker build with per-environment build args → push to a private ECR → deploy by terminating/refreshing ASG instances, with separate migration-runner scripts for the API; a self-hosted GitLab Runner on Lightsail and the registry are their own Terraform stacks.The full marketplace lifecycle: deposit holds, split charges, transfers and reversals, manual payouts, deposit-claim adjudication with its own money service, and separate platform and connect webhook processors.
The scheduler service holds every recurring job as a registry entry, invokes the API over authenticated callbacks, and writes an auditable run history to DynamoDB, so API instances stay stateless and horizontally scalable.
Traefik user-agent matching sends crawlers to a Bun + Hono + Puppeteer renderer with a Redis HTML cache and an invalidation API, replacing a paid Lambda@Edge / Prerender.io setup.
iCal generation plus node-ical/CalDAV ingestion, with a dedicated realtime gateway pushing availability changes to connected clients.
A response interceptor and @Lang() decorator localize payloads per request without duplicating endpoints.
A family of pick-*/omit-fields interceptors projects entity responses per role and context, keeping host, guest and admin views on one controller.
No ECS or EKS — ASGs boot from S3-hosted compose files and deploys are instance refreshes, giving container-style rollout on a low-cost footprint.
One-off maintenance commands (anonymization, timezone/geo backfills, upload→S3 migration, balance payouts) versioned alongside the 152-file migration history.

