Admin Dashboard

All scoped jobs, pattern flags from the install crew, and what Flo has learned over time.

Total Jobs

13

GO Verdicts

8

FLAG / NO GO

5

Roadmap

What’s in progress, up next, and parked — edit ROADMAP.md at the repo root.

29

In progress

3

what's being built right now

  • Nav + landing redesignnew src/components/flo/Nav.tsx, updated layout and home page to show all 6 tools (1 Intake → 2 Proposal Builder → 3 Install Coordinator → 4 Liner Builder → 5 Feedback → 6 Admin). Placeholder pages for Proposal Builder and Install Coordinator already scaffolded.
  • Pipeline (Monday.com replacement)shipped the first cut 2026-04-23. pipeline_jobs + pipeline_subitems + pipeline_status_log tables (migrations 013/014/015), full Monday status/tag/declined-reason vocab, stage auto-derived from status. Four boards matching Monday names: /pipeline/proposal-request (leads), /pipeline/project-management (active work), /pipeline/doneish (completed), /pipeline/archive ("where leads go to die"). /pipeline is a hub with live counts. Shared BoardView component; each board locks to its stage and scopes the status filter to that stage's statuses. /pipeline/new (Monday-style intake), /pipeline/[id] (all fields editable + sub-jobs + timeline), /dashboard (totals by status/rep/stage + follow-ups + recent activity). Supabase realtime on all three tables. Everyone sees all four boards. Monday.com sync deliberately not built — Monday stays untouched for now. Named pipeline_jobs (not jobs) to avoid colliding with the existing CIPP scope-ticket jobs table; eventual link is planned.
  • Pricebook (step 1 of Proposal Builder)shipped 2026-04-23. /admin/pricebook page with pricebook_categories + pricebook_items + pricebook_item_history tables (migration 015). Add/edit/soft-delete items, category management, search + filter + collapsible sections, drag-to-reorder within a category, Postgres trigger writes per-field audit rows on every change. Seeded from Marvel's Housecall Pro CSV export 2026-04-23: 35 categories, 549 items (CIPP + drain cleaning + permits + full plumbing catalog). HCP's olit_... uuid stored in sku for future resync. One-shot loader at scripts/seed-pricebook.mjs. HCP API-based import is blocked — HCP's public "Pricebook API" is write-only for partner integrations, no GET endpoint.

Cleanup landed (2026-04-23)

2

scaling prep before team chat / HR / knowledge library

  • Prompt registryall prompts now live under prompts/<feature>/<name>.md with a typed getPrompt(id) registry in src/lib/claude/client.ts. Pulled the two embedded prompts out of analyze-frame and video-summary so prompts can no longer drift in route code. Add new entries to the PROMPTS map when wiring chat/HR/knowledge AI features.
  • Route wrappersrc/lib/api/with-route.ts gives every new API route a consistent error contract (withRoute + httpError(status, msg)). Adopt it in any new route; old routes can migrate as touched.

Cleanup still to do

4

known tech debt before it becomes painful

  • Auth middleware + per-user identityrequired before team chat or HR. Currently no route enforces who the caller is. Wrap routes via withRoute once auth lands so the user is injected once per request.
  • Split monster pagessrc/app/intake/page.tsx (~2.5k lines) and src/app/feedback/page.tsx (~1.4k lines) each bundle 20+ hooks. Break into focused components before reusing the patterns for chat/onboarding flows.
  • Pagination on bulk fetcheslistPendingFeedbackJobs() and similar pull all rows; cap at 100 with a cursor before the dataset grows.
  • Migrate remaining routes to withRouteopportunistic, as routes are touched. Goal: every route returns { error } on failure and logs with a [METHOD /path] tag.

Up next

3

