Pro fits · same backbone as V1 V2 · filter-first Wave 1 · cluster 5 PRD v2.0 · May 2026

ADU Directory V2
— filter-first comparison engine

A real-time filter configurator. Three selections — scope, destination state, home type — return a ranked builder list in under 300ms. Same Mac mini as V1. Same agent fleet. Same builder catalog. Same Stripe Connect account. Only the frontend product experience differs. Targets decision-mode homeowners that bounce from V1's content-heavy pages.

Filter re-render target
<300ms
Critical · Meilisearch from day 1
Auto-generated landing pages
300
50 states × 6 home types
Multi-builder compare
5 max
Single inquiry form, fan-out
Combined V1+V2 MRR · M12
$50k+
Shared backend = shared revenue
The hero experience · three filters · instant results
Scope Nationwide ▾
Destination Colorado ▾
Home type
Kit Homes Prefab Manufactured Mobile Tiny Homes All Home Types
23 of 47 builders deliver kit homes to Colorado · ranked by paid tier × verification × relevance
/builders/kit-homes/colorado
02V1 vs V2 — sibling versionsSame backend · two frontends

The single most important diagram for V2. Build Leads consistently assume V2 is a separate product on its own infrastructure. It isn't. V2 is an additional frontend on top of the same Mac mini, the same agent fleet, the same builder catalog, the same Stripe Connect account.

V1 · CATALOG-FIRST

Discovery through content

"Homeowners discover ADUs through SEO content. They're in research mode for 6–12 months. The catalog is where they end up after consuming guides."
Hero
SEO content → builder profile → unified inquiryState guides anchor the funnel
Buyer mindset
Research modeMulti-week consideration
Primary discovery
State guides · buying guides · comparisons
URL pattern
/builders/[name]/guides/[state]
Search tech
Postgres + WordPress + FacetWP
SEO pages
~50 state guides + ~150 articles
Builder data needs
Standard catalogbasic profile is enough
V2 · FILTER-FIRST · THIS DASHBOARD

Discovery through configuration

"Decision-mode homeowners already know what they want — e.g. 'kit home delivered to Colorado.' They bounce from content-heavy sites. Time-to-shortlist is the conversion driver."
Hero
Three filters → ranked results → multi-builder compareSingle inquiry to up to 5 builders
Buyer mindset
Decision modeDays-to-weeks, not months
Primary discovery
Three-filter configurator
URL pattern
/builders/[home-type]/[state]Deep-linkable filter state
Search tech
Meilisearch on the Mac mini<300ms re-render
SEO pages
Up to 300 (50 states × 6 home types)
Builder data needs
V2 schema extensionsstates_delivered · home_types_offered · exclusivity_zones
Shared, unambiguously. Mac mini · OpenClaw + Paperclip · 5-agent fleet · WordPress (CMS for content) · Stripe Connect · GoHighLevel · CSLB · Lasso · YouTube · Beehiiv · Builder records · Inquiry data model · 4-channel contact model · Tailnet · FileVault. V2 adds Meilisearch + new builder fields + new SEO pages, but doesn't replace anything.
03The three-filter engine

Three primary filters drive all V2 traffic. Each is geographic-aware, real-time, and deep-linkable. "All Home Types" is mutually exclusive with the others — selecting it clears the rest.

FILTER 1

Geographic scope

Which states does the builder ship from? Defaults to "Nationwide." User can multi-select.

Used to: narrow to regional makers (e.g. "show me West Coast builders only").
FILTER 2

Delivery destination

Which state will the ADU be installed in? Single state. Defaults to IP-geolocated state.

Used to: filter out builders who can't deliver to the buyer's location — the highest-friction filter to get wrong.
FILTER 3

Home type · chip selector

Multi-select. Six options: Manufactured · Prefab · Kit · Mobile · Tiny · All Home Types.

ManufacturedPrefabKit HomesMobileTinyAll
Used to: narrow the matching algorithm. "All" overrides individual selections.
Secondary filters live in a collapsible "More Filters" panel: price range slider, sq ft slider, bedrooms chip, financing toggle, BBB-verified toggle, in-stock toggle, eco-certified toggle. The chip-row pattern is consistent across all secondary filters.
04Filter engine flow

Every filter change triggers this pipeline. Meilisearch is the index; Postgres is the source of truth. Never query Postgres directly for filter results — too slow at scale.

