Skip to main content

Sales CRM & RFP

What progress is a construction sales team trying to make when they open their CRM at 7am?


Demand-Side Jobs

Every feature exists because someone is struggling to make progress. No struggle, no feature. These are the jobs — verified by watching what construction sales teams actually do, not what they say they want.

Job 1: Know Who I'm Dealing With

Situation: A BD manager prepares for a meeting tomorrow with a client they haven't spoken to in 3 months. They need to know: who else from their company is involved, what deals are active, what the last conversation was about.

ElementDetail
Struggling momentSearching email, spreadsheets, and memory to reconstruct a relationship
Current workaroundEmail search + notebook + asking colleagues "have you spoken to...?"
What progress looks likeOpen a contact, see everything — company, linked deals, full activity history
Hidden objection"I don't want to enter data just so a system can show it back to me"
Switch triggerWhen they lose a deal because they didn't know a colleague already had the relationship

Features that serve this job:

  • Contact CRUD with company linking
  • Contact detail page showing all linked entities (deals, ventures, activities)
  • Activity timeline per contact (calls, emails, meetings, site visits)
  • Company page showing all contacts and all deals
  • Search by name, email, company, or tag
  • CSV import for bulk onboarding
  • Contact status (active/inactive) and tagging

Job 2: See Where Every Deal Stands

Situation: Monday morning. A sales director needs to know: which deals are moving, which are stalled, which need action this week, and what the pipeline is worth.

ElementDetail
Struggling momentChasing reps for updates, reconciling spreadsheets, guessing pipeline health
Current workaroundWeekly team call + shared Google Sheet + gut feeling
What progress looks likeOne screen shows every deal, every stage, every value, every next action
Hidden objection"My reps won't update this — I'll end up maintaining it alone"
Switch triggerWhen a forecast is wrong because a deal silently died 3 weeks ago

Features that serve this job:

  • Deal pipeline with visual kanban (drag-drop between stages)
  • Deal stages: Lead, Qualified, Proposal, Negotiation, Won, Lost
  • Deal value, probability, expected close date
  • Cards/Table/Kanban view toggle
  • Pipeline summary (total value, weighted value, deal count per stage)
  • Dashboard with pipeline health, overdue activities, upcoming deadlines
  • Monthly goals tracking (pipeline value, won revenue)

Job 3: Win More Bids, Waste Less Time

Situation: An RFP lands. The team has 3 weeks to respond. Half the questions have been answered before in previous bids, but nobody can find those answers.

ElementDetail
Struggling momentRebuilding proposals from scratch, duplicating effort across bids
Current workaroundCopy-paste from old Word docs, hope someone saved the last version
What progress looks likeUpload an RFP, auto-fill 70% from past answers, human-review the rest
Hidden objection"AI-generated answers will be generic and need so much editing they're not worth it"
Switch triggerWhen they miss a deadline because the team spent all their time on formatting, not content

Features that serve this job:

  • RFP venture creation with description, tags, industry
  • Venture kanban: Discovery, Qualification, Preparation, Review, Submitted
  • Document upload (PDF, DOCX, TXT — max 16MB)
  • AI-powered answer auto-fill from approved library
  • Answer Library with confidence scoring
  • Review Queue for SME approval workflow
  • My Queue for personal review assignments
  • Analytics dashboard (auto-fill rate, time saved, cost saved per RFP)

Job 4: Never Let a Follow-Up Fall Through

Situation: A site visit happened last Tuesday. Three action items came out of it. By Friday, one has been forgotten, one is assigned to someone who doesn't know about it, and one is waiting on a document nobody has sent.

ElementDetail
Struggling momentAction items live in meeting notes that nobody re-reads
Current workaroundPersonal to-do lists, sticky notes, memory
What progress looks likeTasks linked to deals and contacts, with due dates, assignees, and status
Hidden objection"I already have a to-do app — why do I need tasks inside the CRM too?"
Switch triggerWhen a client says "you promised to send that last week"

Features that serve this job:

  • Task creation with title, description, due date, priority
  • Task linking to contacts, deals, ventures
  • Task status: Not Started, In Progress, Completed
  • Overdue task highlighting
  • Calendar view for deadlines and follow-ups

