Repository Structure
This is an Nx monorepo managed with pnpm workspaces. All deployable surfaces and shared packages live under two top-level directories.
Directory layout
Section titled “Directory layout”verify-by-video/├── apps/│ ├── agent-app/ # Agent video widget (JavaScript, Static Web App)│ ├── customer-app/ # Customer session launcher (JavaScript, Static Web App)│ ├── docs/ # This documentation site (Astro/Starlight)│ ├── onboarding/ # Developer onboarding site (Astro/Starlight)│ └── vm-start-stop/ # VM lifecycle scheduler (Python)├── packages/│ └── pexip-sdk/ # MaxConf API - Azure Functions v2 + FastAPI (Python)├── .devcontainer/ # Dev container configuration├── .github/│ ├── workflows/ # GitHub Actions CI/CD│ └── GITHUB_ACTIONS_CONFIG.md # Deployment configuration reference├── nx.json # Nx workspace configuration├── pnpm-workspace.yaml # pnpm workspace definition├── pyproject.toml # Root Python config (UV workspace)└── tsconfig.base.json # Shared TypeScript configProject boundaries
Section titled “Project boundaries”| Project | Language | Platform | Deployment |
|---|---|---|---|
agent-app | JavaScript | Azure Static Web App | SWA deployment token |
customer-app | JavaScript | Azure Static Web App | SWA deployment token |
docs | MDX / Astro | Azure Static Web App | SWA deployment token |
onboarding | MDX / Astro | Local only | Not deployed |
vm-start-stop | Python | GitHub Actions (cron) | Runs in workflow |
pexip-sdk | Python / FastAPI | Azure Functions v2 | OIDC + slot swap |
Key boundaries
Section titled “Key boundaries”pexip-sdkowns all server-side Pexip and Azure interactions. Do not duplicate its logic in frontend apps.agent-appandcustomer-appare fully static - no server-side runtime.docsis product/team documentation.onboardingis developer learning. They serve different audiences and must not be conflated.- The Pexip Management API and the Pexip WebRTC client SDK are distinct surfaces. The Management API is consumed by
pexip-sdk; the WebRTC SDK (pexrtc.js) is consumed byagent-appandcustomer-app.
Nx project configuration
Section titled “Nx project configuration”Each project has a project.json defining its targets (build, serve, test, lint). Use Nx Console or the CLI to discover available targets:
# List all projectsnx show projects
# Show targets for a specific projectnx show project pexip-sdk
# Visualize dependenciesnx graphConfiguration files
Section titled “Configuration files”| File | Purpose |
|---|---|
nx.json | Task pipeline, caching, default runner config |
pnpm-workspace.yaml | Declares apps/* and packages/* as workspace packages |
pyproject.toml (root) | UV workspace members, shared Python settings |
tsconfig.base.json | TypeScript path aliases and compiler defaults |
.github/workflows/*.yml | CI/CD workflow definitions |
.devcontainer/devcontainer.json | Container image, features, extensions, ports |
Dependency management
Section titled “Dependency management”- Node packages: Managed via pnpm workspaces. Run
pnpm installat the root. - Python packages: Managed via UV. Each Python project has its own
pyproject.tomlwith dependencies. Runuv syncat the root to install all. - Global tools (Nx, pnpm, Azurite): Installed globally in the dev container via
setup.sh.