USER INPUT scope · destination · home_type ENGINEER · DEBOUNCE URL state update localStorage persist MEILISEARCH QUERY Faceted · indexed <300ms p95 target RANKING 1. Paid tier (Excl > Feat > PPL > Free) 2. Verification status 3. Relevance (state × home_type match) 4. Quality signals RENDERED LIST 20 results · paginate "Add to Compare" checkboxes EMPTY STATE · ZERO RESULTS "No builders match those exact filters. Try expanding home type to All Home Types, or removing the destination filter to see all nationwide builders." → logged to FilterAnalyticsEvent as builder acquisition opportunity MARKETER AGENT · FEEDBACK LOOP Weekly zero-result analytics → builder outreach. "5 buyers searched 'manufactured homes Wyoming' last month, no matches. Recruit a Wyoming manufactured-home builder."
05300 auto-generated landing pages50 states × 6 home types

Every cell below becomes a unique SEO landing page at /builders/[home-type]/[state]. Each page is auto-generated by the Marketer Agent — pre-loaded filter set, ranked builders, state-specific regulations (e.g. SB 543 for the California column), permit timelines, financing notes. Page regenerates whenever new builders are added.

Manufactured
Prefab
Kit
Mobile
Tiny
All Types
California
CA · M
CA · P ★
CA · K
CA · Mo
CA · T
CA · All
Texas
TX · M
TX · P
TX · K
TX · Mo
TX · T
TX · All
Colorado
CO · M
CO · P
CO · K ★
CO · Mo
CO · T
CO · All
Washington
WA · M
WA · P
WA · K
WA · Mo
WA · T
WA · All
Oregon
OR · M
OR · P
OR · K
OR · Mo
OR · T
OR · All
Arizona
AZ · M
AZ · P
AZ · K
AZ · Mo
AZ · T
AZ · All
Nevada
NV · M
NV · P
NV · K
NV · Mo
NV · T
NV · All
Florida
FL · M
FL · P
FL · K
FL · Mo
FL · T
FL · All
New York
NY · M
NY · P
NY · K
NY · Mo
NY · T
NY · All
Wyoming
WY · M
WY · P
WY · K
WY · Mo
WY · T
WY · All
… 40 more
All 50 states represented in the matrix. 300 total cells. Each cell = one auto-generated SEO landing page.
Highlighted in light orange = pages targeted in Phase 1 (25 priority cells based on state population × ADU demand signals). Solid orange = top priority (California Prefab is the most-searched combination; Colorado Kit Homes is a high-LTV niche).
Duplicate-content risk (R5). 300 pages with similar templates is a SEO landmine. Each page must include unique generated content (state-specific regulations, permit timelines, financing notes, top markets within state). Canonical tags must be set carefully relative to V1 state guides.
06Builder schema extensionsV1 schema + V2 fields

V2 adds five fields to the existing Builder + Model records. Builders with incomplete V2 data show in V1 catalog browsing only — they're invisible to the filter engine until they complete states_delivered and home_types_offered.

Builder · V2 additions

states_delivered: text[]V2
Explicit list of state codes this builder ships to (e.g. ["CA","OR","WA","NV","AZ"]). The primary filter input. Mandatory for V2 visibility.
states_operating_from: text[]V2
Where the builder is physically located / manufactures from. Used by the "Geographic scope" filter (Filter 1).
home_types_offered: enum[]V2
Values: manufactured · prefab · kit · mobile · tiny. A single builder can offer multiple types. Mandatory for V2 visibility.
delivery_radius_miles: integer?V2
Optional. For builders that operate by radius rather than state list. Combined with states_delivered to compute coverage.
exclusivity_zones: jsonb?V2
Premium tier only. Locks specific home_type × state combinations to one builder. Example: [{home_type:"kit",state:"CO"}] → Colorado kit home buyers always see this builder at position #1.

Model · V2 additions

home_type: enumV2
Single value, indexed. The specific home type of this model. Used for fine-grained matching when a builder offers multiple types.
deliverable_states: text[]V2
Model-specific overrides. Some models may have more limited shipping than the parent builder.
Phase 1 backfill is real work. Every existing V1 builder needs states_delivered and home_types_offered filled in. Engineer Agent crawls builder websites to infer values; Build Lead reviews. Verified builders self-correct through dashboard's "Coverage & Types" section (US map UI for state selection).
07Architecture · shared with V1

