@@ -25,9 +25,18 @@ infra/
2525├── network/ Docker Compose fragments (network.yaml)
2626├── observability/ Docker Compose fragments (observability.yaml)
2727├── nginx/ Nginx reverse proxy config (Prosody HTTPS)
28- └── sh/ atl.sh pubnix provisioning (Ansible, Terraform, skel, Vagrant)
28+ ├── sh/ atl.sh pubnix provisioning (Ansible, Terraform, skel, Vagrant)
29+ ├── cert-manager.yaml TLS certificate management (included by root compose.yaml)
30+ └── networks.yaml Shared Docker network definitions (included by root compose.yaml)
2931
3032scripts/ Shell scripts (init.sh — data dirs + dev certs)
33+
34+ tests/
35+ ├── unit/ Bridge unit tests
36+ ├── integration/ Bridge integration tests
37+ ├── e2e/ End-to-end tests
38+ ├── protocol/ Protocol-level tests
39+ └── ... fixtures/, controllers/, irc_utils/, utils/, legacy/
3140```
3241
3342` apps/ ` = software we build and own (polyglot: Next.js + Python).
@@ -62,47 +71,70 @@ Run `just` to see all available recipes grouped by domain.
6271
6372### Workspace
6473
65- | Command | Purpose |
66- | ---------------- | ------------------------------------------ |
67- | ` just setup ` | Full bootstrap (JS + Python + env + certs) |
68- | ` just dev ` | Start all JS apps via Turborepo |
69- | ` just build ` | Production build (Turbo graph) |
70- | ` just check ` | Lint + format check (Ultracite) |
71- | ` just fix ` | Lint + format fix (Ultracite) |
72- | ` just typecheck ` | TypeScript validation across all packages |
73- | ` just test ` | Run all tests via Turborepo |
74- | ` just clean ` | Remove build artifacts |
74+ | Command | Purpose |
75+ | ------------------------ | ------------------------------------------ |
76+ | ` just setup ` | Full bootstrap (JS + Python + env + certs) |
77+ | ` just install ` | ` pnpm install ` |
78+ | ` just install-frozen ` | ` pnpm install --frozen-lockfile ` |
79+ | ` just dev ` | Start all JS apps via Turborepo |
80+ | ` just build ` | Production build (Turbo graph) |
81+ | ` just check ` | Lint + format check (Ultracite) |
82+ | ` just fix ` | Lint + format fix (Ultracite) |
83+ | ` just typecheck ` | TypeScript validation across all packages |
84+ | ` just test ` | Run all tests via Turborepo |
85+ | ` just test-coverage ` | Run tests with coverage |
86+ | ` just clean ` | Remove build artifacts |
87+ | ` just renovate-validate ` | Validate Renovate config |
88+ | ` just docker-clean ` | Prune unused Docker images and volumes |
7589
7690### Apps
7791
78- | Command | Purpose |
79- | ----------------------- | ------------------------- |
80- | ` just portal-dev ` | Portal dev server |
81- | ` just portal-db-up ` | Start PostgreSQL (Docker) |
82- | ` just portal-db-push ` | Push schema to dev DB |
83- | ` just portal-db-studio ` | Open Drizzle Studio |
84- | ` just web-dev ` | Marketing site dev server |
85- | ` just chat-web-dev ` | atl.chat dev server |
86- | ` just docs-dev ` | Mintlify docs preview |
92+ | Command | Purpose |
93+ | ------------------------- | -------------------------------- |
94+ | ` just web-dev ` | Marketing site dev server |
95+ | ` just web-build ` | Build marketing site |
96+ | ` just web-deploy ` | Deploy to Cloudflare Workers |
97+ | ` just chat-web-dev ` | atl.chat dev server |
98+ | ` just chat-web-build ` | Build atl.chat site |
99+ | ` just portal-dev ` | Portal dev server |
100+ | ` just portal-build ` | Build portal |
101+ | ` just portal-start ` | Start portal (production mode) |
102+ | ` just portal-db-up ` | Start PostgreSQL (Docker) |
103+ | ` just portal-db-down ` | Stop PostgreSQL |
104+ | ` just portal-db-generate ` | Generate Drizzle migration files |
105+ | ` just portal-db-migrate ` | Run pending migrations |
106+ | ` just portal-db-push ` | Push schema to dev DB |
107+ | ` just portal-db-seed ` | Seed the database |
108+ | ` just portal-db-studio ` | Open Drizzle Studio |
109+ | ` just docs-dev ` | Mintlify docs preview |
110+ | ` just docs-build ` | Build docs |
111+ | ` just docs-check-links ` | Check for broken links |
87112
88113### Chat services (Docker)
89114
90- | Command | Purpose |
91- | ------------------ | ------------------------------------- |
92- | ` just chat-dev ` | Start all chat services (dev profile) |
93- | ` just chat-down ` | Stop chat services |
94- | ` just chat-logs ` | Tail logs (optionally filter by name) |
95- | ` just chat-status ` | Show running containers |
96- | ` just chat-build ` | Build all service images |
115+ | Command | Purpose |
116+ | --------------------- | -------------------------------------------- |
117+ | ` just chat-init ` | Initialize chat data directories and config |
118+ | ` just chat-dev ` | Start all chat services (dev profile) |
119+ | ` just chat-prod ` | Start all chat services (production profile) |
120+ | ` just chat-down ` | Stop chat services (dev) |
121+ | ` just chat-down-prod ` | Stop chat services (production) |
122+ | ` just chat-logs ` | Tail logs (optionally filter by name) |
123+ | ` just chat-status ` | Show running containers |
124+ | ` just chat-build ` | Build all service images |
125+ | ` just prosody-token ` | Generate a Prosody API token |
126+ | ` just gencloak ` | Generate IRC cloaking key |
97127
98128### Bridge (Python)
99129
100- | Command | Purpose |
101- | ----------------------- | ------------------------ |
102- | ` just bridge-check ` | Ruff lint + format check |
103- | ` just bridge-fix ` | Ruff lint fix + format |
104- | ` just bridge-typecheck ` | basedpyright type check |
105- | ` just bridge-test ` | pytest suite |
130+ | Command | Purpose |
131+ | ----------------------- | -------------------------- |
132+ | ` just bridge-install ` | ` uv sync --all-extras ` |
133+ | ` just bridge-check ` | Ruff lint + format check |
134+ | ` just bridge-fix ` | Ruff lint fix + format |
135+ | ` just bridge-typecheck ` | basedpyright type check |
136+ | ` just bridge-test ` | pytest suite |
137+ | ` just bridge-logs ` | Tail bridge container logs |
106138
107139### Pubnix (atl.sh)
108140
@@ -130,6 +162,15 @@ Three env file layers at the repo root:
130162
131163Docker Compose always requires ` --env-file .env --env-file .env.dev ` (or ` .env.prod ` ). The ` just ` recipes handle this automatically.
132164
165+ Two Compose override files handle environment-specific service config:
166+
167+ | File | Purpose |
168+ | ---------------------------- | ---------------------------------------------- |
169+ | ` compose.dev-override.yaml ` | Dev overrides (bind mounts, debug ports, etc.) |
170+ | ` compose.prod-override.yaml ` | Production overrides (restart policies, etc.) |
171+
172+ ` just chat-dev ` uses ` compose.yaml ` + ` compose.dev-override.yaml ` . ` just chat-prod ` uses ` compose.yaml ` + ` compose.prod-override.yaml ` .
173+
133174Portal has its own ` .env ` at ` apps/portal/.env ` — see ` apps/portal/README.md ` for details.
134175
135176## Shared config
@@ -165,6 +206,7 @@ Workflows in `.github/workflows/`:
165206- ` portal-maintenance.yml ` — TODO-to-issue conversion
166207- ` web-deploy.yml ` — OpenNext deploy to Cloudflare Workers (PR previews + prod)
167208- ` chat-ci.yml ` — bridge lint / test / coverage, Docker builds for IRC / XMPP / bridge
209+ - ` pubnix-ci.yml ` — ansible-lint + molecule tests for atl.sh provisioning
168210- ` docs-ci.yml ` — Mintlify validate + broken link check
169211- ` codeql.yml ` — CodeQL SAST (JS/TS, Python, Actions)
170212- ` dependency-review.yml ` — PR dependency vulnerability check
0 commit comments