Imagine Experience

Monday.com Infrastructure Guide

Complete operations and developer reference for the CRM, Sales Events, and Vibe app stack — boards, columns, automations, and how it all connects.

Version 1.3 · Updated June 5, 2026 · Internal Use Only

Overview & Quick Links

Every board, dashboard, and Vibe app that makes the CRM and Sales Events run. Bookmark these.

Workspaces

WorkspacePurpose
CRM (primary, ID 3364925) All lead funnel boards live here: per-rep Outreach boards, Leads, Contacts, Accounts, Activities, Deals, No Connections, plus the CRM Workflows folder of automation-only utility boards.
CRM (secondary, ID 7173631) Default workspace. Currently only hosts the Quotes & Invoices board. Don't confuse with the primary CRM.
Team Events (ID 13805175) Sales events and conferences. Hosts Team Events List, Event Expenses, Events Dashboard, Conference List, Travel Request Forms, and the Sales Taskboard Vibe app.
Chris Mouch Vibes (ID 13721313) Sandbox / source workspace for Vibe-generated boards and apps. Note: published Vibe apps run against board IDs from other workspaces (e.g., Sales Taskboard runs against Team Events List in the Team Events workspace).
Design (ID 3404966) Design Status (the active design tracking board, also home to the C&P Request Form view), Design Ops, SOW Client Templates, C&P Library, and the archived original C&P Requests board.

Lead Acquisition Boards

BoardRole in the funnel
Outreach - Nick Per-rep cold prospect holding tank (Stage 0). One board per rep (Nick, James, Eileen, Bill, Chris). Items move OFF this board when Status becomes Move to Leads or No Connection.
Outreach - James Same structure as Nick's. Each rep owns their board and has Owner-level permissions.
Outreach - Eileen Same structure as Nick's.
Outreach Chris Chris's Outreach board. Note: naming convention differs (no dash).
Leads (5270617307) Primary acquisition board. Every lead from first real conversation through conversion. Lead Stage column drives the funnel: Working Leads → Qualified → In Discovery → In Design.
Contacts (5270617302) Person-level records. Auto-created when a Lead reaches In Discovery via the Contact Creation - OSA workflow board.
Accounts (5270617317) Company-level records. Auto-created at the same time as Contacts via the Account Creation - OSA workflow board.
Activities (5270617328) Source of truth for all call/meeting activity. Powered by the Emails & Activities widget on Leads and Contacts.
Deals (5270617351) Tracks deal value and win/loss outcome. Auto-created when a C&P Request is submitted on the Design Status board. One Lead can spawn many Deals (one per project).
No Connections (18407788411) Holding board for prospects with no response after multiple outreach attempts. Items land here from Outreach boards when Status becomes No Connection.
Outside Sales Advisors Leads Leads sourced from OSAs (Outside Sales Advisors). Distinct funnel; routes into the standard Leads board when qualified.
NDA Request Form Form board (18390295900). Submitted before sharing IP/concepts with prospects. Must be fully executed before moving from Discovery to Concept Review. NDA Status labels (color_mky4ymmr): NDA Requested → NDA Sent → Dominated, where "Dominated" = fully executed (there is no "Executed" label). As of 2026-06-11 the durable home of NDA status is the Account: the form's required Account question writes board_relation_mm47rws9 ("Account"), a true two-way pair with Accounts board_relation_mm47kgx1 ("NDA Requests"), which feeds the Accounts board's NDA Status mirror (lookup_mm47whvb) and the form board's Client IDN# mirror (lookup_mm473dhn). This survives repeat business, which never creates a new Lead. History: the earlier columns (mm22jx9g, mm22n6we, mm22scjs, mirror lookup_mm226s7m) were one-way orphans whose two-way partners had been deleted — links written on one side never synced — and were all replaced/deleted on 2026-06-11. If a connect column's "two-way" toggle is on but links don't appear on the other board, its partner column was deleted; the only fix is a fresh two-way column.

Design & Project Boards

BoardRole
Design Status (5342150390) Active design tracking board. Hosts the C&P Request Form as a view. New items here (created by C&P submission) trigger a corresponding Deal on the Deals board.
C&P Request Form Single entry point for any new design project — new or repeat customer. Submitting creates a Design Status item AND triggers Deal creation.
Design Research (5341974735) Where designers open research requests (venues, vendors, activities, quotes) so research runs in parallel with design. Requests are parent items; each thing to research is a subitem (board 5341974793). 7pace-tracked. Detailed below.

Sales Events Boards

BoardRole
Team Events List (5463185693) Source of truth for all sales events and conferences. Powers the Sales Taskboard Vibe app. 9 groups (4 per-rep, Not Assigned, Not Approved, Past Events, Team Events, Archived). Rep people column is the source of truth as of 2026-05-22.
Event Expenses (18400471989) Auto-created row per approved event. Tracks expenses for each event the rep attends.
Conference List 2026 Annual reference list of conferences. Source data for prospecting and event planning.
Travel Request Form 2.0 Travel approval workflow. Submitted when conference attendance is approved.
Sales Tasks Internal sales team task tracking for events ops.

Vibe Apps & Dashboards

App / DashboardWhat it does
Sales Taskboard (Vibe) App ID 10098771. Calendar swimlane + event detail dialog for managing sales events. Runs against Team Events List (5463185693). Source code in events-vibe-app-source/.
Imagine Leads Portal (Vibe) Kanban view of the Leads board built as a Vibe app. Primary day-to-day interface for reps. Source code in vibe-app-source/. Mobile-optimized layout with a floating + Add Lead FAB on the Overview tab, sticky-top dialog buttons in the AddLead modal, and the Imagine pinwheel hero. Mobile-specific behaviors (rep-facing) are documented in Section 14 of the Sales Workflow Guide. Pinwheel asset is served from https://imagine-monday-infra-guide.netlify.app/pinwheel.png (this guide's Netlify deploy). Brand font (Noto Sans Extra Bold) loaded from Google Fonts at runtime.
Sales Event Tracking Dashboard Management dashboard aggregating Outreach activity across all per-rep boards. Widgets: Total Outreach In Flight, Outreach Actively Worked, Activity by Event, Status by Event, Approved Events Missing Outreach (critical filter).
Events Dashboard (18394407658) Custom-object board functioning as the events ops dashboard. Note: lives in the Team Events workspace.

CRM Workflow Utility Boards

These boards live in the CRM workspace's "CRM Workflows" folder and exist purely to host automations that route data between primary boards. They are not user-facing in day-to-day work.

BoardFunction
Leads → No Connections Workflow (18409441381)Routes items from Leads to No Connections board on status change.
No Connections → Leads Workflow (18407789311)Reverse routing if a No Connection prospect re-engages.
Account Creation - OSA (18405049375)Auto-creates Account records when a Lead reaches In Discovery.
Contact Creation - OSA (18405058689)Auto-creates Contact records when a Lead reaches In Discovery.
Fulfillment Kickoff Slack (18398163775)Posts a Slack notification when SOW is fully executed and project moves to fulfillment.
Signed SOW Slack Workflow (18399485852)Posts a Slack notification when a SOW gets signed.

System Architecture

The Monday infrastructure is two distinct subsystems that share users (sales directors) and one connecting column. Understanding the split is the foundation for everything else.

Subsystem A

Lead Acquisition Funnel

Lives in the CRM workspace (3364925). Tracks every new customer relationship from first cold contact through signed SOW. Boards: per-rep Outreach, Leads, Contacts, Accounts, Activities, Deals, Design Status, No Connections.

Flow: OutreachLeads → (auto-creates) Contacts + AccountsDesign Status (C&P)Deals.

Subsystem B

Sales Events Operations

Lives in the Team Events workspace (13805175). Manages which sales directors attend which conferences and tracks the logistics around each event.

Flow: New event added → assigned to a rep via Rep column → automation routes to rep's group → 21/14/7-day reminders fire → Date End passes → moves to Past Events. Approved events trigger Event Expenses item creation.

The bridge: Event/Source column

The two subsystems intersect at the per-rep Outreach boards. Each Outreach board has an Event/Source column (board_relation_mm1asdrb) that connects to Team Events List. This lets reps mine attendee lists for the conferences they're attending, then push qualified prospects into the lead funnel.

Why this matters

When you trace a lead back to its origin, "which event/conference did this come from?" is answered by the Outreach board's Event/Source connection. It's the only column that ties acquisition to events ops.