Operationally identical to V1's architecture except Meilisearch is added as a search index layer on the Mac mini. WordPress remains the CMS for content (state guides, articles); Meilisearch is the index for builder filter queries. Postgres remains source of truth.

L1 · HARDWARE · SAME MAC MINI AS V1 Operator Mac minidirectory-ops.local NEW IN V2MeilisearchSelf-hosted on mini POSTGRESSource of truthIndexes → Meilisearch WORDPRESSCMS for contentV1 pages + state guides TAILSCALEBuild Lead · OperatorNo public admin L2 · RUNTIME & SUPERVISOR · SHARED OpenClaw runtime + audit log Paperclip supervisor + risk policy L3 · SAME 5 AGENTS · SAME SKILLS, EXTENDED FOR V2 C T E Q M CEO / CTO / Engineer / QA / Marketer · same canonical pattern V2 specifics: Engineer owns filter logic + landing page gen; Marketer drives zero-result-driven builder outreach L4 · DUAL FRONTEND V1 · /builders/[name] · /guides/[state] V2 · /builders/[home-type]/[state] · /v2 A/B routing infrastructure
Meilisearch over Algolia. Meilisearch self-hosts on the Mac mini (consistent with Hatchstacks pattern); Algolia is managed but adds per-search cost. Default is Meilisearch; switch to Algolia only if scale demands.
08The 5-agent fleet · V2 skills

Same 5 agents as V1. New skills called out below in monospace. Engineer Agent does the heaviest V2 lift (filter logic + landing page generation); Marketer Agent benefits from zero-result analytics as a builder-acquisition signal.

C
CEOIndigo · Builder ops
Same as V1. Exclusivity-tier deals get more interesting in V2 — builders pay for specific home_type × state combos rather than just regions.
verify_csl_licensepropose_tier_upgradeconfigure_exclusivity_zone
T
CTOCyan · Infra
Adds Meilisearch index health monitoring, indexing pipeline reliability, query latency tracking (<300ms p95 alert).
monitor_meilisearch_indexaudit_site_health
E
EngineerGreen · V2 build
Three-filter frontend · ranked results UI · multi-builder compare · auto-generated landing page templates · Meilisearch indexing pipeline · A/B routing.
scaffold_filter_frontendgenerate_landing_pageroute_inbound_lead
Q
QAAmber · Data + filter
Adds verification of states_delivered + home_types_offered before listing goes live. Empty-state UX testing. Filter accuracy spot checks.
verify_coverage_claimsscore_lead_quality
M
MarketerPink · Content + acquisition
Auto-generates the 300 state × home_type landing pages. Uses zero-result analytics to identify and outreach builders in unfilled cells.
generate_seo_contentgenerate_landing_page_contentrecruit_builders_from_gaps
09The 4-channel contact model

Same as V1. V2-specific change: Saved Searches use a magic-link account-lite pattern (email-only, no password) — leverages the existing Email channel for the magic links and digest cadence.

Telegram

Ops · Exclusivity builders

Build Lead alerts (filter latency, indexing errors). Concierge channel for Exclusivity builders renewing zones.

Dashboard

Builders · Operator

Builder "Coverage & Types" panel (US map UI). Operator filter analytics dashboard (popular combos, zero-result combos, per-builder click-throughs).

Website Chat

Multi-builder inquiry capture

Single inquiry form sends to up to 5 builders simultaneously from the Compare view. Same inquiry data model as V1.

10Phase timelineBuilt alongside V1 · same backbone

V2 is built in parallel with V1. Phase 1 prioritizes schema migration + Meilisearch + the filter MVP. Phase 4 is the decision point: retire V1, retire V2, or run both for different segments.

D1D60D120D180D240D300D365 PHASE 1Schema · Meilisearch · MVP PHASE 2Filter maturity + 100 landing pages PHASE 3300 landing pages · analytics-driven acquisition PHASE 4 — market leadership · A/B decision10+ exclusivity deals · $50k+ combined MRR · keep both or retire one SCHEMA V2 fields migration V1 builders backfilled SEARCH Meilisearch indexed Live indexing pipeline · <300ms re-render FRONTEND V2 MVP Mobile bottom-sheet polish · compare Iteration based on filter analytics SEO PAGES 25 priority pages 100 pages indexed 300 pages live A/B ROUTE A/B routing infrastructure · paid traffic split V1 vs V2 by segment MVP live on /v2/builders First A/B data · 1st Exclusivity zone 300 pages indexed Keep both or retire — decision made ($V1 only) $2–5k $15–30k $50k+ combined MRR MRR
11Risk heatmap

