Skip to content

BookingZone Repository Registry

Canonical list of all repositories in the BookingZone platform. When a new repo is added, it MUST be registered here AND have an AGENTS.md referencing this platform context.

Production Repositories

Backend / Source of Truth

Repo Role Stack Owner
reservation-api-server THE source of truth. Frappe app exposing all BZ doctypes via REST. All business data lives here. Frappe v15, Python 3.10, MariaDB, Redis Backend team
bz-api-server LEGACY. NestJS + DynamoDB API server being migrated to Frappe. Frozen for new features. NestJS, AWS Lambda, DynamoDB Migration team
dynamodb-frappe-migration One-shot migration engine moving DynamoDB data into Frappe. Python 3.10, boto3 Migration team

Operator-Facing Frontends

Repo Role Stack
admin-web-app Operator/admin panel. Consumed by venue staff (System Admin, Business Admin, Outlet Manager). React 19, Vite, tRPC, Express proxy
bz-admin-app Older admin panel (legacy). Angular
bz-admin-app-v2 Newer admin app variant. TBD

Customer-Facing Frontends

Repo Role Stack
venuplus-app "At The Pier" customer-facing booking PWA (single-tenant). Next.js 15, RTK
customer-web-app Multi-tenant white-label customer web (Scene75, Malibu Jack's, etc.). Web + Electron kiosk. Next.js 14, Redux Toolkit
bz-customer-web Older customer web (legacy). Next.js

Quality / Test Repositories

Repo Role Stack
reservation-browser-tests Playwright E2E suite for the venuplus-app PWA (VenuPlus) and admin-web-app (ATP). Canonical home of the browser-level SYS-005 P0 journeys — asserts BZBooking / payment / BZBookingAvailability state via API, not only UI text. Cross-repo test code only; ships nothing to production. Playwright, TypeScript, Node 22

Adjacent Products

Repo Role Stack
finco-api-server FinCo financial copilot — separate product, shares ECS infra patterns. Frappe, Python, AWS
bz-reporting-script Utility scripts for DynamoDB reporting / CE product ID management. Python, boto3

Sister Frappe Products (Isolated Stacks)

Repo Role Stack Isolation
rental-api-server BookingZone rental domain as an isolated Frappe v15 app. Owns BZRental* and BZLocker* DocTypes (locker domain moved from booking). Zero runtime dependency on reservation-api-server — opaque Data IDs only, no mandatory HTTP. Does NOT share BookingZone MariaDB. Frappe v15, Python, MariaDB, Redis VPC 10.30.0.0/16, RDS, ECS rental-dev-cluster, ECR rental-dev-frappe, pipeline rental-dev-pipeline
insurance-ecosystem-frappe RiskBridge / Insurance Ecosystem standalone Frappe app. God-agent / company listing / research live here. Not BookingZone booking SoT. Frappe v15, Python, MariaDB, Redis VPC 10.20.0.0/16, ECS insurance-dev-cluster

Note: rental-api-server and insurance-ecosystem-frappe are sister Frappe products in the same AWS account. They share only the CodeStar connection and frappe-erpnext-base Docker image — not VPC/RDS/ECS. rental-api-server has zero runtime dependency on reservation-api-server (opaque Data IDs only, no mandatory HTTP). See ADR-0010.

Dependency Graph

                  ┌──────────────────────────────┐
                  │ reservation-api-server       │
                  │ (Frappe — BOOKING source     │
                  │  of truth)                   │
                  └──────────────┬───────────────┘
                                 │ REST API (whitelisted methods)
              ┌──────────────────┼─────────────────────┐
              │                  │                     │
              ▼                  ▼                     ▼
   ┌──────────────────┐  ┌─────────────────┐  ┌──────────────────┐
   │ admin-web-app    │  │ venuplus-app    │  │ customer-web-app │
   │ (operator)       │  │ (customer-ATP)  │  │ (customer-multi) │
   └──────────────────┘  └─────────────────┘  └──────────────────┘
              │                                          ▲
              │ proxies & enriches                       │
              └──────────────────────────────────────────┘
                          (admin-web-app's Express tier
                           may serve as gateway for
                           operator-side workflows)

   Legacy parallel surface:
   bz-api-server (NestJS/DynamoDB) ← still active, frozen
   ↑ being read by bz-customer-web (legacy customer app)

   ════════════════════════════════════════════════════════════════
   SISTER FRAPPE PRODUCTS (isolated VPCs, ZERO runtime dependency):

   ┌───────────────────────┐          ┌─────────────────────────────┐
   │ rental-api-server     │          │ insurance-ecosystem-frappe  │
   │ (rental + locker SoT) │          │ (RiskBridge SoT)            │
   │ VPC 10.30.0.0/16      │          │ VPC 10.20.0.0/16            │
   │ Owns: BZRental*,      │          │                             │
   │       BZLocker*       │          │                             │
   └───────────────────────┘          └─────────────────────────────┘
            ╳ NO runtime edge ╳
   ┌──────────────────────────────┐
   │ reservation-api-server       │  ← booking domain only; locker moved out
   │ (booking SoT)                │
   └──────────────────────────────┘

   Shared AWS resources (CodeStar, frappe-erpnext-base image) only.
   No shared VPC/RDS/ECS. No mandatory HTTP between rental ↔ booking.
   Cross-refs use opaque Data IDs; sync is out-of-band (batch/ETL).

Note on 501 shims (reservation-api-server#893): After the rental split, reservation-api-server keeps temporary 501 whitelist shims for consumer_rental*, rental_inventory, and scooterbug_* methods until clients migrate to call rental-api-server directly.

Migration risk: After deleting BZLocker* and BZRental* DocTypes from reservation-api-server, orphan MariaDB tables (e.g., tabBZLockerUnit, tabBZLockerBank) may remain until operators explicitly drop them. See ADR-0010 for migration checklist.

Cross-Repo Communication Channels

From To Mechanism
Any frontend Frappe backend HTTPS REST: /api/method/<dotted.path> + token auth
admin-web-app Frappe Express proxy at /api/frappe/* (server-side token)
Frappe → external GoHighLevel OAuth 2 + scheduled sync jobs
Frappe → external OpenPhone REST + webhooks
Frappe → external Magensa / Datacap / Stripe Gateway-specific (see ADR-0003)
Frappe → R365 SFTP daily export

Adding a New Repo

  1. Open a PR to this file adding the new row.
  2. Add AGENTS.md to the new repo with the System Context section (template below).
  3. If the repo has its own product context, set up .specify/memory/constitution.md inheriting from the system constitution.
  4. Wait for architecture review.

AGENTS.md Template

See bz-platform-context/specs/SYS-000-template/AGENTS-template.md (or any existing repo's AGENTS.md as reference).