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 |