Overview
LCV : CAC
7-yr vs 2-yr trailingThe 30 / 30 / 20 / 20
trailing 12 monthsAcross the reports
| loading… |
| loading… |
| loading… |
| loading… |
| loading… |
Pipelines · the Librarian clock
| Source | Objects | Status | Last tick Δ | Synced |
|---|---|---|---|---|
| loading… | ||||
Data findings — fix at the source
- loading…
Live checks
| loading… |
Findings are curated rows in console_findings (resolving sticks for everyone); live checks compute on load. The richer Librarian exception report is punch item 9.
Recent leads
newest first · HubSpot contacts (lifecycle = lead)| Name | Company | Lead status | Came in | |
|---|---|---|---|---|
| loading… | ||||
Sales funnel · open quotes
open deals · days since last client touch| Quote | Company | Stage | Amount | Last contact | Latest touch |
|---|---|---|---|---|---|
| loading… | |||||
SYS registry
| loading… |
Slash commands & plugins
Planned & Ideas
Hours by Project ID · last 8 weeks
Streamtime → Blair, hourly| loading… |
Weeks start Sunday. Unparsed rows (no Project ID) show as — uncoded —; they're the entity-resolution queue.
Open invoices
| Client | Project | Amount | Issued | Due |
|---|---|---|---|---|
| loading… | ||||
Project P&L · top by invoiced
quoted vs invoiced vs labor (v_console_pnl)| Code | Project | Client | Quoted | Invoiced | Labor | Expenses | Margin |
|---|---|---|---|---|---|---|---|
| loading… | |||||||
Overhead spend · manual bridge
non-labor overhead by month — feeds OpEx + CAC · click a row to edit| Month | Overhead total | of which marketing/ads | Note |
|---|---|---|---|
| loading… | |||
Weekly scorecard
click a manual cell to enter a value| loading… |
Most recent week first (Sunday start), metrics across. Work paid computes from Xero payment data; the rest are manual weekly entries (scorecard_entries, click a cell to enter). Green = goal hit; the 16-wk average row sits in the header.
Reference goals
derived from the weekly sold goal| loading… |
Records & history
context lines from the sheet| loading… |
Video board
4 lanes · v_video_boardWhat is Blair
BlueForest Intelligence · the single brainBlair is BlueForest's central intelligence system. The business runs on tools that can't see each other — HubSpot (sales), Xero (money), Streamtime (time & jobs), plus our own apps. Blair's Librarian copies all of it, hourly, into one Postgres database (Supabase), where every record is stamped with the same join key: the Project ID (XXX-YYYY-NNN — Division + year + number, e.g. VID-2026-030). Because everything shares that key, questions that used to span three tabs and a spreadsheet become one query: quoted vs invoiced vs labor per project, revenue pace vs the True North goal, a client's full history.
The registry is the master list — one row per thing we track (a video project, an internal system, a campaign, a person), each with its Project ID. Divisions: VID client video · SYS internal systems · MKT marketing · EMP people. Exactly one piece of code is allowed to create Project IDs (mint_project_code in the database) — every app is a client of it, which is why there are never duplicate or malformed codes.
How data stays fresh: the Librarian clock runs hourly at :00 — Streamtime syncs, then triggers HubSpot and Xero. The footer of every page shows the last sync; the Overview's Librarian card shows per-source heartbeats. Nothing in Blair is hand-keyed except the weekly scorecard numbers and the monthly overhead bridge.
How to use the Console
surfaces & two-way editsOverview — the daily read: revenue/sales/expense pace vs True North, the two key ratios (LCV:CAC, 30/30/20/20), mini summaries of every report, and open data findings. Sales — recent leads (the status dropdown writes back to HubSpot) and the open-quote funnel with days-since-last-contact. Systems — the SYS registry with build status, commands, and ideas; statuses are click-to-edit. My Time — hours by Project ID by week, billable split. Finance — invoiced YTD, receivables, per-project P&L, the overhead bridge (financial access required). Scorecard — the weekly grid, newest week on top; click any manual cell to enter a value. Video Status — the production board by lane; status notes and lanes are click-to-edit.
Editing rule of thumb: if it looks like a value on a grid or a badge, try clicking it — the Console is the editing surface now (the old Google Sheets are frozen). Edits write straight to the database and, where a source system owns the field (HubSpot lead status), to that system in the same click.
Asking questions: any Claude Code session in the Blair folder can answer business questions in plain English via the blair-analyst skill — it composes SQL against the same database, read-only by construction.
BuildStream — how content integrates
MKT · the build-in-public pipelineBuildStream is the content operation's tool — ideas → AV scripts → teleprompter → publish — and it's a native Blair tool: it writes its own tables (bs_*) in the same database, no connector needed. Its console lives at buildstream.blueforest.studio under the same Google sign-in.
The core rule: a Project ID = a message. Ideas carry no code (most ideas should die cheaply). A drafted script carries only its content number (BS-00N). When a script is approved for production — the commitment point — BuildStream mints the video its own MKT Project ID through Blair's minting authority, and from that moment the video exists in Blair like any client project: Streamtime hours, expenses, and any coded revenue roll up to it automatically. Blog posts, social cuts, and shorts made from that video are derivatives — they inherit the video's code, never their own.
Judging marketing as a whole: individual videos aren't profit centers; the content operation is. All content cost vs all content-derived revenue = the P&L summed over the MKT Division. Costs that belong to the whole operation rather than one video land on the standing overhead bucket (MKT-2026-001 · BuildStream — Content Overhead) so per-video numbers stay honest. Full rationale: Project IDs for Marketing Content (team GitHub).
The system map
how the pieces connectBlair's architecture as a transit map — feeder lines into the Librarian, the registry as the grand interchange, Division lines out to the Analyst. Also published at blair-system-map.pages.dev.