fix: show trucking order prices and payment options

This commit is contained in:
justin 2026-06-03 13:24:40 -05:00
parent d7de818f39
commit ee07064b0f
28 changed files with 199 additions and 93 deletions

View file

@ -0,0 +1,69 @@
---
import { formatUSD } from "../lib/intake_manifest";
export interface Props {
priceCents?: number;
govFeeLabel?: string;
note?: string;
}
const { priceCents, govFeeLabel, note } = Astro.props;
const hasPrice = typeof priceCents === "number";
---
{hasPrice && (
<aside class="pw-price-banner" aria-label="Service price">
<div>
<p class="pw-price-label">Service fee</p>
<p class="pw-price-value">{formatUSD(priceCents!)}</p>
</div>
<div class="pw-price-copy">
{govFeeLabel ? (
<p><strong>Pass-through fees:</strong>{" "}{govFeeLabel}. Billed separately at cost.</p>
) : (
<p>No hidden Performance West service fee. You will review the total before payment.</p>
)}
{note && <p>{note}</p>}
</div>
</aside>
)}
<style>
.pw-price-banner {
display: flex;
gap: 1.25rem;
align-items: center;
justify-content: space-between;
padding: 1rem 1.15rem;
margin: 1rem 0 1.5rem;
border: 2px solid #fed7aa;
border-radius: 14px;
background: linear-gradient(135deg, #fff7ed, #ffffff);
box-shadow: 0 10px 28px rgba(249, 115, 22, 0.10);
}
.pw-price-label {
margin: 0 0 0.15rem;
color: #9a3412;
font-size: 0.78rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.pw-price-value {
margin: 0;
color: #ea580c;
font-size: clamp(2rem, 5vw, 3rem);
line-height: 1;
font-weight: 900;
}
.pw-price-copy {
max-width: 30rem;
color: #475569;
font-size: 0.95rem;
line-height: 1.45;
}
.pw-price-copy p { margin: 0.2rem 0; }
@media (max-width: 640px) {
.pw-price-banner { align-items: flex-start; flex-direction: column; }
}
</style>

View file

@ -621,14 +621,19 @@ const STEP_LABELS: Record<string, string> = {
} else if (!valResp.ok) {
throw new Error(`Validation HTTP ${valResp.status}`);
}
// Kick off Stripe Checkout for the new order.
const methodSel = document.getElementById("pw-pay-method") as HTMLSelectElement | null;
const paymentMethod = methodSel?.value || "card";
// Kick off checkout for the new order using the method selected on the
// Payment step. PayPal and crypto return provider-specific checkout URLs;
// card/ACH/Klarna use Stripe Checkout.
const checkoutResp = await fetch(`${API}/api/v1/checkout/create-session`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
order_id: newOrderNumber,
order_type: "compliance",
payment_method: "card",
payment_method: paymentMethod,
}),
});
if (!checkoutResp.ok) throw new Error(`Checkout HTTP ${checkoutResp.status}`);

View file

