Integrations Create & Manage
Create/configure modal for 11 connectors with per-integration custom UI and step-by-step operator guidance
Why
c61 shipped qdash /integrations (qcontrol repo, feat/control-center branch) with an 11-connector typed catalog (crates/qdash/ui/app/lib/integrations.ts) and per-connector detail pages. But the "add" action currently just navigates to a detail page with a disabled stub form ("Not wired — would require configuration"). Only the three channel-backed connectors (pagerduty, slack, email) have a real write path (severity routing via /api/channels). There is no functional create/configure flow, leaving the integrations page incomplete and the operator without guidance on setting up new connectors.
Objective
Deliver a create/configure modal launched from the integrations page's add action, with UI custom to each of the 11 connectors — real fields for what each integration actually requires — plus step-by-step operator guidance (where to get tokens/secrets/IDs, what to expect) as a mini living tutorial per connector. Reuse the same per-connector config UI for managing existing integrations on detail pages.
Scope
- Research each of the 11 connectors' real setup requirements
- Typed per-connector setup recipes (data model)
- Modal shell + stepper UX pattern
- Custom per-connector configuration forms
- Operator guidance: mini living tutorials for each connector
- Reuse on detail pages (edit existing integrations)
- Persistence layer so configured connectors flip to active state
- Out of scope: actual outbound delivery (qdash stays loopback-bound / projected)
Key Changes
- 2026-08-15 — Cycle created; initial-prompt captured, CYCLE.md written.
- 2026-08-15 — Requirements research + recipe catalog: all 11 connectors' real setup requirements researched and encoded as typed setup recipes (
ui/app/lib/integration-setup.ts) — fields (text/url/secret/secret-multiline/select, conditional viashowIf) + tutorial steps (vendor console click-paths, copyable SQL/openssl/IAM-policy snippets, caution notes) + "once connected" expectations. Summary inresearch-connectors.md. - 2026-08-15 — Guided setup modal:
IntegrationSetupModal.vue— step rail with completion state, per-step instruction content, inline field collection, injected severity-routing step for channel-backed connectors (live local counts, defaults from the Alerts fallback map), generated Review & connect step (masked secrets, expectations, honesty note) gated on required fields. Saves via new/api/integrations+ existing/api/channelsin one action. - 2026-08-15 — Reuse on detail pages:
IntegrationSetupFields.vueshared renderer;[id].vuereplaces the disabled stub with the live form (Save / Disconnect / Reopen setup guide), unsaved-edit protection against the 3s poll re-seed. Channel-backed connectors keep the routing panel and gain the config form. - 2026-08-15 — Persistence:
integration_configsSQLite register mirroringchannels;GET/POST/DELETE /api/integrations(web.rs/db.rs). Configured connectors flip to active stat cards on the overview (✓ configuredfor non-channel connectors). - 2026-08-15 — Verified: cargo check clean; API round-trip on a scratch db; Playwright walk-throughs of Splunk (4 steps), Slack (routing), Okta→Entra conditional branch, and Jira detail reuse — screenshots in
shots/. - 2026-08-15 — Thread: message-preview (
message-preview-prompt.md/message-preview-plan.md) — "shape the message" previews for the three notification connectors, each speaking its integration's native language: a Slack window (channel header, APP-badged bot, Block Kit severity bars; knobs for channel, bot name, pixel-pawn vs initials avatar, message detail, and throttling where "per day" visibly collapses the sample stream into one rollup), a PagerDuty incident card (urgency mapping, dedup key that rewrites live, auto-resolve toggle whose off-state shows the incident staying open), and an email digest in a mail frame (From/subject-prefix/delivery-time, live re-grouping by severity/framework/agent, headlines vs full detail). Canned sample narrative shared viamessage-samples.ts(high credential-leak / medium egress / resolution + digest counts). Architecture: knobs arepreview: trueSetupFields (seed/persist/review/dirty-tracking ride the c72 machinery free),SetupStep.component+integration-preview.tsregistry render the previews in the modal's shape step and as a "Message shape" panel on detail pages. Verified with Playwright knob-permutation shots inshots/.
Artifacts
- initial-prompt.md
- thread: message-preview — prompt + plan
- initial-prompt.md
- research-connectors.md