Workspaces

Monday organizes boards into workspaces. Knowing which workspace a board lives in matters for permissions, navigation, and asking "where is this thing?"

WorkspaceIDWhat's in it
CRM (primary) 3364925 The lead acquisition funnel. All per-rep Outreach boards, Leads, Contacts, Accounts, Activities, Deals, No Connections, the CRM Workflows folder of utility boards, plus archived boards. Owner: MJ Jacobson. This is the workspace people mean when they say "the CRM".
CRM (secondary) 7173631 Despite the same name, this is a near-empty workspace holding only the Quotes & Invoices board (8327012822). Default workspace flag is set here. Easy to confuse with the primary CRM — always confirm workspace ID when adding boards.
Team Events 13805175 Sales events ops. Hosts Team Events List (5463185693), Event Expenses (18400471989), Events Dashboard, Conference List 2026, Sales Tasks, Production Team Travel, and the source folder for the Sales Taskboard Vibe app.
Chris Mouch Vibes 13721313 Sandbox/source workspace for Vibe-generated boards and apps. Vibe apps published from here run against board IDs in other workspaces.
Design 3404966 Design Status (5342150390 — active design board hosting the C&P Request Form view), Design Ops, SOW Client Templates, C&P Library, Experiences Library, and the archived original C&P Requests board (5342150669).
Imagine Events 8673947 Imagine-produced events and conferences. Distinct from "Team Events" (which is sales events the team attends).
Fulfillment 3404963 Project fulfillment work after SOW signing. Receives handoffs from the Design / Deals workflow.
Other Main workspace (7173609), WorkForms (3597804), Training (3424686), Culture (3388818), Development (10605676). Not directly involved in the CRM/Sales Events stack.

Lead Acquisition Boards

Each board in the lead funnel has a specific role. Items move between boards via Monday automations — they don't get duplicated.

Per-rep Outreach boards (Stage 0)

Each sales director has their own Outreach board. Cold prospects from event attendee lists live here while reps are still trying to make first contact. Items physically move off this board when they become real leads or get marked as No Connection — they don't duplicate.

Bill McCoy is the exception

Bill is the CEO and a sales rep, but he does NOT have a personal Outreach board. The standard Outreach → Leads cold-prospecting pipeline is for the volume sales motion the other Sales Directors run; Bill's sales activity is high-touch senior relationships and events. He IS a first-class rep on Team Events List and the Sales Taskboard (own group, swimlane, automations) but skips the Outreach pipeline entirely. Don't propose adding a Bill Outreach board "for consistency" — it's intentional.

Standard columns on every Outreach board

ColumnTypePurpose
NamenameProspect's full name.
Event/Source
board_relation_mm1asdrb
board_relationTwo-way connection to Team Events List. Identifies which conference/event the prospect came from. The two-way connection auto-creates a reverse column on Team Events List.
Status
color_mm16y791
statusDrives all routing. Labels: Not Contacted · Sent Message · Responsive · Move to Leads · No Connection · Unqualified/Dead.
Company, Title, Email, LinkedIn, etc.variousStandard contact-detail columns. Specifics may vary slightly per board but should follow the template.

Status-driven routing on every Outreach board

StatusWhat it triggers
Not ContactedStays on Outreach board. Default state.
Sent MessageStays on Outreach board. Rep made initial contact.
ResponsiveStays on Outreach board. Prospect engaged; rep is qualifying.
Move to LeadsItem moves to Leads board (5270617307), Lead Stage set to Working Leads.
No ConnectionItem moves to No Connections board (18407788411).
Unqualified/DeadItem moves to the Unqualified/Dead group on Leads board.

Leads (5270617307)

The primary acquisition board. Every real lead lives here from first qualifying conversation through conversion to Deal.

Lead Stage values

StageMeaningMove-here trigger
Working LeadsFirst touch / outreach started.Default on creation. Items arrive here from Outreach boards.
Qualified LeadsConfirmed interest, ICP fit, wants to talk.Move manually after a qualifying conversation.
In DiscoveryDiscovery call scheduled or completed.Move manually. Triggers auto-creation of Contact + Account records.
In DesignC&P Request submitted, design work happening, Deal is open.Move manually after submitting C&P Request. This is the last manual Lead stage move — the next move (to Clients or Lost Deal) is automatic.
Clients Auto-setDeal Won — customer relationship is real and permanent.Automatic. Set by the Design Stage webhook cascade (monday-design-sync) when Design sets Design Stage = Fulfillment Kickoff. Once a Client, always a Client (Won deals never get demoted by subsequent Lost deals).
Lost Deal Auto-setDeal Lost without converting — Lead is closed.Automatic. Set by the Design Stage webhook cascade when Design sets Design Stage = Not Moving Forward AND the Lead was still In Design. Never demotes existing Clients.
FriendNo active opportunity but worth staying in touch.Move manually when relationship has value but no current deal.
UnqualifiedNo interest, no path, or no valid contact info.Move manually. Confirmed dead end — never delete; keep for reporting.
No ConnectionReached Working Leads but never responded.Move manually after multiple unanswered outreach attempts.
In Design is the terminal manual stage; Clients / Lost Deal are terminal lifetime states

The May 2026 open architecture question about a "post-Design Deals stage" was resolved on 2026-05-25. Result: Clients (Deal Won) and Lost Deal (Deal Lost) replaced the old ambiguous "Deals" group. Both are set fully automatically — the Design team sets the Design Stage column to Fulfillment Kickoff (Won) or Not Moving Forward (Lost) and the webhook cascade handles the rest. No rep action required. Once a Lead reaches either state, the Vibe app locks the Stage badge (no dropdown menu) and surfaces a banner explaining that further activity belongs on Contact/Account, not the Lead. New opportunities from Clients or Lost Deal prospects are handled per Scenario B in the CRM Workflow Guide — submit C&P against the existing Contact/Account, never reopen the Lead.

Why a Netlify function handles this instead of a Monday automation

Monday's automation library (standard recipes, AI-powered, Custom Automation, Workflows) doesn't support dynamic linked-item status updates across boards on the Imagine account — confirmed exhaustively on 2026-05-25. The cascade is implemented as monday-design-sync, a Netlify serverless function that receives Monday webhooks from the Design Status board. When the Design Stage changes to Fulfillment Kickoff or Not Moving Forward, the function updates the Deal stage + group + close date, ensures the Lead ↔ Deal link exists, then applies Lead lifecycle rules (Won → Clients, Lost → Lost Deal, Client is forever). The Vibe app's useLeadDeals.js hook mirrors the same lifecycle logic for historical reference but no longer drives any writes at the Won/Lost transition — it is now read-only for Current Deals display.

Contacts (5270617302) and Accounts (5270617317)

Contacts holds person-level records. Accounts holds company-level records. Both are auto-created when a Lead reaches In Discovery via an automation on the Leads board (not via the Contact Creation - OSA / Account Creation - OSA workflow boards — those workflow boards exist for a different purpose despite the suggestive names; treat them as unrelated to the Contact/Account auto-creation).

Once created, all subsequent activity is logged against the Contact and Account records, not the original Lead. This is how the system maintains the "one Lead, many Deals" relationship — the Lead becomes a historical record after first conversion; Contacts and Accounts persist forever.

Activities (5270617328)

Native Monday board. The source of truth for every call/meeting activity record. Activities are NOT created directly on this board in day-to-day use — they're created via the Emails & Activities widget on Leads and Contacts records.

