AnchorWorks Executive Brief 015 · Confidential
AnchorWorks
Executive Brief 015 · July 4, 2026

The Pipeline, By Stage.

Brief 012 put the first live thread into the cockpit as a single number. Today that thread became a real funnel — every live deal now shows in its actual pipeline stage, pulled straight from the CRM — and the feed was taught to refresh itself instead of waiting on a hand.

Prepared for
Chris Campbell
AnchorWorks
Executive Brief Cloud · 2026
Executive Summary

From a number on the wall to a living funnel.

The Sales tab already carried one real reading from GoHighLevel — an aggregate count of open and won deals. Useful, but flat: it told you how many, never where. Today it gained depth. Every live opportunity is now placed in its true pipeline stage, named the way it reads inside the CRM, and drawn as a funnel the cockpit updates from live data.

Under that funnel, a second, quieter build: the feed learned to run itself. The manual pull that fetched live deals was rewritten as a scheduled service on the locked stack — the same architecture already chosen for every future data source. It is deployed and confirmed running. One access grant from you flips it from "built" to "refreshing every half hour," with no one touching a keyboard.

The cockpit stopped counting deals and started showing where they stand.

Where it stands: the funnel is live and deployed; the seeded demo board is untouched and the manual pull still works — nothing regressed. The automatic refresh waits only on two owner-level clicks on the database.

Executive Decisions · Decision Log

What was decided.

  • Show the pipeline by stage, not by total. A count answers "how busy"; a funnel answers "where is everything stuck." The decision the cockpit exists to serve lives in the stages.
  • Name the stages from the source of truth. Stage labels are read live from GoHighLevel's own pipelines, so the board always speaks the same language your closers do — rename a stage in the CRM and the funnel follows.
  • Keep real data unmistakably real. The live GHL feed stays in its own isolated table, walled off from the seeded demo, so no real deal ever gets averaged against a placeholder.
  • Automate on the locked stack — no new machinery. The scheduled refresh was built as a database function on the exact architecture already chosen for every source, not a bolted-on side system.
  • A zero is a reading, not a bug. Every live deal shows $0 of value because no dollar figure is set on it in the CRM. The board reports that truthfully rather than inventing a number.
  • Hand the two privileged steps to Chris. Turning on the schedule needs owner-level database access. Rather than force it, the build stops at the boundary and hands over an exact, two-command runbook.
Major Accomplishments

What shipped.

01

Named every pipeline stage

Foundation
ProblemThe live feed stored each deal's stage as a cryptic internal code. The board could count deals but could not say which stage any of them sat in — the one thing a sales funnel exists to show.
DecisionResolve those codes to their real, human names by reading GoHighLevel's own pipeline definitions, and attach the name to each deal as it is captured.
ImplementationThe snapshot now makes one read-only call to the CRM's pipelines and maps every stage code to its name, pipeline, and order. Five live pipelines were mapped — Conversion (SDR), Demand, LAS HVAC, Revenue (AE), and Sales.
Business ImpactThe pipeline is now legible in plain English and always matches the CRM. Rename a stage there and the board renames itself.
DependenciesNone. Read-only against the CRM.
02

Put a live funnel on the Sales tab

Ship
ProblemLeadership could see totals but not the shape of the pipeline — where deals cluster, where they stall.
DecisionDraw a real stage-by-stage funnel beneath the existing live strip, fed entirely by live data, and deploy it.
ImplementationA new database view rolls deals up by stage in pipeline order; the dashboard renders it as an animated funnel. Deployed to the live cockpit and verified through the public key — exactly what a browser sees. Today's live picture: 4 open deals, all sitting at "New Lead" in the Demand pipeline.
Business ImpactThe first true read on pipeline shape — thin today, but real, and it will fill in and tell the acquisition story as deals move.
DependenciesNone. The seeded demo board is untouched.
03

Built the self-refreshing feed

