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
Roadmap
What’s in progress, up next, and parked — edit ROADMAP.md at the repo root.
In progress
3what's being built right now
- Nav + landing redesign — new
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_logtables (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")./pipelineis a hub with live counts. SharedBoardViewcomponent; 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. Namedpipeline_jobs(notjobs) to avoid colliding with the existing CIPP scope-ticketjobstable; eventual link is planned. - Pricebook (step 1 of Proposal Builder) — shipped 2026-04-23.
/admin/pricebookpage withpricebook_categories+pricebook_items+pricebook_item_historytables (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'solit_...uuid stored inskufor future resync. One-shot loader atscripts/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)
2scaling prep before team chat / HR / knowledge library
- Prompt registry — all prompts now live under
prompts/<feature>/<name>.mdwith a typedgetPrompt(id)registry insrc/lib/claude/client.ts. Pulled the two embedded prompts out ofanalyze-frameandvideo-summaryso prompts can no longer drift in route code. Add new entries to thePROMPTSmap when wiring chat/HR/knowledge AI features. - Route wrapper —
src/lib/api/with-route.tsgives 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
4known tech debt before it becomes painful
- Auth middleware + per-user identity — required before team chat or HR. Currently no route enforces who the caller is. Wrap routes via
withRouteonce auth lands so the user is injected once per request. - Split monster pages —
src/app/intake/page.tsx(~2.5k lines) andsrc/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 fetches —
listPendingFeedbackJobs()and similar pull all rows; cap at 100 with a cursor before the dataset grows. - Migrate remaining routes to
withRoute— opportunistic, as routes are touched. Goal: every route returns{ error }on failure and logs with a[METHOD /path]tag.
Up next
3next 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_idcolumn. - Install Coordinator — real build-out of the page. Schedule install, confirm access/parking, tie intake scope + Liner Builder output + Drive folder into a crew-ready packet.
- Proposal Builder — replace PandaDocs. Build branded proposal from intake scope, email to customer, capture e-signature. Blocked on sample proposals to lock in template + fields.
Backlog
9everything else — ideas, future features, nice-to-haves
- Inspection report — details TBD.
- HousecallPro invoice integration — pull the invoice into the job's Drive folder;
jobs.housecallpro_job_id/housecallpro_customer_idcolumns already exist. - Post-install video auto-rename — crew uploads from phone to the job's Drive folder; Flo renames to canonical format with "post install" suffix.
- Second stretch liner product — add to
STRETCH_PRODUCTSinsrc/app/feedback/page.tsxwhen it comes online. - Filter high-install-pressure rows out of the baseline pullback regression — use the existing complications checkbox as the exclusion flag.
- Explicit bend-rate modeling — once there's enough data, model bends separately from the 6″ rate instead of letting the 6″ rate absorb them.
- Cold-weather shrink tracking — watch for drift between cold-month and warm-month submissions; decide later whether to model it.
- Pullback formula refinement — if 4″ turns out to not ride 1:1, add
pct_change_4inand rework formulas (feedback_learning view will backfill automatically). - Per-PR Vercel previews + proper dev branch workflow — formalize when more than one person is touching the repo.
Someday
8big vision stuff that's further out
- AI sewer-video analysis — POC 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 Flo — once 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 time — tie feedback patterns to who was on the crew, not just the scope.
- One-click "full job history" view — pull 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 Admin — proactive "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 hub — bigger 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 chat — Slack 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 library — central 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.
Pattern flags
Jobs Flo called GO but the install crew flagged as hard or couldn't complete cleanly.
What Flo has learned
Learnings extracted from install-team feedback over time.
No learnings recorded yet. Learnings are generated from install feedback as patterns emerge.