@ -1,5 +1,6 @@
---
// PaymentStep — hand off to the existing Stripe Checkout flow.
// PaymentStep — choose a payment method. The Wizard's Finish button creates the
// order, validates intake, and starts the selected checkout flow.
export interface Props { service_slug: string; }
const { service_slug } = Astro.props;
import { SERVICE_META, formatUSD } from "../../../lib/intake_manifest";
@ -9,7 +10,8 @@ const meta = SERVICE_META[service_slug];
<div class="pw-step" data-slug={service_slug}>
<h2>Payment</h2>
<p class="pw-help">
You'll be redirected to our secure payment processor to complete the order.
Choose how you want to pay. You'll be redirected to the matching secure
checkout after you click Finish.
After payment, the filing handler runs automatically. If admin review is
enabled on your account, you'll see the packet in your portal first.
</p>
@ -32,8 +34,7 @@ const meta = SERVICE_META[service_slug];
<option value="crypto">Cryptocurrency</option>
</select>
<button type="button" id="pw-pay-go" class="pw-btn">Continue to payment →</button>
<div id="pw-pay-err" class="pw-err" hidden></div>
<p class="pw-method-note">Click <strong>Finish</strong> below to continue with the selected method.</p>
</div>
<style>
@ -43,46 +44,5 @@ const meta = SERVICE_META[service_slug];
.pw-total-line { display: flex; justify-content: space-between; padding: 0.25rem 0; font-size: 1rem; }
.pw-field { display: block; font-weight: 600; margin: 0.6rem 0 0.2rem; font-size: 0.88rem; }
.pw-input { width: 100%; padding: 0.5rem 0.7rem; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 0.93rem; }
.pw-btn { padding: 0.75rem 2rem; border: 0; border-radius: 6px; background: #059669; color: #fff; font-weight: 600; cursor: pointer; font-size: 1rem; margin-top: 1.5rem; }
.pw-err { color: #b91c1c; margin-top: 0.75rem; font-size: 0.9rem; }
.pw-method-note { margin: 0.75rem 0 0; color: #64748b; font-size: 0.9rem; }
</style>
<script>
const slugEl = document.querySelector(".pw-step[data-slug]") as HTMLElement | null;
const methodSel = document.getElementById("pw-pay-method") as HTMLSelectElement | null;
const goBtn = document.getElementById("pw-pay-go") as HTMLButtonElement | null;
const err = document.getElementById("pw-pay-err") as HTMLDivElement | null;
if (slugEl && methodSel && goBtn && err) {
const slug = slugEl.getAttribute("data-slug")!;
goBtn.addEventListener("click", async () => {
err.hidden = true;
goBtn.disabled = true; goBtn.textContent = "Creating checkout session…";
try {
const state = (window as any).PWIntake.get();
if (!state.order_number) throw new Error("Order was not created; go back to Review.");
const resp = await fetch("/api/v1/checkout/create-session", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
order_id: state.order_number,
order_type: "compliance",
payment_method: methodSel.value,
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const { checkout_url } = await resp.json();
if (!checkout_url) throw new Error("No checkout URL returned.");
// Clear the wizard state, success page handles the rest
sessionStorage.removeItem(`pw-intake-${slug}`);
window.location.href = checkout_url;
} catch (e: any) {
err.hidden = false;
err.textContent = "Could not start checkout: " + e.message;
goBtn.disabled = false;
goBtn.textContent = "Continue to payment →";
}
});
}
</script>

View file

@ -106,43 +106,43 @@ export const INTAKE_MANIFEST: Record<string, IntakeStep[]> = {
// ── DOT / FMCSA Motor Carrier Services ──────────────────────────
// Unified DOT intake form — shows relevant sections based on service.
"mcs150-update": ["dot-intake", "review"],
"boc3-filing": ["dot-intake", "review"],
"ucr-registration": ["dot-intake", "review"],
"dot-registration": ["dot-intake", "review"],
"mc-authority": ["dot-intake", "review"],
"dot-drug-alcohol": ["dot-intake", "review"],
"dot-audit-prep": ["dot-intake", "review"],
"dot-full-compliance": ["dot-intake", "review"],
"mcs150-update": ["dot-intake", "review", "payment"],
"boc3-filing": ["dot-intake", "review", "payment"],
"ucr-registration": ["dot-intake", "review", "payment"],
"dot-registration": ["dot-intake", "review", "payment"],
"mc-authority": ["dot-intake", "review", "payment"],
"dot-drug-alcohol": ["dot-intake", "review", "payment"],
"dot-audit-prep": ["dot-intake", "review", "payment"],
"dot-full-compliance": ["dot-intake", "review", "payment"],
// These all file an MCS-150 or operating authority with FMCSA → require the
// authorized signer's government photo ID (collected in the dot-intake step).
"usdot-reactivation": ["dot-intake", "review"],
"emergency-temporary-authority": ["dot-intake", "review"],
"carrier-closeout": ["dot-intake", "review"],
"entity-dissolution": ["dot-intake", "review"],
"usdot-reactivation": ["dot-intake", "review", "payment"],
"emergency-temporary-authority": ["dot-intake", "review", "payment"],
"carrier-closeout": ["dot-intake", "review", "payment"],
"entity-dissolution": ["dot-intake", "review", "payment"],
// ── State-Level Trucking Compliance ─────────────────────────────────
// Collected via the dedicated state-trucking intake step.
"irp-registration": ["state-trucking", "review"],
"ifta-application": ["state-trucking", "review"],
"ifta-quarterly": ["state-trucking", "review"],
"or-weight-mile-tax": ["state-trucking", "review"],
"ny-hut-registration": ["state-trucking", "review"],
"ky-kyu-registration": ["state-trucking", "review"],
"nm-weight-distance": ["state-trucking", "review"],
"ct-highway-use-fee": ["state-trucking", "review"],
"ca-mcp-carb": ["state-trucking", "review"],
"state-dot-registration":["state-trucking", "review"],
"intrastate-authority": ["state-trucking", "review"],
"osow-permit": ["state-trucking", "review"],
"state-trucking-bundle": ["state-trucking", "review"],
"irp-registration": ["state-trucking", "review", "payment"],
"ifta-application": ["state-trucking", "review", "payment"],
"ifta-quarterly": ["state-trucking", "review", "payment"],
"or-weight-mile-tax": ["state-trucking", "review", "payment"],
"ny-hut-registration": ["state-trucking", "review", "payment"],
"ky-kyu-registration": ["state-trucking", "review", "payment"],
"nm-weight-distance": ["state-trucking", "review", "payment"],
"ct-highway-use-fee": ["state-trucking", "review", "payment"],
"ca-mcp-carb": ["state-trucking", "review", "payment"],
"state-dot-registration":["state-trucking", "review", "payment"],
"intrastate-authority": ["state-trucking", "review", "payment"],
"osow-permit": ["state-trucking", "review", "payment"],
"state-trucking-bundle": ["state-trucking", "review", "payment"],
// ── Hazmat / Emissions ───────────────────────────────────────────────
"hazmat-phmsa": ["state-trucking", "review"],
"state-emissions": ["state-trucking", "review"],
"hazmat-phmsa": ["state-trucking", "review", "payment"],
"state-emissions": ["state-trucking", "review", "payment"],
// ── Entity / Corporate Upgrade ─────────────────────────────────────
"entity-upgrade-bundle": ["dot-intake", "review"],
"entity-upgrade-bundle": ["dot-intake", "review", "payment"],
};
// Category-gated dynamic steps. The Wizard inserts these after the `category`
@ -156,7 +156,7 @@ export const CATEGORY_GATED_STEPS: Record<string, IntakeStep[]> = {
};
// ── Pricing + human name lookup (mirrors COMPLIANCE_SERVICES server-side)
export const SERVICE_META: Record<string, { name: string; price_cents: number }> = {
export const SERVICE_META: Record<string, { name: string; price_cents: number; gov_fee_label?: string }> = {
"fcc-compliance-checkup": { name: "FCC Carrier Compliance Checkup", price_cents: 79900 },
"fcc-499a": { name: "FCC Form 499-A Filing", price_cents: 49900 },
"fcc-499a-499q": { name: "FCC Form 499-A + 499-Q Bundle", price_cents: 59900 },
@ -180,29 +180,29 @@ export const SERVICE_META: Record<string, { name: string; price_cents: number }>
// DOT / FMCSA
"mcs150-update": { name: "MCS-150 Biennial Update", price_cents: 3900 },
"boc3-filing": { name: "BOC-3 Process Agent Filing", price_cents: 8900 },
"ucr-registration": { name: "UCR Annual Registration", price_cents: 3900 },
"ucr-registration": { name: "UCR Annual Registration", price_cents: 3900, gov_fee_label: "UCR registration fee (tier-based, minimum shown)" },
"dot-registration": { name: "New USDOT Number Registration", price_cents: 8900 },
"mc-authority": { name: "MC Operating Authority Application", price_cents: 19900 },
"mc-authority": { name: "MC Operating Authority Application", price_cents: 19900, gov_fee_label: "FMCSA operating authority application fee" },
"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: 39900 },
"usdot-reactivation": { name: "USDOT Reactivation", price_cents: 14900 },
// State-level trucking
"irp-registration": { name: "IRP Registration Assistance", price_cents: 10900 },
"ifta-application": { name: "IFTA Application + Decals", price_cents: 10900 },
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 10900 },
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 10900 },
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 10900 },
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 10900 },
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 10900 },
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 10900 },
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 22900 },
"state-dot-registration": { name: "State DOT Registration", price_cents: 10900 },
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 10900 },
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 10900 },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 49900 },
"irp-registration": { name: "IRP Registration Assistance", price_cents: 10900, gov_fee_label: "Apportioned IRP registration and plate fees (state, by jurisdictions and weight)" },
"ifta-application": { name: "IFTA Application + Decals", price_cents: 10900, gov_fee_label: "IFTA license and decal fees (state)" },
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 10900, gov_fee_label: "IFTA taxes due, based on your mileage" },
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 10900, gov_fee_label: "Oregon weight-mile tax account and bond/deposit fees (state)" },
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 10900, gov_fee_label: "NY HUT certificate and decal fees (state)" },
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "KYU weight-distance account fees (state)" },
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "NM weight-distance permit and account fees (state)" },
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 10900, gov_fee_label: "CT Highway Use Fee registration and usage fees (state)" },
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 22900, gov_fee_label: "CA MCP permit fee and CARB/Clean Truck Check fees (state, by fleet size)" },
"state-dot-registration": { name: "State DOT Registration", price_cents: 10900, gov_fee_label: "State DOT/intrastate registration fee (state)" },
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 10900, gov_fee_label: "State intrastate authority filing fee" },
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 10900, gov_fee_label: "State oversize/overweight permit fees, per trip/route" },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 49900, gov_fee_label: "State registration, decal and tax fees for each included filing" },
// Hazmat / emissions
"hazmat-phmsa": { name: "PHMSA Hazmat Registration", price_cents: 14900 },
"hazmat-phmsa": { name: "PHMSA Hazmat Registration", price_cents: 14900, gov_fee_label: "PHMSA registration fee, by business size" },
"state-emissions": { name: "State Clean-Truck / Emissions Compliance", price_cents: 10900 },
};

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "boc3-filing";
@ -17,6 +18,8 @@ const description = "Designate a process agent in all 48 states plus DC.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "California Motor Carrier Permit (MCP) plus CARB Clean Truck
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Connecticut Highway Use Fee registration for heavy multi-un
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "dot-audit-prep";
@ -17,6 +18,8 @@ const description = "Prepare for your 18-month FMCSA safety audit.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "dot-drug-alcohol";
@ -17,6 +18,8 @@ const description = "Consortium enrollment, written policy, and DER designation.
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "dot-full-compliance";
@ -17,6 +18,8 @@ const description = "MCS-150 + BOC-3 + UCR + Drug & Alcohol + Audit Prep.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "dot-registration";
@ -17,6 +18,8 @@ const description = "Register a new USDOT number with FMCSA.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "PHMSA hazardous-materials registration for carriers transpo
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "International Fuel Tax Agreement (IFTA) license and decals
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Quarterly IFTA fuel-tax return preparation and filing throu
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "intrastate-authority";
@ -17,6 +18,8 @@ const description = "Intrastate operating authority application for carriers hau
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Apportioned (IRP) registration for interstate carriers —
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Kentucky KYU weight-distance tax license for carriers opera
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "mc-authority";
@ -17,6 +18,8 @@ const description = "Apply for common or contract carrier operating authority.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "FMCSA biennial update of company profile, fleet size, and m
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "New Mexico Weight-Distance Tax permit and account setup.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "New York Highway Use Tax (HUT) registration and decal for c
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Oregon Weight-Mile Tax enrollment and account setup for car
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "osow-permit";
@ -17,6 +18,8 @@ const description = "Oversize / Overweight (OS/OW) trip permit acquisition for n
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "state-dot-registration";
@ -17,6 +18,8 @@ const description = "Intrastate (state) DOT number registration for carriers ope
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "State clean-truck / emissions compliance (NY, CO, MD, NJ, M
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "state-trucking-bundle";
@ -17,6 +18,8 @@ const description = "State Compliance Bundle — IRP, IFTA, state weight-distanc
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Unified Carrier Registration for interstate carriers.";
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />

View file

@ -1,6 +1,7 @@
---
import Base from "../../layouts/Base.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import TruckingValueNotice from "../../components/TruckingValueNotice.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
@ -18,6 +19,8 @@ const description = "Reactivate an inactive or revoked USDOT number and bring yo
<p class="pw-desc">{description}</p>
</section>
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} note="Choose card, ACH, or PayPal at payment." />
<TruckingValueNotice slug={slug} />
<Wizard service_slug={slug} steps={steps ?? ["state-trucking", "review", "payment"]} title={meta?.name ?? slug} />