No description
Two routing bugs that sent carriers to wrong/dead order pages: 1. MCS-150 + Inactive campaigns linked to /order/dot-full-compliance ($399) instead of their actual service: build_lp_link()/lp_slug_for() fell through to the dot-full-compliance catch-all for any campaign_type not in DEFICIENCY_SEGMENTS, ignoring the existing PRICE_SLUG_BY_CAMPAIGN map. So MCS-150 carriers (should be mcs150-update $79) and Inactive carriers (should be usdot-reactivation $149) were both quoted a 5x-priced bundle they never asked for — a severe conversion killer on the two highest-volume segments. Fix: lp_slug_for() now checks PRICE_SLUG_BY_CAMPAIGN first; build_lp_link() delegates to it (single source of truth). 2. IFTA-quarterly + UCR-annual builders set lp_link to a BARE path when no coupon was active (LP_LINK with no query). The body appends '&utm_source=...' so the CTA rendered as /order/ifta-quarterly&utm... (no '?') = 404. Fix: both now always emit a leading '?' query carrying ?dot= (and ?code= when a coupon is on), mirroring the main builder's lp_link_with_coupon(). Audited every campaign_type: all 14 order slugs now resolve 200 and match the intended service/price. Compliance-check secondary links (/tools/dot-compliance- check) verified correct and intentionally kept where a 'check status' CTA fits. |
||
|---|---|---|
| .claude/projects/-home-justin-projects-performancewest-new-site/memory | ||
| api | ||
| chrome-extension/fcc-access-helper | ||
| data | ||
| docs | ||
| docserver | ||
| erpnext | ||
| frappe_adyen | ||
| frappe_ca_registry | ||
| frappe_crypto | ||
| infra | ||
| mcp | ||
| monitoring | ||
| node-compile-cache/v25.1.0-x64-392347a2-1000 | ||
| performancewest_erpnext | ||
| scripts | ||
| site | ||
| src | ||
| test_screenshots | ||
| .gitignore | ||
| CLAUDE.md | ||
| deploy.sh | ||
| docker-compose.dev.override.yml | ||
| docker-compose.yml | ||
| extract-erpnext-assets.sh | ||