Product Block 09 · Sellable today

Internal Ops Dashboard

One screen. Their data from QuickBooks + Toast + Mindbody + Salesforce. AI summary at the top.

Deploy: 5 days $7,500 setup $1,500/mo
Live demo Try the demo → https://ops.cafecito-ai.com/

Best fit: Multi-location operators with 3+ tools they hate context-switching between. PM firms, restaurant groups, multi-loc dental, RIAs (LiquidityBook trade-review pattern).

⚡ Self-bootstrap · paste into Claude Code or Codex

Internal Ops Dashboard — build it without writing code

Drop the prompt below into Claude Code or Codex. The agent picks a 3+ location operator, maps their morning routine in a 15-min interview, builds a mock dashboard with synthetic data using THEIR location names, deploys it, and produces a side-by-side screenshot pitch ("their morning today vs your dashboard").

You provide

You provide: (1) a multi-location operator prospect (3+ locations, 3+ tools), (2) decision-maker email, (3) 15-min interview with the owner about their morning routine + which tools they switch between.

You get back

You get: a hosted mock dashboard at /dashboard-demo/<slug> with their actual location names + plausible-but-synthetic numbers + AI summary card, a 90-second Loom of the morning-routine-collapsed-to-30-seconds, and a draft cold pitch with the screenshots.

Runtime & cost

Roughly 2 hours wall-clock + the 15-min interview. ~$1 in Claude tokens.

📋 Copy the entire block below into Claude Code (`/plan`) or Codex
You are building an Internal Ops Dashboard (Block 09 in the Cafecito AI new-hire playbook). Full reference at https://cafecito-ai.com/new-hire/blocks/09-internal-ops-dashboard. Read it. Use plan mode. Stop at every [GATE].

INPUTS YOU NEED FROM THE HUMAN (ask before doing anything else):
1. Prospect — multi-location operator with 3+ locations and 3+ daily tools (PM firm / restaurant group / multi-loc dental / RIA)
2. Decision-maker email
3. 15-minute interview answers — what tools the owner opens in their first 30 min, in what order. Get specifics: Toast → 7shifts → QBO → email, etc. List their location names.

ENVIRONMENT (verify):
- Working dir: /home/eratner/cafecito-ai
- Cloudflare account: f7a9b24f679e1d3952921ee5e72e677e
- Reference: /home/eratner/lcs-portfolio-intel/ + /home/eratner/cafecito-ai/soft-ui/ — closest dashboard patterns

SECRETS TO CONFIRM:
- ANTHROPIC_API_KEY (Claude for AI summary)
- (Per-integration secrets only needed for Phase 2 — week 1 is mock data only)

THE PLAN:

STEP 1 — RESEARCH + INTERVIEW NOTES (15 min, mostly human)
- Pull prospect website. Note location count, brand color, primary services, any public KPIs.
- Wait for the human's interview notes. Capture: tools used (e.g. Toast + 7shifts + QBO), in what order, what 5 KPIs the owner cares about most, their target labor %.
[GATE 1 — show parsed routine + 5 KPIs + location names, ask "proceed?"]

STEP 2 — SCAFFOLD WORKER (15 min)
- Create /home/eratner/cafecito-ai/dashboard-<prospect-slug>/.
- Use Prompt #1 from the block page ("API integration scaffold for one tool") for the FIRST integration only. Mark Phase 2 (real APIs) as "after pilot."
- For the demo: build a synthetic-data generator that produces plausible numbers matching the prospect's vertical (restaurant: per-location sales, labor %, void rate, table turnover; dental: chair utilization, no-show rate, etc.).
- Bindings: D1 OPS_DB.
[GATE 2 — show worker.js + sample synthetic data row, ask "proceed?"]

STEP 3 — BUILD KPI AGGREGATION + AI SUMMARY (20 min)
- Use Prompt #2 ("KPI aggregation logic") for the 5 KPIs from the interview.
- Use Prompt #3 ("AI morning summary generator") with prospect's preferred tone (default: "direct" unless interview says otherwise).
- Run the generator against the synthetic data — output should pass the "would the owner read this and care?" test.
[GATE 3 — show 3 sample AI summaries (one good day, one bad day, one weird day), ask "feels right?"]

STEP 4 — BUILD MOBILE DASHBOARD (20 min)
- Use Prompt #4 ("Mobile dashboard layout") with: prospect's location names, brand color, the 5 KPIs from Step 1, accent color matched to brand.
- Test on actual mobile (375px viewport via Chrome devtools) + desktop.
- Verify drill-down on tap shows per-location breakdown.
[GATE 4 — show URL + screenshots from both viewports, ask "ready to deploy?"]

