Human overview · for understanding

Morning Pipeline + Sync Audit — the plan

What already works, the one missing brain, and how we make it 100% trustworthy · 2026-07-26

What already works, the one missing brain, and how we make it 100% trustworthy

Master summary — the gist in 30 seconds

TL;DRYour morning workflow is ~70% built and live. The missing 30% is the nightly AI brain that writes the drafts (the screen for it already exists), a red-border repaint, the snooze setter, and one brand-new automation: booking → auto sales-call-prep → Figma link in the CRM. On top of that, a trust audit proves Missive ↔ CRM ↔ dashboard never silently drift.

In: your 8 morning wishes + everything shipped in the last 2 weeks. Out: a 5-work-stream build plan where each piece is either 'already done — verified', 'small polish', or 'build now', plus a test plan that makes reliability measurable instead of hoped-for.

Why this mattersChecking each wish against the live code showed most surfaces already exist — building blindly would have duplicated them. The real risk sits in two places: no cron actually generates the AI drafts yet, and sync failures today die silently in a log string nobody watches.
flowchart LR
  A["🌅 Your morning"] --> B["Board: counts,\nred borders, drafts"]
  B --> C["Edit & send\nAI drafts"]
  B --> D["Log calls,\nmeetings, snooze"]
  E["🌙 3:00 nightly AI pass\n(TO BUILD)"] --> B
  F["🔁 Sync audit:\nMissive = truth"] --> B

1 · What's already done (don't rebuild it)

TL;DR5 of your 8 wishes are live: stage counts, last-email-on-card, 2-day follow-up logic, call/meeting/follow-up logging, and the booking event we can hook into.

In: your wish list. Out: a verified checklist — each 'done' item was located in the running code, not assumed from memory.

Why it mattersTwo weeks of shipping (Morning Review tab, touchpoint sync v244) already covered most of the morning workflow; the plan spends effort only on genuine gaps.
flowchart TB
  subgraph DONE["✅ Live today"]
    a[Stage counts]
    b[Last email on card]
    c[2-day follow-up logic]
    d[Log call / meeting / follow-up]
  end
  subgraph GAP["🔧 To build"]
    e[Nightly AI drafts]
    f[Red border]
    g[Snooze setter]
    h[Booking → sales-call-prep]
  end

2 · The missing brain: the 3 AM AI pass

TL;DRThe purple draft banner, the edit box and the Send button all exist — but nothing fills them. The nightly pass that reads every lead's history and writes the draft was planned in detail, never built.

In: every pre-sale lead's full history at 3:00 AM. Out: one suggestion per lead — a draft email, a meeting proposal, a 'wait', or a question for you — waiting on the board when you wake up.

Why it mattersEvery other morning-workflow wish quietly depends on this: no nightly pass means no drafts to edit, and no engine to respect a snooze date. Its plan (9 decisions, scored design) is already locked — this is execution, not re-thinking.
flowchart LR
  N["3:00 nightly pass"] --> H["Read full history\nper lead"]
  H --> T{"Pick one of 5"}
  T --> D["✉️ draft email"]
  T --> M["📅 book meeting"]
  T --> W["⏸ wait"]
  T --> L["✖ mark lost"]
  T --> Q["❓ ask you"]

3 · Red borders, follow-up chips, snooze

