# BUILD BACKLOG — Harvey's Work Queue

Harvey works during the day AND at night. Spawn parallel agents when items are independent. Priority is revenue impact. Always send Mike an update when something ships.

**Night shift cron:** 11pm ET daily — picks top READY item and builds it.
**Daytime:** Harvey spawns agents proactively during the day for high-priority items.

## Rules
- Always work on a new git branch (e.g. `feature/night-YYYY-MM-DD-description`)
- Never push to main/master directly
- Create a PR or leave branch ready for Mike to review
- Send morning update to Telegram chat_id: 8792051045 with what was built and how to test
- Mark item as [IN PROGRESS] when starting, [DONE DATE] when PR is up
- If something is blocked, note why and move to next item
- Aim for one solid shippable thing per night, not 5 half-finished things

---

## 🔴 HIGH PRIORITY

### [DONE 2026-03-12] Mission Control: Work/Personal Mode Toggle
**Repo:** ~/Projects/mission-control
**Branch:** feature/night-2026-03-12-mode-toggle
**What was built:** Work/Personal mode toggle in Header, ModeContext with localStorage persistence, 5 new widgets (CommandCenter, FamilyCalendar, PersonalFinance, PersonalTodos, GoalsTracker), mode-aware layouts and status bar. All mock data — ready for live wiring.
**Notes:** No git remote configured — branch is local only. QuickActions replaced by CommandCenter in work mode.

---