Situation: A solar installation project involves a property owner, an EPC contractor, two subcontractors, and a financier. The project ties to a specific warehouse address. Three separate bids have been submitted over 18 months as the scope changed.

ElementDetail
Struggling momentRelationships between entities exist in the salesperson's head, not the system
Current workaroundNotes fields, custom tags, "see deal X for context" comments
What progress looks likeA venture page showing: the property, all linked companies (with roles), all deals, all contacts
Hidden objection"Our deals are simple enough — we don't need all this linking"
Switch triggerWhen a new hire joins and can't understand any deal without 30 minutes of verbal context

Features that serve this job:

  • Venture entity linking property + companies + deals + contacts
  • Multi-company deals with roles (Client, JV Partner, Subcontractor, Consultant)
  • Property registry with address, GPS, site type, status
  • Venture-to-deal relationship (multiple bids per project)
  • Activity logging against any entity (contact, deal, venture, property)

Awareness Levels

Where the buyer sits determines what we build next.

LevelThey KnowWhat We Need to ShowFeature Priority
UnawareUsing spreadsheets, don't see the problemThe cost of lost deals and duplicated effortMarketing, not product
Problem Aware"We lose track of deals"Name their pain back to themDashboard, pipeline view
Solution AwareCRMs exist, tried Salesforce/HubSpotWhy construction needs a vertical CRMProperty registry, RFP workflow
Product AwareKnow this tool, not convincedRemove the hidden objection (adoption, data entry)CSV import, auto-fill, clean UX
Most AwareReady to switchReduce friction to zeroOnboarding wizard, data migration

Validation Stack

TestEvidenceStatus
Problem existsConstruction teams use 3-5 tools (CRM + spreadsheets + email + file shares + notebooks) to track one dealValidated — observed in solar, telecom, and construction
People payApp live at dreamineering.com/dashboard with real contacts and dealsEarly signal — internal use, needs external pilots
You can deliverCRM + RFP modules functional with auth, CRUD, kanban, AI auto-fillValidated — prototype running
Unit economicsSaaS at $30-80/seat/month vs Salesforce at $75-300Unvalidated — need pricing tests

Kill signal: If users create contacts but never create deals, the CRM is a rolodex, not a sales tool. Deal creation is the activation metric.


Domain Model

CONTACTS ←→ COMPANIES
↕ ↕
VENTURES ←→ DEALS (Bids)
↕ ↕
PROPERTIES DOCUMENTS
EntityWhat It RepresentsKey Fields
ContactA person you do business withName, role, company, phone, email, tags, status
CompanyAn organisation (client, subcontractor, supplier)Name, type, industry, ABN/tax ID, address
PropertyA physical site or address where work happensAddress, GPS, site type, status, photos
VentureA project or job that ties people, places, and bidsName, property, client company, stage, value
DealA bid, tender, or commercial opportunityVenture link, value, stage, due date, probability
ActivityAny interaction (call, email, meeting, site visit)Type, date, contacts, notes, linked entity
DocumentProposals, RFPs, contracts, drawingsFile, version, type, linked deal/venture

Relationships

FromToCardinalityExample
ContactCompanyMany-to-manyOne person works for multiple companies over time
VenturePropertyMany-to-oneOne property can have multiple project phases
VentureCompanyMany-to-manyClient, main contractor, subcontractors all linked
DealVentureMany-to-oneMultiple bids submitted for one project
DealContactMany-to-manyDecision-makers, procurement, technical reviewers
ActivityAny entityPolymorphicA site visit logs against contact, property, and venture

RFP Workflow

The tender cycle is the heartbeat of construction sales.

TENDER NOTICE

GO/NO-GO DECISION (scored checklist)

BID PREPARATION (document assembly, pricing, team allocation)

SUBMISSION (version-locked, timestamped)

EVALUATION PERIOD (track questions, site visits, presentations)

AWARD / LOSS (win/loss analysis, feedback capture)

HANDOVER TO DELIVERY (venture transitions to In Progress)

Go/No-Go Checklist

Every RFP runs through a qualification gate before committing resources.

CriteriaQuestionWeight
RelationshipDo we know the decision-maker?High
CapabilityHave we done this type of work before?High
CapacityDo we have the team available?High
CompetitionHow many competitors are bidding?Medium
MarginCan we hit target margin at competitive price?High
LocationIs the site in our operating area?Medium
TermsAre contract terms acceptable?Medium
TimelineCan we meet the submission deadline?High

