CrayonChat creation flows moved from the copilot modal into the native network canvas. Meeting Prep, Leverage Loops, and Outcomes now have full in-canvas AI experiences — the entire copilot gold standard, embedded where users already work.
Per the April 8 meeting with Mark and Jason: the copilot modal is being reduced to meeting prep + general chat only. Outcomes and Leverage Loops creation flows move to the network canvas (middle area). Same CrayonChat generative UI, just rendered in-canvas instead of a modal overlay.
Mark's directive: "Copilot as it IS is the gold standard — bring the entire starter page for each one over." Every component, every animation, every flow from the copilot is preserved in the canvas embedding.
| Decision | Before | After |
|---|---|---|
| Leverage Loop creation | Open copilot modal → switch to leverage mode → PersonPicker → ForkInTheRoad → chat | Native in-canvas: PersonPicker + suggested grid → ForkInTheRoad → CrayonChat — all inline |
| Outcome creation | Open copilot modal → switch to outcome mode → ModeStartScreen → chat | Native in-canvas: CrayonChat with outcome starters (Raise funding, Hire talent, etc.) |
| Meeting prep | Open copilot modal → meeting mode → select meeting → chat | In-canvas CrayonChat (center) + context panel (right side with header, attendees, clickable persons) |
| Copilot scope | 4 modes: chat, leverage, meeting, outcome | 2 modes: meeting prep + general chat (leverage/outcomes removed) |
Meeting prep is now a 3-column experience: meeting list (left sidebar), CrayonChat AI conversation (center canvas), and meeting context panel (right side) showing the meeting header, attendees grouped by company, and clickable person rows.
Consistent with leverage loops and outcomes: the right column shows meeting metadata and attendees.
Attendees are clickable — clicking opens the person sheet sidebar (uses master_person_id
from classified participant data).
The entire copilot leverage loop creation experience is embedded in the network canvas. When no loop is selected, users see the PersonPicker with a suggested people grid (3x3, sorted by recency). Selecting a person shows ForkInTheRoad: Quick Leverage (instant dispatch) or Interview (CrayonChat conversation).
Dispatches immediately via dispatch() API + triggerGeneration().
Shows success animation for 2 seconds, removes dispatched person from grid, returns to picker.
New loop appears in sidebar via React Query invalidation.
Opens CrayonChat with person-specific conversation starters (bio-aware: detects fundraising, hiring, etc.).
The processMessage callback intercepts the "in every possible way" quick dispatch marker.
Supports dispatch_confirmation and interview_card template cards via event listeners.
Renders existing LeverageLoopsResponseSection with suggestions, trajectories, and actions.
No change to the read experience — only the creation flow is new.
| Component | Source | Purpose |
|---|---|---|
PersonPicker | copilot/crayon/person-picker.tsx | Search + select network contacts with context loading |
ForkInTheRoad | copilot/crayon/fork-in-the-road.tsx | Quick Leverage vs Interview choice screen |
Avatar | copilot/crayon/avatar.tsx | Person avatar with fallback initials |
LoadingIndicator | copilot/crayon/loading-indicator.tsx | Lattice orb animation for thinking state |
templates | copilot/crayon/templates.ts | CrayonChat template registry (18 card types) |
dispatch() | copilot/lib/xano-copilot.ts | POST /dispatch → creates suggestion request |
triggerGeneration() | copilot/lib/xano-copilot.ts | POST /generate-leverage-loop (fire-and-forget) |
chat() | copilot/lib/xano-copilot.ts | POST /chat with leverage mode context |
getNetwork() | copilot/lib/xano-copilot.ts | GET /network for suggested people grid |
When no outcome is selected, the canvas shows CrayonChat with dynamic outcome conversation starters. Starters adapt based on existing outcomes (offers "Build on X") and network size (mentions total connections and top companies).
Up to 4 dynamic starters: (1) Build on existing outcome (if any active), (2) Leverage network for new goal (with connection count), (3) Raise funding, (4) Hire key talent. Starters are network-aware and adapt to the user's current state.
Renders existing OutcomeResponseSection cards with suggestions, trajectories, and actions.
Supports individual suggestion selection via URL param. No change to read experience.
The read experience for all three features is untouched:
| Hash | Message | Scope |
|---|---|---|
aa59126 | feat(meeting-prep): add meeting prep as 7th canvas view | New view, list, canvas, search hook, selected hook |
370b199 | feat(meeting-prep): add outcome input + prep CTA button | Chat input, prep flow |
eef6f8b | feat(meeting-prep): embed CrayonChat directly in canvas | Full CrayonChat with SSE, templates, processMessage |
707ee9a | feat(meeting-prep): move context to right panel, canvas = full CrayonChat | Context panel + clickable attendees |
staged | feat(leverage-loops): embed CrayonChat creation flow in canvas | PersonPicker + ForkInTheRoad + dispatch |
staged | feat(outcomes): embed CrayonChat creation flow in canvas | CrayonChat with outcome starters + dispatch |
Generated by Claude Code — Orbiter Frontend — April 10, 2026