Skip to content

Tablez — Repository Map

All repositories in the tablez-dev GitHub organization. Each repo is a bounded context optimized for independent development and deployment.


Service Repos

Repo Purpose Tech IDesign Layers Status
tablez-reservation Core booking engine — reservations, waitlist, availability, seating .NET 10, Marten, MediatR, Stateless Api, Managers, Engines, ResourceAccess Scaffolded, CI, image on ghcr.io
tablez-guest Guest profiles, visit history, preferences .NET 10, Marten, MediatR Api, Managers, Engines, ResourceAccess Scaffolded, CI, image on ghcr.io
tablez-restaurant Restaurant config — tables, hours, floor plans .NET 10 Minimal scaffold Scaffolded, CI, image on ghcr.io
tablez-notification Notification delivery — SMS, email, push .NET 10, Hangfire Minimal scaffold Scaffolded, CI, image on ghcr.io
tablez-ai AI agent — natural language reservation via phone, chat, messaging .NET 10, Semantic Kernel Minimal scaffold Scaffolded, CI, image on ghcr.io
tablez-api-gateway YARP reverse proxy — routes to backend services .NET 10, YARP Single project Scaffolded, CI, image on ghcr.io
tablez-web Staff dashboard and booking widget Next.js (planned) README only
tablez-migration Database schema migrations — runs as k8s Job .NET 10 Single project Scaffolded

Infrastructure Repos

Repo Purpose Tech
tablez-gitops Flux CD manifests — infrastructure (PostgreSQL, Valkey) + all 6 service deployments Kustomize, Flux CD
tablez-docs Architecture, analysis, competitive landscape, org model Markdown

Shared Repos

Repo Purpose Tech
tablez-contracts Shared events, enums, DTOs, interfaces, observability .NET 10 class libraries (Contracts + Observability)

Dependency Graph

graph TB
    WEB["tablez-web<br/>(frontend)"] --> GW["tablez-api-gateway<br/>(YARP)"]
    GW --> R["tablez-reservation"]
    GW --> G["tablez-guest"]
    GW --> REST["tablez-restaurant"]
    GW --> AI["tablez-ai"]

    R --> C["tablez-contracts<br/>(shared types + observability)"]
    G --> C
    REST --> C
    AI --> C
    N["tablez-notification"] --> C
    GW --> C

    R -.->|events via Valkey| N
    R -.->|events via Valkey| G
    R -.->|events via Valkey| WEB

    MIG["tablez-migration"] --> C
    GITOPS["tablez-gitops<br/>(Flux CD)"] -.->|deploys| R
    GITOPS -.->|deploys| G
    GITOPS -.->|deploys| REST
    GITOPS -.->|deploys| AI
    GITOPS -.->|deploys| N
    GITOPS -.->|deploys| GW

All services reference tablez-contracts for compile-time type safety and shared observability (Tablez.Observability). Every service exports traces, metrics, and logs via OTLP — a single TraceId follows a request across all services. Services communicate via Valkey pub/sub events (with TracedEventEnvelope for trace propagation), not direct calls. The API gateway routes external traffic to backend services.


Internal Structure (IDesign)

Services with full IDesign scaffolding follow this structure:

graph TB
    API["Tablez.{Service}.Api<br/>Clients — controllers, health"] --> MGR["Tablez.{Service}.Managers<br/>Commands + Queries (MediatR)"]
    MGR --> ENG["Tablez.{Service}.Engines<br/>Pure business rules, no I/O"]
    MGR --> RA["Tablez.{Service}.ResourceAccess<br/>Marten, Valkey, external APIs"]
    API --> CONTRACTS["tablez-contracts"]
    MGR --> CONTRACTS
    ENG --> CONTRACTS
    RA --> CONTRACTS
    TEST["Tablez.{Service}.Tests"] -.-> API
    TEST -.-> MGR
    TEST -.-> ENG
    TEST -.-> RA

Dependency rules: - Api → Managers (only) - Managers → Engines + ResourceAccess - Engines → nothing (pure logic) - ResourceAccess → nothing internal (external systems only) - All layers → tablez-contracts


CI/CD

Each service repo has a GitHub Actions workflow (.github/workflows/docker-build.yml) that builds a Docker image and pushes to ghcr.io/tablez-dev/tablez-{service} on push to main. Images are tagged with latest and the commit SHA.

Builds run on self-hosted ARC runners (Docker-in-Docker) inside the tablez vcluster. Each repo has a dedicated scale set: arc-linux-tablez-{service}. Runner config: tablez-gitops/infrastructure/base/arc-runners/. ARC controller and runners are Flux-managed — fully portable to any cluster.

Flux CD watches the gitops repo and automatically deploys to the vcluster.

Deployment

Each service has a Dockerfile and is deployed as a container to Kubernetes via Flux CD. Gitops manifests live in tablez-gitops/apps/base/{service}/.

Repo Deploy strategy Replicas Image
reservation Auto-deploy 2+ ghcr.io/tablez-dev/tablez-reservation
guest Auto-deploy 1+ ghcr.io/tablez-dev/tablez-guest
restaurant Auto-deploy 1 ghcr.io/tablez-dev/tablez-restaurant
notification Auto-deploy 1 ghcr.io/tablez-dev/tablez-notification
ai Auto-deploy 2+ ghcr.io/tablez-dev/tablez-ai
api-gateway Auto-deploy 2+ ghcr.io/tablez-dev/tablez-api-gateway
web Auto-deploy 2+ TBD (Next.js)
migration Human gate Job (runs once) TBD