Score: 70%+ = Go. 50-70% = Review. Below 50% = No-Go.


Competitive Position

CapabilitySalesforceHubSpotPipedriveThis CRM
Contact/Company managementYesYesYesYes
Visual pipelineYesYesYesYes
Property/site registryNo (custom objects)NoNoNative
Multi-company dealsYes (complex setup)LimitedNoNative
RFP/tender workflowNo (add-on)NoNoNative
AI answer auto-fillNoNoNoNative
Go/No-Go scoringNoNoNoPlanned
Document versioning per bidNo (add-on)LimitedNoPlanned
Map view of propertiesNoNoNoPlanned
Construction-aware stagesCustom config neededCustom config neededCustom config neededDefault
Price per seat/month$75-300$0-150$15-100Target: $30-80

The gap: Generic CRMs can be configured for construction. None are designed for it. Configuration tax compounds — every new hire needs setup, every report needs custom fields, every integration needs mapping.


Feature / Function / Outcome

Every row maps a feature to the function it performs, the outcome the user experiences, the job it serves, and delivery state. Reviewed 2026-02-18.

#FeatureFunctionOutcomeJobState
1Contact listBrowse, search, filter contactsFind the right person in secondsJob 1Live — 23 contacts, table/grid, search, pagination
2Contact detailView profile, linked ventures, linked dealsSee full relationship context before a meetingJob 1Live — breadcrumbs, contact info, linked RFP ventures with roles, linked deals section
3Contact createAdd new contact with companyCapture a new relationship immediatelyJob 1Live/crm/contacts/new
4Company pagesView company with all contacts and dealsUnderstand an organisation's full engagementJob 1, 5Gap — company as contact field, no standalone entity pages
5Deal pipelineVisual kanban of all deals by stageSee where every deal stands at a glanceJob 2Live — 4 stages, drag-drop, cards/table/kanban toggle
6Deal createCreate new deal with value and stageCapture a new opportunity immediatelyJob 2Live/crm/deals/new
7Deal detailView deal with stakeholders, linked RFP, activity timelineUnderstand everything about an opportunityJob 2Live — stage, value, probability, close date, deal type, stakeholder management, linked RFP venture, activity timeline
8Deal stakeholdersAdd contacts as stakeholders with buying rolesMap the buying committeeJob 2, 5Live — "Add Stakeholder" button, buying committee framing
9DashboardSummary cards and pipeline overviewKnow what needs attention todayJob 2Live — pipeline summary, goals, quick actions
10Monthly goalsTrack pipeline and won revenue targetsKnow if you're on track this monthJob 2Live — $100K pipeline, $50K won targets
11Venture kanbanVisual board of RFP projects by stageTrack every bid from discovery to submissionJob 3Live — 5 stages, 3 ventures, drag-drop
12Venture detailView RFP questions, linked deal, linked contactsFull picture of a bid in one pageJob 3, 5Live — 10 questions table, linked deal, linked contacts with stakeholder roles/influence, AI buttons
13Venture createCreate new RFP ventureStart tracking a new bidJob 3Live/rfp/ventures/new
14Venture-deal linkBidirectional link between RFP venture and CRM dealOne project, one deal, full pictureJob 5Live — linked from both venture detail and deal detail, with Unlink button
15Stakeholder rolesAssign roles and influence to linked contactsKnow who decides, who influences, who blocksJob 5Live — Economic Buyer role, high/medium influence levels, description field
16RFP questionsManage Q&A per venture with category/priority/statusStructure the RFP responseJob 3Live — 10 questions, Add Question button, category/priority/status columns
17Answer detailReview AI answer or write manual answerBuild the answer library one question at a timeJob 3Live — answer review page, manual write with save, min 10 chars
18AI LoopRun AI-powered answer generation across venture questionsAuto-generate draft answersJob 3Built — "Run AI Loop" button on venture detail
19Deck generationGenerate presentation deck from answered questionsTurn answers into a deliverableJob 3Built — "Answer some questions first to generate a deck"
20Document uploadUpload PDF, DOCX, TXT to venturesAttach RFP documents to the right projectJob 3Live — UploadThing, PDF/DOCX 16MB, TXT 4MB
21AI auto-fillAuto-populate RFP answers from libraryCut 70% of RFP response timeJob 3Live — 70% auto-fill rate reported
22Answer libraryStore approved answers for reuseNever write the same answer twiceJob 3Built — page with confidence scoring, empty state
23Review queueSME approval workflow for answersEnsure answer quality before auto-fillJob 3Built — review queue + my queue, confidence tiers (40-80%)
24RFP analyticsTrack time saved, cost saved, fill rate, compound growthProve the ROI of the RFP toolJob 3Live — auto-fill rate, approval rate, compound rate, library size, confidence distribution, $1,150/RFP, 20h saved
25Task managementCreate, assign, track tasksNever let a follow-up fall throughJob 4Partial — page exists, create flow, status cards, empty state
26CalendarView deadlines and follow-ups by dateSee the week aheadJob 4Partial — nav link exists
27Activity timelineLog calls, emails, meetings, visits per dealBuild an interaction historyJob 1, 4Built — timeline on deal detail with "Log First Activity" button, empty state
28CSV importBulk import contacts from spreadsheetOnboard existing contacts in minutesJob 1Not verified
29Global searchSearch across contacts, deals, venturesFind anything from one search boxAllPartial — contact search works
30Property registryTrack physical sites as standalone entitiesLink projects to real-world locationsJob 5Partial — address data exists on contacts/ventures, no standalone entity
31Go/No-Go scoringQualification checklist for RFP decisionsStop wasting time on unwinnable bidsJob 3Gap — qualification stage exists in kanban, no scoring UI
32AuthSign-in, sign-up, user managementSecure access per userAllLive — Clerk auth, theme toggle
33NavigationApp-wide sidebar and top nav with breadcrumbsMove between modules without frictionAllLive — 6 modules, breadcrumbs on detail pages
34RFP assignmentsAssign reviewers to answer queuesDistribute review work across teamJob 3Gap — nav link exists, redirects to dashboard
35InsightsAnalytics and forecastsMake data-driven decisionsJob 2Stub — nav only
36PlansTeam plans and task trackingCoordinate team activityJob 4Stub — nav only
37AgentsAI agent registry and workflowsAutomate repetitive sales tasksJob 3Stub — nav only

