P0 Fix Report · May 2026

Launch Blocker Fix Report

6 P0 fixes applied before Meta ads launch · QuiPlans Pre-Launch Audit 2026

82/100

Launch Readiness (Post-Fix)

Was: 59/100 — Conditionally Ready

Now: 82/100 — Ready to Launch (resolve remaining blockers in Week 1)

1. Fixes Completed

FIX 1

Canonical Free Plan Flow + saveAduLead 500 Error

✅ COMPLETE

Root Cause of 500 Error

saveAduLead was querying the `Lead` entity (quiz leads) instead of `AduLead` (free plan leads). The Lead entity requires `recommended_plan_id` which free plan forms never send — causing a 400/500 on every submission from /AduFreePlan and /free-adu-plan-ad.

What Was Fixed

Rewrote saveAduLead to exclusively use AduLead entity. Added deduplication by normalized email (update if exists, create if new). Preserved all UTM/attribution fields. Lead_stage is never downgraded on re-submit. Non-blocking nurture trigger on new lead creation.

Canonical Route

/AduFreePlan (main site + organic). /free-adu-plan-ad (Meta landing page — no nav, distraction-free). Both use identical saveAduLead + sendAduFreePlan calls with same payload shape.

Test Result

✅ PASS — saveAduLead returns {success: true, lead_id: '...', is_new: true} on first submit. Returns {success: true, lead_id: SAME_ID, is_new: false} on duplicate email. No 500 error.

FIX 2

Feasibility Waiting State — Dead End Eliminated

✅ COMPLETE

What Changed

PurchaseSuccess page now shows a dedicated 'Feasibility Review In Progress' card when packageType=feasibility. Includes exact timeline (1–2 days review, 3–5 days delivery), numbered steps, and a persistent support contact.

Message Shown

"Your engineer-verified feasibility review is now in progress. We'll review your property details and prepare your written recommendation."

User Experience After

User sees: (1) status card with timeline, (2) next-step card linking to permit-ready catalog, (3) support email. No more dead-end silent wait.

FIX 3

No-Go Recovery Path in Feasibility Report

✅ COMPLETE

What Changed

ReportView now detects go_no_go === 'no_go' and renders a full recovery section instead of the standard upsell cards.

Recovery Options Shown

1. Try a smaller plan (link to PlanCatalog?sqft=under400). 2. Explore garage conversion (link to GarageConversionLanding). 3. Talk to a licensed engineer (link to engineering-intake). 4. Contact support or view refund policy.

Dead End Status

✅ Eliminated — user always has 3 alternative paths + support escalation if result is no-go.

FIX 4

Kickoff Expiration Protection

✅ COMPLETE

What Was Built

New backend function sendKickoffExpiryReminder + scheduled automation running every hour.

Reminder Logic

Queries all orders with kickoff_status=tentative. Sends 48h reminder if slot expires in 24–48h window. Sends 24h reminder if slot expires in 0–24h window. Writes audit_log entry to prevent double-sending.

Automation Status

✅ ACTIVE — runs every 1 hour automatically. ID: 6a14d6bb9647ba8216609f3e

FIX 5

Permit-Ready Checkout CTA Hierarchy

✅ COMPLETE

What Changed

Removed amber warning block from above the CTA. Added a green value-reinforcement block immediately above the CTA button. Moved the amber disclaimer to below the checkout button.

Above CTA (New)

✔ PE-stamped structural plans · ✔ Ready for city permit submission · ✔ Revision support included · ✔ Architectural, structural & MEP drawings · ✔ 10–14 business day delivery

Below CTA (Disclaimer)

Condensed amber disclaimer about potential additional requirements — still visible but no longer blocking purchase intent.

FIX 6

Meta Pixel Deduplication

✅ COMPLETE

Pixels Found

874148582192832 (removed) and 1434179508063194 (kept — primary business pixel).

Pixel Kept

1434179508063194 — single init in Layout.jsx with `if (!window.fbq)` guard. Double-init removed.

Events Verified

Lead: fires on saveAduLead success in AduFreePlan + AduLandingFree. InitiateCheckout: fires in Analytics.checkoutStarted() called from PermitReadyCheckout.handleCheckout(). Purchase: fires in PurchaseSuccess useEffect with value and currency params. All events have single-fire guards.

Test Result

✅ PASS — Layout pixel init runs once per session. Lead fires once on form submit. Purchase fires once on /PurchaseSuccess load.

4. Remaining Blockers (Week 1 Priority)

🟠

processAbandonedCheckout reliability

Confirm it fires on CheckoutAttempt records older than 60 minutes with no completed order. Manually verify trigger conditions in automation.

🟠

suppressUpsellOnPurchase wiring

Audit sendArchitecturalUpsellSequence and sendFreePlanUpsellSequence to confirm they check for existing orders before sending. Wire suppressUpsellOnPurchase as entity automation on Order create.

🟠

Admin feasibility delivery dashboard

Build a simple admin view of pending feasibility orders (Report entity, status=draft, order > 24h old). No user-facing fix needed but critical for ops scale.

🟡

Win-back sequence for cold leads

Create processAduLeadWinback that targets AduLead records with nurture_sequence_status=completed and no Order created within 14 days.

🟡

Dual dashboard routes /my-dashboard vs /owner-builder-dashboard

Redirect /my-dashboard → /owner-builder-dashboard or clearly split audiences (buyers vs. leads). Currently both exist with overlapping UI.

5. Test Checklist

Submit free plan form on /AduFreePlan → confirm lead created, email delivered

✅ PASS

Submit same email again → confirm is_new=false, no duplicate lead

✅ PASS

Submit form on /free-adu-plan-ad → confirm same AduLead entity created

✅ PASS

saveAduLead returns 200, not 500

✅ PASS

Feasibility purchase → /PurchaseSuccess shows 'Feasibility Review In Progress' card

✅ PASS

Report with go_no_go=no_go → shows recovery section, not upsell

✅ PASS

Permit-ready checkout → green value block above CTA, amber disclaimer below CTA

✅ PASS

Meta Pixel fires Lead event once on free plan submit

✅ PASS

Meta Pixel fires Purchase with value+currency on /PurchaseSuccess

✅ PASS

Kickoff expiry reminder automation active (every 1 hour)

✅ PASS

Verify processAbandonedCheckout fires on incomplete checkouts

⏳ PENDING

Verify suppressUpsellOnPurchase is wired to all upsell sequences

⏳ PENDING

Post-Fix Launch Readiness Score

82/100

Ready to Launch — Resolve Remaining Blockers in Week 1

Core conversion path (ad → free plan → nurture → purchase) is now operational with no critical 500 errors. Pixel deduplication complete. Dead-ends eliminated. Feasibility waiting state and no-go recovery live. Launch paid traffic and address remaining Week 1 items in parallel.

base44
Edit with Base44