Electrum Home — Product & Engineering Overview
Last updated: April 6, 2026 URL: https://electrumhome.com
What It Is
AI-powered home services platform — transactional SaaS, not lead gen. Customer describes their project → AI scopes it → generates a detailed quote with good/better/best options → customer books and pays → we match them with a licensed installer → contract generated and signed → work completed → installer paid.
Solar vertical is a flagship product: customer enters their address → we analyze their roof using Google Solar API + LIDAR data → show solar panels on their actual satellite imagery → calculate savings based on their electric bill → full configurator with panel type, inverter, battery, and add-on options → account creation → Stripe payment → into the fulfillment pipeline.
By The Numbers
| Metric | Count |
|---|---|
| Pages | 55+ |
| API Routes | 55+ |
| React Components | 50+ |
| Service Verticals (quote flows) | 50 |
| Solar Flow (standalone) | 1 flagship vertical |
| SEO Articles | 20 |
| Service Landing Pages | 50 |
| AI-Generated Images | 68+ |
| TypeScript/TSX Files | 290+ |
| Lines of Code | ~80,000+ |
| Supabase Tables | 17 |
| DB Migrations | 14 |
| Commits (Apr 4-6 alone) | 92 |
All Platform Links
Customer-Facing
| Page | URL |
|---|---|
| Homepage | https://electrumhome.com |
| Solar Flow (Flagship) | https://electrumhome.com/solar |
| Browse All Services | https://electrumhome.com/flow |
| Example Flow (HVAC) | https://electrumhome.com/flow/hvac-replacement |
| Example Flow (EV Charger) | https://electrumhome.com/flow/ev-charger |
| Learn / Articles | https://electrumhome.com/learn |
| Tools Index | https://electrumhome.com/tools |
| EV Load Calculator | https://electrumhome.com/tools/ev-load-calculator |
| Energy Audit | https://electrumhome.com/tools/energy-audit |
| Maintenance Planner | https://electrumhome.com/tools/maintenance-planner |
| About | https://electrumhome.com/about |
| Dashboard (auth required) | https://electrumhome.com/dashboard |
| Smart Alerts (auth required) | https://electrumhome.com/alerts |
| Settings (auth required) | https://electrumhome.com/settings |
| Expense Command Center (auth required) | https://electrumhome.com/command-center |
| Dream Board (auth required) | https://electrumhome.com/dream-board |
Installer-Facing
| Page | URL |
|---|---|
| Installer Auth (magic link) | https://electrumhome.com/installer/auth?token={token} |
| Installer Portal (after auth) | https://electrumhome.com/installer/portal |
| Installer Onboarding | https://electrumhome.com/installer/portal/onboarding |
| Project Review | https://electrumhome.com/installer/portal/project/{id} |
| Active Project View | https://electrumhome.com/installer/portal/project/{id}/active |
| Contract Signing | https://electrumhome.com/sign/{token} |
| GM Energy Installer Tool | https://electrumhome.com/installing/gm |
Admin (whitelisted emails only)
| Page | URL |
|---|---|
| Fulfillment Command Center | https://electrumhome.com/admin/fulfillment |
| Project Detail | https://electrumhome.com/admin/fulfillment/projects/{id} |
| Installer Database | https://electrumhome.com/admin/fulfillment/installers |
| Customer Preview (Dashboard) | https://electrumhome.com/admin/preview/dashboard/{userId} |
| Customer Preview (Project) | https://electrumhome.com/admin/preview/project/{id} |
Tech Stack
| Layer | Technology |
|---|---|
| Framework | Next.js 16.2 (App Router, React 19) |
| Database | Supabase (PostgreSQL + Auth + Storage + RLS) |
| Payments | Stripe (PaymentIntents, Webhooks, Promotion Codes) |
| Hosting | Vercel (auto-deploy) |
| Styling | Tailwind CSS 4 |
| Animation | Framer Motion (solar flow) |
| Icons | Lucide React |
| AI — Development | Anthropic Claude Opus 4.6 (via OpenClaw) |
| AI — Subagents | Anthropic Claude Sonnet 4.6 |
| AI — GM Chatbot | Anthropic Claude Sonnet |
| AI — Images | Google Imagen 4.0 |
| Solar Analysis | Google Solar API (buildingInsights) |
| Maps | Google Maps JavaScript API + Places + Static + Geocoding |
| Property Data | ATTOM Data API |
| Photo Storage | Supabase Storage (project-photos bucket) |
| Analytics | Google Analytics (G-NS2XK2KCS0) |
| Language | TypeScript (strict) |
Core Features
1. Solar Flow — Flagship Product (/solar)
A standalone, conversion-optimized solar estimation flow designed for paid ad traffic.
Phase 1 — Landing Page
- Hero: "See How Much You'd Save With Solar"
- Google Places address autocomplete
- Social proof (100,000+ homeowners, 5-star rating)
- Trust badges: Licensed Installers, Price Match Guarantee, 25-Year Warranty
- How it Works: 3-step visual explainer
- AI-generated imagery (Imagen 4.0)
Phase 2 — Discovery Questionnaire
- 5 animated questions with Framer Motion transitions
- Monthly electric bill (drives system sizing), roof age, electrical panel, battery interest, shading
- Background API calls fire on address entry (latency masking)
- Rotating homeowner testimonials
- "AI is analyzing your roof design..." indicator
Phase 3 — Analysis Loader
- Safety net if API hasn't returned
- Animated progress ring with cycling status messages
- Skips automatically if results are ready
Phase 4 — Interactive Configurator
- Before/After bill comparison: "Current Bill: $400/mo → With Solar: $0/mo — You save $699/mo ($8,388/year)"
- Satellite roof map: Google Maps satellite view at zoom 20 with solar panels overlaid using Google Solar API LIDAR positions, rotated to match roof segment azimuth
- Consumption-based sizing: Recommends panel count based on customer's electric bill, not max roof capacity
- Panel count slider: From minimum to max roof capacity with "Recommended" badge
- Fill best segments first: Panels fill the most productive roof faces completely before moving to the next (no orphan panels)
- Rich configuration cards: Panel type (Standard 400W vs Premium 440W with specs), Inverter (String vs Enphase IQ8+ Microinverters with use-case guidance), Battery (None vs Tesla Powerwall 3 with backup hours)
- Optional add-ons: EV Charger Bundle (+$1,200), Critter Guard (+$800), Extended Monitoring (+$500), Roof Reinforcement (+$2,500)
- Investment breakdown: System cost, $2.50/watt base, 20-year loan at 5.5%, payback period, 20-year total savings
- Desktop split layout: Sticky summary panel (map + investment + CTA) on right, scrollable configurator on left
- FAQ accordion: 6 common questions
- CTA: "Lock In Your Price — $99 Refundable Deposit"
Phase 5 — Checkout
- Account creation (Google SSO / email signup / sign-in)
- Contact form pre-filled from solar flow
- Order summary with system details
- Saves project → redirects to Stripe payment → fulfillment pipeline
Technical: Google Solar API Integration
buildingInsights:findClosestendpoint for real roof analysis- Returns: panel positions (LIDAR), roof segments (pitch, azimuth, area), panel configs at different counts, annual production, financial analysis
- Panels rendered as rotated polygons on Google Maps satellite view
- Compass-to-math angle conversion for proper roof alignment
- Fallback estimates for locations without Solar API coverage
2. Intake & Quote Flow Engine (50 Verticals)
- 50 service verticals across 12 categories
- Good / Better / Best tiering with real brand names and specs
- Dynamic pricing — regional multipliers, tonnage-based tables, conditional line items
- Per-unit pricing — multi-unit HVAC support with labor discounts
- Smart recommendations — scoring engine evaluates answers
- Permit waiver system — end-to-end: removes permits from line items, totals, detailed quote, scope of work, installer view, and payment page. Checks
answers.permit_handling === "customer_pulls"as ground truth across all pages - Photo upload — drag-and-drop to Supabase Storage, per-vertical prompts, thumbnails on dashboard with prompt labels
- Signed-in users skip re-authentication on new projects
- Date/time picker always shown (including for already-authenticated users)
3. Contract System
- Contract generation — HTML contracts with state compliance (California §7159), equipment specifications from scope data
- Dual signing flow — installer signs first, then customer. Sign tokens in
sign_tokenstable - Contract signing page (
/sign/{token}) — contract rendered in isolated iframe, sticky sign footer with draw/type signature options, collapsible UI - Mobile-optimized — single column, responsive padding, centered on desktop (700px max-width)
- Status tracking —
contract_pending→ individualcustomer_signed/installer_signedflags →contract_signedwhen both complete - Customer sees positive feedback immediately after signing (even before installer signs)
- Opens in new tab from customer/installer dashboard
- Contract deduplication — re-clicking "Send Contract" returns existing contract instead of creating duplicates
- Admin contract view — admin auth added to contract API for command center viewing
4. Customer Dashboard
- Project status synced with fulfillment — reads
project_fulfillment.status, not staleprojects.status - Customer-facing status labels: Finding Your Pro, Matching in Progress, Installer Matched, Contract Pending, Contract Signed, Work in Progress, Work Complete, Completed
- Installer card — shows when matched: business name, contact name, phone (tel: link), email (mailto: link), license number + state, rating, years in business
- Contact Your Pro quick actions — Call, Text, Email buttons with native device links
- Real-time messaging — ProjectChat component with 10-second polling, optimistic updates, read receipts. Installer auth checked before customer auth to prevent sender misidentification
- Photo thumbnails — handles both URL strings and metadata objects, lightbox with prev/next, photo prompt labels as captions
- Contract section — View & Sign button (opens in new tab), status indicator
- Timeline — 8-step visual timeline, "Photos Uploaded" auto-marks when photos exist
- Price display — respects permit waiver, deducts from totals and line items
- Title/subtitle deduplication — suppresses redundant category when it matches title
- Nav reordered — My Projects + New Project adjacent
5. Admin Command Center
- Brand purple (#8857D8) throughout — replaced all generic Tailwind purple
- Photo thumbnails with lightbox in project detail
- Outreach accordion — collapsible, auto-collapse when contractor assigned, summary line with count
- Selected contractor highlight — green border + "✓ Selected" badge
- Full email preview toggle in outreach messages
- Editable outreach messages — Edit → textarea → Save/Cancel with PATCH endpoint
- Contract view — parses
contract:UUID, fetches JSON withhtmlfield, opens in new window - Raw JSON collapsed —
<details>/<summary>"View details" click instead of code dump - Customer preview — "View as Customer" opens full dashboard preview at
/admin/preview/dashboard/{userId} - Admin preview project —
/admin/preview/project/{id}with amber banner
6. Installer Portal
- Dashboard — Available / Active / Completed project tabs with
cache: "no-store"to prevent stale data - Project acceptance — bid API with proper
fulfillment_id, updates fulfillment status - Contract send — generates contract, creates signing tokens, shows installer signing URL
- Auto-load signing URLs — when returning to a project with existing contract, signing links load automatically
- Post-signature navigation — customers route to
/dashboard, installers to/installer/portal - Messaging — two-way chat, installer auth resolved via JWT (checked before Supabase auth), fallback access checks via bids and outreach records
- Deep-link highlight — installer database link from outreach scrolls to and highlights the installer
7. Smart Alerts
- Dedicated
/alertspage (was previously broken — linked to expenses) AlertsPanelcomponent fully rendered (existed but was never imported)- "View all alerts" links corrected
8. Free Homeowner Tools
- EV Load Calculator — panel capacity analysis with photo upload
- Energy Audit Tool — ATTOM property lookup → payback calculations
- Home Maintenance Planner — 40+ tasks, month-by-month, property-aware
9. SEO & Content
- 20 articles across 3 pillars
- 50 service landing pages with pricing breakdowns
- Google Analytics (G-NS2XK2KCS0) integrated
Fulfillment System
Pipeline
- Customer completes flow → pays booking fee via Stripe
- Stripe webhook fires → fulfillment trigger creates
project_fulfillmentrecord - Admin starts sourcing (or auto-trigger)
- AI agents source installers via Google Places
- Outreach via SMS/email with magic link
- Installer reviews → accepts/counters/declines
- Contract generated → installer signs → customer signs
- Work performed → job complete → installer paid
Fulfillment Statuses
deposit_paid → sourcing → outreach_in_progress → installer_reviewing → installer_accepted → compliance_pending → contract_pending → contract_signed → in_progress → job_complete → completed
Key Architecture Decisions
projects.statusstays "order_placed" forever — real status is inproject_fulfillment.statusinstallerstable has RLS — customer/installer pages usecreateAdminClient()for cross-table reads- Installer data fetched with
select("*")— column names vary, specific selects break - Contract URLs stored as
contract:UUID— must parse for API calls - Messages API checks installer auth (JWT) before customer auth (Supabase) to prevent misidentification
- Contract generate has no status filter — any fulfillment with an assigned installer works
- Installer resolution has 3 fallbacks:
assigned_installer_id→ contract'sinstaller_id→ accepted bid'sinstaller_id
Database Schema (17 Tables)
Customer Tables
| Table | Purpose |
|---|---|
users |
User profiles |
properties |
Multi-property support |
households |
Household grouping |
household_members |
Users ↔ households |
projects |
Saved projects with scope data, pricing, payment |
expenses |
Recurring expense tracking |
alerts |
Smart alerts / insights |
Fulfillment Tables
| Table | Purpose |
|---|---|
installers |
Installer profiles (name, business, license, rating, AI vetting) |
project_fulfillment |
Links projects to installers (status, pricing, contract, signed flags) |
outreach_log |
Outreach messages + AI sentiment analysis |
installer_bids |
Bid submissions (accept, counter, decline) |
installer_tokens |
Magic link auth tokens |
fulfillment_status_history |
Full audit trail |
Contract & Messaging Tables
| Table | Purpose |
|---|---|
contracts |
Generated contracts (HTML, status, signatures) |
contract_signatures |
Individual signature records with audit trail |
sign_tokens |
Signing link tokens (installer + customer) |
project_messages |
Two-way messaging between customer and installer |
Integrations
| Service | Purpose | Status |
|---|---|---|
| Stripe | Payments ($49/$99 booking fees, webhooks) | ✅ Live (test mode) |
| Stripe Connect | Installer payouts | 🔧 Built, pending onboarding |
| Google Solar API | Roof analysis, panel placement, production estimates | ✅ Live |
| Google Maps JS API | Satellite view + panel overlay in solar configurator | ✅ Live |
| Google Maps Places | Address autocomplete | ✅ Live |
| Google Places | Installer sourcing | ✅ Live |
| Google Imagen 4.0 | AI-generated solar imagery (7 images) | ✅ Live |
| Google Analytics | Site analytics (G-NS2XK2KCS0) | ✅ Live |
| Supabase Auth | User auth (Google SSO + email/password) | ✅ Live |
| Supabase DB | PostgreSQL with RLS, 17 tables | ✅ Live |
| Supabase Storage | Photo uploads (project-photos bucket) | ✅ Live |
| ATTOM Data | Property data lookup | ✅ Live |
| Anthropic Claude | AI chatbot, response parsing, development | ✅ Live |
| Vercel | Hosting, CI/CD | ✅ Live |
| Twilio | SMS installer outreach | 🔧 Built, account pending |
| Resend | Email installer outreach | 🔧 Built, account pending |
Design System
- Brand color: Purple (#8857D8, darker: #7B4FD3)
- Dark/light mode support via CSS variables
- No emojis in customer-facing UI
- Lucide icons throughout
- AI-generated imagery via Google Imagen 4.0
- Mobile-first with responsive desktop layouts
- Enterprise design ethos — professional, clean, premium
- Consistent styling:
bg-background,bg-surface,text-foreground,text-muted,border-border,bg-brand
Service Verticals (50)
Projects (34)
HVAC Replacement, Insulation, Attic Insulation, EV Charger, Electrical Services, Solar Installation, Generator, Smart Home, Kitchen Remodel, Bathroom Remodel, Bathroom Vanity, Flooring, Plumbing Repair, Water Heater, Water Softener, Septic System, Roof Replacement, Window Replacement, Siding, Fencing, Garage Door, Chimney Repair, Gutter Services, Deck Building, Pool Installation, Concrete Driveway, Tree Removal, Outdoor Lighting, Landscaping, Foundation Repair, Basement Waterproofing, Radon Mitigation, Interior Painting, Home Security
Services (16)
HVAC Maintenance, Chimney Sweeping, Dryer Vent Cleaning, Sprinkler Maintenance, Appliance Repair, Duct Cleaning, House Cleaning, Pressure Washing, Window Cleaning, Carpet Cleaning, Lawn Care, Pool Service, Snow Removal, Pest Control, Handyman, Junk Removal
What's Not Yet Live
| Item | Status |
|---|---|
| Twilio SMS outreach | Account setup pending |
| Resend email outreach | Account setup pending |
| Stripe live mode | Switch from test to production keys |
| Stripe Connect payouts | Installer onboarding |
| Aurora Solar Design API | Add-on not purchased (using Google Solar API instead) |
| Equipment confirmation | Moved to pre-contract phase, not yet re-wired |
| Plaid bill import | Future |
| Push/text reminders | Future |
Changelog Highlights (April 4-6, 2026)
Solar Flow (New — Flagship)
- Built complete standalone solar flow at
/solarwith latency-masking async pattern - Google Solar API integration (real roof analysis + LIDAR panel positions)
- Satellite map with rotated panel overlay (compass-to-math angle conversion)
- Consumption-based panel recommendation (fill best roof segments first)
- Conversion-optimized landing page with AI-generated imagery
- Rich configuration cards with education on each option
- Add-ons section (EV Charger, Critter Guard, Monitoring, Roof Reinforcement)
- Before/after bill comparison hero
- Sticky summary panel on desktop
- Full pipeline wiring (account creation → Stripe payment → fulfillment)
- FAQ accordion
Contract System (Major Fixes)
- Contract generation deduplication
- Iframe rendering for style isolation
- Compact collapsible signing footer
- Dual signing with proper status tracking
- Opens in new tab
- Centered on desktop
- Single-column layout (no more side-by-side breakage)
- Admin auth for contract viewing
- Status filter removed from generator (was blocking valid contracts)
answersformat handling (dict vs array)
Customer Dashboard (Major Fixes)
- Status synced with fulfillment (was stuck on "order_placed")
- Installer card now showing (fixed:
select("*")for installer query, RLS bypass) - Contact Your Pro quick actions (Call, Text, Email)
- Chat working end-to-end (auth order fix, access check fallbacks)
- Photo thumbnails from both URL strings and metadata objects
- Photo upload working in flow (client-side Supabase Storage)
- Permit waiver end-to-end (checks
answers.permit_handlingas ground truth) - Title/subtitle deduplication
- Smart Alerts page wired up
- Nav reordered
- Timeline reflects photo upload status
Admin Command Center (Major Improvements)
- Brand purple throughout
- Photo thumbnails with lightbox
- Outreach accordion
- Selected contractor highlight
- Email preview + editable messages
- Raw JSON collapsed
- Customer preview (full dashboard + single project)
Installer Portal (Fixes)
- Dashboard cache busting
- Fulfillment ID returned from API
- Contract generation error fixes
- Auto-load signing URLs
- Post-signature routing (customer → dashboard, installer → portal)
- Message sender identification fix
Infrastructure
- Google Analytics added
- Heartbeat disabled (token savings)
- Memory/context files optimized