STEP 5 — DEPLOY (5 min)
- Apply D1 migration. Deploy via OAuth wrangler.
- Set Workers Basic auth password (default: dashboard-<prospect-slug>-2026 — share manually).
- Print the live URL.
[GATE 5 — print URL + login, ask the human to open on their phone]

STEP 6 — RUN THE SYNTHETIC DATA SIMULATION (10 min)
- Trigger the morning-summary cron manually (POST /admin/run-summary).
- Verify: AI summary lands clean, KPI cards render with correct trend arrows, alerts trigger only on >2σ moves.
- Generate 3 days of "history" so the trend sparklines look real.
[GATE 6 — show day-1 / day-2 / day-3 evolution, ask "ready for the screenshot pitch?"]

STEP 7 — SCREENSHOT PITCH (10 min)
- Tell the human: "Take a screenshot of THEIR current morning routine (Toast dashboard + 7shifts + QBO + email — 4 separate tabs). Then take a screenshot of OUR dashboard. Combine side-by-side in Keynote/Figma."
- Wait for the combined image.

STEP 8 — DRAFT THE COLD PITCH (5 min)
- Email subject: "Your morning, condensed to one screen."
- Email body: 4 sentences, lead with the time-cost math (5-10 hrs/week × $300/hr), attach the side-by-side screenshot, name $7.5k setup / $1.5k/mo, one yes/no close ("want me to wire your Toast read-only token next?").
- Include the dashboard URL + login as the "try it yourself" footer.
[GATE 7 — show the draft, ask the human to send manually]

STEP 9 — SHIP THE SUMMARY
- Single-line: "[OPERATOR] dashboard demo at [URL] · login [PWD] · pitch sent to [EMAIL]."
- Append to /home/eratner/cafecito-ai/dashboard-shipped.md.

DONE.

GUARDRAILS: synthetic data ONLY in week 1 — never wire real integrations before signed pilot. Mark all numbers in the demo as "synthetic — for demonstration." Cost ceiling: $5 in Claude tokens.
01Stack
  • CF Worker
  • D1
  • Claude
  • integration APIs (QBO, Toast, Mindbody, Salesforce, etc.)
02Live references

Working production examples. Read the code. Steal the pattern.

  • LCS Trade Review Internal ops dashboard pulling LiquidityBook data — same pattern
03Day-1 plan

A real prospect. A real demo. A real outbound message — all before 5pm.

  1. 09:00–09:30 Pick a 3+ location operator who switches tools daily.

    Multi-location restaurant group (Toast + 7shifts + QBO), multi-loc dental (Dentrix + Solutionreach + QBO), 5+ unit PM firm. The more tools they juggle, the more they'll pay.

  2. 09:30–10:30 Map their current daily routine.

    Get them to walk through the first 30 minutes of an owner's morning. Open Toast → check yesterday's sales. Open 7shifts → check labor. Open QBO → check cash. That 30-min routine is what your dashboard collapses to 30 seconds.

  3. 10:30–11:30 Get read-only API access (or screenshots).

    Best case: they grant you read-only API tokens for each tool. Realistic: screenshots of their daily reports + CSV exports. Build the demo with whatever you can get on Day 1.

  4. 11:30–12:30 Build the read-only data sync.

    CF Worker pulls each integration on schedule (every 15 min for sales, every hour for labor + accounting). Stores in D1 with timestamp. NEVER write back. Read-only is the entire trust mechanism.

  5. 12:30–13:30 Pick 5 KPIs. No more.

    Yesterday's sales by location (vs same day last year), labor % (vs target), cash position, any anomalies, and one product-specific KPI. Five. Not fifty.

  6. 13:30–14:30 Build the AI summary at the top.

    Claude reads last 7 days of data each morning at 6am → writes a 3-sentence summary an owner reads in 5 seconds: "Yesterday's sales were $X. Brickell is up, Wynwood is flat, Coral Gables is down 12%. Today: watch Wynwood's liquor inventory."

  7. 14:30–15:30 Build the alert engine.

    Trigger only on >2 standard deviation moves OR critical thresholds (cash below 30 days runway, labor over 35%, missed deposit). Send via SMS + email. Suppress duplicates within 24h. Wrong alerts kill trust permanently.

  8. 15:30–16:30 Build the mobile-first dashboard.

    Owners check from their phone in the morning. Mobile-first is non-negotiable. One-screen scroll, AI summary at top, KPIs as cards, alerts as banners. Per-location drill-down on tap.

  9. 16:30–17:00 Send the screenshot pitch.

    Email the owner with TWO screenshots: their current "morning routine" (4 tabs, 4 logins, 30 minutes) vs your dashboard (1 screen, 1 login, 30 seconds). Subject: "Your morning, condensed to one screen."

