You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: showcase/README.md
+44Lines changed: 44 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -154,3 +154,47 @@ Column ordering lives in `shell-dashboard/src/lib/sort-order.ts` — internal to
154
154
- Dockerfile, `entrypoint.sh`, and build context (`shared_python/`, `shared_typescript/`) are shared between local and Railway.
155
155
-`.github/workflows/showcase_deploy.yml` builds each image on push to `main` and pushes it to Railway. Per-PR deploys are opt-in via `gh workflow run showcase_deploy.yml -r <branch> -f service=<slug>`.
156
156
- The only real differences at runtime are env var values and the URL. If something works locally in Docker, it works on Railway (and vice versa).
157
+
158
+
## Updating the Dashboard
159
+
160
+
The dashboard at [showcase.copilotkit.ai](https://showcase.copilotkit.ai) reads two data sources:
161
+
162
+
1.**Static `catalog.json`** — generated at build time by `pnpm generate-registry`. Contains the full 38-feature x 17-integration cell matrix with status (`wired` / `stub` / `unshipped`), parity tiers, and feature categories. Changes require a generator run + commit.
163
+
2.**Live PocketBase probe results** — streamed via SSE. Probes discover demo routes automatically and update the dashboard in real time. No manual intervention needed for probe data.
164
+
165
+
Key invariants:
166
+
167
+
-**Parity tiers are never manually set.** They are computed by comparing each integration's wired feature set against the reference integration's.
168
+
-**The reference integration is auto-detected** as the integration with the most wired features (ties broken alphabetically). No `reference: true` flag exists.
169
+
-**`catalog.json` is gitignored** — the generator emits it into the shell apps' `src/data/` directories, which are already in `.gitignore`.
170
+
-**The `stub` status** means: feature declared in manifest, demo entry exists, but no `route` field. Today only `langgraph-python/cli-start` qualifies.
171
+
172
+
### SOP 1: Wire a new demo on an existing integration
173
+
174
+
1. Edit `showcase/packages/<slug>/manifest.yaml` — add the feature to `features[]` and a corresponding `demos[]` entry with a `route`.
175
+
2. Run `pnpm generate-registry` — updates `registry.json` AND `catalog.json`. The cell flips from `unshipped` to `wired`. Parity tiers auto-recompute.
176
+
3. Commit the manifest + both generated files. PR, merge.
177
+
4. CI rebuilds the package image + dashboard image. Railway auto-deploys both.
178
+
5. Ops probes discover the new demo route and begin probing. Dashboard updates live via PocketBase SSE — no further action needed.
179
+
180
+
### SOP 2: Code fix on an existing demo (no manifest change)
181
+
182
+
1. Edit code under `showcase/packages/<slug>/src/...`.
183
+
2. PR, merge. No generator run needed (manifest unchanged).
184
+
3. CI rebuilds the package image. Railway auto-deploys.
185
+
4. Probes re-probe on the next tick. If the fix turns a red cell green, the dashboard updates live. Zero manual steps beyond the normal PR workflow.
186
+
187
+
### SOP 3: Add a brand-new integration
188
+
189
+
1. Create `showcase/packages/<new-slug>/manifest.yaml` with `features[]` + `demos[]`.
190
+
2. Add `{"slug": "<new-slug>", "name": "<Display Name>"}` to `showcase/shared/packages.json`.
191
+
3. Provision a Railway service (manual: `railway service create` or Dashboard UI).
192
+
4. Run `pnpm generate-registry` — catalog gains 38 new cells (mostly `unshipped`, some `wired`). Parity tier computed automatically.
193
+
5. Commit, PR, merge. CI + Railway deploy. Probes discover the new service automatically via the Railway discovery filter.
194
+
195
+
### SOP 4: Reference migration (move the reference integration)
196
+
197
+
1. No manual flag needed — the generator auto-detects the reference as the integration with the most wired features (ties broken alphabetically).
198
+
2. If you want a *different* integration to be reference, wire more features on it until it leads the count.
199
+
3. Run `pnpm generate-registry` — all parity tiers recompute automatically.
0 commit comments