Delivery Summary

StateCount%Meaning
Live2054%Functional, verified with real data
Built616%UI exists, needs data or first use
Partial411%Page exists, core function incomplete
Gap25%In PRD spec, not yet built
Stub38%Nav link only
Not verified13%May exist, needs testing
Total37Up from 31 after deep inspection

Success Criteria

Functional

#CriterionVerificationJob Served
F1Create a contact and link to a company in under 30 secondsTimed testJob 1
F2Contact detail shows all linked deals, ventures, and activitiesWalkthroughJob 1
F3Move a deal through all pipeline stages via drag-dropWalkthroughJob 2
F4Dashboard accurately reflects pipeline value and deal countData verificationJob 2
F5Upload an RFP and receive auto-filled answers within 60 secondsTimed testJob 3
F6SME can review and approve an answer in the Review QueueWalkthroughJob 3
F7Create a task linked to a deal with due date and assigneeEnd-to-end testJob 4
F8Create a venture linking property, company, contacts, and dealsEnd-to-end testJob 5
F9Import 500 contacts from CSV without errorsBulk import testJob 1
F10Search finds results across all entity types in under 2 secondsPerformance testAll

Non-Functional

#CriterionThreshold
NF1Page load timeUnder 2 seconds on 4G
NF2Search responseUnder 500ms for 10K records
NF3Concurrent users50 simultaneous without degradation
NF4Mobile responsiveFully usable at 375px viewport
NF5Uptime99.5% monthly

Commissioning

Deep review against live app at dreamineering.com on 2026-02-18. Inspected: dashboard, CRM overview, contacts list, contact detail, deals list, deal detail, tasks, RFP overview, ventures list, venture detail, answer detail, answer library, review queue, my queue, analytics.

