Services Overview
ZenCore (zs-backend)
The main API platform. Handles authentication (OTP → JWT), organizations, space groups, meeting spaces, bookings, pricing, payments (Stripe), refunds, vouchers, webhooks, and user/role management. Built with NestJS + TypeORM + PostgreSQL. All frontend apps communicate primarily with ZenCore. Exposes REST APIs at /api/v1/ with a consistent response envelope.
ZenEdge (zs-mrd-backend)
The device and edge bridge. Manages physical spaces, IoT device adapters, meeting room displays, magic links, and the adapter protocol. Connects the virtual booking world (ZenCore) to the physical device world (IoT Adapter). Built with NestJS + TypeORM + PostgreSQL. Communicates with ZenCore via API keys and webhooks.
Scheduler (zs-bullmq)
The meeting-space state machine and job scheduler. Uses BullMQ + Redis to manage delayed jobs for booking state transitions, webhook delivery, and status updates. Implements two state machines: a room-level machine (free → upcoming → occupied → cleaning → free) and a space-level machine (available_now → available_at → reserved → not_available). Provides a Bull Board UI for queue monitoring.
Realtime Service (zs-realtime-service)
WebSocket relay built with NestJS + Socket.IO. Provides real-time event broadcasting to connected clients (admin dashboards, meeting room displays). Supports JWT-authenticated connections with room-based pub/sub. Events are namespaced (zscloud:meeting.*, zscloud:booking.*, zscloud:device.*).
IoT Adapter (zs-iot)
On-premise gateway running on Raspberry Pi. Express + SQLite monolith that manages local IoT devices (UniFi access points, door controllers, smart locks). Connected to ZenEdge via Tailscale VPN. Implements the adapter protocol endpoints for each managed device. Supports device registry, booking sync, voucher generation, and remote management.
Admin Dashboard (zs-admin)
Next.js application serving as both the admin console and public booking interface. Admin features include organization management, space configuration, device monitoring, booking management, user/role administration, webhook setup, and reporting. Public features include space browsing and booking creation. Uses Next.js App Router with route groups for authenticated vs. public sections.
Booking SPA (zs-booking)
Standalone React + Vite single-page application for public booking. Provides a streamlined flow: browse space groups → check availability → select space → fill booking form → pay via Stripe → confirmation. Embeddable as a widget in third-party sites. Communicates only with ZenCore APIs.
Meeting Room Display (zs-meeting-room-display)
React + Vite + Socket.IO web application designed for screens mounted outside meeting rooms. Shows real-time room status (available, booked, in-use), upcoming schedule, and booking actions. Connects to the Realtime Service for live updates. Supports QR code scanning for quick booking. Also available as a native Android kiosk app (ZenspaceMeetingDisplay).
Next Steps
- Architecture — How these services connect
- Bookings & State Machine — Booking lifecycle