Eight V2-specific risks. R7 (mobile filter UX) and R4 (zero-result frustration) are the highest-likelihood — both UX failure modes that erode trust fast. R1 (filter latency) and R5 (duplicate-content SEO penalty) are the existential ones. All V1 risks still apply on top.

Low
Medium
High
Critical
High
R1
R5
R8
R4
R7
Medium
R3
R6
R2
Low
— Likelihood →
Risk register
R1Filter latency >500msMeilisearch from day 1 · never query Postgres directly
R2Builders provide inaccurate state/type dataVerification workflow · QA spot checks · builder analytics surface what's matching
R3V2 cannibalizes V1 without improving conversionRigorous A/B testing · preserve V1 for SEO-discovery traffic
R4Zero-result filter combos frustrate buyersEmpty state UX with fallback suggestions · gaps drive builder acquisition
R5Duplicate-content penalty on 300 landing pagesUnique generated content per page · careful canonical tags
R6Exclusivity-tier conflicts (two builders want same zone)First-come-first-served contracts · transparent on marketplace
R7Mobile filter UX awkwardBottom-sheet pattern from day 1 · iPad + iPhone test every release
R8Builder surfaced for a combo they can't fulfillMandatory verification of states_delivered + home_types_offered before live
12Data model · V2 extensions

V1 schema extended with new fields on Builder + Model (see §06) and three brand-new entities: SavedSearch, FilterAnalyticsEvent, and LandingPage.