Key column IDs (used by the Leads Portal Vibe app's useActivities hook, mirrored in vibe-app-source/utils/config.jsACTIVITY_COLUMNS): activity_status (Status), activity_type (Activity Type), activity_item (the "Lead / Contact" board_relation linking back to a Lead), activity_start_time (Start time). Note there is no reverse relation column on the Leads board pointing to Activities — so the Vibe app reads a lead's activities by filtering this board on activity_item server-side, not from the lead side.

Fathom recording auto-link (added 2026-06)

The Fathom → Monday Railway integration (fathom_linker.py) now attaches each call recording to its matching Scheduled Discovery Call / Concept Review activity — matched by external attendee email (Lead lead_email / Contact contact_email) and a ±2-day date window. On an unambiguous single match it sets the recording, summary, flips Status → Completed, and marks Recording Link Status = Linked. Ambiguous/no matches are never auto-attached — they surface in the Fathom Meetings board's manual-link queue. New columns on this board: link_mm41zkqn (Recording Link), long_text_mm41vghe (Call Summary), text_mm41wyss (Fathom Recording ID — dedup key), color_mm419frk (Recording Link Status). The Leads Portal Vibe app's useActivities hook reads link_mm41zkqn + color_mm419frk so the Lead detail dialog shows a Watch Recording button (or a "No recording linked" nudge on Completed Discovery/Concept calls) — keep these in ACTIVITY_COLUMNS if the board changes. Full reference: Fathom-Monday-Reference.md.

Four activity types tracked

TypeWhat it represents
Discovery CallFirst real conversation to understand prospect's needs.
Concept ReviewWalking a prospect through a proposed concept.
Follow-UpAny follow-up contact post-meeting, post-proposal, or check-in.
Capabilities CallOverview of what Imagine Experience can do.

Activity Status values

Reporting only counts Scheduled, Completed, and RescheduledNo Show and Cancelled are excluded so numbers reflect real work. Statuses are: Scheduled (auto-filled on creation) · Completed · Rescheduled (update the date too) · No Show · Cancelled.

Where to update an activity's status

Pre-conversion (Lead-level): Open the lead in the Imagine Leads Portal Vibe app → Lead Detail dialog → Activities section → Status dropdown. Writes back to Activities board automatically.
Post-conversion (Contact-level): Open the activity directly on the Activities board and update the Status column there.

Deals (5270617351)

The revenue board. One Deal per project — auto-created when a C&P Request is submitted on Design Status. Tracks deal value, win/loss, expected close, and post-close stages.

Critically: one Lead can spawn many Deals. When a returning customer starts a new project, you do NOT create a new Lead — you submit a new C&P Request linked to the existing Contact and Account, which creates a new Deal. The original Lead record stays untouched.

No Connections (18407788411)

Archive for prospects with no response after multiple outreach attempts. Items arrive here from per-rep Outreach boards when Status changes to No Connection. Kept for reporting; never deleted. Marketing may re-engage from here, in which case the No Connections → Leads Workflow (18407789311) automation board can route items back.

Design Status (5342150390)

The active design tracking board. Also hosts the C&P Request Form as a board view. Submitting the C&P Form creates a new item on this board, which in turn triggers Deal creation on the Deals board.

Three similarly-named columns, kept distinct: status_1 Design Stage is the workflow engine (drives the webhook + native automations); status Status is the day-to-day work state (Working on it, Dominated…); and color_mm01jrrw Design Status is a higher-level rollup (New Request → Request In Design → Request Delivered → Request Completed). The NDA status surfaced to designers is the mirror column lookup_mm4059zd (pulled from the associated Lead via board_relation_mm3rth1s). Deliberately left Lead-based (2026-06-11): the durable NDA record now lives on the Account (Accounts lookup_mm47whvb), but re-pointing this mirror through the Account would be a mirror-of-a-mirror, which Monday doesn't support. The Lead mirror covers all first-time business; for repeat business check the Account. NDA Status label "Dominated" = fully executed.

Concept & Proposal link columns

Two separate link columns track the decks pasted onto the Design item — don't conflate them. Concept (link) holds Concept-deck share links labeled Cv1, Cv2…; Proposal (link7) is its own dedicated column holding Proposal-deck links labeled Pv1, Pv2…. A deal that has both populates both columns. The board also carries a separate FX SOW link field — distinct from the Fulfillment Status item's Signed SOW file column (see Fulfillment Status below).

Design Stage values (status_1)

The complete value set on the workflow-engine column. Stage meanings below; the automations each stage fires are in the Design Status automations table further down.

Design StageWhat it means
Not StartedRequest received, design hasn't begun.
In DesignActively building the concept or proposal.
Sales/Design ReviewInternal review with the Sales Rep before it goes to the prospect.
Prospect ReviewShared with the prospect/client for their feedback.
In Design - EditingReworking based on review feedback (the iteration rounds).
Waiting on SOWApproved; the SOW is being executed. The linked Deal is still open at this stage — it does not close Won, and the Lead does not convert to a Client, until Fulfillment Kickoff.
Fulfillment KickoffHanding the project to Fulfillment. Fires the Won cascade (Deal → Closed Won, Lead → Clients).
In FulfillmentFulfillment owns it now.
ExecutedDone — the experience happened.
Not Moving ForwardProject stopped before completion. Fires the Lost cascade (Deal → Lost, Lead → Lost Deal).
Why one board hosts both

Treating the C&P Request Form as a view ON Design Status (rather than a separate form board) means the same item that captures the design request becomes the design tracking item. No duplication, no manual handoff.

Design Research (5341974735)

Where designers open research requests — venues, vendors, activities, quotes — so research runs in parallel without clogging the Design item. Lives in the Design workspace (3404966); item terminology "project." Each request is a top-level item; each thing to research is a subitem on the linked subitems board (5341974793). Functionally documented in the Design Workflow Guide §5; this is the technical reference.

Groups

  • Active Concept Research Request (topics) — open requests tied to Concepts.
  • Active Proposal Research Request (new_group) — open requests tied to priced Proposals.
  • Closed Research Requests (group_title) — completed/parked requests.

Request (parent item) columns

Column (ID)What it holds
Lead DR (person)Owner of the research request.
Hours Planned (numbers_mkm7a4n)Manual estimate of research effort.
Hours Spent (numbers_mkm7b35g)Actual time — written automatically by the 7pace integration (see automations).
Priority (priority__1)Critical ⚠️ / High / Medium / Low.
Design Type (status_18)Proposal / Concept / Imagine / Not Started — mirrors the Design item's Concept-vs-Proposal split and routes it to the matching group.
Task Status (status)Not Started / Working on it / Waiting on Fulfillment / Waiting on Design / Stuck / On Hold / Dominated / PAST DUE.
Research Stage (status_1)Not Started → Initial Research → Add'l Research → Design Review.
Due Date (date4)Worked backward from the C&P Delivery Deadline.
Research Link (link)Link to the working research doc/folder.

Line (subitem) columns — board 5341974793

Column (ID)What it holds
Researcher (person)Who works this line.
Hours Planned (numbers_1_mkm736j4)Per-line effort estimate.
Hours Spent (numbers_mkm7z31k)Actual time — written by 7pace.
Priority (priority__1)Critical ⚠️ / High / Medium / Low.
Research Stage (status)Not Started / Initial Research / Waiting on Vendor / Requested Quote / Add'l Research / Completed Research — drives most of the automations below.
Sub-Task Status (status_1__1)Not Started / Working on it / Waiting on Fulfillment / Waiting on Design / Stuck / On Hold / Dominated / PAST DUE.
Due Date (date0)Per-line deadline; auto-pushed on Requested Quote / Waiting on Vendor.
Cost (numbers5, $)Per-person cost in USD from the vendor.
Contact (text7) · Contacts Phone (text9)Vendor contact details.
Research Link (link) · Files (files9) · Attachments (text)Supporting links and files.
Master Pricing Sheet (external Google Sheet)

Vendor pricing and availability captured on each research subitem's Discussion feed get entered into the Master Pricing Sheet to price the experience (incremental, line-by-line). Access via the Creative Director / Design team. Functionally documented in the Design Workflow Guide.

Fulfillment Status (5343204571)

The handoff board Production builds the project from. A native automation on Design Status creates an item here the moment Design Stage hits Fulfillment Kickoff (see the Design Status automations). Design then fills these columns so Production has the full package:

ColumnWhat goes in it
Signed SOWFile column — attach the executed SOW PDF (don't paste a link).
Final ProposalLink to the final Proposal PDF — the same PDF in Exhibit B of the Signed SOW.
Execution DatesWhen the experience takes place.
Guest CountTotal guests listed in the SOW.
Gross RevenueThe gross price listed in the SOW.
Don't confuse the two "SOW" fields

The executed-SOW field on the Fulfillment Status item is Signed SOW (a file column — attach the PDF). The Design Status board has its own separate FX SOW link field — different board, different field. Anything else pertinent goes on the Fulfillment Status item's Discussion tab. Don't conflate this board with the unused Fulfillment Status App board (18394609865). Functionally documented in the Design Workflow Guide §7.

Sales Events Boards

The events subsystem manages which sales directors attend which conferences. Powered by Team Events List and surfaced through the Sales Taskboard Vibe app.

Team Events List (5463185693)

Single source of truth for all sales events the team is attending or considering. Lives in the Team Events workspace. Powers the Sales Taskboard Vibe app's calendar view.

Groups (9 total)

GroupGroup IDPurpose
Nickgroup_mkw8xwrtEvents assigned to Nick Caldwell.
Jamesgroup_mkw85ekEvents assigned to James Neece.
Eileengroup_mkzzneysEvents assigned to Eileen Jackson.
Billgroup_mm14yf8hEvents assigned to Bill McCoy. Added 2026-05-21 when Bill became a first-class rep in the Vibe app.
Not Assignedgroup_mkxj14zfPre-routing holding group. Events with no rep assigned land here. Note: was previously misdocumented as group_mkzhnryq; the correct ID is group_mkxj14zf.
Not Approvedgroup_mkxj14zfEvents that haven't yet been approved for attendance. (Verify — group IDs require confirmation against current board state.)
Past Events Attendedgroup_mm05rgs9Archive. Items move here automatically when Date End passes.
Team Eventsgroup_mm0rnfbxLegacy catch-all / multi-rep group.
Archivedgroup_mkyqa8vtSoft-delete group for events that should no longer surface.

Key columns

ColumnTypePurpose
ReppeopleSource of truth for assignment as of 2026-05-22. Stores Monday user references (integer IDs). Drives group routing automations.
Event Assignee
color_mm0fh1qy
statusLegacy status column. Pre-2026-05-22 was the source of truth; now dual-written from the Rep column to keep legacy automations functional. Carries the same value as the Rep column's display name.
Date Start, Date EnddateEvent date range. Drives reminder automations (21/14/7 days out) and the Past Events archival automation.
AttendancestatusApproval / completion status. Values include Approved (triggers Event Expenses creation), Dominated (set when Date End passes), etc.
Blackout Datesdate_rangePer-rep blackout dates feed into the Sales Taskboard's Possible Conflict detection.
Rep column vs Event Assignee column

The Rep column (people type) is the source of truth as of 2026-05-22. The Sales Taskboard Vibe app reads from Rep, and the 5 Monday automations that route events to rep groups trigger on Rep column changes. The legacy Event Assignee column (status type) is kept and dual-written by the Vibe app on create and reassign — this preserves legacy automations and supports manual edits via Monday's native UI.

Event Expenses (18400471989)

Auto-populated board: a new Event Expenses item is created when an event's Attendance column changes to Approved. The item tracks per-event expenses (travel, hotel, registration, etc.).

Conference List 2026 (18399367921)

Reference list of conferences and trade shows for the calendar year. Source data for prospecting (used by the Imagine prospecting skill) and event planning. Update annually.

Travel Request Form 2.0 (18394194994)

Form board for travel approval. Submitted by reps after their conference attendance is approved on Team Events List.

Lead Lifecycle Flow

How a record actually moves through the infrastructure, from cold outreach to signed deal. Two acquisition paths feed into one funnel.

The two entry paths

Path 1

Cold outreach via per-rep Outreach board

  1. Rep finds prospect names from a conference attendee list, sends to manager for enrichment.
  2. Manager uploads enriched names to the rep's Outreach board.
  3. Rep works the list, updating Status as outreach progresses.
  4. When a real conversation happens, rep changes Status to Move to Leads → item moves to Leads board at Working Leads stage.

Path 2

Direct add to Leads board

For in-person event encounters, referrals, or anyone the rep has already had a real conversation with. Skip Outreach entirely — add directly to Leads at Working Leads stage.

Stages on the Leads board

Stages from Working Leads through In Design are moved manually by the rep. The two terminal states (Clients and Lost Deal) are set automatically by the Design Stage webhook cascade (monday-design-sync) when the Design team sets Design Stage = Fulfillment Kickoff (Won) or Not Moving Forward (Lost). The Vibe app's Current Deals section is read-only and does not drive these transitions.

  1. Working Leads — Rep is engaging the prospect.
  2. Qualified Leads — Confirmed ICP fit and interest.
  3. In Discovery — Discovery call scheduled or held. Automation triggers Contact + Account auto-creation here.
  4. In Design — C&P Request submitted via the Form view on Design Status. Automation triggers Deal creation here. Last manual stage move.
  5. Clients Auto — Deal Won. The webhook cascade moves the Lead here when Design sets Design Stage = Fulfillment Kickoff. Permanent state — once a Client, always a Client.
  6. Lost Deal Auto — Deal Lost without converting. The webhook cascade moves the Lead here when Design sets Design Stage = Not Moving Forward AND the Lead was still In Design. Never demotes existing Clients.

Current Deals in the Vibe app (read-only display)

The Imagine Leads Portal Vibe app surfaces a Current Deals section inside every Lead detail dialog (for In Design, Clients, and Lost Deal stages). The section is read-only — it shows each linked Deal's name, stage badge, value, and close date. There are no action buttons; Won/Lost transitions are handled automatically by the Design Stage webhook cascade.

The Lead-Deal link that powers this section (board_relation_mm3pg71j on the Leads board) is established automatically: when the C&P form creates a new Design Status item, the create_item webhook fires and the function links the Lead to the new Deal within ~8 seconds. Reps do not need to do anything to make the Deal appear.

For Clients and Lost Deal leads, the Stage badge in the dialog header is non-clickable. A banner reinforces that further activity should happen on the linked Contact/Account, not on the Lead.

Implementation: hooks/useLeadDeals.js in the Imagine Leads Portal Vibe app. Uses the Deals board_relation column on the Leads board (board_relation_mm3pg71j) and its reflection Source Lead on the Deals board (board_relation_mm3prdv1) — added 2026-05-25 to give the hook a one-hop traversal from Lead to linked Deals.

What the Deals board adds

The Deal record carries the revenue picture forward: value, expected close, signed SOW, fulfillment kickoff, and ultimately win/loss. Subsequent projects for the same customer create new Deals but do NOT create new Leads — the Lead is a one-time conversion artifact. For Clients leads, future Won/Lost on those subsequent Deals only updates the Deal — the Lead stays in Clients (one Client, many Deals).

Lost / off-ramp paths

TriggerWhere it goes
Outreach Status: No ConnectionItem moves to No Connections board (18407788411).
Outreach Status: Unqualified/DeadItem moves to Unqualified/Dead group on Leads board.
Lead Stage: UnqualifiedStays on Leads; segregated into Unqualified group for reporting. Never deleted.
Lead Stage: FriendStays on Leads; no active opportunity but kept warm.
Items move — they don't duplicate

Every cross-board automation in this system moves the item, never copies it. There is one record per prospect, and it physically lives on whichever board reflects its current state. Don't create duplicate records to "carry context forward" — the move preserves the item's full history.

Vibe Apps

Two Vibe apps sit on top of the boards and provide the day-to-day rep interfaces. Knowing how they read and write to Monday is critical when maintaining them or onboarding new reps.

Sales Taskboard (app ID 10098771)

Runs against Team Events List (5463185693). Source code lives in events-vibe-app-source/. Underwent a substantial perf overhaul on 2026-05-28 (see "Perf architecture" callout below).

Key files

FileWhat it controls
utils/config.jsCentralized constants: BOARDS, GROUPS (all 9 group IDs), REGIONAL_GROUPS array, GROUP_MAP (rep name → group), REPS (rep firstName → display name), ALL_REPS (swimlane order), ADMIN_NAMES (users who see all reps by default), MONDAY_URLS. This is what you edit when adding a new rep.
utils/boardSDK.jsSingleton wrapper around the Monday Board SDK. Provides board.users.where({ids}).execute(), board.items(), etc.
utils/eventAssignee.jsHelper functions getAssigneeName(taskOrEvent) and isAssignedTo(taskOrEvent, repName). Read the Rep column first, fall back to legacy eventAssignee string for backward compat. Use isAssignedTo() for all conflict-detection filters — using event.eventAssignee?.includes(repName) silently misses events that have rep populated but eventAssignee empty (fixed 2026-05-28).
utils/photoCache.jsLocalStorage-backed cache of Monday user photo_thumb URLs, keyed by display name. Hydrated from localStorage on module load. Survives page reloads, so rep avatars render instantly on second+ page loads (no cold-start blink).
utils/userFetcher.jsAdded 2026-05-28. Module-level cache + in-flight dedup for the two user-fetch patterns: getSalesReps() (returns the 4 named reps — cached for the session, replaces 3 duplicated loadUsers implementations) and getUsersByIds(ids) (per-ID cache for avatar fetches in CalendarView + EventDetailsDialog). Pattern ported from the Leads app's useUserPhotos.js.
hooks/useCalendarEvents.jsConsolidated 2026-05-28. Single source of truth for events — powers both Calendar timeline AND Tasks view. Replaces the deleted useTasks.js hook (which was fetching the same data twice). Exposes events, loading, error, refetch, stats (future-event counts), plus mutation helpers createTask, updateTask, deleteTask. Accepts (repFilter, startDate, endDate) — date params drive the server-side date-range filter. Date filtering is overlap-based (2026-06-01): the server fetch uses a 31-day buffered lower bound and App.jsx's filteredCalendarEvents / filteredTasks keep any event whose dateStart..dateEnd span overlaps the window, so events that start before the window but run into it stay visible.
components/CalendarView.jsxRenders calendar swimlanes — one per rep. Reads from photoCache for avatars. User-list fetches now go through getUsersByIds() from userFetcher (was direct board.users.where).
components/EventDetailsDialog.jsxEvent detail modal. Confirmed Reassign UI uses synchronous conflict detection. Accepts existingEvents as a prop from App.jsx (was fetching its own copy via useCalendarEvents('all')) — eliminates the third full events fetch on every dialog open. Not Approved auto-unassign (2026-06-01): setting Attendance to Not Approved in handleStatusChange now also clears the rep, sets eventAssignee to Not Assigned, and moves the item to the Not Assigned group — so a denied event leaves the rep's swimlane in one action instead of two.
components/CreateEventDialog.jsxEvent creation modal. Dual-writes Rep people column + legacy Event Assignee status column to keep automations synchronized. Accepts existingEvents as a prop from App.jsx (same change as EventDetailsDialog above).

Source of truth pattern

Code reads only the Rep column as the authoritative assignment (via the getAssigneeName helper, which falls back to legacy eventAssignee for events that pre-date the migration). Code writes both columns on create and reassign — this preserves legacy automations and supports manual edits via Monday's native UI.

Perf architecture (2026-05-28 overhaul)

Cold-start went from ~7s to ~4s through four coordinated changes:

  1. Hook consolidation: deleted hooks/useTasks.js; useCalendarEvents is now the single source of truth for both Calendar and Tasks views (was a redundant double-fetch).
  2. Server-side date filter: useCalendarEvents accepts startDate/endDate and passes dateStart: { between: [from, to] } to the BoardSDK where() clause — only events inside the visible window are fetched (40–70% network payload reduction depending on board history). Updated 2026-06-01: the lower bound is pulled back by a 31-day buffer so multi-day events that started before the window but are still running into it are fetched; App.jsx then enforces exact start..end overlap. Previously an event whose Date Start was last month (e.g. a conference spanning the month boundary) was filtered out even though it was still happening today.
  3. Dialog prop passing: EventDetailsDialog and CreateEventDialog receive existingEvents as a prop from App.jsx instead of each running their own useCalendarEvents('all') for conflict detection. Eliminates the third full events fetch per dialog open.
  4. User-fetch consolidation: 5 separate board.users call sites consolidated behind utils/userFetcher.js. Module-level cache + in-flight dedup means one getSalesReps() network call per session and one getUsersByIds() call per unique ID set.

Tradeoff: conflict-detection scope is now the currently-loaded events (visible date window + active rep filter) instead of every event ever fetched. For events scheduled within the near-term window this is identical behavior; for events 6+ months out it may miss conflicts with other events also 6+ months out. Worth knowing if it surfaces in practice.

Imagine Leads Portal

Runs against the Leads board (5270617307). Source code lives in vibe-app-source/. Primary day-to-day interface for reps — kanban view of leads with the activity-logging widget integrated.

Key files

FileWhat it controls
hooks/useSalesReps.jsxFetches list of sales directors for dropdowns. Excludes inactive members via the EXCLUDED_MEMBER_NAMES array (currently: 'Deleted Member', 'Marlie Tressler', 'Andrew Leeper'). Caches result in localStorage for 1 hour.
hooks/useUserPhotos.jsModule-level shared photo cache hook. The pattern was replicated to the Sales Taskboard's photoCache.js on 2026-05-22 (and again to userFetcher.js on 2026-05-28) to fix the avatar render issues.
hooks/useLeads.jsxPrimary leads-data hook. Updated 2026-05-28 with a 60-second soft TTL on cache hits (skip the background refresh if cache is <60s old) and a fix so the cache writes after the first page completes even when there's no cursor for more pages (was silently broken for boards small enough to fit in one page). Uses MAIN_FETCH_GROUP_IDS in the where clause — excludes Friends group from the main fetch.
hooks/useFriendLeads.jsAdded 2026-05-28. Lazy-fetch hook for the Friends stage. Does NOT fetch on mount. Caller invokes fetchFriends() when needed (Friends tab click OR first search keystroke). Result cached in state — subsequent calls are no-ops. Pattern keeps cold start fast while ensuring search results still surface Friends.
hooks/useLeadDeals.jsFetches Deals linked to a Lead via the board_relation_mm3pg71j column. Powers the read-only Current Deals section in the Lead detail dialog. Won/Lost transitions no longer go through this hook — they are handled by the Design Stage webhook cascade (monday-design-sync).
hooks/useActivities.jsPowers the Activities section in the Lead detail dialog. Rewritten 2026-05-29 for speed (was ~10s to render). Previously ran two sequential queries on every open — a board-schema query to discover column IDs, then items_page(limit: 100) pulling the WHOLE Activities board and filtering in the browser (also a latent bug: anything past the first 100 items was invisible). Now: column IDs are static constants in utils/config.js (ACTIVITY_COLUMNS, no schema query), and a single items_page query filters the Activities board server-side by the activity_item relation (query_params rule, compare_value must be the numeric lead id, inlined — a typed GraphQL variable fails the CompareValue scalar). Results cached in a module-level Map (5-min TTL) shared with the hover prefetch. Status options and the allowed-type filter (Discovery Call / Follow-Up / Concept Review / Capabilities Call) are also constants in config. The status dropdown exposes only the five workflow statuses (Scheduled, Completed, Rescheduled, No Show, Cancelled) — the board's legacy Done and Open labels are intentionally omitted from ACTIVITY_STATUS_OPTIONS (they never counted toward reporting and were redundant).
hooks/useLeadPrefetch.jsHover prefetch for the Lead detail dialog. Updated 2026-05-29 to also call prefetchActivities(leadId) (fire-and-forget) so a lead's activities are warm in cache before the dialog opens. Independent of the lead-detail prefetch — never blocks or fails it.
hooks/useAccountNDAStatus.jsAdded 2026-06-11. Fetches the lead's linked Account's NDA Status (Accounts board lookup_mm47whvb — the durable Account-level NDA home) via GraphQL MirrorValue.display_value. Multiple comma-separated values → "Dominated" wins (= fully executed). Also returns the Account's linked NDA item id (via board_relation_mm47kgx1). Powers the single unified NDA badge in the Lead detail dialog (consolidated same day — the separate lead-level and Account-level badges were merged): status sourced from the Account mirror with lead-mirror fallback, shown for all stages except Working Leads / Qualified Leads (no Account exists pre-conversion), interactive update menu targeting the lead's linked NDA item or the Account's. Colors: green Dominated / orange NDA Sent / gray NDA Requested / red None on File. Requires 'linkToAccounts' (col board_relation_mm0qr4fj) in the dialog's withColumns fetch lists.
components/LeadDetailsDialog.jsxThe Lead detail modal. Heavy mobile-vs-desktop split (see callout below) — large 2x2 quick-action grid (Call / Email / LinkedIn / Activities) on mobile, inline contact rows on desktop. Prominent solid-color Stage badge with chevron + lift hover. Medium rep avatar (title tooltip surfaces name on hover/long-press). No footer — X in top-right is the only close affordance. 2026-06-11: added module-level parseLocalDate() (Monday date-only strings were parsing as UTC midnight and displaying a day early — applied to activity dates and follow-up dates) and the Account NDA badge (see useAccountNDAStatus.js). The dead Monthly Goals feature (MonthlyGoals.jsx, MonthlyGoalLeadsDialog.jsx, 2 hooks) was deleted the same day.
components/AddLeadDialog.jsxThe Add Lead modal. Sticky top action bar (Cancel + Create Lead) on mobile to avoid the Vibe heart overlap; standard bottom footer on desktop. Auto-defaults Sales Rep to the logged-in user.
components/DashboardTabs.jsxTab navigation — desktop renders Chakra Tabs; mobile renders a Select dropdown with the positioning={{ fitViewport: false }} fix that prevents Floating UI from clipping the dropdown inside the Monday iframe. As of 2026-05-28: 8 tabs — Overview, Working Leads, Qualified Leads, In Discovery, In Design, Clients, Needs Attention, Friends.
utils/leadHelpers.jsLead-stage constants and helpers. Updated 2026-05-28 with new MAIN_FETCH_GROUP_IDS constant (derived from ALLOWED_GROUP_IDS minus Friends) — used by useLeads to exclude Friends from the main mount-time fetch. ALLOWED_GROUP_IDS itself is unchanged (processLeadItems still needs Friends as a valid group for the lazy fetch).
utils/leadsCache.jsLocalStorage cache for the main leads fetch (5-min hard TTL inside the cache; 60-second soft TTL applied at the useLeads layer for background-refresh skip).
utils/boardSDK.jsSame singleton pattern as Sales Taskboard.

Tabs (as of 2026-05-28)

TabFilterNotes
OverviewAll leads (respecting filters)Default landing tab. Shows full lead pipeline grouped by stage.
Working Leadsstage === 'Working Leads'Active leads being developed.
Qualified Leadsstage === 'Qualified Leads'Confirmed interest, ICP fit.
In Discoverystage === 'In Discovery'Discovery call scheduled/underway.
In Designstage === 'In Design'C&P submitted, deal open.
Clientsstage === 'Clients'Won deals — locked terminal state.
Needs AttentionqualifyStatus === 'Needs Attention'Re-added 2026-05-28. Filters on Qualify Status column (not Stage). Grouped by sales rep.
Friendsstage === 'Friend' (lazy-fetched)Added 2026-05-28. NOT in main mount fetch — fetches on first tab click OR first search keystroke. Cached for the rest of the session. Search auto-merges friends into results once fetched.

Mobile UX (Leads Portal)

The Imagine Leads Portal was given a substantial mobile-specific UI pass on 2026-05-26 and refined further on 2026-05-27 so it works as a daily-driver mobile tool for Sales Directors. Mobile reps want to glance, tap, and act — desktop reps want detail and density. The split:

ElementMobile (hideFrom="md" additions)Desktop (hideBelow="md" additions)
Tab navigationChakra Select dropdown with positioning fix to show all 8 tabsStandard Chakra Tabs row (8 tabs as of 2026-05-28)
Filters row (Sales Rep / Stage / Date)Removed entirely — search + tabs onlyVisible
Add Lead buttonFloating circular FAB (88px), centered bottom, Overview tab onlyInline button in header
Imagine pinwheel + brandingCentered between search and FAB on Overview tab onlyHidden (desktop has board header chrome)
AddLeadDialog action barSticky top (Cancel + Create Lead)Standard Dialog.Footer at bottom
LeadDetailsDialog quick actions2x2 SimpleGrid: Call (green), Email (blue), LinkedIn (cyan), Activities (purple) — each rendered conditionally on data presenceInline Mail/Phone/LinkedIn text rows + small "Emails & Activities" button in header
LeadDetailsDialog Company Details boxHidden (Company Size + Annual Revenue suppressed)Visible
LeadDetailsDialog footer (Full Lead Details + Close)Removed — X in top-right is only close affordanceRemoved — same. Footer was deleted globally because both buttons were redundant (Activities replaces Full Lead Details; X replaces Close) and the Vibe heart overlay covered them.
Stage badge in dialog headerSolid colorPalette fill matching the stage color, larger padding, ChevronDown icon, shadow + translateY hover. Locked Badge for terminal Clients / Lost Deal stays subtle and non-clickable.Same — applies to both breakpoints.
Rep display in dialog headerMedium circular Avatar only — no pill, no name text. title attribute on wrapping Box surfaces name on hover / iOS long-press.Same — applies to both breakpoints.
Companion deployed doc: mobile-shortcut-setup.html

Rep-facing standalone guide for adding the Imagine Leads Portal to iPhone home screen via iOS Shortcut + custom pinwheel icon. Hosted alongside the Sales Workflow Guide at imagine-sales-workflow.netlify.app/mobile-shortcut-setup.html. Referenced as a Phase 7 item on the New Employee CRM Checklist board.

Why both apps need their own copies of similar code

Vibe apps each have their own bundled source — there's no shared library across apps. When a pattern proves useful in one app (like the photo cache), it has to be ported by hand to the other.

Automations Catalog

The system depends on a layered set of automations spread across boards. This catalog is organized by board so you can audit what fires from where.

Team Events List (5463185693)

TriggerAction
Rep column changes to [Rep Name]Move item to that rep's group. 5 automations — one per rep. (Rewired 2026-05-22 from Event Assignee column to Rep column.)
Rep column becomes emptyMove item to Not Assigned group (group_mkxj14zf). Handles unassigned events globally without needing a per-rep rule.
Event Assignee column changes (legacy)Same group routing as above, kept active as a fallback safety net for legacy events that only have the Event Assignee value set.
Attendance changes to ApprovedNotify the assigned rep. Should use the dynamic Event Assignee / Rep person, not hardcoded names.
Attendance changes to ApprovedCreate a corresponding item on Event Expenses (18400471989) for the rep to track expenses.
Date Start arrives in 21 / 14 / 7 daysSend reminder to assigned rep. Three separate automations (21-day, 14-day, 7-day).
Date End arrivesMove item to Past Events Attended group (group_mm05rgs9); set Attendance to Dominated. Most important archival automation — ensures past events get retired correctly.

Per-rep Outreach boards

TriggerAction
Status changes to Move to LeadsMove item to Leads board (5270617307); set Lead Stage to Working Leads.
Status changes to No ConnectionMove item to No Connections board (18407788411).
Status changes to Unqualified/DeadMove item to Unqualified/Dead group on Leads board.

Leads board (5270617307)

TriggerAction
Lead Stage changes to In DiscoveryTrigger Contact creation on Contacts (5270617302) via the Contact Creation - OSA workflow board (18405058689).
Lead Stage changes to In DiscoveryTrigger Account creation on Accounts (5270617317) via the Account Creation - OSA workflow board (18405049375).

Design Status (5342150390)

TriggerAction
New item created via C&P Request FormAuto-create a corresponding Deal on the Deals board (5270617351). Also fires a create_item webhook (ID 586182479) → Netlify Function, which waits 8 s for the Deal automation to complete, then establishes the Lead ↔ Deal link so the Deal appears immediately in the Vibe app's Current Deals section.
Design Stage → Fulfillment KickoffWebhook (ID 586155509) → Netlify Function. Cascade: Deal stage = Won, moved to Closed Won group, close date = today → Lead moved to Clients (if was In Design or Lost Deal; no-op if already Clients).
Design Stage → Not Moving ForwardWebhook (ID 586155509) → Netlify Function. Cascade: Deal stage = Lost, moved to Lost group, close date = today → Lead moved to Lost Deal (if was In Design; never demotes existing Clients).
Design Stage → Fulfillment KickoffNative Monday automation: create an item on the Fulfillment Status board (5343204571). This is the item-creation step the Design Workflow Guide refers to in §7 — a native Monday automation on the Design Status board, not part of the monday-design-sync webhook. (Owner MJ, ~2 yrs, 100% success.)
Design Stage → Fulfillment KickoffNative: move the Design item into the Fulfillment Kickoff group.
Design Stage → Fulfillment KickoffNative: notify Production (highest-volume automation — 28 runs logged).
Design Stage → Fulfillment KickoffNative: notify the Sales Rep (added ~4 months ago).
Design Stage → In FulfillmentNative: move the Design item into the In Fulfillment (Active) group.
Design Stage → Not Moving ForwardNative (safeguard, workflow 7919381300, added Jun 2026): notify the deal's Sales Rep + Chris Mouch + MJ Jacobson that the deal was marked Not Moving Forward (Deal LOST, Lead closed) — a same-day catch for mistaken closes. Audit ref B2. (Replaces the original build 7919377337, which had a text-direction rendering bug — disable that older one.)
Design Stage → Prospect ReviewNative (NDA checkpoint, workflow 7919378604, added Jun 2026): notify the deal's Sales Rep to confirm NDA Status = Dominated (fully executed) before any IP is shared. Soft reminder is the final design (decided 2026-06-11) — Chris ruled out a webhook hard block on Prospect Review; the cancelled spec is kept at /Imagine/NDA-Hard-Gate-Webhook-Spec.md for reference. Audit ref A6 / B7.
Design Stage → Sales/Design ReviewNative (workflow 7919379608, added Jun 2026): notify the deal's Sales Rep that the deck is ready for their internal review. Previously this stage sent no notification (relied on a manual @-tag); now the rep is pinged automatically. Sales-Rep-only by design — not the whole Design team. Audit ref B6.
Design Stage → Prospect ReviewNative (workflow 7919379941, added Jun 2026): move the item to the Designs Waiting on Client Approval group — the client-facing move now happens at Prospect Review (not via Status = Dominated). Audit ref A4 / A8.
Design Stage → Waiting on SOWNative: move the item to the Designs Waiting on Client Approval group and notify the Sales Rep & Designer. (The deal is approved but still open — it doesn't close Won until Fulfillment Kickoff.) Per the Design Workflow Guide §7.
Status → Dominated (being retired)Legacy native automation — DISABLE. Previously moved the card to Designs Waiting on Client Approval, which fired prematurely at internal Sales/Design Review. Superseded by the Prospect Review move above (workflow 7919379941). Toggle this one OFF on the Design Status board so Dominated no longer relocates cards. Audit ref A4.
Native automations vs. the webhook — what owns what

Five rows above are native Monday automations defined directly on the Design Status board; the three webhook rows are the monday-design-sync Netlify function. They divide cleanly: the native automations handle everything that stays on the Imagine account — same-board group moves, creating the Fulfillment Status item, and notifications (Production, Sales Rep). The webhook handles only the cross-board cascade Monday's native library can't do — updating the linked Deal's stage/group/close date and converting the Lead. A single flip to Fulfillment Kickoff fires both layers at once: the native rules build the handoff locally while the webhook closes the Deal Won and converts the Lead.

Fulfillment Status naming: the create-item action targets the board literally named Fulfillment Status (5343204571). A separate Fulfillment Status App board (18394609865) exists but is not actively used — don't conflate the two.

Design Status webhook architecture (monday-design-sync)

Monday's native automation library cannot update a status column on a connected board (confirmed exhaustively — no such recipe exists on this account tier). All cross-board cascades are implemented via a single Netlify serverless function that handles two Monday webhook events.

Webhook 1 — create_item (ID 586182479): Fires when the C&P form creates a new Design Status item. The function waits 8 s for Monday's Deal-creation automation, then reads the Lead Associated column (board_relation_mm3rth1s) and the link to Deals column (board_relation_mm2xb4g9), and writes the Lead ↔ Deal bidirectional link. This makes the Deal appear in the Vibe app's Current Deals section immediately — without waiting for Fulfillment Kickoff.

Webhook 2 — change_column_value (ID 586155509): Fires on any column change. The function filters to Design Stage (status_1) changes only. On Fulfillment Kickoff or Not Moving Forward, it cascades: updates Deal stage + close date + group, ensures the Lead ↔ Deal link exists, then applies Lead lifecycle rules identical to useLeadDeals.js. Lead lookup uses the Design item's Lead Associated column first, falling back to the Deal's Source Lead column for items that predate column restoration.

Function URL: https://imagine-monday-infra-guide.netlify.app/.netlify/functions/monday-design-sync
Source: Monday_Infrastructure_Guide_Deploy/netlify/functions/monday-design-sync.js
Netlify env var required: MONDAY_API_KEY — generate at monday.com → Profile → Admin → API → Generate token.

Design Research (5341974735)

Native Monday automations (owner MJ), in two clusters: a research-workflow set and the 7pace time-tracking sync. Triggers run off the subitem Research Stage and the Due Dates.

TriggerAction
Request Due Date arrives AND Task Status ≠ DominatedNotify Lead DR + Management (overdue safety net).
Subitem Due Date arrives AND subitem Research Stage ≠ Completed ResearchNotify the Researcher + Management.
Subitem Research Stage → Requested QuoteSet subitem Due Date = today, then push it out 3 days (vendor-response buffer).
Subitem Research Stage → Waiting on VendorSet subitem Due Date = today, then push it out 3 days.
Subitem Research Stage → Add'l ResearchNotify the Researcher + set subitem Sub-Task Status = Waiting on Fulfillment.
Subitem Research Stage → Completed ResearchNotify Design + set subitem Sub-Task Status = Waiting on Design.
7pace — total tracked time on an item or subitem changesWrite the new total into Hours Spent (item → numbers_mkm7b35g, subitem → numbers_mkm7z31k).
7pace Timetracker sync — item/subitem deleted, renamed, or movedSend a webhook to 7pace (six housekeeping automations that keep 7pace's mirror of the board in sync).

Slack notification workflows

Two utility workflow boards in the CRM Workflows folder handle Slack notifications:

  • Signed SOW Slack Workflow (18399485852) — Posts to Slack when a SOW gets signed.
  • Fulfillment Kickoff Slack (18398163775) — Posts to Slack when a fully-executed SOW project moves to fulfillment handoff.
Why utility workflow boards exist

Monday automations can be defined on any board, but when an automation's trigger is on Board A and its action affects Board B, organizing them on a third "workflow" board keeps the primary boards' automation lists clean. The CRM Workflows folder gathers all the cross-board routing automations in one place.

Dashboards & Reporting

Where leadership and reps see aggregated data. Each dashboard pulls from specific boards via widget filters that must be updated when new boards are added.

Sales Event Tracking Dashboard (37094055)

Management dashboard aggregating Outreach activity across all per-rep boards. When a new rep is onboarded, every widget filter must be updated to include their new Outreach board.

WidgetPurpose / filter logic
Total Outreach In Flight (668755102)Counts active outreach prospects across all rep boards. Filter: Status text is NOT Move to Leads, No Connection, Unqualified/Dead.
Outreach Actively Worked (668766325)Filter excludes Not Contacted plus the lifecycle terminals.
Outreach Activity by Event (668755913)Horizontal bar chart grouped by event name (Group name on Outreach boards).
Outreach Status by Event (668755974)Stacked vertical bar showing status breakdown per event.
Approved Events Missing Outreach (668791859)Critical widget. Surfaces events that have been approved but have no outreach activity from any rep. When adding a new rep, you MUST add their Outreach board to the "is empty" filter group (combined with AND across all reps), or the widget shows false positives.

Sales CRM Dashboards (CRM workspace)

Three management dashboards built on the CRM boards (Deals, Leads, Activities, Outreach). Each is an overview in the CRM workspace. Widgets read live from the boards; counts that filter on the current month roll over automatically.

DashboardWidgets & source
Deals Pipeline Dashboard
(overview 37029349)
Revenue/pipeline view on the Deals board (5270617351). Widgets: Active Deals Count, Total Active Deals Value, Average Deal Size, Active Deals by Stage, Active Deals by Rep, Won Deals by Rep (added 2026-06-01), Pipeline Value by Stage, Closed Won Value (Last 12 Months), Win Rate, Average Deal Age.
Sales Performance Dashboard
(overview 36954245)
Acquisition view across Leads (5270617307) and the per-rep Outreach boards. Widgets: New Working Leads This Month (+ by Rep), Current Leads by Stage, Lead Acquisition Funnel, Outreach this Month (+ per Rep), No Connections Backlog, Lead Sources, Top Conferences for Lead Output, Working Leads Monthly Trend. Note: "this month" widgets read empty at the very start of a month.
Sales Activity Dashboard
(overview 36951111)
Rep-activity view on the Activities board (5270617328). Widgets: Discovery Calls This Month by Rep, Activities by Type This Month, Total Activities This Month, Activities by Rep & Type, Activity Trend by Type (Last 6 Months). Counts follow the Scheduled/Completed/Rescheduled rule (No-Show & Cancelled excluded).
Sales Workflow Guide
(overview 37571595)
Not a dashboard — the rep-facing Sales Workflow Guide widget (embeds imagine-sales-workflow.netlify.app). Part 1: Events & Conferences; Part 2: CRM & Lead Management. Moved into the CRM workspace 2026-06-11 for the team-wide release. Edited via /Imagine/Sales_Workflow_Guide_Deploy/ → drag onto the Netlify project to redeploy.
Companion live report (outside Monday)

A per-rep Sales Rep Scorecard (Cowork artifact) aggregates Outreach, New Working Leads, the four call types, Deals, and Deals Won by rep with a selectable time window (month / last 3 / quarter / YTD / all-time) and CSV export. It pulls the same boards live via the Monday API. Definitions: Outreach = per-rep Outreach boards + No Connections (by Assignee) + Leads items, all by "Date to Outreach"; New Working Leads = "Date Working Lead"; calls = activity Start time excl. No-Show/Cancelled; Deals = created; Won = closed-won by close date.

Events Dashboard (18394407658)

Custom-object board functioning as the events ops dashboard. Lives in the Team Events workspace.

Activities Dashboard

Aggregates activity logging across all reps. Each rep has a personal Activities view (Owner = their name, Group = Account Activities only, Start time ≥ today, sorted ascending) created during onboarding.

Reporting only counts certain statuses

Dashboard widgets that count activities only include records with Status = Scheduled, Completed, or Rescheduled. No Show and Cancelled are excluded by design so numbers reflect real work, not noise.

People & Access

How people get into the system, how permissions flow, and what to remember when removing someone.

The Sales Group team — the umbrella access mechanism

Board access for sales directors flows through membership in the Sales Group team in Monday. The Sales Group team has Edit permissions on all CRM-relevant boards (Leads, Contacts, Accounts, Activities, No Connections, Team Events List, Design Status, Deals, Event Expenses, etc.). Adding a new rep to that team grants access to all of those boards at once.

Don't subscribe rep-by-rep, board-by-board

Individual board subscriptions are still useful for personal notifications and views, but the actual edit access rights come from Sales Group team membership. Always start there.

The New Employee CRM Checklist

The full rep onboarding sequence lives on the New Employee CRM Checklist board (18413242438). It applies to new Sales Directors hired into the standard volume-sales role. It does NOT apply to Bill McCoy — Bill is the CEO and a special-case rep (full participation in Sales Events, but skips the Outreach pipeline; see the callout in Section 03). For any new rep, use Nick or James as the structural template, not Bill.

The checklist is organized into 8 phases:

  1. Phase 1 — Outreach Board Setup (duplicate, rename, move to CRM workspace, assign owner, verify columns)
  2. Phase 2 — Bidirectional Connect Boards
  3. Phase 3 — Team Events List Updates (group creation, Event Assignee label, Rep-column automation, Vibe app config, profile photo, smoke test, Leads Vibe exclusion check)
  4. Phase 4 — Dashboard Updates (widget filters on Sales Event Tracking Dashboard, personal Activities view)
  5. Phase 5 — Automations Verification
  6. Phase 6 — Permissions and Access (Sales Group team membership, individual subscriptions, monday seat license, Vibe app access)
  7. Phase 7 — Training and Documentation
  8. Phase 8 — General HR/Systems Onboarding

What changes in the Vibe apps when a rep is added

  • Sales Taskboard — Add the new rep to utils/config.js in 5 places: REPS, GROUPS, REGIONAL_GROUPS, GROUP_MAP, ALL_REPS. Republish the app. Without this, the rep won't appear as a calendar swimlane or filter option.
  • Imagine Leads Portal — Verify the rep is NOT in EXCLUDED_MEMBER_NAMES in hooks/useSalesReps.jsx. (That list is for inactive members — accidentally adding an active rep here will hide them from salesRep dropdowns.)
  • Monday profile photo — Required for the rep's avatar to render in both Vibe apps. Without one, they show as a 2-letter initials circle.
  • ADMIN_NAMES in config.js — Add only if the new rep should see all reps' data by default. Currently: Chris Mouch, Bill McCoy.

When removing a rep

  • Remove from Sales Group team to revoke board access.
  • Add their name to EXCLUDED_MEMBER_NAMES in the Leads Vibe app to hide them from salesRep dropdowns going forward. (Their historical assignments stay intact.)
  • Decide whether to keep their per-rep Outreach board (for historical records) or archive it.
  • Their group on Team Events List should stay — past events assigned to them shouldn't be re-routed.
  • The 5 Rep-column automation on Team Events List for "when Rep = [their name]" can stay disabled (or deleted).

Quick Reference

Common questions and rules to lock in.

Common questions

Where does a lead actually start?

Two options. Path 1: on the rep's personal Outreach board, then moves to the Leads board when a real conversation happens. Path 2: directly on the Leads board, for warm encounters or referrals.

What makes Contacts and Accounts auto-create?

Moving a Lead's stage to In Discovery. The Contact Creation - OSA and Account Creation - OSA utility workflow boards listen for that stage change and create the records.

Why is there a "Rep" column AND an "Event Assignee" column on Team Events List?

As of 2026-05-22, Rep (people column) is the source of truth. Event Assignee (status column) is legacy but still dual-written by the Vibe app on create/reassign. The dual-write keeps Monday-native edits and legacy automations working.

How do I add a new rep to the system?

Follow the New Employee CRM Checklist (18413242438). Phase 3 covers Team Events List + Vibe app config updates; Phase 6 covers Sales Group team membership.

Where does the C&P Request actually live?

The C&P Request Form is a view on the Design Status board (5342150390). Submitting the form creates a new item on Design Status, which triggers Deal auto-creation.

What workspace are the Vibe apps in?

The apps are published from the Chris Mouch Vibes workspace (13721313), but they run against board IDs in other workspaces — Sales Taskboard against Team Events List (in Team Events workspace), Imagine Leads Portal against Leads (in primary CRM workspace).

How do I update the Sales Taskboard config?

Open the Vibe app (app ID 10098771) → Code tab → src/generated/utils/config.js. Edit the constants you need (REPS, GROUPS, REGIONAL_GROUPS, GROUP_MAP, ALL_REPS, ADMIN_NAMES). Click Publish. Changes go live to all users immediately.

What's a board_relation column?

A Monday column type that links to items on another board. Two-way connections create a reverse column on the linked board automatically. The Outreach boards' Event/Source column (board_relation_mm1asdrb) is the key example — it ties prospects back to the conference they came from on Team Events List.

How do automations route events to rep groups?

5 per-rep automations on Team Events List trigger on Rep column changes: "When Rep is set to [Name] → move to [Name's group]". A 6th global automation handles "When Rep is empty → move to Not Assigned group". Legacy Event Assignee-based automations remain active as a fallback.

Why do dashboards exclude No Show and Cancelled activities?

By design — reporting should reflect actual rep work, not events that didn't happen. Only Scheduled, Completed, and Rescheduled activities count toward metrics.

Things to remember

  • One Lead, many Deals — Don't create a new Lead for a returning customer. Submit a new C&P Request linked to the existing Contact and Account. The original Lead is a one-time conversion record.
  • Items move, they don't duplicate — Every cross-board automation moves the item. One record per prospect, physically located on whichever board reflects its current state.
  • Rep column is source of truth for Team Events List — As of 2026-05-22. Event Assignee column is legacy/dual-written by the Vibe app for backward compatibility. Don't write to Event Assignee directly from new code.
  • Vibe apps need code change + republish for new reps — The Sales Taskboard's utils/config.js hardcodes rep names and group IDs. New reps don't auto-appear; the config must be updated and the app republished.
  • Sales Group team is the access mechanism — Grant board edit access by adding the rep to the Sales Group team in Monday, not by subscribing them to each board individually.
  • Don't delete leads — Unqualified, Friend, and No Connection records all stay for reporting. Never delete; the funnel needs the history.
  • "In Design" is the terminal manual Lead stage; Clients / Lost Deal are auto-set — The Design team sets Design Stage to Fulfillment Kickoff (Won) or Not Moving Forward (Lost); the webhook cascade moves the Lead automatically. Don't drag a Lead past In Design manually. Once in Clients or Lost Deal, the Vibe app locks the Stage badge to prevent backflow.
  • "Customer is forever" — Once a Lead is in Clients, Lost on a subsequent Deal does NOT demote it. New opportunities from Clients (or Lost Deal) prospects are handled per Scenario B: submit C&P against the existing Contact/Account, never reopen the Lead.
  • The two CRM workspaces are not interchangeable — CRM (3364925) holds the full funnel. CRM (7173631) is the default workspace but holds only Quotes & Invoices. Always confirm workspace ID when creating new CRM-related boards.

Related references

Maintained by Operations. Questions or corrections: ask Chris.