Automation
ProblemThe live numbers only updated when someone ran the pull by hand — fine for a demo, useless for a cockpit meant to be trusted at a glance.
DecisionRebuild the pull as a scheduled service on the locked database stack, so it runs on its own every half hour.
ImplementationThe pull was ported to a database-hosted function and deployed. It was invoked and confirmed to run end to end. The final two steps — storing the CRM key as a secret and switching on the scheduler — require owner-level access to the database and are handed to Chris as a two-command runbook, committed alongside the code.
Business ImpactThe moment those two clicks land, the acquisition feed is hands-free and always current — the pattern every future source (Stripe, ads, GA4) will reuse verbatim.
DependenciesChris: set the CRM secret + enable the scheduler (owner-only). Runbook is in the repository.
Metrics

By the numbers.

5
Live CRM pipelines mapped to real stage names
4
Live deals on the board — all at "New Lead"
30 min
Refresh cadence once the scheduler is switched on
4 / 4
Automated tests passing
2
Commits shipped on the open pull request (#4)
0
Seeded demo numbers touched
Acquisition feed · readiness
Live deals flowing in from the CRM100%
Pipeline shown by real, named stage100%
Self-refreshing feed (built & deployed)90% · one grant away
Deal values populated in the CRM0% · data entry
Cash truth (Stripe) wired in0% · next
Business Impact

Why a living pipeline earns.

A number tells you the pipeline is busy. A funnel tells you where it is bleeding. This is the difference between a report you glance at and an instrument you steer by — and today the cockpit crossed that line for the acquisition motion.

Visibility

See where deals sit

Every live opportunity is placed in its real stage. The moment a stage clogs, it shows — coaching and forecasting stop being guesswork.

Truth

Real, walled off from demo

Live CRM data lives in its own isolated table. No real deal is ever averaged against a seeded placeholder — real always reads as real.

Automation

A feed that runs itself

Once switched on, the pipeline refreshes every half hour with no hand on it — and every future source reuses the exact same pattern.

Honesty

A zero that means something

The $0 on every deal isn't a glitch — it's the board surfacing that deal values aren't being set in the CRM. The instrument found the gap.

Current Stage · The Build

Live capture — the pipeline now reads itself.

01
Foundation
02
Live capture
03
First clients
04
Scale
05
Sellable asset

The cockpit's acquisition motion now runs on live data, shown by real stage, and is one grant away from refreshing itself unattended. Live capture is no longer a single thread — it is a working funnel with a heartbeat. The next moves widen it: switch on the schedule, wire Stripe as the cash source of truth, and add appointment data so the board can show real show and close rates, not seeded ones.

Open Decisions

Decisions still required.

  • Switch on the self-refreshing feed. Two owner-level steps on the database — store the CRM key and enable the scheduler — take the pull from manual to automatic. The exact commands are waiting in the repository.
  • Set deal values in the CRM. Pipeline dollars will stay at $0 on the board until closers attach a value to each opportunity in GoHighLevel. A process decision, not a code one.
  • Confirm Stripe as the next feed. Cash is the truest number a business has, and it is still seeded. Wiring Stripe is the highest-value source left to connect.
  • Review and merge the pull request (#4). Both of today's builds sit on one branch, deployed to a live preview, awaiting your merge to land on the mainline.
Next Priorities

The top five.

  1. 01Switch on the scheduled refreshSet the CRM secret + enable the scheduler — the acquisition feed goes hands-free.
  2. 02Wire Stripe as cash truthConnect the truest number in the business — the next and highest-value live source.
  3. 03Add appointment dataShow / no-show from the CRM turns seeded show and close rates into real ones.
  4. 04Populate deal values in the CRMAttach a dollar figure to each opportunity so pipeline value stops reading $0.
  5. 05Map the acquisition→delivery handoffExtend the two-track model so Client Success reads live delivery stages too.
Executive Brief · Version 1.0 · July 4, 2026 · Canonical
Appendix

The record.

The feed

Read-only → isolated → view

Live deals are pulled read-only from GoHighLevel into an isolated staging table, then rolled up by named stage in a clean view the dashboard reads. The seeded demo board never mixes with it.

The scheduler

Database function · deployed

The pull now lives as a database-hosted function on the locked stack, deployed and confirmed running. A two-command runbook to switch on the half-hour schedule ships with it.

Where it lives

PR #4 · live preview

Both builds are committed to the KPI Command Center on one branch and deployed to kpi-command-center.pages.dev, awaiting review and merge.