04Best practices & gotchas
  • Read-only first. Write access = liability you don't need.

    Why: A dashboard that can write back to QuickBooks is a dashboard that can break their books. The single biggest source of "we're cancelling" moments is a sync bug that misposted a transaction.

  • One screen with 3-5 KPIs, not 50.

    Why: Owners scan dashboards in 5 seconds. Anything past 5 KPIs gets ignored. The KPI you drop is more important than the one you add.

  • AI summary updates daily, not realtime.

    Why: Realtime AI summaries cost 30x more in API and read as noise (the summary changes between coffee and meetings, eroding trust). Daily morning summary at 6am, plus alert banners for true anomalies, is the right cadence.

  • Alerts only on >2σ moves OR critical thresholds.

    Why: Alert fatigue kills the system. The fastest way to get an owner to ignore the dashboard is to send 5 alerts a day, 4 of which are noise. If alert rate is more than 1/week per owner, you're miscalibrated.

  • Mobile-first. Owners check from their phone.

    Why: 70% of owner sessions are mobile, even when desktop is "available." Designing desktop-first and adapting down for mobile produces an unusable mobile experience.

  • Never charge per integration. Quote one price for everything.

    Why: Per-integration pricing is the universal complaint with traditional BI tools ($200/mo for QBO + $200 for Toast + $200 for Mindbody = $600/mo before they've seen a chart). Bundle everything.

  • Per-location drill-down on tap. Aggregate first, detail on demand.

    Why: A 4-location operator sees "labor 28%" at the top — bad. Tap → "Brickell 24%, Wynwood 25%, Coral Gables 38%." That drill-down is where the actionable insight lives.

05Prompts (copy-paste)

Drop these into Claude Code. Replace the [BRACKETED] fields with the prospect's details.

Prompt 1 API integration scaffold for one tool

Generates the CF Worker code that pulls data from one integration on schedule.

Build me a CF Worker integration that pulls [TOOL: QuickBooks Online / Toast / Mindbody / 7shifts / Buildium / Salesforce / LiquidityBook] data for [BUSINESS NAME].

Auth: OAuth 2.0. Refresh-token-based, persisted in Workers Secrets per-tenant.

Data per tool:
- QBO: P&L last 7 + 30 days; AR + AP aging; cash position; deposits last 7 days.
- Toast: sales by location (yesterday + last 7 vs same period LY), labor cost % per location, void rate.
- Mindbody: appointments today + this week, no-show rate, technician utilization, packages expiring.
- 7shifts: scheduled vs actual labor, overtime hours, manager-on-duty.
- Buildium: rent collected vs due, open work orders by priority + age, vacancy.
- Salesforce: pipeline by stage, opportunities last 30 days, lost-deal reasons.
- LiquidityBook: positions by account, today's P&L, outstanding orders, exception report.

Schedule: every 15 min for live data, every 1h for slow data.

Storage: D1 table per integration with raw JSON + timestamp.

Bindings: D1 OPS_DB, secrets <TOOL>_CLIENT_ID + CLIENT_SECRET + ACCESS_TOKEN + REFRESH_TOKEN + ACCOUNT_ID.

Error handling: token refresh on 401, exponential backoff on 5xx, alert ops if 3+ consecutive failures.

Output: complete worker.js for ONE integration, plus OAuth setup walkthrough.
Prompt 2 KPI aggregation logic

Generates the function that takes raw data from all integrations and produces the 5 KPIs.

Build me a KPI aggregation function for [BUSINESS NAME]'s dashboard.

Inputs (from D1 raw_data tables):
- Last 7 days of sales by location
- Last 7 days of labor by location
- Current cash position
- Open AR aging buckets
- One product-specific input

Outputs (5 KPI cards):
1. **Yesterday's sales** — total + per-location split + delta vs same day LY (% and $).
2. **Labor %** — yesterday + 7-day avg + delta vs target.
3. **Cash position** — current + days of runway + 30-day trend arrow.
4. **AR aging** — % of AR 0-30, 31-60, 61-90, 90+. Flag any 90+ over $5k.
5. **Product-specific KPI** — for restaurants: table turnover; for dental: chair utilization.

Each KPI returns:
{
  "value": "...",
  "label": "...",
  "delta": { "abs": ..., "pct": ..., "trend_arrow": "up|down|flat" },
  "drill_down_data": [...],
  "alert_state": "ok|watch|critical",
  "alert_reason": "..."
}

Logic for alert_state: ok = within 1σ of trailing 30-day avg; watch = 1-2σ OR approaching threshold; critical = >2σ OR threshold crossed.

Output: ESM JS function.
Prompt 3 AI morning summary generator

The Claude prompt that runs at 6am and writes the 3-sentence summary the owner reads with their first coffee.

Generate the morning summary for [OWNER NAME] at [BUSINESS NAME] at 6am ET.

Inputs:
- Yesterday's 5 KPIs with deltas
- Last 7 days of trend data
- Open alerts (watch + critical)
- Owner's tone preference: [warm / direct / dry-humor]

Constraints:
- 3 sentences max. Total under 80 words.
- Sentence 1: yesterday's headline.
- Sentence 2: most actionable observation.
- Sentence 3: today's thing-to-watch.
- Match owner's preferred tone.
- Plain prose. No bullets. No "TL;DR." No emojis.
- Reference specific locations or people by name.

Examples:
- "Brickell killed it last night ($8.4k, 18% over LY) — Coral Gables struggled with the rain ($3.1k, -22%). Labor came in clean at 25%. Today: watch Wynwood's 6pm reservation block — three large parties + a thin floor."
- "Cash at $84k, comfortable for 21 days. Two AR balances over 90 days totaling $11k — Marisol is on those today. Today: don't forget the 11am call with the new POS rep."

Output: just the summary text. Plus a "highlight phrase for dashboard banner" sub-output (5-word version of headline).
Prompt 4 Mobile dashboard layout

Generates the mobile-first dashboard HTML — single screen, one column, 5 KPI cards, drill-down on tap.

Build me the mobile-first dashboard HTML for [BUSINESS NAME].

URL: <domain>/dashboard (auth via Workers Basic auth, owner-only).

Layout (mobile, 375px):
1. **Header** (sticky): business logo + name + today's date + last sync timestamp. Refresh icon top-right.
2. **AI summary card** (full-width): 3-sentence morning summary in slightly larger font. Cream-on-ink. Updated daily 6am.
3. **Active alerts** (banner only if exist): red for critical, yellow for watch. Tap-to-expand.
4. **5 KPI cards** (vertical stack mobile, 2-column desktop):
   - Each: KPI label, big number, delta with arrow + color, sparkline of last 7 days.
   - Tap → drill-down view (per-location breakdown, recent history, alert calibration).
5. **Footer**: "Settings" link + "Last synced [TS]" repeated.

Style: cream/ink + business accent. Fraunces serif AI summary, Inter KPIs, JetBrains Mono numbers. High contrast for outdoor reading.

JS: vanilla. Single fetch on load to /api/dashboard. Pull-to-refresh on mobile. Auto-refresh every 15 min when tab active.

Output: complete index.html with inline CSS + minimal JS.
06Selling script

Discovery question (ask this first)

"Walk me through the first 30 minutes of your morning. Which tools do you open, in what order?"

The frame

Multi-location operators with 3+ tools spend 30-60 minutes a day context-switching between dashboards that don't talk to each other. That's 150-300 hours of senior-operator time per year burned on data assembly. The bigger win is catching anomalies before they compound — the labor spike at the underperforming location, caught Tuesday morning instead of end-of-month.

The demo play

Build a demo with screenshots of THEIR data (or anonymized synthetic with their location names + their typical numbers). Show it on the discovery call from your phone. The "tap-to-drill-down" gesture is the demo close.

Objections

  • "We already have a BI tool / Tableau / Looker."

    "Most BI tools are reports — historical dashboards built quarterly by an analyst. This is a daily operational view with an AI summary that catches anomalies in real time. Different tool, different job."

  • "Tools change. Will this break when we switch our POS?"

    "The integration layer is modular — switching from Toast to Square is a 1-day swap, not a re-architecture. The annual fee covers up to 2 integration migrations a year."

  • "Security — these are our financials."

    "Read-only access tokens, scoped to specific endpoints. No write capability. Data lives in your CF D1, your encryption, your boundary. We provide architecture diagram + DPA pre-signing."

  • "$1.5k/mo is a lot."

    "It's the integration layer (5+ tools), dashboard, AI summary, alert engine, mobile app, and quarterly KPI calibration. Closest enterprise tool (Domo, Sigma) is $4k+/mo and you still need a data analyst."

The close

"$7.5k now to wire your 5 integrations + stand up the dashboard + tune your KPIs by Friday. $1.5k/mo from the day you log in for your first morning. If your senior operator doesn't save 5+ hours/week of context-switching in 30 days, kill it — no contract."

07Pricing notes

Anchor on senior-operator time. A multi-location owner whose time is worth $300/hr saving 5-10 hours/week is recovering $1,500-3,000/wk. Per-tenant cloud cost: ~$50/mo. Setup includes: 5 integration connections, KPI aggregation, AI summary, alert engine, mobile dashboard, 1hr training + thresholds calibration. Does NOT include: SSO/SAML ($1.5k), more than 5 integrations ($1k each), custom KPIs ($500 each), white-label dashboard ($1k). Upsell path: combine with Block 02 + Block 04 + Block 07 → "Operator Stack" at $2.5k/mo.