Roadmap
Team Tools

Catalyst — Trial Operations

Key dates

Trial Manager POC

Done
May 7, 2026Jun 29, 202653 days

M1 - Live data replaced seeded data on the insight surfaces

One endpoint (/api/trials/analytics) now returns a normalized row per school plus the product catalog, assembled from three trial_manager reads: the paged trials feed, per-school trial detail (cached, time-budgeted fan-out), and the product list. Trends split into Overview / School Trials / Grassroots; Outreach became the call-list surface. Both filter and recompute client-side from that single payload.

The careful parts: opportunity totals dedupe on opportunity_id so a two-product opportunity does not double-count pipeline; days_left comes from upstream so this page and the dashboard cannot disagree; a book past the 20-page ceiling sets a truncated flag rather than silently understating every KPI.

Done
Aug 13, 2026Aug 30, 202617 days

M2 - Campaign Manager, end to end

RC-1108 · server/api/trials/campaigns/*, campaigns.vue

Marketing campaigns — which decide what trial offers registration shows — are now readable and editable in the app: list, create, edit, archive, and a Publish action that triggers the GDS sync so registration sees changes immediately. Writes gate on TRIAL_MANAGER_ALLOW_WRITES and the UI says so instead of failing at the API.

Done
Aug 13, 2026Aug 30, 202617 days

M3 - Catalog management on the EDDE Content API

RC-1109, RC-1122 · contentApiClient.ts, server/api/catalog/*, CatalogManager.vue

New server-side Content API client with environment-aware session cookies, X-Token minting for writes, and upstream errors mapped to real status codes with the API's own message. On top of it, one CatalogManager component drives products, SKUs, and media groups with search, pagination, detail modals, relationship navigation, and debounced reference pickers.

Done
Aug 13, 2026Aug 28, 202615 days

T1 - Route-level integration coverage

(RC-1110, 5 pts, To Do)

There is no test harness in the repo yet. Scaffold Vitest + @nuxt/test-utils and cover the campaign and catalog routes against mocked upstreams: session forwarding per environment, write-flag gating (405), no-session behavior (401), and upstream-error mapping. These gates are the newest logic in the app and the easiest to regress silently.

Exit criteria: suite runs in CI with no live upstream; every write route asserts its 405 and 401 paths.

Aug 14, 2026Aug 28, 202614 days

T2 - E2E pass over the admin surfaces

(part of RC-1125)

Playwright walk-through of the sidebar shell, campaign create/edit/archive/publish, catalog create and edit across all three record kinds, contact creation, and Trends/Outreach against a mocked analytics payload — including the write-disabled variants of each screen.

Exit criteria: every primary flow green in both write-enabled and write-disabled configurations.

Aug 14, 2026Aug 28, 202614 days

R1 - Verified dev deployment

(part of RC-1125)

The routing exists but has not carried a real deployment. Merge to develop, confirm the dev stack builds and deploys, and confirm the app authenticates against the dev Trial Manager and the content.dev session cookie — the one path where mixing DE_ENVIRONMENT and trialManagerEnv would drop the session.

Exit criteria: dev URL loads authenticated, campaigns and catalog read live dev data.

Aug 24, 2026Aug 28, 20264 days

R2 - Operator docs and handoff

(part of RC-1125)

Document the environment flags (TRIAL_MANAGER_ALLOW_WRITES, CONTENT_API_ALLOW_WRITES, DE_ENVIRONMENT, trialManagerEnv), the per-environment session-cookie model, and the data-gap workflow, then decide the write-flag posture per environment before prod.

Exit criteria: a developer new to the repo can run it locally, explain the flags, and add a data gap unaided.

Aug 28, 2026Sep 10, 202613 days