50-state trucking compliance: services, checker, order page, CA landing

- Migration 079: state_trucking_requirements table seeded for all 51 jurisdictions
  (IRP, IFTA, weight-distance taxes, MCP/CARB, intrastate authority, state DOT)
- Migration 080: carrier_operating_states tracking table
- 13 new state trucking services in catalog ($99-$599)
- StateTruckingHandler with state-specific admin todos
- DOT compliance checker: 7 new state-level checks (IRP, IFTA, weight tax,
  MCP/CARB, emissions, intrastate authority, state DOT number)
- New API endpoint: GET /api/v1/dot/state-requirements
- DOT order page: state compliance service cards with auto-preselect
- California trucking landing page (MCP + CARB + IRP + IFTA)
- Fix: DOT checker nav missing Trucking/DOT section
- Fix: All 8 DOT intake pages missing style block (dangling text)
- Fix: DOT confirmation email now says "Order Confirmed" not "Action Required"
- Fix: MCS150/BOC3/StateTrucking handlers missing async process() method
- Fix: StateTruckingHandler connection leak + slug resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-29 12:46:33 -05:00
parent c80f3a408a
commit 33da00fd89
21 changed files with 2078 additions and 14 deletions

View file

@ -112,6 +112,22 @@ export const INTAKE_MANIFEST: Record<string, IntakeStep[]> = {
"dot-drug-alcohol": ["review"],
"dot-audit-prep": ["review"],
"dot-full-compliance": ["review"],
// ── State-Level Trucking Compliance ─────────────────────────────────
// Admin-assisted: info collected at checkout, no intake form needed.
"irp-registration": ["review"],
"ifta-application": ["review"],
"ifta-quarterly": ["review"],
"or-weight-mile-tax": ["review"],
"ny-hut-registration": ["review"],
"ky-kyu-registration": ["review"],
"nm-weight-distance": ["review"],
"ct-highway-use-fee": ["review"],
"ca-mcp-carb": ["review"],
"state-dot-registration":["review"],
"intrastate-authority": ["review"],
"osow-permit": ["review"],
"state-trucking-bundle": ["review"],
};
// Category-gated dynamic steps. The Wizard inserts these after the `category`
@ -155,6 +171,20 @@ export const SERVICE_META: Record<string, { name: string; price_cents: number }>
"dot-drug-alcohol": { name: "DOT Drug & Alcohol Compliance Program", price_cents: 14900 },
"dot-audit-prep": { name: "New Entrant Safety Audit Preparation", price_cents: 39900 },
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 49900 },
// State-level trucking
"irp-registration": { name: "IRP Registration Assistance", price_cents: 19900 },
"ifta-application": { name: "IFTA Application + Decals", price_cents: 14900 },
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 9900 },
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 19900 },
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 19900 },
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 19900 },
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 19900 },
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 19900 },
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 34900 },
"state-dot-registration": { name: "State DOT Registration", price_cents: 14900 },
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 24900 },
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 9900 },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 59900 },
};
export function formatUSD(cents: number): string {

View file

@ -20,3 +20,11 @@ const description = "Designate a process agent in all 48 states plus DC.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Prepare for your 18-month FMCSA safety audit.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Consortium enrollment, written policy, and DER designation.
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "MCS-150 + BOC-3 + UCR + Drug & Alcohol + Audit Prep.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Register a new USDOT number with FMCSA.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Apply for common or contract carrier operating authority.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "FMCSA biennial update of company profile, fleet size, and m
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Unified Carrier Registration for interstate carriers.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>