[object Object]

← back to Build Debrief

initial scaffold: build-debrief — per-project pros/cons board with Claude chat per build

c575eaef2b0c329f0eea5b48b3fc48f7334c28a1 · 2026-05-10 07:30:47 -0700 · Steve

Files touched

Diff

commit c575eaef2b0c329f0eea5b48b3fc48f7334c28a1
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun May 10 07:30:47 2026 -0700

    initial scaffold: build-debrief — per-project pros/cons board with Claude chat per build
---
 .gitignore           |    5 +
 data/projects.json   | 5396 ++++++++++++++++++++++++++++++++++++++++++++++++++
 ecosystem.config.js  |   10 +
 package-lock.json    |  900 +++++++++
 package.json         |   16 +
 public/index.html    |  489 +++++
 scripts/inventory.js |  129 ++
 src/server.js        |  263 +++
 8 files changed, 7208 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa323e6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+node_modules/
+.env*
+data/*.json.bak
+*.log
+.DS_Store
diff --git a/data/projects.json b/data/projects.json
new file mode 100644
index 0000000..65b8d2b
--- /dev/null
+++ b/data/projects.json
@@ -0,0 +1,5396 @@
+{
+  "generated_at": "2026-05-10T14:27:33.888Z",
+  "total": 245,
+  "projects": [
+    {
+      "path": "/Users/stevestudio2/Projects/build-debrief",
+      "name": "build-debrief",
+      "has_git": false,
+      "first_at": "2026-05-10T07:24:32Z",
+      "last_at": "2026-05-10T07:24:32Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallsandfabrics",
+      "name": "wallsandfabrics",
+      "has_git": true,
+      "first_at": "2026-05-10T04:43:26-07:00",
+      "last_at": "2026-05-10T04:43:26-07:00",
+      "last_subject": "initial scaffold + GA gtag G-429EVNMHVY (port 9934)",
+      "commit_count": 1,
+      "size_mb": 11,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallsandfabrics",
+      "pkg_description": "Walls & Fabrics — combo storefront across DW wallcoverings + fabrics + murals + trims",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperestimator",
+      "name": "wallpaperestimator",
+      "has_git": true,
+      "first_at": "2026-05-10T04:35:26-07:00",
+      "last_at": "2026-05-10T04:35:26-07:00",
+      "last_subject": "initial scaffold + GA gtag",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallpaperestimator",
+      "pkg_description": "Wallpaper Estimator — pure client-side yardage calculator with closing CTA grid of curated wallpaper picks",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperdistributors",
+      "name": "wallpaperdistributors",
+      "has_git": true,
+      "first_at": "2026-05-10T04:25:02-07:00",
+      "last_at": "2026-05-10T04:25:02-07:00",
+      "last_subject": "initial scaffold + GA gtag",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallpaperdistributors",
+      "pkg_description": "Wallpaper Distributors — directory of B2B wallcovering distributors and the vendor lines each one carries, for designers and trade buyers sourcing residential and commercial wallpaper.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "B2B wallcovering distributor directory. Operated by Designer Wallcoverings as a free industry resource.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpapercontractor",
+      "name": "wallpapercontractor",
+      "has_git": true,
+      "first_at": "2026-05-10T04:13:20-07:00",
+      "last_at": "2026-05-10T04:13:20-07:00",
+      "last_subject": "initial scaffold + GA gtag G-LC83F70YHV",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallpapercontractor",
+      "pkg_description": "Commercial wallpaper contractor directory — bonded, insured, large-format wallcovering installation contractors for hospitality, retail, corporate, healthcare, and multifamily projects",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Commercial wallpaper contractor directory — bonded, insured, large-format wallcovering installation contractors for hospitality, retail, corporate, healthcare, multifamily, and government projects across the United States.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallco",
+      "name": "wallco",
+      "has_git": true,
+      "first_at": "2026-05-10T03:59:35-07:00",
+      "last_at": "2026-05-10T03:59:35-07:00",
+      "last_subject": "initial scaffold + GA gtag (G-H47K8H8G5J) — wallco.ai AI search",
+      "commit_count": 1,
+      "size_mb": 9,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallco-ai",
+      "pkg_description": "wallco.ai — describe a room, get matching wallcoverings via Gemini retrieval over the DW catalog.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/starsofdesign",
+      "name": "starsofdesign",
+      "has_git": true,
+      "first_at": "2026-05-10T03:50:34-07:00",
+      "last_at": "2026-05-10T03:50:34-07:00",
+      "last_subject": "initial scaffold + GA gtag (G-YCT0F2Q692) + 27 designer profiles",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "starsofdesign",
+      "pkg_description": "Stars of Design — profile directory of notable interior designers and the wallcoverings that match their signature style.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Editorial profile directory of notable interior designers — historic and\ncontemporary — paired with the Designer Wallcoverings collections that match\neach designer's signature style.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/hospitalitydesignreps",
+      "name": "hospitalitydesignreps",
+      "has_git": true,
+      "first_at": "2026-05-10T03:37:08-07:00",
+      "last_at": "2026-05-10T03:37:08-07:00",
+      "last_subject": "initial scaffold + GA gtag (G-M79CJBLRFH, port 9927)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "hospitalitydesignreps",
+      "pkg_description": "Hospitality design sales rep directory — find independent reps for boutique hotels, hotel brands, resorts, F&B, casino, cruise, and spa interior design",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Hospitality design sales-rep directory. Independent reps and showroom agencies covering U.S. boutique hotels, hotel brands, resorts, casinos, cruise lines, F&B, and spa interior design.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designtradelive",
+      "name": "designtradelive",
+      "has_git": true,
+      "first_at": "2026-05-10T03:26:25-07:00",
+      "last_at": "2026-05-10T03:26:25-07:00",
+      "last_subject": "initial scaffold + GA gtag G-E8R8V9RDXN — designtradelive events directory (25 seed events)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "designtradelive",
+      "pkg_description": "Design industry events + trade shows aggregator (ICFF, NeoCon, KBIS, High Point Market, BDNY, Salone del Mobile, etc.)",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designerwallcoverings",
+      "name": "designerwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-10T03:17:51-07:00",
+      "last_at": "2026-05-10T03:19:48-07:00",
+      "last_subject": "deploy: pm2 port 9925 + nginx :80 vhost, gemini env loader",
+      "commit_count": 2,
+      "size_mb": 9,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "designerwallcoverings-ai",
+      "pkg_description": "designerwallcoverings.ai — AI room-render landing. Upload a room photo, get matching wallcoverings.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designerrepresentatives",
+      "name": "designerrepresentatives",
+      "has_git": true,
+      "first_at": "2026-05-10T03:02:03-07:00",
+      "last_at": "2026-05-10T03:02:03-07:00",
+      "last_subject": "initial scaffold + GA gtag (designer representatives directory, build_only phase)",
+      "commit_count": 1,
+      "size_mb": 8,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "designer-representatives",
+      "pkg_description": "Designer Representatives — directory of independent sales reps for designers, showrooms, and contract specifiers.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Canonical directory of independent sales reps for designers, showrooms,\nand contract specifiers. Sister property of Designer Wallcoverings.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designerlookbooks",
+      "name": "designerlookbooks",
+      "has_git": true,
+      "first_at": "2026-05-10T02:49:20-07:00",
+      "last_at": "2026-05-10T02:49:20-07:00",
+      "last_subject": "initial scaffold + GA gtag (8 aesthetic clusters, magazine layout)",
+      "commit_count": 1,
+      "size_mb": 8,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "designerlookbooks",
+      "pkg_description": "designerlookbooks.com — visual lookbook hub grouping wallcoverings by aesthetic cluster",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/commercialdesignreps",
+      "name": "commercialdesignreps",
+      "has_git": true,
+      "first_at": "2026-05-10T02:40:14-07:00",
+      "last_at": "2026-05-10T02:40:14-07:00",
+      "last_subject": "initial scaffold + GA gtag",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "commercialdesignreps",
+      "pkg_description": "Commercial design sales rep directory — find independent reps for hospitality, healthcare, contract, and commercial interior design markets",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Commercial design sales-rep directory. Independent reps and showroom agencies covering U.S. commercial, hospitality, healthcare, and contract interior design lines.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/bleachresistantfabrics",
+      "name": "bleachresistantfabrics",
+      "has_git": true,
+      "first_at": "2026-05-10T02:15:23-07:00",
+      "last_at": "2026-05-10T02:15:23-07:00",
+      "last_subject": "initial scaffold + GA gtag (G-5XZST5KTQC)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "bleachresistantfabrics",
+      "pkg_description": "Bleach Resistant Fabrics — hospitality + healthcare contract fabrics rated for bleach cleanup. DW family vertical.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/bestwallpaperplace",
+      "name": "bestwallpaperplace",
+      "has_git": true,
+      "first_at": "2026-05-10T01:11:04-07:00",
+      "last_at": "2026-05-10T01:11:04-07:00",
+      "last_subject": "initial scaffold: bestwallpaperplace.com — curated 600-pattern showcase + GA G-SSNGG2BQC3 + theme toggle + sort/density grid",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "bestwallpaperplace",
+      "pkg_description": "Best Wallpaper Place — curated 'best of' wallpaper showcase",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ventura-bus-3d",
+      "name": "ventura-bus-3d",
+      "has_git": true,
+      "first_at": "2026-05-10T00:45:02-07:00",
+      "last_at": "2026-05-10T04:21:28-07:00",
+      "last_subject": "integrate multi-route data + new top header (search/brand/theme) + per-route toggle legend",
+      "commit_count": 5,
+      "size_mb": 6,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "ventura-bus-3d",
+      "pkg_description": "Express + Three.js 3D experience for the Ventura Boulevard pitch pipeline",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Express + Three.js scaffold for a Ventura Boulevard 3D corridor experience.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/lifestyle-asset-intel",
+      "name": "lifestyle-asset-intel",
+      "has_git": true,
+      "first_at": "2026-05-09T21:36:26-07:00",
+      "last_at": "2026-05-10T07:21:00-07:00",
+      "last_subject": "yolo tick #15: launchd-driven overnight autonomous loop",
+      "commit_count": 20,
+      "size_mb": 10,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "lifestyle-asset-intel",
+      "pkg_description": "Lifestyle Asset Intelligence — valuation, liquidity, and ownership-cost platform (handbags first)",
+      "pkg_version": "0.0.1",
+      "readme_snippet": "v0 scaffold for an enterprise Lifestyle Asset Intelligence platform — valuation,\nliquidity, and ownership-cost intelligence for luxury secondary-market assets,\nstarting with Hermès Birkin/Kelly handbags.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/AbramsOS",
+      "name": "AbramsOS",
+      "has_git": true,
+      "first_at": "2026-05-09T21:33:03-07:00",
+      "last_at": "2026-05-10T07:22:50-07:00",
+      "last_subject": "tick 10: /audit page (read-only viewer for audit_log + auth_event)",
+      "commit_count": 14,
+      "size_mb": 234,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "abramsos",
+      "pkg_description": "Household rights operating system — receipts, warranties, recalls, claims",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "A household \"rights operating system.\" Ingests receipts (Gmail), warranties, recall feeds, and service guarantees into a unified ownership graph; runs a case engine that decides what's owned, what risks/deadlines apply, and what next action is worth taking.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/losangelesfabrics-tmp",
+      "name": "losangelesfabrics-tmp",
+      "has_git": false,
+      "first_at": "2026-05-08T08:01:02Z",
+      "last_at": "2026-05-08T08:01:02Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-theme-toggle",
+      "name": "dw-theme-toggle",
+      "has_git": true,
+      "first_at": "2026-05-08T07:35:06-07:00",
+      "last_at": "2026-05-08T08:17:49-07:00",
+      "last_subject": "add local web viewer (port 9769) for token paste + theme list + push",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/loops-dashboard",
+      "name": "loops-dashboard",
+      "has_git": true,
+      "first_at": "2026-05-08T07:26:08-07:00",
+      "last_at": "2026-05-08T07:34:54-07:00",
+      "last_subject": "fix: cache + background refresh — 21s → <100ms page load",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "Single-pane aggregator for every AI loop running on Steve's Mac2 stack.\nDark-theme HTML page, auto-refresh every 60s, KeepAlive supervised by launchd at http://127.0.0.1:9930.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/macstudio2-dashboard",
+      "name": "macstudio2-dashboard",
+      "has_git": true,
+      "first_at": "2026-05-07T23:56:35-07:00",
+      "last_at": "2026-05-08T01:06:19-07:00",
+      "last_subject": "fix: same TS-annotation crash",
+      "commit_count": 6,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "macstudio2-dashboard",
+      "pkg_description": "'57 Cadillac Eldorado dashboard for Mac Studio 2 — Ollama state, CPU/RAM, hyperdrive controls",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/costa-rica",
+      "name": "costa-rica",
+      "has_git": true,
+      "first_at": "2026-05-07T23:22:40-07:00",
+      "last_at": "2026-05-08T13:20:44-07:00",
+      "last_subject": "yolo tick 8: /about page (data sources, attribution, contact, roadmap, live stats) + Open Graph + Twitter card meta tags on home/provinces/verticals/search/stats + About nav across all pages + sitemap",
+      "commit_count": 15,
+      "size_mb": 23,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "costa-rica",
+      "pkg_description": "Costa Rica multi-vertical directory — tourism, rentals, local services. Ventura-Corridor pattern.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/macstudio1-dashboard",
+      "name": "macstudio1-dashboard",
+      "has_git": true,
+      "first_at": "2026-05-07T23:11:02-07:00",
+      "last_at": "2026-05-08T01:06:19-07:00",
+      "last_subject": "fix: drop TS-style :any annotations from server.js (was crashing on parse)",
+      "commit_count": 12,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "macstudio1-dashboard",
+      "pkg_description": "'57 Chevy convertible dashboard for Mac Studio 1 — Ollama state, CPU/RAM, hyperdrive controls",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-design-bridge",
+      "name": "dw-design-bridge",
+      "has_git": true,
+      "first_at": "2026-05-07T23:03:44-07:00",
+      "last_at": "2026-05-07T23:37:40-07:00",
+      "last_subject": "fix: progressive-truncation JSON parser handles qwen3 trailing-junk responses",
+      "commit_count": 3,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "dw-design-bridge",
+      "pkg_description": "AI-driven DW design generator — bridges ai-factory orchestrator to designer-wallcoverings catalog. Generates novel pattern briefs + descriptions per design request.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/glassbeadedwallpaper",
+      "name": "glassbeadedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-07T20:38:38-07:00",
+      "last_at": "2026-05-08T07:35:22-07:00",
+      "last_subject": "Hamburger always visible on right — propagated from novasuede a815690",
+      "commit_count": 3,
+      "size_mb": 59,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "glassbeadedwallpaper.com",
+      "pkg_description": "Glass Beaded, Sequin & Glitter Wallpaper Collection",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "Premium glass beaded, sequin, and glitter wallcoverings - All Class \"A\" Fire Rated",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/flockedwallpaper",
+      "name": "flockedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-07T20:38:37-07:00",
+      "last_at": "2026-05-08T07:35:37-07:00",
+      "last_subject": "Hamburger always visible on right — propagated from novasuede a815690",
+      "commit_count": 2,
+      "size_mb": 91,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "flockedwallpaper.com",
+      "pkg_description": "Flocked Wallpaper Collection",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/shopify-oauth-catcher",
+      "name": "shopify-oauth-catcher",
+      "has_git": false,
+      "first_at": "2026-05-07T17:53:44Z",
+      "last_at": "2026-05-07T17:53:44Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "shopify-oauth-catcher",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designerssalesreps",
+      "name": "designerssalesreps",
+      "has_git": false,
+      "first_at": "2026-05-07T17:11:08Z",
+      "last_at": "2026-05-07T17:11:08Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "designerssalesreps",
+      "pkg_description": "Designers Sales Reps — map-first B2B trade rep directory",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designersalesreps",
+      "name": "designersalesreps",
+      "has_git": false,
+      "first_at": "2026-05-07T17:10:01Z",
+      "last_at": "2026-05-07T17:10:01Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "designersalesreps",
+      "pkg_description": "Designer Sales Reps directory — B2B trade rep stub directory",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designerschat",
+      "name": "designerschat",
+      "has_git": false,
+      "first_at": "2026-05-07T17:08:25Z",
+      "last_at": "2026-05-07T17:08:25Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designtradereps",
+      "name": "designtradereps",
+      "has_git": false,
+      "first_at": "2026-05-07T17:08:25Z",
+      "last_at": "2026-05-07T17:08:25Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperhistory",
+      "name": "wallpaperhistory",
+      "has_git": true,
+      "first_at": "2026-05-07T16:48:42-07:00",
+      "last_at": "2026-05-07T16:48:42-07:00",
+      "last_subject": "initial scaffold: wallpaperhistory.com chronological timeline",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpaperhistory",
+      "pkg_description": "Chronological history of wallpaper — wallpaperhistory.com",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperwednesday",
+      "name": "wallpaperwednesday",
+      "has_git": true,
+      "first_at": "2026-05-07T16:48:01-07:00",
+      "last_at": "2026-05-07T16:48:01-07:00",
+      "last_subject": "initial scaffold: wallpaperwednesday.com botanical green pinned-reveal site",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpaperwednesday",
+      "pkg_description": "Wallpaper Wednesday — weekly wallpaper feature by Designer Wallcoverings",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperglossary",
+      "name": "wallpaperglossary",
+      "has_git": true,
+      "first_at": "2026-05-07T16:46:15-07:00",
+      "last_at": "2026-05-07T16:46:15-07:00",
+      "last_subject": "initial scaffold: wallpaperglossary.com trade jargon reference",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpaperglossary",
+      "pkg_description": "Trade-jargon glossary for designers — wallpaperglossary.com",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/textiletuesday",
+      "name": "textiletuesday",
+      "has_git": true,
+      "first_at": "2026-05-07T16:44:40-07:00",
+      "last_at": "2026-05-07T16:44:40-07:00",
+      "last_subject": "initial scaffold: textiletuesday.com editorial indigo site",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "textiletuesday",
+      "pkg_description": "Textile Tuesday — weekly textile feature by Designer Wallcoverings",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperdefinitions",
+      "name": "wallpaperdefinitions",
+      "has_git": true,
+      "first_at": "2026-05-07T16:43:34-07:00",
+      "last_at": "2026-05-07T16:43:34-07:00",
+      "last_subject": "initial scaffold: wallpaperdefinitions.com plain-language definitions",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpaperdefinitions",
+      "pkg_description": "Plain-language wallpaper definitions — wallpaperdefinitions.com",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/fabricfriday",
+      "name": "fabricfriday",
+      "has_git": true,
+      "first_at": "2026-05-07T16:41:31-07:00",
+      "last_at": "2026-05-07T16:41:31-07:00",
+      "last_subject": "initial scaffold: fabricfriday.com cinematic saffron site",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "fabricfriday",
+      "pkg_description": "Fabric Friday — weekly fabric feature by Designer Wallcoverings",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpaperdictionary",
+      "name": "wallpaperdictionary",
+      "has_git": true,
+      "first_at": "2026-05-07T16:41:12-07:00",
+      "last_at": "2026-05-07T16:41:12-07:00",
+      "last_subject": "initial scaffold: wallpaperdictionary.com A-Z reference site",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpaperdictionary",
+      "pkg_description": "A-Z dictionary of wallpaper terms — wallpaperdictionary.com",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dwla-rebrand",
+      "name": "dwla-rebrand",
+      "has_git": true,
+      "first_at": "2026-05-07T15:09:42-07:00",
+      "last_at": "2026-05-07T18:00:35-07:00",
+      "last_subject": "phase 1 push script: 3 dream-team guardrails (vendor verify, tag sweep, metafield carry-over)",
+      "commit_count": 3,
+      "size_mb": 2,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "dwla-rebrand",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "Migrating the Pointe (PI-) and Justin David (JD-) products from\n\"Phillipe Romano\" branding to \"Los Angeles Fabrics\" / DWLA prefix.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/chinoiseriewallpaper",
+      "name": "chinoiseriewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-07T15:03:50-07:00",
+      "last_at": "2026-05-07T15:12:04-07:00",
+      "last_subject": "add finish_dns.sh + deploy artifacts: nginx vhost, pm2 live at :9853",
+      "commit_count": 2,
+      "size_mb": 7,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "chinoiseriewallpaper",
+      "pkg_description": "Chinoiserie wallpaper microsite — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/goldleafwallpaper",
+      "name": "goldleafwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-07T15:02:09-07:00",
+      "last_at": "2026-05-07T19:37:40-07:00",
+      "last_subject": "Goldleaf: ns-header + Atelier Aurum + ghost sample-btn (recovered after deploy mismatch)",
+      "commit_count": 3,
+      "size_mb": 7,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "goldleafwallpaper-website",
+      "pkg_description": "Goldleaf Wallpaper — Phillipe Romano Renaissance Metal Leaf storefront",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/carmelwallpapers",
+      "name": "carmelwallpapers",
+      "has_git": true,
+      "first_at": "2026-05-07T15:01:28-07:00",
+      "last_at": "2026-05-07T15:01:28-07:00",
+      "last_subject": "initial scaffold: carmelwallpapers.com DW microsite, 2182 coastal products",
+      "commit_count": 1,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "carmelwallpapers",
+      "pkg_description": "Carmel-by-the-Sea luxury wallpaper storefront — DW microsite",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/naturaltextilewallpaper",
+      "name": "naturaltextilewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-07T15:00:26-07:00",
+      "last_at": "2026-05-07T15:00:26-07:00",
+      "last_subject": "initial scaffold: NTW site — 4166 natural-fiber products, Loro Piana aesthetic, dark/light toggle, material filter pills, infinite scroll",
+      "commit_count": 1,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "naturaltextilewallpaper",
+      "pkg_description": "Natural Textile Wallpaper — category aggregator for natural-fiber wallcoverings",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/customdigitalmurals",
+      "name": "customdigitalmurals",
+      "has_git": true,
+      "first_at": "2026-05-07T15:00:06-07:00",
+      "last_at": "2026-05-07T15:00:06-07:00",
+      "last_subject": "initial scaffold: customdigitalmurals.com Off-White storefront, 3663 products",
+      "commit_count": 1,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "customdigitalmurals",
+      "pkg_description": "Custom Digital Murals — printed-to-order large-format wall art storefront",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/graphics-loop",
+      "name": "graphics-loop",
+      "has_git": true,
+      "first_at": "2026-05-07T12:05:24-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/restaurant-directory",
+      "name": "restaurant-directory",
+      "has_git": true,
+      "first_at": "2026-05-07T12:05:24-07:00",
+      "last_at": "2026-05-08T00:15:19-07:00",
+      "last_subject": "rel=alternate JSON + HTTP Link header on / and /c/:slug",
+      "commit_count": 3,
+      "size_mb": 418,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "lacountyeats",
+      "pkg_description": "LA County Eats — comprehensive directory of every LA County restaurant",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/analytics-chips",
+      "name": "analytics-chips",
+      "has_git": true,
+      "first_at": "2026-05-07T08:24:00-07:00",
+      "last_at": "2026-05-07T14:09:37-07:00",
+      "last_subject": "add categorized fleet view at /categories.html with sort + density slider",
+      "commit_count": 3,
+      "size_mb": 48,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "analytics-chips",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/grassclothwallpaper",
+      "name": "grassclothwallpaper",
+      "has_git": false,
+      "first_at": "2026-05-07T08:13:21Z",
+      "last_at": "2026-05-07T08:13:21Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 16,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ventura-claw-leads",
+      "name": "ventura-claw-leads",
+      "has_git": true,
+      "first_at": "2026-05-06T16:20:28-07:00",
+      "last_at": "2026-05-07T17:57:49-07:00",
+      "last_subject": "Fix legal-page ZIP in CAN-SPAM footer: 91335→91403",
+      "commit_count": 63,
+      "size_mb": 56,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "ventura-claw-leads",
+      "pkg_description": "Lead-routing directory for unregulated small businesses on Ventura Blvd. Restaurants, salons, retail, fitness, pet services, auto detail, cleaning, tutoring — businesses pay subscription/per-lead, consumer pays nothing. Sister project to NPH; explicitly NOT for licensed professionals (medical, legal, financial, real estate, contracting).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/daily-reporting",
+      "name": "daily-reporting",
+      "has_git": true,
+      "first_at": "2026-05-06T14:36:08-07:00",
+      "last_at": "2026-05-06T14:36:08-07:00",
+      "last_subject": "initial scaffold (relocated from ~/.claude/skills/)",
+      "commit_count": 1,
+      "size_mb": 49,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-agents-daily-reporting",
+      "pkg_description": "Comprehensive daily reporting system for DW-Agents hierarchy with morning standup and end-of-day reports",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# Daily Reporting System for DW-Agents",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/agent-cabinet",
+      "name": "agent-cabinet",
+      "has_git": true,
+      "first_at": "2026-05-06T11:25:14-07:00",
+      "last_at": "2026-05-07T12:29:19-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (dist/ build/ .next/)",
+      "commit_count": 7,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Designer-Wallcoverings",
+      "name": "Designer-Wallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:36:48-07:00",
+      "last_at": "2026-05-08T00:44:39-07:00",
+      "last_subject": "novasuede: collapse all nav tabs into hamburger on right at every width (Novasuede brand name kept in banner)",
+      "commit_count": 8,
+      "size_mb": 44881,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "designer-wallcoverings",
+      "pkg_description": "Designer Wallcoverings Shopify Management",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wine-finder-next",
+      "name": "wine-finder-next",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:56-07:00",
+      "last_at": "2026-05-06T10:25:56-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "wine-finder-next",
+      "pkg_description": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wine-finder",
+      "name": "wine-finder",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:55-07:00",
+      "last_at": "2026-05-07T12:29:35-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (node_modules/ .env* *.log dist/ .next/)",
+      "commit_count": 2,
+      "size_mb": 77,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "winefinder",
+      "pkg_description": "Wine Pricing Tracker - Red Thunder Wine Tracker",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "A secure, luxury-themed Wine Pricing Tracker web platform for viewing and analyzing wine prices from K&L Wine Merchants and other sources.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/web-viewer-3877",
+      "name": "web-viewer-3877",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:54-07:00",
+      "last_at": "2026-05-07T12:29:55-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 2555 files; files preserved on disk)",
+      "commit_count": 3,
+      "size_mb": 36,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "web-viewer-3877",
+      "pkg_description": "Interactive web viewer with conversation mode",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/website-analysis",
+      "name": "website-analysis",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:54-07:00",
+      "last_at": "2026-05-06T10:25:54-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/videos-agentabrams-worker",
+      "name": "videos-agentabrams-worker",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:51-07:00",
+      "last_at": "2026-05-06T11:51:51-07:00",
+      "last_subject": "keep gemma3:4b warm with 30m keep_alive (eliminate 6min cold-load timeouts)",
+      "commit_count": 3,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/vinylwallpaper",
+      "name": "vinylwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:51-07:00",
+      "last_at": "2026-05-07T17:55:29-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "vinylwallpaper",
+      "pkg_description": "VINYL WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/voice-clone",
+      "name": "voice-clone",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:51-07:00",
+      "last_at": "2026-05-06T10:25:51-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpapersback",
+      "name": "wallpapersback",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:51-07:00",
+      "last_at": "2026-05-07T17:55:03-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "wallpapersback",
+      "pkg_description": "Retro Walls — vintage/midcentury/deco wallcoverings storefront. DW family vertical. Goldleaf-inspired palette.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/watches",
+      "name": "watches",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:51-07:00",
+      "last_at": "2026-05-06T10:25:51-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 10,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "watches",
+      "pkg_description": "Omega watch price tracking system",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# Omega Watch Price History System",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/student-debt-crisis-redesign",
+      "name": "student-debt-crisis-redesign",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-06T10:25:50-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 96,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "# SDCC Redesign Sprint — final deliverable bundle",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/suedewallpaper",
+      "name": "suedewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-07T17:55:33-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "suedewallpaper",
+      "pkg_description": "SUEDE WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/tailscale-acl-design",
+      "name": "tailscale-acl-design",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-06T10:25:50-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/tailscale-funnel-research",
+      "name": "tailscale-funnel-research",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-06T10:25:50-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/textilewallpaper",
+      "name": "textilewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-07T17:55:33-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "textilewallpaper",
+      "pkg_description": "TEXTILE WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/timeout-agent",
+      "name": "timeout-agent",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-06T10:25:50-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "timeout-agent",
+      "pkg_description": "24/7 process watchdog - restarts timed out, errored, and stuck PM2 processes",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/vendor-discount-agent",
+      "name": "vendor-discount-agent",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:50-07:00",
+      "last_at": "2026-05-06T10:25:50-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 42,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "vendor-discount-agent",
+      "pkg_description": "Logs into vendor trade portals to verify net discount percentages",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/silkwallpaper",
+      "name": "silkwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-07T17:55:18-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 9,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "silkwallpaper",
+      "pkg_description": "SILK WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/silverleafwallpaper",
+      "name": "silverleafwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-07T17:55:26-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "silverleafwallpaper",
+      "pkg_description": "SILVER LEAF — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/sku-check-skill",
+      "name": "sku-check-skill",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-06T10:25:48-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "sku-check-skill",
+      "pkg_description": "SKU Check Skill - Cross-reference DW SKUs with vendor websites",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/slack-dm-viewer",
+      "name": "slack-dm-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-06T10:25:48-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "slack-dm-viewer",
+      "pkg_description": "View Steve's Slack self-DMs / notes to self",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/static-pitch-server",
+      "name": "static-pitch-server",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-06T10:25:48-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/stringwallpaper",
+      "name": "stringwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:48-07:00",
+      "last_at": "2026-05-06T10:25:48-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "stringwallpaper",
+      "pkg_description": "STRING WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/sdcc-awards",
+      "name": "sdcc-awards",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-06T10:25:47-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 3,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/sdcc-images",
+      "name": "sdcc-images",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-06T10:25:47-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "sdcc-images",
+      "pkg_description": "Local SDCC image gallery — admin-only viewer, links to Steve's Google Drive",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/sdcc-mockups",
+      "name": "sdcc-mockups",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-06T10:25:47-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/selfadhesivewallpaper",
+      "name": "selfadhesivewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-07T17:55:35-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 11,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "selfadhesivewallpaper",
+      "pkg_description": "SELF-ADHESIVE WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/session-2026-05-05-finalize",
+      "name": "session-2026-05-05-finalize",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-06T10:25:47-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/shopify-apps",
+      "name": "shopify-apps",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-06T10:25:47-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/silkwallcoverings",
+      "name": "silkwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:47-07:00",
+      "last_at": "2026-05-08T01:32:29-07:00",
+      "last_subject": "Hamburger always visible on right — propagated from novasuede a815690",
+      "commit_count": 2,
+      "size_mb": 6,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "silkwallcoverings",
+      "pkg_description": "SILK WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/qty-bulk-2026-04-23",
+      "name": "qty-bulk-2026-04-23",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-06T10:25:46-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 4,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/raffiawallcoverings",
+      "name": "raffiawallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-07T17:55:21-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "raffiawallcoverings",
+      "pkg_description": "RAFFIA WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/raffiawalls",
+      "name": "raffiawalls",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-06T10:25:46-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "raffiawalls",
+      "pkg_description": "RAFFIA WALLS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/recycledwallpaper",
+      "name": "recycledwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-06T10:25:46-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "recycledwallpaper",
+      "pkg_description": "RECYCLED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/restaurantwallpaper",
+      "name": "restaurantwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-07T17:55:28-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "restaurantwallpaper",
+      "pkg_description": "RESTAURANT WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/restorationwallpaper",
+      "name": "restorationwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-06T10:25:46-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "restorationwallpaper",
+      "pkg_description": "RESTORATION WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/retrowalls",
+      "name": "retrowalls",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-07T23:04:46-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 10,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "retrowalls",
+      "pkg_description": "Retro Walls — vintage/midcentury/deco wallcoverings storefront. DW family vertical. Goldleaf-inspired palette.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/saloonwallpaper",
+      "name": "saloonwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-06T10:25:46-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 7,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "saloonwallpaper",
+      "pkg_description": "SALOON WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/screenprintedwallpaper",
+      "name": "screenprintedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:46-07:00",
+      "last_at": "2026-05-07T17:55:36-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "screenprintedwallpaper",
+      "pkg_description": "SCREEN-PRINTED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/pastelwallpaper",
+      "name": "pastelwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-07T17:55:37-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "pastelwallpaper",
+      "pkg_description": "PASTEL WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/philipperomano",
+      "name": "philipperomano",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-06T10:25:45-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 8,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "philipperomano",
+      "pkg_description": "philipperomano.com — Phillipe Romano private-label storefront",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Standalone storefront for the Phillipe Romano private label (currently sold via DesignerWallcoverings.com).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/pm2-migration",
+      "name": "pm2-migration",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-06T10:25:45-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "# PM2 Migration Kit — Kamatera → Local",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/port-viewer",
+      "name": "port-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-06T10:25:45-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "port-viewer",
+      "pkg_description": "A beautiful web app to view active network ports",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/project-portfolio-viewer",
+      "name": "project-portfolio-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-06T10:25:45-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "project-portfolio-viewer",
+      "pkg_description": "Beautiful web interface to browse and explore all projects",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/purelymail-mcp",
+      "name": "purelymail-mcp",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:45-07:00",
+      "last_at": "2026-05-06T10:25:45-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 25,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "purelymail-mcp",
+      "pkg_description": "MCP wrapper around the Purelymail v0 HTTP API (domains, routing rules, users, credit)",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/nova-recolor",
+      "name": "nova-recolor",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:44-07:00",
+      "last_at": "2026-05-06T10:25:44-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 62,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/oauth-proxy-design",
+      "name": "oauth-proxy-design",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:44-07:00",
+      "last_at": "2026-05-06T10:25:44-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/omega-watches-2",
+      "name": "omega-watches-2",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:44-07:00",
+      "last_at": "2026-05-07T12:29:28-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (.env*)",
+      "commit_count": 2,
+      "size_mb": 2,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "omega-watches-2",
+      "pkg_description": "Enterprise-Grade Omega Price History & Daily MSRP Tracking System",
+      "pkg_version": "2.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/osborne-redesign",
+      "name": "osborne-redesign",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:44-07:00",
+      "last_at": "2026-05-06T10:25:44-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/pastdoor-nginx-watch",
+      "name": "pastdoor-nginx-watch",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:44-07:00",
+      "last_at": "2026-05-06T10:25:44-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/naturalwallcoverings",
+      "name": "naturalwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:43-07:00",
+      "last_at": "2026-05-07T17:55:34-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "naturalwallcoverings",
+      "pkg_description": "NATURAL WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/new-items-dashboard",
+      "name": "new-items-dashboard",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:43-07:00",
+      "last_at": "2026-05-06T10:25:43-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 18,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "new-items-dashboard",
+      "pkg_description": "Dashboard for NEW wines and handbags",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/melanie-project",
+      "name": "melanie-project",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-06T10:25:42-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 13,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "melanie",
+      "pkg_description": "AI-powered hair styling app for stylists",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/metallicwallpaper",
+      "name": "metallicwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-07T17:55:23-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 9,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "metallicwallpaper",
+      "pkg_description": "METALLIC WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/mfr-review-viewer",
+      "name": "mfr-review-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-06T10:25:42-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 4,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "mfr-review-viewer",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/micawallpaper",
+      "name": "micawallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-07T17:55:30-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "micawallpaper",
+      "pkg_description": "MICA WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/morning-review",
+      "name": "morning-review",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-08T07:56:49-07:00",
+      "last_subject": "fix(server): cache + background refresh for /api/findings (60s+ → <100ms)",
+      "commit_count": 2,
+      "size_mb": 0,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "morning-review",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/morning-review-features",
+      "name": "morning-review-features",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-06T10:25:42-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/museumwallpaper",
+      "name": "museumwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-08T00:12:43-07:00",
+      "last_subject": "fleet UX: novasuede-style hamburger drawer (DW-Websites/_shared/dw-fleet-nav.js)",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "museumwallpaper",
+      "pkg_description": "MUSEUM WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/my-childhood-pics",
+      "name": "my-childhood-pics",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-06T10:25:42-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "mychildhoodpics",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/mylarwallpaper",
+      "name": "mylarwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:42-07:00",
+      "last_at": "2026-05-07T23:04:47-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 10,
+      "size_mb": 9,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "mylarwallpaper",
+      "pkg_description": "MYLAR WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/jutewallpaper",
+      "name": "jutewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-07T17:55:20-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "jutewallpaper",
+      "pkg_description": "JUTE WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/kravet-fabric-fix-2026-04-23",
+      "name": "kravet-fabric-fix-2026-04-23",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-06T10:25:41-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/kravet-sheet-sync-2026-04-20",
+      "name": "kravet-sheet-sync-2026-04-20",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-06T10:25:41-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 38,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/launchd-reminders",
+      "name": "launchd-reminders",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-06T10:25:41-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/linenwallpaper",
+      "name": "linenwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-07T17:55:19-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "linenwallpaper",
+      "pkg_description": "LINEN WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/madagascarwallpaper",
+      "name": "madagascarwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:41-07:00",
+      "last_at": "2026-05-07T17:55:31-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "madagascarwallpaper",
+      "pkg_description": "MADAGASCAR WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ffepurchasing",
+      "name": "ffepurchasing",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-10T00:14:32-07:00",
+      "last_subject": "add gated figma capture loader (only fires on ?figmacapture= URL param)",
+      "commit_count": 11,
+      "size_mb": 12,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "ffepurchasing",
+      "pkg_description": "FFE PURCHASING — B2B trade portal and public hospitality FF&E catalog. NET30, MOQ-aware, tear-sheets. DW family vertical.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/handbag-authentication",
+      "name": "handbag-authentication",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-07T12:29:26-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (*.log)",
+      "commit_count": 2,
+      "size_mb": 511,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "japanese-handbag-arbitrage",
+      "pkg_description": "Japanese handbag arbitrage platform with AI-powered deal detection",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# Japanese Handbag Arbitrage Platform",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/handcraftedwallpaper",
+      "name": "handcraftedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-07T17:55:35-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 8,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "handcraftedwallpaper",
+      "pkg_description": "HANDCRAFTED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/healthcarewallpaper",
+      "name": "healthcarewallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-07T17:55:27-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "healthcarewallpaper",
+      "pkg_description": "HEALTHCARE WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/hollywood-wallcoverings",
+      "name": "hollywood-wallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-07T21:33:58-07:00",
+      "last_subject": "Add novasuede ns-header to hollywood server-rendered layout",
+      "commit_count": 3,
+      "size_mb": 7,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "hollywood-wallcoverings",
+      "pkg_description": "hollywood-wallcoverings.com — Phillipe Romano private-label storefront",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/hospitalitywallcoverings",
+      "name": "hospitalitywallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-10T00:14:32-07:00",
+      "last_subject": "add gated figma capture loader (only fires on ?figmacapture= URL param)",
+      "commit_count": 11,
+      "size_mb": 12,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "hospitalitywallcoverings",
+      "pkg_description": "HOSPITALITY WALLCOVERINGS — contract-grade wallcoverings for hotels, restaurants & healthcare. DW family vertical.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/hospitalitywallpaper",
+      "name": "hospitalitywallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-08T00:12:42-07:00",
+      "last_subject": "fleet UX: novasuede-style hamburger drawer (DW-Websites/_shared/dw-fleet-nav.js)",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "hospitalitywallpaper",
+      "pkg_description": "HOSPITALITY WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/hotelwallcoverings",
+      "name": "hotelwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-07T17:55:25-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "hotelwallcoverings",
+      "pkg_description": "HOTEL WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/jim-gravity",
+      "name": "jim-gravity",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-06T10:25:40-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wallpapercanada",
+      "name": "wallpapercanada",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:40-07:00",
+      "last_at": "2026-05-10T00:14:32-07:00",
+      "last_subject": "add gated figma capture loader (only fires on ?figmacapture= URL param)",
+      "commit_count": 11,
+      "size_mb": 12,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "wallpapercanada",
+      "pkg_description": "WALLPAPER CANADA — premium wallcoverings shipped across Canada, priced in CAD. DW family vertical.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/handbag-auth-nextjs",
+      "name": "handbag-auth-nextjs",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:33-07:00",
+      "last_at": "2026-05-06T10:25:33-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 243,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "handbag-auth-nextjs",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/goodquestion-ai",
+      "name": "goodquestion-ai",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:30-07:00",
+      "last_at": "2026-05-06T10:25:30-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1352,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "goodquestion-ai",
+      "pkg_description": "Agent Abrams - A developer's journey with Claude Code",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "**A developer's daily journey with Claude Code.** Blog, skills, and tools.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/google-places-key-provisioner",
+      "name": "google-places-key-provisioner",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:30-07:00",
+      "last_at": "2026-05-06T10:25:30-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 19,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "google-places-key-provisioner",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/greenwallcoverings",
+      "name": "greenwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:30-07:00",
+      "last_at": "2026-05-07T17:55:42-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "greenwallcoverings",
+      "pkg_description": "GREEN WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/goodquestion",
+      "name": "goodquestion",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:20-07:00",
+      "last_at": "2026-05-06T10:25:20-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 61,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "swot-analysis-platform",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "AI-Powered Local Business Viability Analysis using Claude and Model Context Protocol (MCP)",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/george-mcp",
+      "name": "george-mcp",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:19-07:00",
+      "last_at": "2026-05-06T10:25:19-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 24,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "george-mcp",
+      "pkg_description": "MCP wrapper around George (DW Gmail HTTP agent on Kamatera)",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/glitterwalls",
+      "name": "glitterwalls",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:19-07:00",
+      "last_at": "2026-05-08T09:13:43-07:00",
+      "last_subject": "sort modal works + 142/143 SKUs have real-pixel hex via sips",
+      "commit_count": 19,
+      "size_mb": 16,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "glitterwalls",
+      "pkg_description": "GLITTER WALLS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dwjs-consolidation-2026-04-23",
+      "name": "dwjs-consolidation-2026-04-23",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-06T10:25:18-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 51,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/embroideredwallpaper",
+      "name": "embroideredwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-07T17:55:31-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 9,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "embroideredwallpaper",
+      "pkg_description": "EMBROIDERED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/epstein-card",
+      "name": "epstein-card",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-06T10:25:18-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "epstein-card",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/fabricwallpaper",
+      "name": "fabricwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-07T17:55:22-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "fabricwallpaper",
+      "pkg_description": "FABRIC WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/fleet-rag",
+      "name": "fleet-rag",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-06T10:25:18-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 27,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "fleet-rag",
+      "pkg_description": "Fleet RAG — natural-language queries over pm2 services and project READMEs",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/fleet-tv",
+      "name": "fleet-tv",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-06T16:52:37-07:00",
+      "last_subject": "fleet-tv: broaden channel list beyond DW micro-sites — added LOCAL_FRONTS hardcoded-port list of 17 hand-picked Steve services (ventura-corridor /, /magazine.html, /issue, victorystays, smb-builder, a",
+      "commit_count": 2,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "fleet-tv",
+      "pkg_description": "Live wall display cycling every Steve-owned site — stadium scoreboard for personal SaaS.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/george-gmail",
+      "name": "george-gmail",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:18-07:00",
+      "last_at": "2026-05-06T10:25:18-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 212,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "george-gmail-agent",
+      "pkg_description": "George the Gmail Agent — secure email access for DW-Agents",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-showroom",
+      "name": "dw-showroom",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:17-07:00",
+      "last_at": "2026-05-06T10:25:17-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 145,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-showroom",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-universe",
+      "name": "dw-universe",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:17-07:00",
+      "last_at": "2026-05-06T10:25:17-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-universe",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-war-room",
+      "name": "dw-war-room",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:17-07:00",
+      "last_at": "2026-05-06T10:25:17-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-war-room",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-boardroom-v2",
+      "name": "dw-boardroom-v2",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:15-07:00",
+      "last_at": "2026-05-06T10:25:15-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-boardroom-v2",
+      "pkg_description": "DW Boardroom V2 — Meeting orchestration engine with 47 AI agents",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-nextjs-admin-login",
+      "name": "dw-nextjs-admin-login",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:15-07:00",
+      "last_at": "2026-05-06T10:25:15-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 354,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "@dw/nextjs-admin-login",
+      "pkg_description": null,
+      "pkg_version": "0.2.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/YOLO-Progress-Viewer",
+      "name": "YOLO-Progress-Viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:14-07:00",
+      "last_at": "2026-05-07T12:29:56-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 854 files; files preserved on disk)",
+      "commit_count": 3,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "yolo-progress-viewer",
+      "pkg_description": "Real-time YOLO mode progress viewer for vendor testing",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dear-bubbe-next",
+      "name": "dear-bubbe-next",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:14-07:00",
+      "last_at": "2026-05-06T10:25:14-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/directory-core",
+      "name": "directory-core",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:14-07:00",
+      "last_at": "2026-05-06T10:25:14-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 45,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "directory-core",
+      "pkg_description": "Shared TypeScript primitives for Steve's directory verticals (lawyer/doctor/animals/restaurant). Carved out 2026-05-04 after overnight YOLO review found the same provider→directory→3-mockups→claim→upgrade pattern duplicated across 4 codebases.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Shared TypeScript primitives for Steve's **directory verticals** — currently lawyer/doctor/animals/restaurant, future architects/dentists/etc.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-boardroom-governance",
+      "name": "dw-boardroom-governance",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:14-07:00",
+      "last_at": "2026-05-06T10:25:14-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dw-boardroom-governance",
+      "pkg_description": "DW Boardroom Governance Engine — Isolated decision management, delegation, and meeting orchestration",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/SmokeShop",
+      "name": "SmokeShop",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:13-07:00",
+      "last_at": "2026-05-06T10:25:13-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 234,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "smokeshop",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/StudentLoanTracker",
+      "name": "StudentLoanTracker",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:13-07:00",
+      "last_at": "2026-05-06T10:25:13-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 20,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "student-loan-tracker",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Travis",
+      "name": "Travis",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:13-07:00",
+      "last_at": "2026-05-06T10:25:13-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "travis",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/SDCC-Stories",
+      "name": "SDCC-Stories",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:12-07:00",
+      "last_at": "2026-05-06T10:25:12-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 101,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "sdcc-stories",
+      "pkg_description": "SDCC Story Engine — borrower stories, social media, lawmaker outreach",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Sascha",
+      "name": "Sascha",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:12-07:00",
+      "last_at": "2026-05-06T10:25:12-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Norma",
+      "name": "Norma",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:11-07:00",
+      "last_at": "2026-05-06T10:25:11-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 325,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "norma",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Multi-tenant nonprofit intelligence platform. Three-tier UI: **Norma** (admin), **Nikki** (org staff), **Pulse** (end user). Covers email & outreach, Gmail CRM, news intelligence, petition management, and a credential platform for issuing & managing API access.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/FashionCrawler",
+      "name": "FashionCrawler",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:05-07:00",
+      "last_at": "2026-05-06T10:25:05-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "# Web Scraper for Fashion Marketplace Sites",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Hub",
+      "name": "Hub",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:05-07:00",
+      "last_at": "2026-05-06T10:25:05-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 491,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "hub-command",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/IWasCute",
+      "name": "IWasCute",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:05-07:00",
+      "last_at": "2026-05-06T10:25:05-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 653,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "iwascute",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Letsbegin",
+      "name": "Letsbegin",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:05-07:00",
+      "last_at": "2026-05-06T10:25:05-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 2,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "goodquestionralph",
+      "pkg_description": null,
+      "pkg_version": "0.2.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/NEW-SKU-Viewer",
+      "name": "NEW-SKU-Viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:25:05-07:00",
+      "last_at": "2026-05-06T10:25:05-07:00",
+      "last_subject": "initial scaffold (gitify-all 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 22,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "new-sku-viewer",
+      "pkg_description": "Web viewer for NEW-SKU vendors with live product counts",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/PoppyPetitions",
+      "name": "PoppyPetitions",
+      "has_git": true,
+      "first_at": "2026-05-06T10:22:14-07:00",
+      "last_at": "2026-05-06T10:22:14-07:00",
+      "last_subject": "initial scaffold (2026-05-06 overnight session)",
+      "commit_count": 1,
+      "size_mb": 478,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "poppy-petitions",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Freddy",
+      "name": "Freddy",
+      "has_git": true,
+      "first_at": "2026-05-06T10:22:13-07:00",
+      "last_at": "2026-05-06T10:22:13-07:00",
+      "last_subject": "initial scaffold (2026-05-06 overnight session)",
+      "commit_count": 1,
+      "size_mb": 408,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "freddy-tmp",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Grant",
+      "name": "Grant",
+      "has_git": true,
+      "first_at": "2026-05-06T10:22:13-07:00",
+      "last_at": "2026-05-06T10:22:13-07:00",
+      "last_subject": "initial scaffold (2026-05-06 overnight session)",
+      "commit_count": 1,
+      "size_mb": 643,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "grant-app",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Patty",
+      "name": "Patty",
+      "has_git": true,
+      "first_at": "2026-05-06T10:22:13-07:00",
+      "last_at": "2026-05-06T10:22:13-07:00",
+      "last_subject": "initial scaffold (2026-05-06 overnight session)",
+      "commit_count": 1,
+      "size_mb": 381,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "patty-petitions",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/linkedin-agent",
+      "name": "linkedin-agent",
+      "has_git": true,
+      "first_at": "2026-05-06T10:22:13-07:00",
+      "last_at": "2026-05-06T10:22:13-07:00",
+      "last_subject": "initial scaffold (2026-05-06 overnight session)",
+      "commit_count": 1,
+      "size_mb": 63,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "linkedin-agent",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Steve's autonomous LinkedIn presence — posts, comments, connection requests,\nCompany Page management, AI-drafted content — all wired into Claude Code via\nan MCP server.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Kamatera",
+      "name": "Kamatera",
+      "has_git": false,
+      "first_at": "2026-05-06T10:20:49Z",
+      "last_at": "2026-05-06T10:20:49Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 4,
+      "health": "warm",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dear-bubbe-nextjs",
+      "name": "dear-bubbe-nextjs",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:46-07:00",
+      "last_at": "2026-05-07T12:29:23-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ *.log dist/)",
+      "commit_count": 2,
+      "size_mb": 869,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "dear-bubbe-nextjs",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "# Dear Bubbe - AI Grandmother Chat",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/designer-portfolio-pages",
+      "name": "designer-portfolio-pages",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:46-07:00",
+      "last_at": "2026-05-06T10:20:46-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "designer-portfolio-pages",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dear-bubbe-admin",
+      "name": "dear-bubbe-admin",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:44-07:00",
+      "last_at": "2026-05-06T10:20:44-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 4,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dear-bubbe-admin",
+      "pkg_description": "Admin Dashboard for Dear Bubbe AI with Real-time Monitoring and Alert Systems",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/codex-review-2026-05-03",
+      "name": "codex-review-2026-05-03",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-06T10:20:43-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/codex-yolo",
+      "name": "codex-yolo",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-06T10:20:43-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/compliance-agent",
+      "name": "compliance-agent",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-06T10:20:43-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 6,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "compliance-agent",
+      "pkg_description": "Internal compliance gate — suppression list + contact-attempt audit log for Steve's stack. Every outbound call/SMS/email checks here first.",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/contractwallpaper",
+      "name": "contractwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-07T17:55:24-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "contractwallpaper",
+      "pkg_description": "CONTRACT WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/corkwallcovering",
+      "name": "corkwallcovering",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-08T07:35:15-07:00",
+      "last_subject": "Hamburger always visible on right — propagated from novasuede a815690",
+      "commit_count": 13,
+      "size_mb": 12,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "corkwallcovering",
+      "pkg_description": "CORK WALLCOVERING — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/cypress-awards",
+      "name": "cypress-awards",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:43-07:00",
+      "last_at": "2026-05-06T10:20:43-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 2,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "**A comprehensive database of US non-profit organizations with cy pres statements for legal settlement distribution.**",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/codex-review-2026-04-30",
+      "name": "codex-review-2026-04-30",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:42-07:00",
+      "last_at": "2026-05-06T10:20:42-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 48,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ClawCoder",
+      "name": "ClawCoder",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:41-07:00",
+      "last_at": "2026-05-07T12:29:22-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ *.log .DS_Store dist/)",
+      "commit_count": 2,
+      "size_mb": 3,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "clawcoder",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/cncp-domains",
+      "name": "cncp-domains",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:41-07:00",
+      "last_at": "2026-05-06T10:20:41-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/calc-67",
+      "name": "calc-67",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:40-07:00",
+      "last_at": "2026-05-07T12:29:22-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ *.log dist/)",
+      "commit_count": 2,
+      "size_mb": 258,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "67calc",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "**The World's Most Accurate Calculator Suite™**",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/claude-code-dashboard",
+      "name": "claude-code-dashboard",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:40-07:00",
+      "last_at": "2026-05-06T10:20:40-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/claude-email-responder",
+      "name": "claude-email-responder",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:40-07:00",
+      "last_at": "2026-05-08T00:35:15-07:00",
+      "last_subject": "Reverse channel: directive parser bypasses Claude for 'act on X' / 'status' / 'pause loop' / 'resume loop'",
+      "commit_count": 2,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "claude-email-responder",
+      "pkg_description": "Polls George Gmail for inbound mail from Steve and auto-replies in-thread via Claude API.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/boomer-calculator",
+      "name": "boomer-calculator",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:33-07:00",
+      "last_at": "2026-05-07T12:29:21-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ *.log dist/)",
+      "commit_count": 2,
+      "size_mb": 3,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "nofrillscalculator",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "**The World's Most Accurate Calculator Suite™**",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/brand-selector-viewer",
+      "name": "brand-selector-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:33-07:00",
+      "last_at": "2026-05-06T10:20:33-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/B_Version_1",
+      "name": "B_Version_1",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:32-07:00",
+      "last_at": "2026-05-06T10:20:32-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 2,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "dear-bubbe",
+      "pkg_description": "AI-powered Yiddish grandmother advice column with SMS delivery",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# 🥯 Dear Bubbe - AI-Powered Yiddish Grandma Advice",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/auto-deploy-watcher",
+      "name": "auto-deploy-watcher",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:32-07:00",
+      "last_at": "2026-05-06T10:20:32-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 5,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "auto-deploy-watcher",
+      "pkg_description": "Watches project git HEADs on main and runs scripts/deploy-*.sh on change.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Watches each enabled project's git HEAD on `main` and runs that project's\n`scripts/deploy-*.sh` whenever the SHA changes.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/billy-website",
+      "name": "billy-website",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:32-07:00",
+      "last_at": "2026-05-06T10:20:32-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": "laurel-canyon-rental",
+      "pkg_description": "High-end luxury rental website for 2755 Carmar Drive in historic Laurel Canyon, Los Angeles",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# 2755 Carmar Drive - Laurel Canyon Luxury Rental",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/blockprintedwallpaper",
+      "name": "blockprintedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:32-07:00",
+      "last_at": "2026-05-07T17:55:40-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "blockprintedwallpaper",
+      "pkg_description": "BLOCK-PRINTED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/animate-museum-posts",
+      "name": "animate-museum-posts",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:31-07:00",
+      "last_at": "2026-05-07T12:29:20-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ .DS_Store build/)",
+      "commit_count": 2,
+      "size_mb": 1134,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "animate-museum-posts",
+      "pkg_description": "Automated museum art animation and posting bot",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "Automated bot that fetches random public domain artwork from Rijksmuseum, animates it using Grok AI, and posts to X.com.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/apartmentwallpaper",
+      "name": "apartmentwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:31-07:00",
+      "last_at": "2026-05-07T17:55:40-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 11,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "apartmentwallpaper",
+      "pkg_description": "APARTMENT WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/architecturalwallcoverings",
+      "name": "architecturalwallcoverings",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:31-07:00",
+      "last_at": "2026-05-07T23:04:48-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 10,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "architecturalwallcoverings",
+      "pkg_description": "ARCHITECTURAL WALLCOVERINGS — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/archive-agent",
+      "name": "archive-agent",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:31-07:00",
+      "last_at": "2026-05-07T12:29:21-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ .DS_Store dist/ build/ .next/)",
+      "commit_count": 2,
+      "size_mb": 6,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "archive-agent",
+      "pkg_description": "Archive Agent — watches Shopify archives, flags wrongful ones, reports",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-collections-viewer",
+      "name": "dw-collections-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:19-07:00",
+      "last_at": "2026-05-07T08:59:43-07:00",
+      "last_subject": "dw-collections-viewer: gold ↕<sort> pill on tiles when persisted sort != default 'textures'; surfaces last_sort_applied at a glance",
+      "commit_count": 17,
+      "size_mb": 6,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "dw-collections-viewer",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/AgentAbrams",
+      "name": "AgentAbrams",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:07-07:00",
+      "last_at": "2026-05-07T12:29:20-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (node_modules/ tmp/ .next/)",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "A public build-in-public operating system by Agent Abrams.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/abrams-discovery-viewer",
+      "name": "abrams-discovery-viewer",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:07-07:00",
+      "last_at": "2026-05-07T12:29:54-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 645 files; files preserved on disk)",
+      "commit_count": 3,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "abrams-discovery-viewer",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ad-signals-rolodex",
+      "name": "ad-signals-rolodex",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:07-07:00",
+      "last_at": "2026-05-06T10:20:07-07:00",
+      "last_subject": "initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)",
+      "commit_count": 1,
+      "size_mb": 1,
+      "days_since": 3,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/agedwallpaper",
+      "name": "agedwallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:07-07:00",
+      "last_at": "2026-05-07T17:55:32-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "agedwallpaper",
+      "pkg_description": "AGED WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/angels-flowers",
+      "name": "angels-flowers",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:07-07:00",
+      "last_at": "2026-05-07T12:29:20-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ *.log dist/)",
+      "commit_count": 2,
+      "size_mb": 2,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "angels-flowers",
+      "pkg_description": "Angel's Flowers - Premium Ecuadorian Flowers in East Los Angeles",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "# Angel's Flowers - Premium Ecuadorian Flowers",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1930swallpaper",
+      "name": "1930swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T23:04:46-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1930swallpaper",
+      "pkg_description": "1930s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1940swallpaper",
+      "name": "1940swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T17:55:11-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1940swallpaper",
+      "pkg_description": "1940s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1950swallpaper",
+      "name": "1950swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T17:55:12-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1950swallpaper",
+      "pkg_description": "1950s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1960swallpaper",
+      "name": "1960swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T17:55:13-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1960swallpaper",
+      "pkg_description": "1960s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1970swallpaper",
+      "name": "1970swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T23:04:47-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 12,
+      "size_mb": 9,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "the-1970s-wallpaper",
+      "pkg_description": "Retro Walls — vintage/midcentury/deco wallcoverings storefront. DW family vertical. Goldleaf-inspired palette.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1980swallpaper",
+      "name": "1980swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:05-07:00",
+      "last_at": "2026-05-07T17:55:16-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1980swallpaper",
+      "pkg_description": "1980s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1800swallpaper",
+      "name": "1800swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:04-07:00",
+      "last_at": "2026-05-08T09:03:55-07:00",
+      "last_subject": "add favicon",
+      "commit_count": 9,
+      "size_mb": 12,
+      "days_since": 1,
+      "health": "hot",
+      "pkg_name": "1800swallpaper",
+      "pkg_description": "1800s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1890swallpaper",
+      "name": "1890swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:04-07:00",
+      "last_at": "2026-05-07T17:55:05-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 12,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1890swallpaper",
+      "pkg_description": "1890s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1900swallpaper",
+      "name": "1900swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:04-07:00",
+      "last_at": "2026-05-07T17:55:07-07:00",
+      "last_subject": "graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags",
+      "commit_count": 8,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1900swallpaper",
+      "pkg_description": "1900s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/1920swallpaper",
+      "name": "1920swallpaper",
+      "has_git": true,
+      "first_at": "2026-05-06T10:20:04-07:00",
+      "last_at": "2026-05-07T23:04:46-07:00",
+      "last_subject": "Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)",
+      "commit_count": 10,
+      "size_mb": 11,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "1920swallpaper",
+      "pkg_description": "1920s WALLPAPER — DW family vertical",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/NationalPaperHangers",
+      "name": "NationalPaperHangers",
+      "has_git": true,
+      "first_at": "2026-05-06T10:18:07-07:00",
+      "last_at": "2026-05-07T23:19:09-07:00",
+      "last_subject": "rel=alternate JSON + HTTP Link header on /find — applies VCL pattern",
+      "commit_count": 41,
+      "size_mb": 418,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "national-paper-hangers",
+      "pkg_description": "Luxury wallcovering installer marketplace + scheduling platform",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Luxury wallcovering installer marketplace + scheduling platform.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/dw-product-manager",
+      "name": "dw-product-manager",
+      "has_git": false,
+      "first_at": "2026-05-06T10:01:27Z",
+      "last_at": "2026-05-06T10:01:27Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 0,
+      "days_since": 4,
+      "health": "warm",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/business-claw",
+      "name": "business-claw",
+      "has_git": false,
+      "first_at": "2026-05-06T09:04:47Z",
+      "last_at": "2026-05-06T09:04:47Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 4,
+      "health": "warm",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ventura-claw",
+      "name": "ventura-claw",
+      "has_git": true,
+      "first_at": "2026-05-06T02:22:52-07:00",
+      "last_at": "2026-05-07T13:23:36-07:00",
+      "last_subject": "marketing: pre-flight section flags Show HN draft is unshippable until demo widget returns to homepage; fix 56→67 connector count",
+      "commit_count": 72,
+      "size_mb": 14,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/ventura-corridor",
+      "name": "ventura-corridor",
+      "has_git": true,
+      "first_at": "2026-05-05T06:49:06-07:00",
+      "last_at": "2026-05-10T00:48:31-07:00",
+      "last_subject": "task #4: source CC0 glTF bus + car models (Kenney Car Kit + Quaternius Public Transport)",
+      "commit_count": 160,
+      "size_mb": 312,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "ventura-corridor",
+      "pkg_description": "Ventura Blvd corridor business directory — inventory, front-page audit, SEO scoring, mind-map view. Local-only (Mac).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Local-only directory of every business on Ventura Blvd (Calabasas → North Hollywood). Inventory + front-page audit + SEO scoring + ownership classification + three view surfaces.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/bubbesblock",
+      "name": "bubbesblock",
+      "has_git": true,
+      "first_at": "2026-05-04T06:58:43-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "Community surface for the three-domain home-history ecosystem.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/claimmyaddress",
+      "name": "claimmyaddress",
+      "has_git": true,
+      "first_at": "2026-05-04T06:39:14-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "Onboarding / login surface for the three-domain home-history ecosystem.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/wholivedthere",
+      "name": "wholivedthere",
+      "has_git": true,
+      "first_at": "2026-05-04T06:19:05-07:00",
+      "last_at": "2026-05-07T12:05:25-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 41,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/stayclaim",
+      "name": "stayclaim",
+      "has_git": true,
+      "first_at": "2026-05-04T05:58:39-07:00",
+      "last_at": "2026-05-07T12:29:31-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ dist/ build/)",
+      "commit_count": 2,
+      "size_mb": 459,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "stayclaim",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Address-first property-history platform. Pivoted from the original\n\"Airbnb listing claim\" concept after the deep research in\n[docs/deep-research-report.md](docs/deep-research-report.md).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/jill-website",
+      "name": "jill-website",
+      "has_git": true,
+      "first_at": "2026-05-04T05:38:44-07:00",
+      "last_at": "2026-05-07T12:29:26-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ .DS_Store build/)",
+      "commit_count": 2,
+      "size_mb": 118,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "nosara-beachfront-rentals",
+      "pkg_description": "Luxury beachfront vacation rental website for Nosara, Costa Rica",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "A luxury beachfront vacation rental website for Nosara, Costa Rica. This application provides property listings, guest inquiry management, and email notifications for vacation rental properties.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/malden-house",
+      "name": "malden-house",
+      "has_git": true,
+      "first_at": "2026-05-04T05:18:47-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Ken",
+      "name": "Ken",
+      "has_git": true,
+      "first_at": "2026-05-04T03:46:34-07:00",
+      "last_at": "2026-05-07T12:29:27-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (.env* tmp/ *.log .DS_Store dist/ build/ .next/)",
+      "commit_count": 2,
+      "size_mb": 3,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "bertha-weather-betting",
+      "pkg_description": "Weather forecast micro-betting system for Polymarket",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/trademarks-copyright",
+      "name": "trademarks-copyright",
+      "has_git": true,
+      "first_at": "2026-05-04T03:19:49-07:00",
+      "last_at": "2026-05-07T12:29:32-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (.env* tmp/ dist/ build/)",
+      "commit_count": 2,
+      "size_mb": 667,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "trademarks-copyright",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "# Trademarks & Copyright — Opportunity Finder",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/yolo-agent",
+      "name": "yolo-agent",
+      "has_git": true,
+      "first_at": "2026-05-04T02:42:17-07:00",
+      "last_at": "2026-05-07T12:30:20-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 633 files; files preserved on disk)",
+      "commit_count": 3,
+      "size_mb": 13,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "yolo-agent",
+      "pkg_description": "YOLO Agent — Autonomous Claude Code task runner",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/resize-it",
+      "name": "resize-it",
+      "has_git": true,
+      "first_at": "2026-05-04T02:23:31-07:00",
+      "last_at": "2026-05-07T12:29:30-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/)",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Hormuzy",
+      "name": "Hormuzy",
+      "has_git": true,
+      "first_at": "2026-05-04T02:04:45-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 7,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/secrets-manager",
+      "name": "secrets-manager",
+      "has_git": true,
+      "first_at": "2026-05-04T01:46:00-07:00",
+      "last_at": "2026-05-07T15:41:37-07:00",
+      "last_subject": "log: 9-domain batch DNS+cert session 2026-05-07",
+      "commit_count": 6,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/the-ai-factory",
+      "name": "the-ai-factory",
+      "has_git": true,
+      "first_at": "2026-05-04T01:08:09-07:00",
+      "last_at": "2026-05-07T12:29:32-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ dist/ build/ .next/)",
+      "commit_count": 2,
+      "size_mb": 29,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "the-ai-factory",
+      "pkg_description": "Meta-orchestrator: prompt -> shipped AI artifact (subagent, skill, agent, script).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Meta-orchestrator that turns one prompt into a shipped AI artifact (subagent, skill, agent, or script).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/site-factory",
+      "name": "site-factory",
+      "has_git": true,
+      "first_at": "2026-05-04T00:49:03-07:00",
+      "last_at": "2026-05-07T12:29:54-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 804 files; files preserved on disk)",
+      "commit_count": 3,
+      "size_mb": 1068,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "site-factory",
+      "pkg_description": "Steve's site-factory: domain → branded, monetized, app-store-ready site, with Manager critic per stage",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/bankrupt-leads",
+      "name": "bankrupt-leads",
+      "has_git": true,
+      "first_at": "2026-05-03T23:52:25-07:00",
+      "last_at": "2026-05-07T12:05:24-07:00",
+      "last_subject": "add canonical .gitignore per standing rule",
+      "commit_count": 2,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "MVP: scrape bankruptcy court filings, extract asset schedules + 363 sale motions, resell as vertical lead digests.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/session-debrief",
+      "name": "session-debrief",
+      "has_git": true,
+      "first_at": "2026-05-03T23:51:24-07:00",
+      "last_at": "2026-05-07T12:30:20-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 601 files; files preserved on disk)",
+      "commit_count": 13,
+      "size_mb": 0,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "session-debrief",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/debate-ring-viewer",
+      "name": "debate-ring-viewer",
+      "has_git": true,
+      "first_at": "2026-05-03T23:46:26-07:00",
+      "last_at": "2026-05-07T12:30:19-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 1635 files; files preserved on disk)",
+      "commit_count": 5,
+      "size_mb": 30,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "debate-ring-viewer",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/small-business-builder",
+      "name": "small-business-builder",
+      "has_git": true,
+      "first_at": "2026-05-03T23:46:26-07:00",
+      "last_at": "2026-05-07T12:29:31-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (dist/ build/ .next/)",
+      "commit_count": 8,
+      "size_mb": 44,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "small-business-builder",
+      "pkg_description": "Template-driven landing-page builder for small businesses. First vertical: LA salons / barbershops / nail salons. 5 templates per business, scrape existing website + Instagram for initial data, three pricing tiers (free / plus $19 / premium $79).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Template-driven landing-page builder for small businesses.\nFirst vertical: LA salons / barbershops / nail salons. Generic for any small business after that.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/claude-codex-meeting",
+      "name": "claude-codex-meeting",
+      "has_git": true,
+      "first_at": "2026-05-01T13:07:44-07:00",
+      "last_at": "2026-05-08T00:08:49-07:00",
+      "last_subject": "auto-act: tolerate ## or ### heading depth + grep-empty (pipefail crash); now handles meeting-format drift cleanly",
+      "commit_count": 8,
+      "size_mb": 2,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "claude-codex-meeting",
+      "pkg_description": null,
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/animals",
+      "name": "animals",
+      "has_git": true,
+      "first_at": "2026-05-01T11:33:17-07:00",
+      "last_at": "2026-05-10T07:08:46-07:00",
+      "last_subject": "fix: animals-hawk pm2 path portable across Mac1/Mac2",
+      "commit_count": 40,
+      "size_mb": 3402,
+      "days_since": 0,
+      "health": "hot",
+      "pkg_name": "animals",
+      "pkg_description": "Compliance-first directory + monetization platform for the entire animal ecosystem: vets, clinics, breeds, breeders, shelters, groomers, trainers. Powers the AnimalsDirectory consumer site, the Vet Site Upgrade SaaS upsell, and a lead-gen funnel.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "Compliance-first directory + monetization platform for the U.S. animal-care\necosystem (vets, clinics, breeds, breeders, shelters, groomers, trainers).",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/visual-factory",
+      "name": "visual-factory",
+      "has_git": true,
+      "first_at": "2026-04-30T23:06:29-07:00",
+      "last_at": "2026-05-07T12:29:34-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ dist/ build/ .next/)",
+      "commit_count": 8,
+      "size_mb": 33,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "visual-factory",
+      "pkg_description": "Meta-orchestrator: brief -> rendered visual artifact (HTML→PNG via Playwright; llava vision review; Claude CLI critic).",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/professional-directory",
+      "name": "professional-directory",
+      "has_git": true,
+      "first_at": "2026-04-30T00:41:56-07:00",
+      "last_at": "2026-05-07T12:29:29-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (build/ .next/)",
+      "commit_count": 3,
+      "size_mb": 13339,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "professional-directory",
+      "pkg_description": "Compliance-first PostgreSQL data platform for licensed professionals (LA County doctors first). Powers profile sites, SEO pages, directories, CRM enrichment.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/lawyer-directory-builder",
+      "name": "lawyer-directory-builder",
+      "has_git": true,
+      "first_at": "2026-04-30T00:35:33-07:00",
+      "last_at": "2026-05-07T12:29:27-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (build/ .next/)",
+      "commit_count": 34,
+      "size_mb": 6845,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "lawyer-directory-builder",
+      "pkg_description": "Compliance-first PostgreSQL data platform for licensed legal professionals (LA County first). Powers profile websites, SEO pages, directories, and CRM enrichment.",
+      "pkg_version": "0.1.0",
+      "readme_snippet": "# LA Lawyer Directory — Office Map",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/lahomespecs",
+      "name": "lahomespecs",
+      "has_git": false,
+      "first_at": "2026-04-29T13:24:39Z",
+      "last_at": "2026-04-29T13:24:39Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 11,
+      "health": "warm",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/VictoryStays",
+      "name": "VictoryStays",
+      "has_git": true,
+      "first_at": "2026-04-24T00:33:57-07:00",
+      "last_at": "2026-05-07T12:29:33-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (dist/ build/ .next/)",
+      "commit_count": 23,
+      "size_mb": 3537,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "victorystays",
+      "pkg_description": null,
+      "pkg_version": "0.1.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Forza",
+      "name": "Forza",
+      "has_git": true,
+      "first_at": "2026-04-23T11:14:43-07:00",
+      "last_at": "2026-05-07T12:29:25-07:00",
+      "last_subject": "tighten .gitignore: add missing standing-rule patterns (tmp/ dist/ build/ .next/)",
+      "commit_count": 6,
+      "size_mb": 1,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "Website mockups for **forza.legal** — a boutique Costa Rica law, tax &amp; outsourcing firm.",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/test",
+      "name": "test",
+      "has_git": false,
+      "first_at": "2026-02-21T01:43:41Z",
+      "last_at": "2026-02-21T01:43:41Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 78,
+      "health": "cold",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/project-67",
+      "name": "project-67",
+      "has_git": false,
+      "first_at": "2026-02-21T01:43:34Z",
+      "last_at": "2026-02-21T01:43:34Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 78,
+      "health": "cold",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Hospitality",
+      "name": "Hospitality",
+      "has_git": false,
+      "first_at": "2026-02-21T01:42:51Z",
+      "last_at": "2026-02-21T01:42:51Z",
+      "last_subject": "",
+      "commit_count": 0,
+      "size_mb": 1,
+      "days_since": 78,
+      "health": "cold",
+      "pkg_name": null,
+      "pkg_description": null,
+      "pkg_version": null,
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    },
+    {
+      "path": "/Users/stevestudio2/Projects/Bertha",
+      "name": "Bertha",
+      "has_git": true,
+      "first_at": "2026-02-12T21:40:16Z",
+      "last_at": "2026-05-07T12:29:54-07:00",
+      "last_subject": "untrack node_modules per standing rule (was tracking 12516 files; files preserved on disk)",
+      "commit_count": 56,
+      "size_mb": 118,
+      "days_since": 2,
+      "health": "hot",
+      "pkg_name": "bertha-weather-betting",
+      "pkg_description": "Weather forecast micro-betting system for Polymarket",
+      "pkg_version": "1.0.0",
+      "readme_snippet": "",
+      "pros": "",
+      "cons": "",
+      "verdict": null,
+      "priority": 0,
+      "notes": "",
+      "chat": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ecosystem.config.js b/ecosystem.config.js
new file mode 100644
index 0000000..e0ab443
--- /dev/null
+++ b/ecosystem.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+  apps: [{
+    name: 'build-debrief',
+    script: 'src/server.js',
+    cwd: __dirname,
+    env: { PORT: 9756, OLLAMA_URL: 'http://192.168.1.133:11434', OLLAMA_FALLBACK: 'http://localhost:11434' },
+    autorestart: true,
+    max_memory_restart: '512M',
+  }]
+};
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..21fb669
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,900 @@
+{
+  "name": "build-debrief",
+  "version": "0.1.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "build-debrief",
+      "version": "0.1.0",
+      "dependencies": {
+        "compression": "^1.7.4",
+        "express": "^4.19.2"
+      }
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/accepts/node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "license": "MIT"
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.5",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
+      "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "~3.1.2",
+        "content-type": "~1.0.5",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "~1.2.0",
+        "http-errors": "~2.0.1",
+        "iconv-lite": "~0.4.24",
+        "on-finished": "~2.4.1",
+        "qs": "~6.15.1",
+        "raw-body": "~2.5.3",
+        "type-is": "~1.6.18",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/body-parser/node_modules/qs": {
+      "version": "6.15.1",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+      "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/compressible": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": ">= 1.43.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/compression": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
+      "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "compressible": "~2.0.18",
+        "debug": "2.6.9",
+        "negotiator": "~0.6.4",
+        "on-headers": "~1.1.0",
+        "safe-buffer": "5.2.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
+      "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "license": "MIT"
+    },
+    "node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT"
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/express": {
+      "version": "4.22.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
+      "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "~1.20.3",
+        "content-disposition": "~0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "~0.7.1",
+        "cookie-signature": "~1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.3.1",
+        "fresh": "~0.5.2",
+        "http-errors": "~2.0.0",
+        "merge-descriptors": "1.0.3",
+        "methods": "~1.1.2",
+        "on-finished": "~2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "~0.1.12",
+        "proxy-addr": "~2.0.7",
+        "qs": "~6.14.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "~0.19.0",
+        "serve-static": "~1.16.2",
+        "setprototypeof": "1.2.0",
+        "statuses": "~2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
+      "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "~2.0.2",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+      "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+      "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+      "license": "MIT",
+      "dependencies": {
+        "depd": "~2.0.0",
+        "inherits": "~2.0.4",
+        "setprototypeof": "~1.2.0",
+        "statuses": "~2.0.2",
+        "toidentifier": "~1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "license": "ISC"
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.54.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types/node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.4",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/on-headers": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
+      "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+      "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
+      "license": "MIT"
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "license": "MIT",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.14.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+      "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.3",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+      "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "~3.1.2",
+        "http-errors": "~2.0.1",
+        "iconv-lite": "~0.4.24",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "license": "MIT"
+    },
+    "node_modules/send": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
+      "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "~0.5.2",
+        "http-errors": "~2.0.1",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "~2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "~2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/serve-static": {
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
+      "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "~0.19.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "license": "ISC"
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3",
+        "side-channel-list": "^1.0.0",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+      "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+      "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5dc3d81
--- /dev/null
+++ b/package.json
@@ -0,0 +1,16 @@
+{
+  "name": "build-debrief",
+  "version": "0.1.0",
+  "description": "Per-project debrief board: pros vs cons, verdicts, and Claude chat per build.",
+  "private": true,
+  "main": "src/server.js",
+  "scripts": {
+    "start": "node src/server.js",
+    "dev": "node --watch src/server.js",
+    "inventory": "node scripts/inventory.js"
+  },
+  "dependencies": {
+    "express": "^4.19.2",
+    "compression": "^1.7.4"
+  }
+}
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..b50e07e
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,489 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width,initial-scale=1" />
+  <title>Build Debrief — Steve's project board</title>
+  <script>
+    (function() {
+      try {
+        const t = localStorage.getItem('debrief-theme') || 'dark';
+        document.documentElement.setAttribute('data-theme', t);
+      } catch {}
+    })();
+  </script>
+  <style>
+    :root[data-theme="dark"] {
+      --bg: #0c0e13; --panel: #14181f; --panel-2: #1b2029; --line: rgba(255,255,255,0.08);
+      --fg: #e7ecf2; --muted: rgba(231,236,242,0.55); --accent: #ffb000;
+      --pro-bg: rgba(46,204,113,0.10); --pro-border: rgba(46,204,113,0.32); --pro-fg: #2ecc71;
+      --con-bg: rgba(231,76,60,0.10); --con-border: rgba(231,76,60,0.32); --con-fg: #ff6b5a;
+      --hot: #ff6b5a; --warm: #ffb000; --cool: #4ea1ff; --cold: #6c7480;
+      --kbd-bg: rgba(255,255,255,0.06);
+    }
+    :root[data-theme="light"] {
+      --bg: #f4f6fb; --panel: #fff; --panel-2: #eef1f6; --line: rgba(20,24,31,0.10);
+      --fg: #14181f; --muted: rgba(20,24,31,0.55); --accent: #c46b00;
+      --pro-bg: rgba(46,160,60,0.08); --pro-border: rgba(46,160,60,0.32); --pro-fg: #1e8a3a;
+      --con-bg: rgba(200,30,30,0.08); --con-border: rgba(200,30,30,0.32); --con-fg: #c0392b;
+      --hot: #c0392b; --warm: #c46b00; --cool: #1e6cb0; --cold: #748090;
+      --kbd-bg: rgba(20,24,31,0.06);
+    }
+    * { box-sizing: border-box; }
+    html, body { margin: 0; padding: 0; height: 100%; background: var(--bg); color: var(--fg); font: 13.5px/1.45 -apple-system, system-ui, "Segoe UI", sans-serif; }
+    button, input, textarea, select { font: inherit; color: inherit; }
+    a { color: var(--accent); text-decoration: none; }
+    a:hover { text-decoration: underline; }
+
+    /* ── layout shell ───────────────────────────────────────────── */
+    #app { display: grid; grid-template-columns: 320px 1fr; grid-template-rows: 56px 1fr; height: 100vh; gap: 1px; background: var(--line); }
+    #header { grid-column: 1 / -1; background: var(--panel); display: flex; align-items: center; padding: 0 16px; gap: 12px; }
+    #header .brand { font-weight: 700; letter-spacing: 0.02em; }
+    #header .brand small { display: block; opacity: 0.55; font-weight: 400; font-size: 11px; }
+    #header .stats { display: flex; gap: 14px; font-size: 12px; color: var(--muted); margin-left: 12px; }
+    #header .stats b { color: var(--fg); font-weight: 600; }
+    #header .right { margin-left: auto; display: flex; gap: 8px; align-items: center; }
+    .icon-btn { width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--line); background: transparent; color: var(--fg); cursor: pointer; }
+    .icon-btn:hover { border-color: var(--accent); color: var(--accent); }
+
+    #leftrail { background: var(--panel); display: flex; flex-direction: column; min-height: 0; }
+    #leftrail .filter-bar { padding: 10px; border-bottom: 1px solid var(--line); display: flex; gap: 6px; flex-wrap: wrap; }
+    #leftrail .filter-bar input { flex: 1 1 100%; background: var(--panel-2); border: 1px solid var(--line); border-radius: 6px; padding: 7px 10px; color: var(--fg); outline: none; }
+    #leftrail .filter-bar input:focus { border-color: var(--accent); }
+    #leftrail .chip { padding: 4px 9px; border-radius: 999px; font-size: 11px; border: 1px solid var(--line); background: var(--panel-2); cursor: pointer; user-select: none; }
+    #leftrail .chip.active { border-color: var(--accent); color: var(--accent); }
+    #leftrail .chip .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 5px; vertical-align: middle; }
+    #leftrail .list { flex: 1; min-height: 0; overflow-y: auto; }
+    #leftrail .row { padding: 9px 12px; border-bottom: 1px solid var(--line); cursor: pointer; display: grid; grid-template-columns: 12px 1fr auto; gap: 8px; align-items: center; }
+    #leftrail .row:hover { background: var(--panel-2); }
+    #leftrail .row.selected { background: linear-gradient(90deg, rgba(255,176,0,0.16), transparent); border-left: 2px solid var(--accent); padding-left: 10px; }
+    #leftrail .row .health-dot { width: 10px; height: 10px; border-radius: 50%; }
+    .health-hot  { background: var(--hot);  box-shadow: 0 0 8px var(--hot); }
+    .health-warm { background: var(--warm); }
+    .health-cool { background: var(--cool); }
+    .health-cold { background: var(--cold); }
+    #leftrail .row .name { font-weight: 600; font-size: 13px; }
+    #leftrail .row .meta { font-size: 11px; color: var(--muted); }
+    #leftrail .row .badge { font-size: 10px; padding: 1px 6px; border-radius: 4px; border: 1px solid; line-height: 1.4; }
+    .verdict-keep    { color: #2ecc71; border-color: rgba(46,204,113,0.4); }
+    .verdict-kill    { color: #ff6b5a; border-color: rgba(255,107,90,0.4); }
+    .verdict-archive { color: var(--muted); border-color: var(--line); }
+    .verdict-pivot   { color: #4ea1ff; border-color: rgba(78,161,255,0.4); }
+    .verdict-none { display: none; }
+    .priority-pill { font-size: 10px; padding: 1px 5px; border-radius: 3px; background: var(--accent); color: #1a1100; font-weight: 700; }
+
+    /* ── main pane ─────────────────────────────────────────────── */
+    #main { background: var(--bg); display: grid; grid-template-rows: auto auto 1fr auto; min-height: 0; overflow: hidden; }
+    #project-header { padding: 16px 24px; background: var(--panel); border-bottom: 1px solid var(--line); }
+    #project-header h1 { margin: 0 0 4px; font-size: 20px; font-weight: 700; }
+    #project-header .sub { color: var(--muted); font-size: 12px; display: flex; gap: 16px; flex-wrap: wrap; }
+    #project-header .sub b { color: var(--fg); }
+    #project-header .last-subj { margin-top: 6px; font-size: 12px; color: var(--muted); font-style: italic; }
+    #project-header .readme { margin-top: 8px; padding: 8px 10px; background: var(--panel-2); border-radius: 6px; font-size: 12px; line-height: 1.45; max-height: 110px; overflow-y: auto; white-space: pre-wrap; }
+
+    #verdict-bar { padding: 10px 24px; background: var(--panel); border-bottom: 1px solid var(--line); display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
+    .verdict-btn { padding: 6px 12px; border-radius: 6px; border: 1px solid var(--line); background: var(--panel-2); cursor: pointer; font-size: 12px; }
+    .verdict-btn:hover { border-color: var(--accent); }
+    .verdict-btn.active.keep    { background: rgba(46,204,113,0.18); border-color: rgba(46,204,113,0.4); color: #2ecc71; }
+    .verdict-btn.active.kill    { background: rgba(255,107,90,0.18); border-color: rgba(255,107,90,0.4); color: #ff6b5a; }
+    .verdict-btn.active.archive { background: var(--panel-2); border-color: var(--accent); }
+    .verdict-btn.active.pivot   { background: rgba(78,161,255,0.18); border-color: rgba(78,161,255,0.4); color: #4ea1ff; }
+    #priority-slider { display: flex; align-items: center; gap: 8px; margin-left: auto; font-size: 12px; color: var(--muted); }
+    #priority-slider input { width: 110px; }
+
+    /* ── pros/cons split ───────────────────────────────────────── */
+    #pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; min-height: 0; overflow: hidden; }
+    .pane { background: var(--panel); display: flex; flex-direction: column; min-height: 0; }
+    .pane.cons { background: linear-gradient(180deg, var(--con-bg), var(--panel) 60%); }
+    .pane.pros { background: linear-gradient(180deg, var(--pro-bg), var(--panel) 60%); }
+    .pane h2 { margin: 0; padding: 12px 16px 4px; font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; }
+    .pane.cons h2 { color: var(--con-fg); }
+    .pane.pros h2 { color: var(--pro-fg); }
+    .pane h2 small { font-weight: 400; opacity: 0.7; letter-spacing: 0; text-transform: none; margin-left: 6px; font-size: 11px; }
+    .pane textarea { flex: 1; min-height: 0; resize: none; background: transparent; color: var(--fg); border: none; outline: none; padding: 8px 16px 16px; font-family: ui-monospace, SF Mono, Menlo, monospace; font-size: 12.5px; line-height: 1.55; }
+    .pane .pane-toolbar { padding: 4px 16px; border-top: 1px solid var(--line); display: flex; gap: 6px; font-size: 11px; color: var(--muted); }
+    .pane .pane-toolbar button { background: transparent; border: 1px solid var(--line); border-radius: 4px; padding: 2px 8px; cursor: pointer; font-size: 11px; }
+    .pane .pane-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
+
+    /* ── chat row at bottom ────────────────────────────────────── */
+    #chat { background: var(--panel); border-top: 1px solid var(--line); display: flex; flex-direction: column; min-height: 220px; max-height: 380px; }
+    #chat .log { flex: 1; min-height: 0; overflow-y: auto; padding: 10px 16px; font-size: 12.5px; }
+    #chat .log .turn { margin-bottom: 10px; }
+    #chat .log .turn .role { font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; opacity: 0.5; margin-bottom: 2px; }
+    #chat .log .turn.user .role { color: var(--accent); }
+    #chat .log .turn.assistant .role { color: var(--cool); }
+    #chat .log .turn pre { white-space: pre-wrap; word-wrap: break-word; margin: 0; font-family: ui-monospace, SF Mono, Menlo, monospace; font-size: 12.5px; }
+    #chat .input-row { display: flex; gap: 8px; padding: 8px 12px; border-top: 1px solid var(--line); align-items: flex-end; }
+    #chat .input-row textarea { flex: 1; background: var(--panel-2); color: var(--fg); border: 1px solid var(--line); border-radius: 6px; padding: 8px 10px; outline: none; resize: none; min-height: 38px; max-height: 140px; font-family: inherit; }
+    #chat .input-row textarea:focus { border-color: var(--accent); }
+    #chat .input-row button { background: var(--accent); color: #1a1100; border: none; border-radius: 6px; padding: 9px 14px; font-weight: 700; cursor: pointer; }
+    #chat .input-row button:disabled { opacity: 0.5; cursor: wait; }
+    #chat .quick-row { display: flex; gap: 6px; padding: 6px 12px 0; flex-wrap: wrap; align-items: center; }
+    #chat .quick { font-size: 11px; padding: 3px 8px; border: 1px solid var(--line); border-radius: 999px; background: transparent; color: var(--muted); cursor: pointer; }
+    #chat .quick:hover { border-color: var(--accent); color: var(--accent); }
+    #chat .quick kbd { background: var(--kbd-bg); padding: 0 4px; border-radius: 3px; font-size: 10px; margin-left: 4px; }
+    #chat .actions-row { padding: 6px 12px; display: flex; gap: 6px; flex-wrap: wrap; border-top: 1px solid var(--line); }
+    #chat .action { font-size: 11px; padding: 4px 9px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel-2); cursor: pointer; }
+    #chat .action:hover { border-color: var(--accent); color: var(--accent); }
+    #chat .action.danger:hover { border-color: var(--con-fg); color: var(--con-fg); }
+
+    .empty-state { padding: 60px 30px; text-align: center; color: var(--muted); }
+    .empty-state h2 { color: var(--fg); font-weight: 600; }
+  </style>
+</head>
+<body>
+  <div id="app">
+    <div id="header">
+      <div class="brand">build debrief<small id="header-sub">/ Steve's project board</small></div>
+      <div class="stats" id="stats"></div>
+      <div class="right">
+        <button class="icon-btn" id="refresh-btn" title="Refresh inventory (re-walk ~/Projects/)">↻</button>
+        <button class="icon-btn" id="theme-btn" title="Toggle theme">◐</button>
+      </div>
+    </div>
+
+    <aside id="leftrail">
+      <div class="filter-bar">
+        <input id="search" type="search" placeholder="filter — name, readme, last commit subject…" autocomplete="off" />
+        <span class="chip active" data-filter="all" id="chip-all">all</span>
+        <span class="chip" data-filter="hot"><span class="dot health-hot"></span>hot</span>
+        <span class="chip" data-filter="warm"><span class="dot health-warm"></span>warm</span>
+        <span class="chip" data-filter="cool"><span class="dot health-cool"></span>cool</span>
+        <span class="chip" data-filter="cold"><span class="dot health-cold"></span>cold</span>
+        <span class="chip" data-filter="undecided">undecided</span>
+        <span class="chip" data-filter="kill">kill</span>
+      </div>
+      <div class="list" id="project-list"></div>
+    </aside>
+
+    <main id="main">
+      <div id="empty-pane" class="empty-state">
+        <h2>Pick a project on the left</h2>
+        <p>or filter by health / verdict — kill what you don't believe in, boost what you do.</p>
+      </div>
+    </main>
+  </div>
+
+  <template id="project-detail">
+    <div id="project-header">
+      <h1 data-bind="name"></h1>
+      <div class="sub">
+        <span><b data-bind="commit_count">0</b> commits</span>
+        <span><b data-bind="size_mb">0</b> MB</span>
+        <span>last: <b data-bind="last_at_pretty"></b></span>
+        <span data-bind="path" style="font-family: ui-monospace, SF Mono, Menlo, monospace; font-size: 11px;"></span>
+      </div>
+      <div class="last-subj" data-bind="last_subject"></div>
+      <div class="readme" data-bind="readme_or_pkg"></div>
+    </div>
+
+    <div id="verdict-bar">
+      <button class="verdict-btn keep"    data-verdict="keep">✓ keep</button>
+      <button class="verdict-btn pivot"   data-verdict="pivot">⤴ pivot</button>
+      <button class="verdict-btn archive" data-verdict="archive">📦 archive</button>
+      <button class="verdict-btn kill"    data-verdict="kill">✕ kill</button>
+      <button class="verdict-btn"         data-verdict="">clear</button>
+      <div id="priority-slider">
+        priority <output id="priority-val">0</output> /10
+        <input type="range" min="0" max="10" step="1" id="priority-input" />
+      </div>
+    </div>
+
+    <div id="pros-cons">
+      <section class="pane cons">
+        <h2>why this is a bad idea <small>cons / risks</small></h2>
+        <textarea id="cons-text" placeholder="• kills weekend bandwidth&#10;• violates standing rule X&#10;• overlaps with project Y…"></textarea>
+        <div class="pane-toolbar">
+          <button data-auto="cons">↯ auto-write</button>
+          <span style="margin-left:auto;">⌘S to save</span>
+        </div>
+      </section>
+      <section class="pane pros">
+        <h2>why this is a good idea <small>pros / wins</small></h2>
+        <textarea id="pros-text" placeholder="• unique angle on…&#10;• fits standing rule&#10;• revenue-shaped…"></textarea>
+        <div class="pane-toolbar">
+          <button data-auto="pros">↯ auto-write</button>
+          <button data-auto="both">↯ auto both</button>
+        </div>
+      </section>
+    </div>
+
+    <div id="chat">
+      <div class="quick-row">
+        <button class="quick" data-prompt="Roast this project. Be honest. Where am I kidding myself?">🔥 roast</button>
+        <button class="quick" data-prompt="Steel-man both sides. Give me 3 reasons to keep this and 3 reasons to kill it.">⚖ steel-man</button>
+        <button class="quick" data-prompt="If I killed this today, what concretely breaks? Walk the dependency graph.">☠ kill-impact</button>
+        <button class="quick" data-prompt="What's the smallest thing I could ship in the next 4 hours that would make this matter?">🎯 ship-now</button>
+        <button class="quick" data-prompt="Find the single highest-leverage next commit. One sentence.">🪛 next-commit</button>
+        <button class="quick" data-prompt="Summarize this project in 2 sentences for my pitch deck.">📣 pitch-2</button>
+      </div>
+      <div class="log" id="chat-log"></div>
+      <div class="actions-row">
+        <button class="action" data-action="open-iterm">⌨ open in iTerm</button>
+        <button class="action" data-action="open-claude">🤖 open Claude tab</button>
+        <button class="action" data-action="reveal">📂 reveal in Finder</button>
+        <button class="action" data-action="abramstasks">🌀 fan-out tasks…</button>
+        <button class="action" data-action="gitify">⎇ gitify</button>
+      </div>
+      <div class="input-row">
+        <textarea id="chat-input" placeholder="ask about this project — slash commands work (/kill /pivot /run /ship). ⌘↵ to send…" rows="1"></textarea>
+        <button id="chat-send">send ⌘↵</button>
+      </div>
+    </div>
+  </template>
+
+  <script>
+    // ── state ──────────────────────────────────────────────────
+    let allProjects = [];
+    let filtered = [];
+    let selectedId = null;
+    let activeFilter = 'all';
+    let searchTerm = '';
+    let saveDebounce = null;
+
+    const esc = (s) => (s == null ? '' : String(s).replace(/[&<>"']/g, c => ({ '&':'&amp;', '<':'&lt;', '>':'&gt;', '"':'&quot;', "'":'&#39;' }[c])));
+    const fmtDate = (s) => { try { return new Date(s).toISOString().slice(0,10); } catch { return '—'; } };
+
+    // ── boot ───────────────────────────────────────────────────
+    async function load() {
+      const r = await fetch('/api/projects');
+      const j = await r.json();
+      allProjects = j.projects || [];
+      document.getElementById('stats').innerHTML =
+        `<span><b>${j.total}</b> builds</span>` +
+        `<span><b>${allProjects.filter(p=>p.health==='hot').length}</b> hot</span>` +
+        `<span><b>${allProjects.filter(p=>p.verdict==='keep').length}</b> keep</span>` +
+        `<span><b>${allProjects.filter(p=>p.verdict==='kill').length}</b> kill</span>` +
+        `<span><b>${allProjects.filter(p=>!p.verdict).length}</b> undecided</span>`;
+      renderList();
+    }
+
+    function renderList() {
+      const term = searchTerm.toLowerCase();
+      filtered = allProjects.filter(p => {
+        if (activeFilter !== 'all') {
+          if (activeFilter === 'undecided') { if (p.verdict) return false; }
+          else if (['hot','warm','cool','cold'].includes(activeFilter)) { if (p.health !== activeFilter) return false; }
+          else if (p.verdict !== activeFilter) return false;
+        }
+        if (term) {
+          const haystack = (p.name + ' ' + (p.readme_snippet||'') + ' ' + (p.last_subject||'') + ' ' + (p.pkg_description||'')).toLowerCase();
+          if (!haystack.includes(term)) return false;
+        }
+        return true;
+      });
+
+      const list = document.getElementById('project-list');
+      list.innerHTML = filtered.map(p => {
+        const verdictBadge = p.verdict ? `<span class="badge verdict-${p.verdict}">${p.verdict}</span>` : '';
+        const prioBadge = p.priority > 0 ? `<span class="priority-pill">P${p.priority}</span>` : '';
+        return `<div class="row${p.id===selectedId?' selected':''}" data-id="${esc(p.id)}">
+          <span class="health-dot health-${esc(p.health)}" title="${p.health} — ${p.days_since}d since last commit"></span>
+          <div>
+            <div class="name">${esc(p.name)}</div>
+            <div class="meta">${fmtDate(p.first_at)} → ${fmtDate(p.last_at)} · ${p.commit_count} commits · ${p.size_mb}MB</div>
+          </div>
+          <div style="display:flex;flex-direction:column;gap:3px;align-items:flex-end;">${prioBadge}${verdictBadge}</div>
+        </div>`;
+      }).join('') || `<div class="empty-state" style="padding:30px 20px;">no matches</div>`;
+
+      list.querySelectorAll('.row').forEach(el => {
+        el.addEventListener('click', () => select(el.dataset.id));
+      });
+    }
+
+    // ── select + render detail ─────────────────────────────────
+    function select(id) {
+      selectedId = id;
+      const p = allProjects.find(x => x.id === id);
+      if (!p) return;
+      const main = document.getElementById('main');
+      const tpl = document.getElementById('project-detail');
+      main.innerHTML = '';
+      main.appendChild(tpl.content.cloneNode(true));
+      // bind
+      const setBind = (key, val) => main.querySelectorAll(`[data-bind="${key}"]`).forEach(n => n.textContent = val);
+      setBind('name', p.name);
+      setBind('commit_count', p.commit_count);
+      setBind('size_mb', p.size_mb);
+      setBind('last_at_pretty', `${fmtDate(p.last_at)} (${p.days_since}d)`);
+      setBind('path', p.path);
+      setBind('last_subject', p.last_subject ? '— ' + p.last_subject : '');
+      setBind('readme_or_pkg', p.readme_snippet || p.pkg_description || '(no README; no package description)');
+      main.querySelector('#cons-text').value = p.cons || '';
+      main.querySelector('#pros-text').value = p.pros || '';
+      main.querySelector('#priority-input').value = p.priority || 0;
+      main.querySelector('#priority-val').textContent = p.priority || 0;
+
+      // verdict highlight
+      main.querySelectorAll('.verdict-btn').forEach(b => {
+        b.classList.toggle('active', b.dataset.verdict === (p.verdict || ''));
+      });
+
+      wireDetail(p);
+      renderChat(p);
+      // refresh sidebar selection
+      document.querySelectorAll('#project-list .row').forEach(r => r.classList.toggle('selected', r.dataset.id === id));
+    }
+
+    function renderChat(p) {
+      const log = document.getElementById('chat-log');
+      log.innerHTML = (p.chat || []).map(t => `<div class="turn ${t.role}">
+        <div class="role">${t.role === 'user' ? 'you' : 'claude'}${t.error?' · error':''}</div>
+        <pre>${esc(t.content)}</pre>
+      </div>`).join('') || '<div style="color:var(--muted);font-size:12px;">no chat yet — try a quick-prompt above ↑</div>';
+      log.scrollTop = log.scrollHeight;
+    }
+
+    function wireDetail(p) {
+      const main = document.getElementById('main');
+
+      // verdict
+      main.querySelectorAll('.verdict-btn').forEach(b => {
+        b.addEventListener('click', async () => {
+          const v = b.dataset.verdict || null;
+          await fetch(`/api/project/${p.id}/verdict`, { method: 'POST', headers: {'content-type':'application/json'}, body: JSON.stringify({ verdict: v }) });
+          p.verdict = v;
+          main.querySelectorAll('.verdict-btn').forEach(x => x.classList.toggle('active', x.dataset.verdict === (v || '')));
+          renderList();
+          load(); // refresh stats
+        });
+      });
+
+      // priority
+      const prioIn = main.querySelector('#priority-input');
+      const prioOut = main.querySelector('#priority-val');
+      prioIn.addEventListener('input', () => { prioOut.textContent = prioIn.value; });
+      prioIn.addEventListener('change', async () => {
+        const n = parseInt(prioIn.value, 10);
+        await fetch(`/api/project/${p.id}/priority`, { method: 'POST', headers: {'content-type':'application/json'}, body: JSON.stringify({ priority: n }) });
+        p.priority = n;
+        renderList();
+      });
+
+      // pros / cons textarea autosave
+      const cons = main.querySelector('#cons-text');
+      const pros = main.querySelector('#pros-text');
+      const saveNotes = () => {
+        clearTimeout(saveDebounce);
+        saveDebounce = setTimeout(async () => {
+          await fetch(`/api/project/${p.id}/notes`, { method: 'POST', headers: {'content-type':'application/json'}, body: JSON.stringify({ pros: pros.value, cons: cons.value }) });
+          p.pros = pros.value; p.cons = cons.value;
+        }, 500);
+      };
+      cons.addEventListener('input', saveNotes);
+      pros.addEventListener('input', saveNotes);
+
+      // ⌘S
+      [cons, pros].forEach(t => t.addEventListener('keydown', (e) => {
+        if ((e.metaKey || e.ctrlKey) && e.key === 's') { e.preventDefault(); saveNotes(); }
+      }));
+
+      // auto-write pros/cons
+      main.querySelectorAll('[data-auto]').forEach(b => {
+        b.addEventListener('click', async () => {
+          const which = b.dataset.auto;
+          b.disabled = true; b.textContent = '↯ thinking…';
+          try {
+            const r = await fetch(`/api/project/${p.id}/auto-pros-cons`, { method: 'POST' });
+            const j = await r.json();
+            if (j.ok) {
+              if (which === 'pros' || which === 'both') pros.value = j.pros;
+              if (which === 'cons' || which === 'both') cons.value = j.cons;
+              p.pros = j.pros; p.cons = j.cons;
+            } else {
+              alert('LLM unreachable. Open a Claude tab from the chat actions instead.');
+            }
+          } finally { b.disabled = false; b.textContent = b.dataset.auto === 'both' ? '↯ auto both' : '↯ auto-write'; }
+        });
+      });
+
+      // chat
+      const chatInput = main.querySelector('#chat-input');
+      const chatSend = main.querySelector('#chat-send');
+      const sendChat = async (msg) => {
+        const text = (msg ?? chatInput.value).trim();
+        if (!text) return;
+        chatInput.value = '';
+        chatSend.disabled = true; chatSend.textContent = '…';
+        // optimistic add
+        p.chat = p.chat || [];
+        p.chat.push({ role: 'user', content: text, at: new Date().toISOString() });
+        p.chat.push({ role: 'assistant', content: '…thinking…', at: new Date().toISOString(), pending: true });
+        renderChat(p);
+        try {
+          const r = await fetch(`/api/project/${p.id}/chat`, { method: 'POST', headers: {'content-type':'application/json'}, body: JSON.stringify({ message: text }) });
+          const j = await r.json();
+          if (j.chat) p.chat = j.chat;
+        } catch { p.chat[p.chat.length-1] = { role: 'assistant', content: '(network error)', error: true }; }
+        chatSend.disabled = false; chatSend.textContent = 'send ⌘↵';
+        renderChat(p);
+      };
+      chatSend.addEventListener('click', () => sendChat());
+      chatInput.addEventListener('keydown', (e) => {
+        if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') { e.preventDefault(); sendChat(); }
+      });
+      main.querySelectorAll('.quick').forEach(b => {
+        b.addEventListener('click', () => sendChat(b.dataset.prompt));
+      });
+
+      // actions
+      main.querySelectorAll('.action').forEach(b => {
+        b.addEventListener('click', async () => {
+          const action = b.dataset.action;
+          const args = {};
+          if (action === 'abramstasks') {
+            const txt = prompt('one task per line:');
+            if (!txt) return;
+            args.tasks = txt.split('\n').filter(Boolean);
+          }
+          if (action === 'open-claude') {
+            const seed = prompt('opening prompt for the Claude tab (blank = default):', '') || '';
+            if (seed) args.prompt = seed;
+          }
+          b.disabled = true; const orig = b.textContent; b.textContent = '…';
+          try {
+            const r = await fetch(`/api/project/${p.id}/action`, { method: 'POST', headers: {'content-type':'application/json'}, body: JSON.stringify({ action, args }) });
+            const j = await r.json();
+            if (!j.ok) alert(j.reason || j.error || 'action failed');
+          } catch (e) { alert(String(e)); }
+          finally { b.disabled = false; b.textContent = orig; }
+        });
+      });
+    }
+
+    // ── filter chips + search + theme + refresh ───────────────
+    document.querySelectorAll('.chip').forEach(c => {
+      c.addEventListener('click', () => {
+        document.querySelectorAll('.chip').forEach(x => x.classList.toggle('active', x === c));
+        activeFilter = c.dataset.filter;
+        renderList();
+      });
+    });
+    document.getElementById('search').addEventListener('input', (e) => { searchTerm = e.target.value; renderList(); });
+    document.getElementById('theme-btn').addEventListener('click', () => {
+      const cur = document.documentElement.getAttribute('data-theme');
+      const next = cur === 'dark' ? 'light' : 'dark';
+      document.documentElement.setAttribute('data-theme', next);
+      try { localStorage.setItem('debrief-theme', next); } catch {}
+    });
+    document.getElementById('refresh-btn').addEventListener('click', async (e) => {
+      e.target.textContent = '⟳';
+      const r = await fetch('/api/refresh-inventory', { method: 'POST' });
+      const j = await r.json();
+      e.target.textContent = '↻';
+      if (!j.ok) alert(`refresh failed (code ${j.code})`);
+      await load();
+      if (selectedId) {
+        const r2 = await fetch(`/api/project/${selectedId}`);
+        if (r2.ok) {
+          // refresh details
+          select(selectedId);
+        }
+      }
+    });
+
+    load();
+  </script>
+</body>
+</html>
diff --git a/scripts/inventory.js b/scripts/inventory.js
new file mode 100644
index 0000000..b15fda7
--- /dev/null
+++ b/scripts/inventory.js
@@ -0,0 +1,129 @@
+#!/usr/bin/env node
+// Walk ~/Projects/ and collect metadata on every git repo.
+// Output → data/projects.json. Re-runnable; merges with existing verdicts/notes.
+
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const { execSync } = require('child_process');
+
+const HOME = os.homedir();
+const PROJECTS = path.join(HOME, 'Projects');
+const DATA = path.join(__dirname, '..', 'data');
+const OUT = path.join(DATA, 'projects.json');
+
+if (!fs.existsSync(DATA)) fs.mkdirSync(DATA, { recursive: true });
+
+function sh(cmd, cwd) {
+  try { return execSync(cmd, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim(); }
+  catch { return ''; }
+}
+
+function dirSizeMB(p) {
+  const o = sh(`du -sxm "${p}" 2>/dev/null | awk '{print $1}'`);
+  return parseInt(o, 10) || 0;
+}
+
+function readReadmeSnippet(p) {
+  for (const name of ['README.md', 'readme.md', 'Readme.md', 'README']) {
+    const f = path.join(p, name);
+    if (fs.existsSync(f)) {
+      const txt = fs.readFileSync(f, 'utf8').replace(/\r/g, '');
+      const firstPara = txt.split(/\n\s*\n/).find(p => p.trim().length > 30);
+      if (firstPara) return firstPara.trim().slice(0, 600);
+    }
+  }
+  return '';
+}
+
+function pkgJsonInfo(p) {
+  try {
+    const pj = JSON.parse(fs.readFileSync(path.join(p, 'package.json'), 'utf8'));
+    return { name: pj.name, description: pj.description, version: pj.version };
+  } catch { return null; }
+}
+
+const existing = (() => {
+  try { return JSON.parse(fs.readFileSync(OUT, 'utf8')); } catch { return { projects: [] }; }
+})();
+const existingByPath = new Map((existing.projects || []).map(p => [p.path, p]));
+
+const dirs = fs.readdirSync(PROJECTS)
+  .filter(d => !d.startsWith('.') && !d.startsWith('_'))
+  .map(d => path.join(PROJECTS, d))
+  .filter(d => { try { return fs.statSync(d).isDirectory(); } catch { return false; } });
+
+const out = [];
+let i = 0;
+for (const d of dirs) {
+  i++;
+  if (i % 25 === 0) process.stderr.write(`  ${i}/${dirs.length}…\n`);
+  const name = path.basename(d);
+  const hasGit = fs.existsSync(path.join(d, '.git'));
+  const firstCommit = hasGit
+    ? sh(`git log --reverse --format=%aI 2>/dev/null | head -1`, d)
+    : '';
+  const lastCommit = hasGit
+    ? sh(`git log -1 --format=%aI 2>/dev/null`, d)
+    : '';
+  const lastSubject = hasGit
+    ? sh(`git log -1 --format=%s 2>/dev/null`, d)
+    : '';
+  const commitCount = hasGit
+    ? parseInt(sh(`git rev-list --count HEAD 2>/dev/null`, d), 10) || 0
+    : 0;
+  const fileMtime = sh(`stat -f "%Sm" -t %FT%T "${d}"`);
+  const sizeMB = dirSizeMB(d);
+  const pkg = pkgJsonInfo(d);
+  const readme = readReadmeSnippet(d);
+
+  // Best-effort first/last date — fall back to fs mtime if no git.
+  const first = firstCommit || (fileMtime ? fileMtime + 'Z' : '');
+  const last = lastCommit || (fileMtime ? fileMtime + 'Z' : '');
+
+  // Activity heuristic: days since last commit
+  const lastDate = last ? new Date(last) : null;
+  const daysSince = lastDate ? Math.floor((Date.now() - lastDate.getTime()) / 86400000) : 999;
+  let health = 'cold';
+  if (daysSince <= 3) health = 'hot';
+  else if (daysSince <= 14) health = 'warm';
+  else if (daysSince <= 60) health = 'cool';
+
+  const prev = existingByPath.get(d) || {};
+  out.push({
+    path: d,
+    name,
+    has_git: hasGit,
+    first_at: first,
+    last_at: last,
+    last_subject: lastSubject.slice(0, 200),
+    commit_count: commitCount,
+    size_mb: sizeMB,
+    days_since: daysSince,
+    health,
+    pkg_name: pkg?.name || null,
+    pkg_description: pkg?.description || null,
+    pkg_version: pkg?.version || null,
+    readme_snippet: readme,
+    // user-editable / persisted between runs
+    pros: prev.pros || '',
+    cons: prev.cons || '',
+    verdict: prev.verdict || null,        // 'keep' | 'kill' | 'archive' | 'pivot' | null
+    priority: prev.priority || 0,         // user-set 0..10
+    notes: prev.notes || '',
+    chat: prev.chat || [],                // [{role, content, at}]
+  });
+}
+
+// Sort by first_at descending so newest builds bubble up.
+out.sort((a, b) => (b.first_at || '').localeCompare(a.first_at || ''));
+
+const payload = {
+  generated_at: new Date().toISOString(),
+  total: out.length,
+  projects: out,
+};
+
+fs.writeFileSync(OUT, JSON.stringify(payload, null, 2));
+console.log(`inventory: ${out.length} projects → ${OUT}`);
+console.log(`  hot=${out.filter(p => p.health === 'hot').length}  warm=${out.filter(p => p.health === 'warm').length}  cool=${out.filter(p => p.health === 'cool').length}  cold=${out.filter(p => p.health === 'cold').length}`);
diff --git a/src/server.js b/src/server.js
new file mode 100644
index 0000000..d0433a2
--- /dev/null
+++ b/src/server.js
@@ -0,0 +1,263 @@
+// build-debrief — Express server :9756
+// Serves the SPA and exposes:
+//   GET  /api/projects                     — full inventory + persisted state
+//   GET  /api/project/:id                  — single project (id = base64(path))
+//   POST /api/project/:id/notes            — save pros/cons/notes
+//   POST /api/project/:id/verdict          — set verdict (keep/kill/archive/pivot)
+//   POST /api/project/:id/priority         — set priority 0..10
+//   POST /api/project/:id/chat             — append a turn; spawns local LLM
+//   POST /api/project/:id/action           — execute action (open-iterm, abramstasks, gitify)
+//   POST /api/refresh-inventory            — re-walk ~/Projects/
+//   POST /api/auto-pros-cons/:id           — local-LLM-generate pros/cons
+
+const express = require('express');
+const compression = require('compression');
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const { spawn, exec } = require('child_process');
+
+const HOME = os.homedir();
+const PUBLIC_DIR = path.join(__dirname, '..', 'public');
+const DATA_DIR = path.join(__dirname, '..', 'data');
+const PROJECTS_JSON = path.join(DATA_DIR, 'projects.json');
+
+const PORT = parseInt(process.env.PORT || '9756', 10);
+
+const OLLAMA_URL = process.env.OLLAMA_URL || 'http://192.168.1.133:11434';
+const OLLAMA_FALLBACK = 'http://localhost:11434';
+const OLLAMA_MODEL = process.env.OLLAMA_MODEL || 'qwen3:14b';
+
+const app = express();
+app.use(compression());
+app.use(express.json({ limit: '256kb' }));
+app.use(express.static(PUBLIC_DIR, { etag: false, maxAge: 0 }));
+
+// ── persistence ─────────────────────────────────────────────────────────────
+function loadDb() {
+  try { return JSON.parse(fs.readFileSync(PROJECTS_JSON, 'utf8')); }
+  catch { return { generated_at: null, total: 0, projects: [] }; }
+}
+let db = loadDb();
+
+function saveDb() {
+  const tmp = PROJECTS_JSON + '.tmp';
+  fs.writeFileSync(tmp, JSON.stringify(db, null, 2));
+  fs.renameSync(tmp, PROJECTS_JSON);
+}
+
+function idOf(p) { return Buffer.from(p.path).toString('base64url'); }
+function findById(id) {
+  const target = Buffer.from(id, 'base64url').toString('utf8');
+  return db.projects.find(p => p.path === target);
+}
+
+// ── routes ──────────────────────────────────────────────────────────────────
+app.get('/healthz', (_req, res) => res.json({ ok: true, total: db.total, generated_at: db.generated_at }));
+
+app.get('/api/projects', (_req, res) => {
+  const list = db.projects.map(p => ({ ...p, id: idOf(p) }));
+  res.json({ generated_at: db.generated_at, total: db.total, projects: list });
+});
+
+app.get('/api/project/:id', (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  res.json({ ...p, id: idOf(p) });
+});
+
+app.post('/api/project/:id/notes', (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  if (typeof req.body.pros === 'string') p.pros = req.body.pros.slice(0, 4000);
+  if (typeof req.body.cons === 'string') p.cons = req.body.cons.slice(0, 4000);
+  if (typeof req.body.notes === 'string') p.notes = req.body.notes.slice(0, 4000);
+  saveDb();
+  res.json({ ok: true });
+});
+
+app.post('/api/project/:id/verdict', (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  const v = req.body.verdict;
+  if (!['keep', 'kill', 'archive', 'pivot', null].includes(v)) {
+    return res.status(400).json({ error: 'bad verdict' });
+  }
+  p.verdict = v;
+  p.verdict_at = new Date().toISOString();
+  saveDb();
+  res.json({ ok: true, verdict: v });
+});
+
+app.post('/api/project/:id/priority', (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  const n = Math.max(0, Math.min(10, parseInt(req.body.priority, 10) || 0));
+  p.priority = n;
+  saveDb();
+  res.json({ ok: true, priority: n });
+});
+
+// ── Claude chat per project (uses local Ollama; later: claude CLI shell-out) ─
+async function ollamaChat(messages) {
+  const body = JSON.stringify({ model: OLLAMA_MODEL, messages, stream: false });
+  for (const url of [OLLAMA_URL, OLLAMA_FALLBACK]) {
+    try {
+      const r = await fetch(`${url}/api/chat`, {
+        method: 'POST',
+        headers: { 'content-type': 'application/json' },
+        body,
+        signal: AbortSignal.timeout(60000),
+      });
+      if (r.ok) {
+        const j = await r.json();
+        return { ok: true, url, content: j.message?.content || '' };
+      }
+    } catch (e) { /* fall through */ }
+  }
+  return { ok: false, content: '' };
+}
+
+function chatSystem(project) {
+  return `You are Steve's pragmatic build advisor for the project "${project.name}".
+Project facts:
+  - path: ${project.path}
+  - first commit: ${project.first_at}
+  - last commit:  ${project.last_at} (${project.days_since}d ago)
+  - commits:      ${project.commit_count}
+  - size:         ${project.size_mb} MB
+  - last subject: ${project.last_subject}
+  - pkg:          ${project.pkg_description || project.pkg_name || '—'}
+  - readme:       ${(project.readme_snippet || '—').slice(0, 300)}
+  - user pros:    ${project.pros || '—'}
+  - user cons:    ${project.cons || '—'}
+  - verdict so far: ${project.verdict || '—'}
+Write tightly. No fluff. Recommend concrete next moves.
+If Steve types /kill, /pivot, /archive, /boost, /commit, /run, /test, /split, propose the specific shell or git commands to execute.`;
+}
+
+app.post('/api/project/:id/chat', async (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  const userMsg = (req.body.message || '').slice(0, 4000);
+  if (!userMsg) return res.status(400).json({ error: 'empty message' });
+
+  p.chat = p.chat || [];
+  p.chat.push({ role: 'user', content: userMsg, at: new Date().toISOString() });
+
+  const messages = [
+    { role: 'system', content: chatSystem(p) },
+    ...p.chat.slice(-10).map(t => ({ role: t.role, content: t.content })),
+  ];
+
+  const r = await ollamaChat(messages);
+  if (!r.ok) {
+    p.chat.push({ role: 'assistant', content: '(LLM unreachable. Try again or open a Claude tab via the Open-iTerm action.)', at: new Date().toISOString(), error: true });
+    saveDb();
+    return res.status(502).json({ error: 'llm offline', chat: p.chat });
+  }
+  p.chat.push({ role: 'assistant', content: r.content, at: new Date().toISOString() });
+  saveDb();
+  res.json({ ok: true, chat: p.chat });
+});
+
+app.post('/api/project/:id/auto-pros-cons', async (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  const messages = [
+    { role: 'system', content: 'You produce two short bulleted lists. Return strict JSON only: {"pros":["..."],"cons":["..."]}. 3-5 bullets each, max 12 words per bullet.' },
+    { role: 'user', content: `Project "${p.name}" — facts:\n  size=${p.size_mb}MB, commits=${p.commit_count}, last=${p.days_since}d ago\n  desc: ${p.pkg_description || '—'}\n  readme: ${p.readme_snippet || '—'}\n\nGive me PROS (why this is a good idea) and CONS (why this is a bad idea).` },
+  ];
+  const r = await ollamaChat(messages);
+  if (!r.ok) return res.status(502).json({ error: 'llm offline' });
+  let parsed = { pros: [], cons: [] };
+  try {
+    const m = r.content.match(/\{[\s\S]*\}/);
+    if (m) parsed = JSON.parse(m[0]);
+  } catch {}
+  p.pros = (parsed.pros || []).map(s => `• ${s}`).join('\n');
+  p.cons = (parsed.cons || []).map(s => `• ${s}`).join('\n');
+  saveDb();
+  res.json({ ok: true, pros: p.pros, cons: p.cons });
+});
+
+// ── actions: open in iTerm, abramstasks fan-out, gitify ─────────────────────
+function openInIterm(projectPath, opts = {}) {
+  // Open a new iTerm tab cd'd into project; optionally run a command.
+  const cmd = opts.cmd ? ` && ${opts.cmd}` : '';
+  const cdShell = `cd ${JSON.stringify(projectPath)}${cmd}; exec $SHELL`;
+  // Use the same `task` zsh fn Steve already has.
+  const escaped = cdShell.replace(/'/g, `'\\''`);
+  const zshCmd = `task ${JSON.stringify(opts.title || path.basename(projectPath))} '${escaped}'`;
+  return new Promise((resolve, reject) => {
+    exec(`/bin/zsh -ic ${JSON.stringify(zshCmd)}`, { timeout: 15000 }, (err, stdout, stderr) => {
+      if (err) return reject(stderr || err.message);
+      resolve({ ok: true, stderr });
+    });
+  });
+}
+
+app.post('/api/project/:id/action', async (req, res) => {
+  const p = findById(req.params.id);
+  if (!p) return res.status(404).json({ error: 'not found' });
+  const action = req.body.action;
+  const args = req.body.args || {};
+
+  try {
+    if (action === 'open-iterm') {
+      await openInIterm(p.path, { title: p.name });
+      return res.json({ ok: true });
+    }
+    if (action === 'open-claude') {
+      const prompt = (args.prompt || `Resume work on ${p.name}. Project at ${p.path}.`).replace(/"/g, '\\"');
+      await openInIterm(p.path, { title: p.name, cmd: `claude "${prompt}"` });
+      return res.json({ ok: true });
+    }
+    if (action === 'gitify') {
+      if (fs.existsSync(path.join(p.path, '.git'))) {
+        return res.json({ ok: false, reason: 'already a git repo' });
+      }
+      await new Promise((resolve, reject) => {
+        exec(`cd ${JSON.stringify(p.path)} && git init -q && git add -A && git -c user.email='steve@designerwallcoverings.com' -c user.name='Steve' commit -m 'initial scaffold' -q`,
+          { timeout: 30000 }, (err) => err ? reject(err) : resolve());
+      });
+      return res.json({ ok: true });
+    }
+    if (action === 'reveal') {
+      exec(`open ${JSON.stringify(p.path)}`);
+      return res.json({ ok: true });
+    }
+    if (action === 'abramstasks') {
+      const tasks = (args.tasks || []).filter(s => s && s.trim()).slice(0, 10);
+      if (tasks.length === 0) return res.status(400).json({ error: 'no tasks' });
+      const heredoc = tasks.join('\n');
+      const cmd = `/bin/zsh -ic 'abramstasks ${JSON.stringify(p.name)} -' <<'EOF'\n${heredoc}\nEOF`;
+      await new Promise((resolve, reject) => {
+        exec(cmd, { timeout: 60000 }, (err, stdout, stderr) => err ? reject(stderr || err.message) : resolve());
+      });
+      return res.json({ ok: true, spawned: tasks.length });
+    }
+    return res.status(400).json({ error: 'unknown action' });
+  } catch (e) {
+    return res.status(500).json({ error: String(e) });
+  }
+});
+
+app.post('/api/refresh-inventory', (_req, res) => {
+  const child = spawn('node', [path.join(__dirname, '..', 'scripts', 'inventory.js')], {
+    cwd: path.join(__dirname, '..'),
+  });
+  let out = '';
+  child.stdout.on('data', d => out += d.toString());
+  child.stderr.on('data', d => out += d.toString());
+  child.on('close', code => {
+    db = loadDb();
+    res.json({ ok: code === 0, code, log: out });
+  });
+});
+
+// ── boot ────────────────────────────────────────────────────────────────────
+app.listen(PORT, '0.0.0.0', () => {
+  console.log(`[build-debrief] http://0.0.0.0:${PORT}`);
+  console.log(`  inventory: ${db.total} projects (generated ${db.generated_at})`);
+});

(oldest)  ·  back to Build Debrief  ·  snapshot: 2 file(s) changed, ~2 modified 064cea2 →