erDiagram
    BUILDER ||--o{ MODEL : "lists"
    BUILDER ||--o{ LEAD_ROUTING : "receives"
    INQUIRY ||--o{ LEAD_ROUTING : "fans out to"
    SAVED_SEARCH }o..o| BUILDER : "matches"
    FILTER_ANALYTICS_EVENT }o..o{ BUILDER : "surfaced"
    LANDING_PAGE }o..o{ BUILDER : "showcases"

    BUILDER {
        uuid id PK
        string business_name
        text_array states_delivered
        text_array states_operating_from
        enum_array home_types_offered
        int delivery_radius_miles
        jsonb exclusivity_zones
        enum payment_tier
        bool verified
    }
    MODEL {
        uuid id PK
        uuid builder_id FK
        enum home_type
        text_array deliverable_states
        int sqft
        int price_starting
        int lead_time_weeks
    }
    INQUIRY {
        uuid id PK
        jsonb homeowner_contact
        string state
        enum_array selected_home_types
        int quality_score
        enum status
    }
    LEAD_ROUTING {
        uuid id PK
        uuid inquiry_id FK
        uuid builder_id FK
        int charged_amount_cents
        enum outcome
    }
    SAVED_SEARCH {
        uuid id PK
        string user_email
        jsonb filter_state
        enum notification_cadence "weekly|monthly|off"
        timestamp last_notified_at
    }
    FILTER_ANALYTICS_EVENT {
        uuid id PK
        uuid session_id
        jsonb filter_state
        int result_count
        int inquiries_sent
        text user_agent
        text utm_source
    }
    LANDING_PAGE {
        uuid id PK
        string url_slug
        enum home_type
        string state
        text generated_content
        timestamp last_regenerated_at
        int serp_rank_current
        int traffic_30d
        int inquiries_30d
    }
13Build Lead · V2 weeks 1–6V1 onboarding still applies

The V1 Build Lead onboarding (7-day) applies fully — V2 layers on top. These six weeks describe the V2-specific build sequence Engineer Agent runs after the standard Hatchstacks Pro stack is up.

W1Schema
  • Migrate Builder + Model schema with V2 fields
  • states_delivered · home_types_offered · exclusivity_zones
  • Update WordPress custom post type
  • Engineer Agent crawler infers V2 values for V1 builders
  • Build Lead reviews + approves backfill
V1 builders backfilled
W2Meilisearch
  • Self-host Meilisearch on Mac mini
  • Indexing pipeline from Postgres
  • Real-time updates on builder writes
  • Test query: 47 CO + kit + verified in <100ms
Index live
W3Filter UI
  • Three-filter component
  • Ranked results list (20 paginated)
  • Result card with inline expansion
  • URL state encoding
  • localStorage persistence
MVP runnable
W4Compare
  • Multi-builder compare (up to 5)
  • Sticky compare bar
  • Compare table view
  • Single inquiry → fan-out routing
  • Mobile bottom-sheet polish
Hero flow complete
W5Launch
  • Deploy on /v2/builders
  • A/B routing infra (Cloudflare or PostHog feature flag)
  • Saved searches + magic-link auth
  • First 25 priority landing pages
  • QA: filter accuracy spot checks
V2 live
W6+Iterate
  • Auto-generate remaining landing pages
  • Filter analytics dashboard
  • Marketer Agent uses zero-result combos
  • Sort + secondary filters polish
  • First Exclusivity-zone sales conversations
Ongoing iteration
14Pro tier conformance

Fits Pro perfectly

  • Same operator-side Mac mini as V1
  • Same 5 agents with extended skill bindings
  • Same 4 channels + saved-search digests
  • Meilisearch self-hosted on the mini — consistent with Hatchstacks pattern

Shared with V1

  • Mac mini · OpenClaw · Paperclip · Tailnet · FileVault
  • WordPress (content) · Postgres (source of truth)
  • Stripe Connect · GoHighLevel · CSLB · YouTube · Beehiiv
  • Builder records · Inquiry data model
  • One Stripe Connect account serves both versions

Exclusivity = partial per-client

  • Exclusivity-tier builders pay for home_type × state zones
  • Optional dedicated GHL sub-account (partial Pro tier ownership pattern)
  • Sub-account transfers to builder at off-boarding
  • Mac mini stays Dawson's
15Cross-project map

V2 inherits V1's relationships (same builders, same SEO content engine). Adds one notable share: Meilisearch infrastructure is reusable for Vacation Rental host search and Network for Creators creator search.

THIS PROJECTADU Directory V2 SIBLING · SHARED BACKENDADU Directory V1Catalog-first · content-driven SAME BACKENDMac mini · agents · catalog 🟢 PRO · WAVE 1Cold Outbound VenturaBuilders = paying customers there CUSTOMER POOLBuilders ↔ 🟡 HYBRID · WAVE 2Vacation Rental TurnoverReuses Meilisearch infra SHARED TECHMeilisearch pattern 🟡 HYBRID · WAVE 2Network for CreatorsReuses faceted search pattern SHARED TECHFaceted filter UX Black bold = same backend as V1. Solid = direct shared data. Dashed = transferable tech patterns.
16Glossary

V2-specific terms. All V1 terms (Builder, Model, Inquiry, LeadRouting, Verified badge, PPL, Featured, Exclusivity, FacetWP) still apply.

V1 catalog-first
The original version. SEO content drives discovery; the catalog is the destination. Built on Postgres + FacetWP.
V2 filter-first
This version. Three-filter configurator drives instant shortlisting. Built on Meilisearch.
Filter combo
A specific selection of scope × destination × home type. Drives a unique URL pattern and a unique ranked result list.
Zero-result combo
A filter combo returning no builders. = builder acquisition opportunity. Marketer Agent uses these as outbound targets.
Exclusivity zone
A premium-tier home_type × state combo exclusively assigned to one builder. Highest-margin tier.
Faceted search
Multi-dimensional real-time filtering. Powered by Meilisearch in V2.
Meilisearch
Open-source search index, self-hosted on the Mac mini. Real-time, faceted, geo-aware. The performance layer that makes V2 viable.
Account-lite
Magic-link email-only account for saved searches. No password. Sent via Resend.
Saved search
A user-bookmarked filter combo. Triggers digest emails when new matching builders are added.
300 landing pages
50 states × 6 home types matrix. Auto-generated by Marketer Agent. Each has unique content (state regulations, permit timelines, financing notes).
A/B routing
Infrastructure (PostHog feature flag or Cloudflare worker) that splits paid traffic between V1 and V2 by buyer segment.
Builder dashboard "Coverage & Types"
Builder self-service panel where they update states_delivered + home_types_offered via a US map UI.
← Portfolio