### [DONE 2026-03-13] Leah: Conversation History Persistence
**Repo:** ~/nmc-phone (Twilio Serverless)
**What:** Already implemented in deployed /sms-chat function. Uses Twilio Sync (service IS44a885a46f8e76e8fd3eaaf93f1d09ac, map "leah-conversations"), phone number as key, 24h TTL, in-memory cache for bursts. Loads on each message, appends, saves back. Includes end-of-conversation summary generation → Slack #calls + GHL notes.
**Notes:** TTL is 24h (not 7 days as originally spec'd). Could be increased if needed.

---

### [DONE 2026-03-14] Complaint & Issue Tracker (Slack → GHL)
**Repo:** ~/.openclaw/workspace (standalone script)
**Branch:** feature/night-2026-03-14-complaint-tracker
**What was built:** Python script (scripts/complaint-tracker.py, stdlib only) that polls #emilys-team, #vadims-team, #customer-feedback for 14 complaint keywords. On match: extracts customer name from Slack bold formatting, searches GHL contacts via v2 API, creates complaint notes on contacts, saves state to complaint-state.json, posts notifications to #customer-feedback. Modes: poll (default), --digest (daily summary to #emilys-team), --resolve <id>, --status.
**Notes:** Bot not in #vadims-team (needs invite). Name extraction uses Slack bold patterns + blacklist for false positives. GHL API needs User-Agent header to avoid Cloudflare blocks.

---

### [DONE 2026-03-13] Mission Control: Live Data Wiring
**Repo:** ~/Projects/mission-control
**Branch:** feature/night-2026-03-13-live-data-wiring
**What was built:** 3 Next.js API routes (server-side, secrets never hit client): /api/business (QuickBooks MTD revenue + Launch27 bookings), /api/calendar (gcal.py → agenda for next 5 days), /api/activity (Slack #calls last 5 messages). All 3 widgets updated with useState/useEffect, loading skeletons, 5-min auto-refresh, and graceful fallbacks. Build passes.
**Notes:** Launch27 API was flaky during build (405s) — route returns bookingsToday: 0 gracefully. QBO, gcal, and Slack all confirmed working.

---

### [DONE 2026-03-15] Yelp Lead Auto-Responder
**Repo:** ~/.openclaw/workspace
**Branch:** feature/night-2026-03-15-yelp-lead-responder
**What was built:** Python script (scripts/yelp-lead-monitor.py, stdlib only) that monitors Gmail IMAP for Yelp lead/message notification emails. Parses customer name, service, message from email body. Sends Telegram alert with lead details + suggested reply template. Tracks processed emails in yelp-lead-state.json to avoid duplicates. Modes: --check (default), --dry-run, --status, --hours N.
**Notes:** Yelp Leads API requires Partner status (not public), so this uses Gmail notifications as the trigger. Ready for cron (every 20 min recommended). No Yelp leads found in test scan -- may need to verify NMC's Yelp notification email settings.

---

## 🟡 MEDIUM PRIORITY

### [DONE 2026-03-16] Morning Briefing v2
**Repo:** ~/.openclaw/workspace
**Branch:** feature/night-2026-03-16-morning-briefing-v2
**What was built:** Python script (scripts/morning-briefing-v2.py, stdlib only) with 7 sections: Email (Gmail IMAP, 24h unread + important sender flagging), Calendar (Google SA JWT, today+tomorrow), Bookings (Launch27 — graceful 405 handling since API is decommissioned), Revenue MTD (QuickBooks subprocess), Overnight Slack (3 channels, escalation keyword flagging), Open Complaints (complaint-tracker subprocess), Quick Pulse summary. Supports --test and --section flags for debugging. Each section wrapped in try/except for resilience.
**Notes:** Launch27 REST API returns 405 (decommissioned) — section shows graceful message with dashboard link. Cron needs updating from v1 to v2.

---

### [DONE 2026-03-22] Abigael Meeting Prep Automation
**Repo:** ~/.openclaw/workspace
**Branch:** feature/night-2026-03-22-meeting-prep (local only, no remote)
**What was built:** Python script (scripts/meeting-prep.py, stdlib only) that scans last 4 weeks of #emilys-team, #customer-feedback, #calls for complaint/scheduling keywords. Loads open items from prior meeting-*.md files. Checks Google Calendar for upcoming Abigael events (SA 401 handled gracefully). Generates structured Markdown agenda → saves to memory/meeting-YYYY-MM-DD.md → sends Telegram preview to Mike. Dry-run: found 7 complaints + 3 scheduling issues from real Slack data.
**Usage:** `python3 scripts/meeting-prep.py --dry-run` | `--date YYYY-MM-DD` | `--weeks 6`
**Suggested cron:** Run 1h before Thursday meeting (check Mike's calendar for Abigael events).

---

### [DONE 2026-03-25] Contractor Scheduling SOPs
**Branch:** feature/night-2026-03-25-contractor-sops (local)
**What was built:** Full SOP doc at docs/contractor-scheduling-sops.md — grounded in real Slack patterns from #emilys-team. Covers: schedule change confirmation protocol + message templates, pre-day checklist (run by 8 PM nightly), late/no-show escalation ladder (15 min → 25 min → 30 min), complaint response templates, escalation triggers for Mike, quick reference table, Slack logging conventions.
**Output:** Ready for Mike to paste into #emilys-team or share with Abigael directly.

---

### [DONE 2026-03-24] NMC Pricing Page on Website
**Repo:** nomorechores.com (WordPress)
**Branch:** feature/night-2026-03-24-pricing-page (local, no remote on workspace)
**What was built:** Standalone HTML pricing page (nmc-pricing-page.html) — fully self-contained, no external dependencies. Tabbed layout (Standard / Deep Clean / Move In/Out), quick estimate calculator with HST, accordion add-ons, recurring discount cards, good-to-know checklist, CTA section. Ready to paste into a WordPress Custom HTML block.
**Preview:** https://macbookair.taila88920.ts.net/nmc-pricing-page.html

---

### [DONE 2026-03-23] 12 Week Year System
**Repo:** ~/.openclaw/workspace
**Branch:** feature/night-2026-03-23-12-week-year
**What was built:** Standalone dark-themed HTML tracker (twelve-week-year.html) with: editable quarter header + date range + progress bar, up to 5 color-coded goals with inline-editable titles/descriptions/tactics, 12-week execution scorecard (click cells to toggle hit/miss), weekly check-in panel (tactic checkboxes → auto-scores the week with motivational message), weekly notes/reflections, localStorage persistence, pre-populated Q2 2026 example data. No external dependencies — one file, open in any browser.
**Preview:** https://macbookair.taila88920.ts.net/twelve-week-year.html

---

## 🟢 LOWER PRIORITY / FUTURE

### [DONE 2026-03-26] Vapi Voice Agent — IVR Go-Live Package
**Repo:** ~/nmc-phone
**Branch:** feature/night-2026-03-26-vapi-ivr (local, no remote)
**What was built:**
- `functions/ivr.js` — main IVR entry point for 647-490-2523, routes all inbound calls to Leah (Vapi AI) via WebSocket, falls back to voicemail if Vapi unavailable
- `functions/vapi-inbound.js` — updated, now clearly marked as staging-only (test number 647-360-9178)
- `docs/vapi-go-live-runbook.md` — step-by-step for Mike: add VAPI_API_KEY to Twilio, deploy, point main number, rollback plan
**Status:** Ready to deploy. Leah is already configured and tested on staging. Mike needs to approve go-live (15-min task).
**Next action for Mike:** Review runbook at ~/nmc-phone/docs/vapi-go-live-runbook.md, then give Harvey the green light.

### [DONE 2026-03-27] Quote-to-Booking System — Phase 1
**Repo:** ~/nmc-phone
**Branch:** feature/night-2026-03-27-quote-system (local, no remote)
**What was built:** 4 Twilio Serverless functions:
- `quote-generator.js` — POST endpoint: creates quote → stores in Twilio Sync (map: nmc-quotes, TTL 30d) → posts Slack approval card to #calls with Approve/Reject buttons
- `quote-page.js` — GET endpoint: serves mobile-friendly HTML quote page to customer (services table, HST calc, date/time booking form)
- `quote-book.js` — POST endpoint: handles booking form → updates Sync → confirmation SMS to customer → Slack notification
- `quote-slack-action.js` — handles Slack button clicks → approve sends customer SMS with link / reject marks quote dead
**Flow:** generate → Slack approval → customer SMS → quote page → book → confirmation SMS
**Phase 2 (next):** Wire quote-generator to Leah (auto-generate from call summaries). Phase 3: auto-create Launch27 booking on submission (requires Launch27 API create endpoint).
**To activate:** Deploy to Twilio + set Slack interactivity Request URL to https://nmc-ivr-1509-prod.twil.io/quote-slack-action

### [DONE 2026-03-28] mikeziarko.com Personal Brand Site — Prototype
**Branch:** feature/night-2026-03-28-mikeziarko-site (local)
**File:** workspace/mikeziarko-prototype.html
**Preview:** https://macbookair.taila88920.ts.net/mikeziarko-prototype.html
**What was built:** Full personal brand site prototype — one HTML file, zero dependencies. Dark themed with indigo/purple gradient. Sections: Hero (with live stats), About (operator story), Projects (6 cards: NMC/Leah/Harvey/Mission Control/CleanOS/newsletter), Consulting ($500 AI Audit offer with deliverables), Newsletter (email capture), Footer. Mobile responsive, sticky nav with blur.
**Next for Mike:** Review prototype, swap in headshot photo, pick hosting stack (Ghost $9/mo recommended for blog+newsletter), secure mikeziarko.com domain. Research in memory/project-mikeziarko-site.md.

### [DONE 2026-03-29] CMO Agent — Content Engine v1
**Branch:** feature/night-2026-03-29-cmo-agent (local)
**File:** workspace/scripts/cmo-agent.py
**What was built:** Python script (stdlib + anthropic API only) that:
- Generates weekly content calendars with themed daily posting plan (Instagram/GBP/Blog/Facebook)
- Generates 3 GBP post options per week (120-200 word, seasonal, NMC voice)
- Posts to all 8 GBP locations in one command (with --dry-run preview)
- Drafts AI-citation-optimised listicle blog posts (~1200 words, H2 structure for AI Overview pickup)
- Seasonal awareness built in (month-aware prompts)
- Content saved to memory/cmo-content/ with timestamps
**Commands:**
  python3 scripts/cmo-agent.py week          # Generate week's calendar + 3 GBP post options
  python3 scripts/cmo-agent.py post-gbp      # Post to all 8 GBP locations (run manually or on cron)
  python3 scripts/cmo-agent.py post-gbp --dry-run  # Preview first
  python3 scripts/cmo-agent.py blog          # Draft a listicle blog post
  python3 scripts/cmo-agent.py status        # Pipeline status
**Next for Mike:** Review memory/cmo-content/week-2026-03-29.json + blog draft. Run post-gbp when ready to go live. Add to weekly cron if desired.

### [DONE 2026-04-02] NMC Knowledge Base — Outline Phase 1 Setup
**Branch:** feature/night-2026-04-02-outline-kb (local)
**Files:**
- `outline/docker-compose.yml` — Outline + Postgres + Redis + MinIO, port 3300
- `outline/.env.template` — all config vars, copy to .env and fill in secrets
- `outline/setup-runbook.md` — step-by-step: Docker install → secrets → login → collections → import → API token
- `scripts/outline-reader.py` — Harvey's Outline API reader (search, fetch, export Leah KB for context injection)
- `scripts/outline-import.py` — imports leah-kb.html + complaint/contractor SOPs into Outline collections
**What was built:** Complete Phase 1 package. Mike installs Docker Desktop, runs 3 commands, and has a full self-hosted KB running locally. Harvey can pull KB content into Leah's context via REST API. 4 collections pre-planned: Internal Ops, Leah KB, Contractor Handbook, Customer Help Center.
**To start:** `cd outline && cp .env.template .env` → fill in secrets → `docker compose up -d` → open http://localhost:3300
**Next:** Phase 2 decision (Hetzner VPS ~$6/mo vs getoutline.com $10/user/mo) after Mike reviews the local version.

### [DONE 2026-04-01] NMC Operating Dashboard
**Branch:** feature/night-2026-04-01-operating-dashboard (local)
**Files:** www/operating-dashboard.html, scripts/dashboard-data.py, www/dashboard-data.json
**Preview:** https://macbookair.taila88920.ts.net/www/operating-dashboard.html
**What was built:** One-page live business dashboard. Pulls from QuickBooks (revenue MTD, invoices), Airtable (active recurring, bookings), Slack (call volume, complaints, recent summaries), GHL (open leads, pipeline stages). Auto-refreshes every 5 min. Health indicators, revenue pacing bar, open actions list.
**To run data refresh:** `python3 scripts/dashboard-data.py` (or add to cron: `*/15 * * * *`)

### [DONE 2026-03-31] Cleaner ETA "On the Way" Notifications
**Repo:** ~/nmc-phone
**Branch:** feature/night-2026-03-31-cleaner-otw (local)
**What was built:**
- `functions/cleaner-otw.js` — API that sends a personalised customer ETA SMS, posts to Slack #calls, and logs a GHL contact note
- `functions/otw-form.js` — Mobile-first web form contractors bookmark and open when heading to a job. Fill in customer phone + name + ETA, tap Send.
- `docs/cleaner-otw-runbook.md` — deploy steps, contractor rollout email template, phase 2 ideas
**Usage:** Give each contractor a bookmarked URL with their phone pre-filled: `https://nmc-ivr-1509-prod.twil.io/otw-form?cp=THEIR_PHONE`
**Next:** Deploy with `twilio serverless:deploy`, then Abigael sends contractors their bookmarked links.

### [DONE 2026-03-30] Idea Validation Framework
**Branch:** feature/night-2026-03-30-idea-validation (local)
**File:** workspace/www/idea-validation.html
**Preview:** https://macbookair.taila88920.ts.net/www/idea-validation.html
**What was built:** Interactive dark-themed single-page tool for scoring and validating business ideas. 6-dimension weighted scorecard (revenue potential, speed to first dollar, effort/complexity, Mike's unfair edge, market demand, energy/excitement). Kill-switch flags for deal-breakers (cap score at 55). Verdict tiers: KILL / PARK / TEST / BUILD with tailored next steps per tier. Auto-generated 30-day validation sprint plan. Save/load ideas with localStorage. Pre-seeded with 3 of Mike's known parked ideas (AI consulting, YouTube Kids, Commercial Cleaning).
**Notes:** Addresses the long-overdue "Idea Validation SOP" TODO from Mar 25. No server needed — open directly in browser.

---

### [DONE 2026-04-03] NMC Competitive Deep-Dive — Toronto Cleaning Market 2026
**Branch:** feature/night-2026-04-03-competitive-analysis (local)
**File:** workspace/www/competitive-analysis.html (48,600 bytes)
**Preview:** https://macbookair.taila88920.ts.net/www/competitive-analysis.html
**What was built:** Comprehensive interactive competitive analysis report. Research: itsGLO's 72-company Toronto pricing survey (Jan 2026), Hellamaid, Maid4Condos, franchise players (MaidPro FDD), NMC internal data. Sections: Executive Summary, Market Landscape (4-tier map), Pricing Benchmarks (industry averages vs NMC), Competitor Profiles (HIGH/MED/LOW threat ratings), SWOT vs competitive field, SEO gap analysis, 8 competitive opportunities (P1-P3), action items ordered by impact.
**Top findings:**
- Hellamaid = highest threat: SEO content machine + Living Wage brand story + 4.9 stars. Now expanding to US = opening for NMC to take back organic traffic.
- NMC moat: 634 Google reviews across 8 GBP locations (nobody else has this) + Leah AI receptionist (zero competitors have this).
- Biggest gap to close: no pricing transparency. Every high-converting competitor shows prices. NMC pricing page (already built Mar 24) just needs deployment.
- Suburban GTA (Pickering, Markham, Durham) = Hellamaid's blind spot. NMC has GBP there; needs content.

### [DONE 2026-04-05] Leah: get_booking_details Tool
**Repo:** ~/nmc-phone
**Branch:** feature/night-2026-04-05-leah-booking-details
**What:** Add a `get_booking_details` Vapi tool to vapi-tools.js. Given a customer phone number (already looked up via lookup_customer), fetch their most recent + upcoming booking from Airtable NMC-DB: date, service type (standard/deep/move), address, assigned cleaner name, booking status, price. Also add `get_upcoming_booking` variant. Enables Leah to answer: "when is my next clean?", "who is my cleaner?", "can I reschedule?".
**Why:** lookup_customer already exists and is solid. This is the natural next step — Leah can greet by name but can't yet answer account questions without booking details.

### [DONE 2026-04-06] Recurring Conversion SMS Campaign
**Repo:** ~/nmc-phone
**Branch:** feature/night-2026-04-06-recurring-conversion-sms
**What:** Python script (scripts/recurring-conversion.py) that finds one-time customers with a recent completed booking, not yet recurring, and sends a personalised conversion SMS. 3 message variants by booking count. 30-day dedup window. Dry-run mode. Runbook at docs/recurring-conversion-runbook.md.
**Revenue target:** 1,429 repeat one-timers in DB. 2% conversion = ~28 new recurring = ~$297K LTV added.
**To activate:** Test with --dry-run, then add 10am daily cron.

## DONE
<!-- Move completed items here with date -->