next 2–3 things to build

  • Job Document Hub (Drive folder per job)on intake save, auto-create a Drive folder with the canonical video naming format. Drop intake PDF + feedback PDF in there. Later: post-install video, proposal, invoice. Needs jobs.drive_folder_id column.
  • Install Coordinatorreal build-out of the page. Schedule install, confirm access/parking, tie intake scope + Liner Builder output + Drive folder into a crew-ready packet.
  • Proposal Builderreplace PandaDocs. Build branded proposal from intake scope, email to customer, capture e-signature. Blocked on sample proposals to lock in template + fields.

Backlog

9

everything else — ideas, future features, nice-to-haves

  • Inspection reportdetails TBD.
  • HousecallPro invoice integrationpull the invoice into the job's Drive folder; jobs.housecallpro_job_id / housecallpro_customer_id columns already exist.
  • Post-install video auto-renamecrew uploads from phone to the job's Drive folder; Flo renames to canonical format with "post install" suffix.
  • Second stretch liner productadd to STRETCH_PRODUCTS in src/app/feedback/page.tsx when it comes online.
  • Filter high-install-pressure rows out of the baseline pullback regressionuse the existing complications checkbox as the exclusion flag.
  • Explicit bend-rate modelingonce there's enough data, model bends separately from the 6″ rate instead of letting the 6″ rate absorb them.
  • Cold-weather shrink trackingwatch for drift between cold-month and warm-month submissions; decide later whether to model it.
  • Pullback formula refinementif 4″ turns out to not ride 1:1, add pct_change_4in and rework formulas (feedback_learning view will backfill automatically).
  • Per-PR Vercel previews + proper dev branch workflowformalize when more than one person is touching the repo.

Someday

8

big vision stuff that's further out

  • AI sewer-video analysisPOC built at /video-test (uploads video, samples frames, runs Claude vision per frame, synthesizes report). First test 2026-04-22: it worked end-to-end but the analysis quality wasn't useful. Frame-by-frame vision on stills isn't enough. Next attempt: higher frame density at points of interest, short clip sequences instead of stills, or a purpose-built CV model trained on sewer footage. Park until there's a clearer angle.
  • Onboard the install coordinator + technicians to Floonce the tool covers their workflow. Triggers the need for real auth, per-user permissions, and per-PR preview deploys.
  • Flo learns the install team over timetie feedback patterns to who was on the crew, not just the scope.
  • One-click "full job history" viewpull intake, proposal, install packet, feedback, invoice, and both videos into a single per-job dashboard (the Drive folder hub made visible inside Flo).
  • Cross-job pattern surfacing in Adminproactive "hey, 6″ jobs with 2+ bends are running 2 ft short lately" rather than waiting for Ben to look.
  • Flo as Marvel's ops/HR hubbigger vision: Flo becomes the "go-to" home for all the company's operational stuff, not just CIPP workflow. Examples we've talked about: new-hire onboarding checklists (auto-assigned to the right person like manager/HR/marketing, with tasks pushed into each person's Google Tasks via domain-wide delegation on the existing service account), handbook + SOPs lookup, employee records, recurring admin procedures. Scoped as one coherent "Ops / HR" section in Flo rather than a one-off page. An earlier prototype of just the new-hire checklist was scrapped 2026-04-23 because the real target is the broader hub.
  • Field-team chatSlack is hard for the install crew. Build an in-Flo chat that can optionally bridge to Slack so office stays on Slack while crews stay in Flo. Per-channel scoping (job channel, crew channel, all-hands). Real prerequisite is auth + per-user identity (see Cleanup).
  • Knowledge librarycentral home for trainings, manuals, how-to videos. Flo learns from team feedback the same way Liner Builder learns from install feedback: each viewer can flag a doc/video as confusing, missing a step, or out of date, and Flo summarizes the patterns for whoever owns the doc. Stretch: ask-the-library Q&A grounded in indexed content.

All jobs

Every scoped job, most recent first.

13

Pattern flags

Jobs Flo called GO but the install crew flagged as hard or couldn't complete cleanly.

1

What Flo has learned

Learnings extracted from install-team feedback over time.

0
No learnings recorded yet. Learnings are generated from install feedback as patterns emerge.