ComponentSchemaAPIUITestsStatusNotes
DashboardDoneDoneDonePending85%Section cards, quick actions, 6-module nav
Contact CRUDDoneDoneDonePending85%23 contacts, table/grid, search, filters, pagination, edit
Contact DetailDoneDoneDonePending80%Breadcrumbs, contact info, linked RFP ventures with roles/influence, linked deals section
Company CRUDPartialPartialPartialPending25%Company as contact field only, no standalone entity pages
Property DataPartialPartialPartialPending30%Address on contacts + ventures, not a standalone entity
Venture BoardDoneDoneDonePending85%5-stage kanban, 3 ventures, drag-drop, cards/kanban toggle
Venture DetailDoneDoneDonePending85%Questions table, linked deal, linked contacts with roles, AI Loop, deck gen
RFP QuestionsDoneDoneDonePending80%10 questions per venture, category/priority/status, add question
Answer DetailDoneDoneDonePending70%Review page, manual write, min 10 chars, no AI answers yet
Deal PipelineDoneDoneDonePending85%4-stage kanban, cards/table/kanban, drag-drop, 1 live deal
Deal DetailDoneDoneDonePending80%Stage, value, probability, close date, type, stakeholders, linked RFP, activity timeline
StakeholdersDoneDoneDonePending75%Add stakeholder on deals + ventures, Economic Buyer role, influence levels
Venture-Deal LinkDoneDoneDonePending90%Bidirectional — visible from both venture and deal detail, Unlink button
Activity TimelinePartialPartialDonePending40%UI on deal detail with "Log First Activity", empty state, needs first use
Task ManagementPartialPartialDonePending35%Page, status cards, create flow, empty state
Document UploadDoneDoneDonePending70%UploadThing configured (PDF/DOCX 16MB, TXT 4MB)
AI Auto-fillDoneDoneDonePending65%70% rate displayed, AI Loop button, needs answer library data
AI Deck GenPartialPartialDonePending40%Button exists, requires answered questions first
Answer LibraryDoneDoneDonePending50%Page, confidence tiers, empty — needs first approved answers
Review QueueDoneDoneDonePending55%Queue page, my queue, confidence filtering (40-80%)
RFP AnalyticsDoneDoneDonePending70%Auto-fill rate, approval rate, compound rate, library size, confidence dist, value metrics
AuthDoneDoneDonePending90%Clerk, sign-in/up, user menu, theme toggle
NavigationDoneDoneDonePending90%6 top-level modules, sidebar per module, breadcrumbs on detail pages
AssignmentsPendingPendingPendingPending0%Nav link redirects to dashboard
CalendarPartialPendingPartialPending15%Nav link exists
Global SearchPartialPartialPartialPending30%Contact search works
InsightsPendingPendingPendingPending0%Stub
PlansPendingPendingPendingPending0%Stub
AgentsPendingPendingPendingPending0%Stub

Quality Assessment

DimensionRatingEvidence
Data modelStrongContacts, deals, ventures, questions, answers, stakeholders — all relational, all linked
Entity linkingStrongVenture-deal bidirectional, contact-venture with roles, contact on deal detail
CRM coreSolidContact CRUD, deal pipeline, kanban views, detail pages all functional
RFP coreSolidVenture lifecycle, question management, answer workflow, analytics
AI featuresEarlyAuto-fill rate reported, AI Loop button, but answer library empty — needs first real RFP
Information architectureCleanConsistent sidebar nav, breadcrumbs, module separation, back links
Empty statesGoodEvery empty state has guidance text and action button
Data densityLow23 contacts, 1 deal, 3 ventures, 0 tasks, 0 activities — needs real usage

Gap Analysis

PriorityGapJob BlockedEffort
HighCompany entity — no standalone company pages, can't see all contacts/deals per orgJob 1, Job 5Medium
HighActivity logging — timeline UI exists but no activities logged, needs friction-free entryJob 1, Job 4Small
HighAnswer library seeding — AI features exist but library is empty, blocking the auto-fill flywheelJob 3Medium
MediumProperty entity — address data scattered across contacts/ventures, no standalone registryJob 5Medium
MediumGo/No-Go scoring — qualification stage exists in kanban but no scoring checklist UIJob 3Medium
MediumTask linking — tasks exist but unclear if they link to deals/contacts/venturesJob 4Small
MediumAssignments page — nav link exists, redirects to dashboardJob 3Small
LowCSV import — not verifiedJob 1Small
LowCross-entity search — only contact search verifiedAllMedium
LowCalendar — nav link, no contentJob 4Medium