TL;DRSmall but visible: needs-my-reply becomes a RED border (today it's an amber pulse; red currently means overdue payment — that moves to a 💰 badge). A ⏰ chip marks 2+ days of silence. Snooze gets a date picker in the call panel.

In: a glance at the board. Out: instant answers to 'who needs me right now' and 'who went quiet' — and a snoozed lead stays visible but gets no AI draft until the date passes.

Why it mattersThe snooze half-exists (the un-snooze button shipped!) but nothing can set it — a one-way door. And two different meanings of 'red' would train your eyes to ignore the color.
flowchart LR
  R["🟥 Red border\n= reply needed"] 
  C["⏰ chip\n= 2+ days silent"]
  P["⏸ snooze until date\n= visible, no drafts"]
  R --- C --- P

4 · New: booking → sales-call-prep → Figma in CRM

TL;DRWhen a lead books a call, the cloud box automatically runs the full sales-call-prep (audit, redesigns, ROI tools) on their website and saves the Figma board link into their CRM page — before you've had coffee.

In: a booking confirmation + the lead's website address from the CRM. Out: a 🎨 Figma link on the lead's card and CRM page, plus a Slack note when it starts and finishes. No website on file? The card asks you for it instead.

Why it mattersIt reuses the already-proven cloud job queue from the sync system (same security, same watchdog), so failures surface in the daily health line instead of vanishing. One open technical check: whether Figma can run fully headless on the box — if not, everything except the board still runs and the board is flagged for a local finish.
flowchart LR
  B["📅 Lead books a call"] --> Q["Job queue\n(existing, secured)"]
  Q --> X["Linux box runs\nsales-call-prep"]
  X --> F["🎨 Figma board"]
  F --> CRM["Link saved in CRM\n+ card + Slack"]

5 · The trust audit: Missive is the source of truth

TL;DRA big sync layer already shipped this week (nightly reconciliation + a self-healing queue). The audit verifies it against reality — every recent lead conversation in Missive must appear in the CRM history, the activity log, and the dashboard; every call transcript in Notion must show on the board.

In: the last weeks of real Missive conversations and call transcripts. Out: an evidence ledger — matched ✓ or missing ✗ per lead — plus fixes for the 6 known weak spots (silent Notion write failures, a reconciliation window that only looks 1 day back, a healer that could die unnoticed…).

Why it mattersThe sync code exists and passed 25/25 tests — but tests aren't the same as live truth over real data, and today a failed CRM write produces no alarm anywhere. '100% reliable' means every failure mode either heals itself or wakes something up.
flowchart LR
  MI["📬 Missive\n(source of truth)"] --> DS["Deal store"]
  DS --> CRM["Notion CRM\n💬 history + log"]
  DS --> DB["📊 Dashboard"]
  TR["📼 Call transcripts DB"] --> DB
  AUD(["🔍 Audit compares\nall four"]) -.-> MI & CRM & DB

6 · Your veto window (7 defaults, silence = yes)

TL;DRTo keep this moving without a Q&A round, 7 decisions were taken with recommended defaults — R1 red-border repaint, R2 2-day chip, R3 snooze placement, R4 trigger = real booking (not a stage drag), R5 missing-URL behavior, R6 auto-run without approval, R7 audit is read-only first.

In: the genuinely open choices. Out: sensible defaults written into the plan; overturn any of them in one line before starting the next chat and the plan absorbs it.

Why it mattersEach default is reversible and none spends real money or touches a client — the only one worth a second look is R6 (prep runs automatically per booking, a few dollars each, announced in Slack).
flowchart TB
  R1[R1 red border] --> OK{Veto?}
  R4[R4 booking trigger] --> OK
  R6[R6 auto-run prep] --> OK
  OK -->|silence| GO["Plan proceeds"]
  OK -->|one line| FIX["Default swapped"]

7 · What happens next

TL;DRCopy one prompt into a fresh chat → it researches the details and produces the box-by-box build checklist → a third session builds it through staging QA to production. The old handoff briefs get reused where they fit (QA gate, bugfix pairs, cloud overnight run); the rest were judged noise for this job.

In: the plan bundle written today. Out: a running morning workflow, shipped through the branch → staging → QA → prod pipeline, finished with a full-journey visual certification walk.

Why it mattersThe 3-chat chain keeps each session small and focused; the reliability test plan (extending the existing 25-check QA suite) is what turns 'it seems to work' into 'it is checked every night'.
flowchart LR
  P1["📋 This plan"] --> P2["🔬 Techspec chat\n(checklist + ADRs)"]
  P2 --> P3["🔨 Build chat\nbranch→staging→QA→prod"]
  P3 --> C["🏁 Certification walk\n+ nightly checks"]
HANDOFF.md (full plan) →Prompt for the next chat →