Shape Up

StageStatusOutput
NapkinDoneDomain model, JTBD analysis, competitive gap
Mock-upDoneLive app — CRM + RFP modules functional with real data
MarketIn progressThis PRD + internal use (23 contacts, 1 deal, 3 ventures)
BuildIn progress54% Live, 16% Built, 11% Partial — core loop works
DemandNot startedPilot with one construction/solar EPC company

Appetite: 6-week cycle. Next cycle: seed the answer library (unlock the AI flywheel), add company entity, make activity logging frictionless. Following cycle: Go/No-Go scoring, property registry.


Next Steps

1. Seed the answer library — process one real RFP to populate answers and prove the auto-fill loop
2. Add company entity — standalone pages showing all contacts and deals per organisation
3. Make activity logging frictionless — quick-log from deal detail, contact detail, venture detail
4. Pilot with one real construction sales team tracking real deals
5. Validate: do they create deals (activation) and return weekly (retention)?

Smallest move: Process one real RFP through the full cycle — upload document, answer 10 questions, approve answers to library, run a second RFP to see auto-fill work. That proves the flywheel.

Kill signal: If users create contacts but never create deals, the CRM is a rolodex. If they create ventures but never answer questions, the RFP tool is a project board. The activation metric is: first answer approved to library within 7 days.

Engineering Brief

Cycle focus: Prove the flywheel spins.

The architecture is strong — entity linking, stakeholder roles, venture-deal bidirectional references, RFP question management. But the system has never processed a real RFP end-to-end. The AI auto-fill reports 70% but the answer library has zero entries. The deal pipeline shows $0 in value. Activity timelines are empty. The next cycle isn't about new features — it's about making what exists actually work with real data.

Sprint 1: Seed the Answer Library (High — unlocks everything)

Why: The RFP module's value proposition is "answer once, auto-fill forever." Until the library has approved answers, auto-fill returns nothing. Every other RFP feature (confidence scoring, compound growth, analytics) is waiting on this.

What to build/fix:

  1. AI Loop end-to-end — Currently the "Run AI Loop" button exists on venture detail. Verify it actually generates draft answers for all 10 questions. If it does, the output should appear on each answer detail page (/rfp/answers/{id}) as a reviewable draft. Currently answer pages show "No answers found for this question." Fix the pipeline: AI generates → draft appears → SME reviews → approves → answer enters library.

  2. Answer approval flow — On the answer detail page, after an AI-generated or manual answer exists, the SME needs: (a) Edit the answer, (b) Set confidence level, (c) Approve to library. Currently there's a manual write box and Save button but no Approve action that graduates the answer to the library.

  3. Library population verification — After approval, the answer should appear in /rfp/library with its confidence score, question category, and source venture. Currently the library page shows "No Approved Answers Yet." Verify the data flow: answer approved → appears in library → available for auto-fill on next venture.

  4. Auto-fill proof — Create a second test venture with similar questions. Run AI Loop. Verify it pulls from the approved library and pre-fills answers. This is the moment the flywheel proves itself.

Acceptance test: Create venture A → answer 10 questions → approve all to library → create venture B with overlapping questions → run AI Loop → at least 5 answers auto-filled from library. Library page shows 10 approved answers with confidence scores.

Sprint 2: Company Entity (High — Job 1 + Job 5)

Why: "Show me everything with ABC Corp" is the most basic CRM question. Currently companies exist only as a text field on contacts. A sales director can't see: all contacts at a company, all deals with that company, all ventures involving them, total pipeline value per company.

What to build:

  1. Company table — New entity: companies with fields: name, type (Client, Contractor, Subcontractor, Supplier, Consultant), industry, abn, website, address, phone, created_at.

  2. Company detail page (/crm/companies/{id}) — Shows: company info, all linked contacts (with roles), all linked deals (with stage/value), all linked ventures. Summary stats: total pipeline value, active deals count, contact count.

  3. Company list page (/crm/companies) — Table with search, filter by type, sort by name/deal count/pipeline value. Add to CRM sidebar nav between Contacts and Deals.

  4. Contact-company relationship — Migrate the existing company text field on contacts to a foreign key. Contacts link to company records. A contact can belong to one company (with optional role/title at that company).

  5. Deal-company linking — When a contact is added as a stakeholder on a deal, their company is implicitly linked. Company detail page shows all deals where any of its contacts are stakeholders.

Acceptance test: Create company "ABC Corp" (type: Client) → link 3 existing contacts to it → create a deal with one of those contacts as stakeholder → company detail page shows all 3 contacts and the deal with pipeline value.

Sprint 3: Activity Logging (High — Job 1 + Job 4)

Why: The activity timeline UI exists on deal detail ("Log First Activity") but has zero entries across the entire system. Without activity history, the CRM can't answer "when did we last talk to them?" or "what happened at the site visit?" — which is the core of Job 1.

What to build:

  1. Quick-log modal — A lightweight modal (not a full page) triggered from: deal detail, contact detail, venture detail, and the activities list page. Fields: type (Call, Email, Meeting, Site Visit, Note), date (defaults to now), description (free text), linked contacts (multi-select), linked deal (optional), linked venture (optional).

  2. Activity creation APIPOST /api/activities with: type, date, description, contact_ids[], deal_id, venture_id. All linking fields optional except at least one contact or one deal.

  3. Activity timeline rendering — On deal detail: show activities in reverse chronological order with type icon, date, description, linked contacts. On contact detail: show all activities involving that contact. Filter by type.

  4. Activity list page (/crm/activities) — Currently shows "No recent activity." Populate from the activities table. Show all activities across all entities, sortable by date, filterable by type.

  5. Activity count on overview — The CRM overview shows "Total Activities" card. Wire this to the actual count.

Acceptance test: From deal detail, click "Log First Activity" → modal opens → log a "Site Visit" with date, description, and linked contact → activity appears in deal timeline → same activity appears on contact detail page → CRM overview shows "1" in Total Activities card.

Sprint 4: Data Quality (Medium — all jobs)

Why: The system has 23 contacts but 1 deal at $0 value, 3 ventures all in Discovery, 0 tasks, 0 activities. The architecture works but the data doesn't tell a story. A pilot user seeing this will think "nobody uses this."

What to do:

  1. Populate the Solar deal — The "Commercial Solar Installation - ABC Corp Warehouse" deal has $0 value, no probability, no close date. Set realistic values: $150,000 value, 60% probability, close date 3 months out. This makes the pipeline dashboard meaningful.

  2. Move ventures through stages — All 3 ventures sit in Discovery. Move the Solar venture to Preparation (it has 10 questions defined). Move "Test Project Alpha" to Qualification. Leave Dreamineering in Discovery. This makes the kanban board tell a story.

  3. Add stakeholders to the deal — The deal has 0 stakeholders even though the venture has 1 linked contact. Add Matt Mischewski as a stakeholder on the deal too, with "Economic Buyer" role. This validates the stakeholder flow from deal side.

  4. Log 3-5 activities — Create realistic activities: initial call, site visit, proposal discussion. This populates the activity timeline and proves the logging flow.

  5. Create 2-3 tasks — "Send revised proposal by Friday," "Schedule site inspection," "Follow up on financing options." Link to the deal. This populates the task board.

Acceptance test: Dashboard shows: pipeline value > $0, at least 2 deals across different stages, recent activity entries. A new user opening the app sees a system in use, not an empty shell.

Not This Cycle

These are real gaps but don't block the flywheel:

  • Property entity — Address data exists on contacts/ventures. Standalone entity is nice-to-have until there are 10+ properties.
  • Go/No-Go scoring — Qualification stage exists in kanban. Scoring checklist adds value at scale, not at 3 ventures.
  • Assignments page — Nav link redirects to dashboard. Matters when there are multiple reviewers.
  • Calendar — Important for daily use but doesn't prove the core value loop.
  • Cross-entity search — Contact search works. Expand when there's enough data to search.
  • Insights/Plans/Agents — Stub modules. Don't start until CRM + RFP core is proven with real usage.

Definition of Done (This Cycle)

1. Answer library has 10+ approved answers with confidence scores
2. Auto-fill works: venture B pulls answers from venture A's approved library
3. Company entity exists with detail pages showing linked contacts/deals
4. Activity timeline has real entries visible from deal + contact detail
5. Pipeline dashboard shows realistic values ($100K+)
6. One real external user can track a deal from lead to proposal using this tool

Context