Add DOT compliance batch order page

/order/dot-compliance — select DOT/FMCSA services and checkout.
8 services: MCS-150, BOC-3, UCR, DOT registration, MC authority,
Drug & Alcohol, Audit Prep, Full Compliance Bundle.

Pre-fills DOT#, email, and promo code from URL params.
Uses same batch order + checkout API as FCC compliance page.
Orange theme for trucking brand.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-28 22:45:38 -05:00
parent 8149996107
commit 13475dc8d0

View file

@ -0,0 +1,326 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="DOT/FMCSA motor carrier compliance services. MCS-150 updates, BOC-3 filing, UCR registration, operating authority, and more.">
<title>DOT Compliance Services — Motor Carrier Filings | Performance West Inc.</title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<script>
window.__PW_API = (function() {
var h = window.location.hostname;
if (h === "localhost" || h === "127.0.0.1") return "http://" + h + ":3001";
if (h === "dev.performancewest.net") return "https://api.dev.performancewest.net";
return "https://api.performancewest.net";
})();
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<script defer src="https://analytics.performancewest.net/script.js" data-website-id="55250014-ee15-44ac-a1f6-81dabad3fe0f"></script>
<link rel="stylesheet" href="/_astro/about.DhmoKVOS.css">
<style>
.svc-card{transition:all 0.15s}
.svc-card:has(input:checked){border-color:#f97316;background:#fff7ed}
</style>
</head>
<body class="min-h-screen flex flex-col bg-gray-50">
<!-- Minimal nav for order page -->
<nav class="border-b border-gray-200 bg-white">
<div class="max-w-4xl mx-auto px-4 py-4 flex items-center justify-between">
<a href="/"><img src="/images/logo.png" alt="Performance West" class="h-12"></a>
<a href="/tools/dot-compliance-check" class="text-sm text-orange-600 font-medium hover:text-orange-800">← Back to DOT Compliance Check</a>
</div>
</nav>
<main class="flex-1">
<section class="bg-pw-950 py-10">
<div class="max-w-4xl mx-auto px-4 text-center">
<h1 class="text-2xl sm:text-3xl font-bold text-white mb-2">DOT / FMCSA Compliance Services</h1>
<p class="text-gray-300 text-sm">Select the filings you need. We handle the paperwork so you can focus on driving.</p>
</div>
</section>
<section class="py-8">
<div class="max-w-3xl mx-auto px-4">
<!-- Entity info bar -->
<div id="pw-entity-bar" class="bg-white border border-gray-200 rounded-lg p-4 mb-6 flex items-center gap-3" hidden>
<svg class="w-5 h-5 text-orange-500 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 18.75a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 01-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 00-3.213-9.193 2.056 2.056 0 00-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 00-10.026 0 1.106 1.106 0 00-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12"/></svg>
<div>
<span id="pw-entity-name" class="font-semibold text-gray-900"></span>
<span id="pw-entity-dot" class="font-mono text-sm text-gray-500 ml-2"></span>
</div>
</div>
<!-- Service selection -->
<div id="pw-svc-list" class="space-y-3">
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-4 mb-2">Core Filings</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="mcs150-update" data-price="7900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">MCS-150 Biennial Update</span>
<span class="text-sm font-bold text-orange-600">$79</span>
</div>
<p class="text-xs text-gray-500 mt-1">Required every 2 years. Failure to update results in USDOT deactivation + fines up to $1,000/day.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="boc3-filing" data-price="14900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">BOC-3 Process Agent Filing</span>
<span class="text-sm font-bold text-orange-600">$149</span>
</div>
<p class="text-xs text-gray-500 mt-1">Designates a process agent in all 48 states + DC. Required for all for-hire carriers, brokers, freight forwarders.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ucr-registration" data-price="7900" data-govfee="5900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">UCR Annual Registration</span>
<span class="text-sm font-bold text-orange-600">$79 <span class="text-xs font-normal text-gray-400">+ gov fee from $59</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">Annual requirement for interstate carriers. Gov fee based on fleet size ($59$7,511). Failure = out-of-service at roadside.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">New Authority</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-registration" data-price="14900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">New USDOT Number</span>
<span class="text-sm font-bold text-orange-600">$149</span>
</div>
<p class="text-xs text-gray-500 mt-1">Register a new USDOT number for your motor carrier, broker, or freight forwarder operation.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="mc-authority" data-price="49900" data-govfee="30000" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">MC Operating Authority</span>
<span class="text-sm font-bold text-orange-600">$499 <span class="text-xs font-normal text-gray-400">+ $300 FMCSA fee</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">Apply for common or contract authority to operate as a for-hire carrier.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">Safety & Compliance</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-drug-alcohol" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">DOT Drug & Alcohol Program</span>
<span class="text-sm font-bold text-orange-600">$199/yr</span>
</div>
<p class="text-xs text-gray-500 mt-1">Consortium enrollment, written policy, DER designation. Required for all carriers with CDL drivers.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-audit-prep" data-price="39900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">New Entrant Safety Audit Prep</span>
<span class="text-sm font-bold text-orange-600">$399</span>
</div>
<p class="text-xs text-gray-500 mt-1">Prepare for your 18-month FMCSA safety audit. Includes mock audit, DQ files, maintenance program, and compliance binder.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">Bundle & Save</h3>
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-full-compliance" data-price="49900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">DOT Full Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$499 <span class="text-xs font-normal text-green-600 ml-1">Save $227+</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">MCS-150 + BOC-3 + UCR + Drug & Alcohol Program — everything you need to stay compliant. Best value.</p>
</div>
</div>
</label>
</div>
<!-- Total + checkout -->
<div id="pw-total-section" class="mt-6 bg-white border border-gray-200 rounded-xl p-6 shadow-sm" hidden>
<div id="pw-total-rows"></div>
<div class="mt-4 pt-4 border-t border-gray-200">
<form id="pw-batch-form" class="space-y-4">
<div class="grid sm:grid-cols-2 gap-3">
<div>
<label class="block text-xs font-medium text-gray-600 mb-1">Your first and last name</label>
<input type="text" id="pw-name" required placeholder="e.g. John Smith" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none">
</div>
<div>
<label class="block text-xs font-medium text-gray-600 mb-1">Email</label>
<input type="email" id="pw-email" required placeholder="john@company.com" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none">
</div>
<div>
<label class="block text-xs font-medium text-gray-600 mb-1">Phone</label>
<input type="tel" id="pw-phone" placeholder="(555) 123-4567" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none">
</div>
<div>
<label class="block text-xs font-medium text-gray-600 mb-1">Discount code</label>
<input type="text" id="pw-promo" placeholder="Optional" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none uppercase">
</div>
</div>
<div id="pw-payment-section">
<h4 class="text-sm font-semibold text-gray-900 mb-2">Payment Method</h4>
<div class="grid grid-cols-2 gap-2">
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="card" checked><span class="text-sm">Card</span></label>
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="ach"><span class="text-sm">ACH</span></label>
</div>
</div>
<label class="flex items-start gap-2 p-3 rounded-lg border border-gray-200 text-xs text-gray-600"><input type="checkbox" id="pw-engage" required class="mt-0.5"><span>I authorize Performance West to prepare and file on my behalf. <a href="/terms" target="_blank" class="text-orange-600 underline">Terms</a></span></label>
<button type="submit" id="pw-submit" class="w-full py-3 rounded-lg bg-orange-500 text-white font-bold text-base hover:bg-orange-600 transition-colors disabled:bg-gray-400 shadow-lg">Continue to Secure Payment →</button>
<p id="pw-err" class="text-sm text-red-700 mt-1" hidden></p>
</form>
</div>
</div>
<!-- Help -->
<div class="mt-6 text-center">
<p class="text-sm text-gray-500">Questions? <a href="mailto:info@performancewest.net" class="text-orange-600 underline">info@performancewest.net</a> or call <strong>(888) 411-0383</strong></p>
</div>
</div>
</section>
</main>
<footer class="border-t border-gray-200 bg-white py-6">
<div class="max-w-4xl mx-auto px-4 text-center text-xs text-gray-400">
<p>Performance West Inc. · 525 Randall Ave Ste 100-1195, Cheyenne, WY 82001 · <a href="https://performancewest.net" class="text-gray-500">performancewest.net</a></p>
<p class="mt-1">Performance West is a regulatory compliance consulting firm, not a law firm. This does not constitute legal advice.</p>
</div>
</footer>
<script>
var API = window.__PW_API || "https://api.performancewest.net";
var params = new URLSearchParams(window.location.search);
var dot = params.get("dot") || "";
var emailFromUrl = params.get("email") || "";
var promoFromUrl = params.get("code") || params.get("promo") || "";
function usd(cents) { return "$" + (cents / 100).toLocaleString("en-US", {minimumFractionDigits: 2}); }
// Pre-fill entity info
if (dot) {
fetch(API + "/api/v1/dot/lookup?dot=" + dot).then(function(r) { return r.json(); }).then(function(d) {
if (d.legal_name) {
document.getElementById("pw-entity-name").textContent = d.legal_name;
document.getElementById("pw-entity-dot").textContent = "DOT# " + dot;
document.getElementById("pw-entity-bar").hidden = false;
}
}).catch(function() {});
}
if (emailFromUrl) { var e = document.getElementById("pw-email"); if (e) e.value = emailFromUrl; }
if (promoFromUrl) { var p = document.getElementById("pw-promo"); if (p) { p.value = promoFromUrl.toUpperCase(); p.readOnly = true; p.style.background = "#fff7ed"; p.style.borderColor = "#f97316"; } }
// Checkbox change → update total
var checkboxes = document.querySelectorAll("input[data-slug]");
var totalSection = document.getElementById("pw-total-section");
var totalRows = document.getElementById("pw-total-rows");
function updateTotal() {
var selected = [];
var svcTotal = 0;
var govTotal = 0;
checkboxes.forEach(function(cb) {
if (cb.checked) {
var price = parseInt(cb.dataset.price) || 0;
var gov = parseInt(cb.dataset.govfee) || 0;
svcTotal += price;
govTotal += gov;
selected.push(cb.dataset.slug);
}
});
if (selected.length === 0) { totalSection.hidden = true; return; }
totalSection.hidden = false;
var html = '<div class="flex justify-between text-sm mb-1"><span>' + selected.length + ' service' + (selected.length > 1 ? 's' : '') + '</span><span>' + usd(svcTotal) + '</span></div>';
if (govTotal > 0) html += '<div class="flex justify-between text-sm text-gray-500 mb-1"><span>Government fees (passthrough)</span><span>' + usd(govTotal) + '</span></div>';
html += '<div class="flex justify-between font-bold text-lg border-t border-gray-300 pt-2 mt-2"><span>Total</span><span>' + usd(svcTotal + govTotal) + '</span></div>';
totalRows.innerHTML = html;
}
checkboxes.forEach(function(cb) { cb.addEventListener("change", updateTotal); });
// Pre-check services from URL
var preSelect = (params.get("services") || "").split(",").filter(Boolean);
preSelect.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb) cb.checked = true;
});
if (preSelect.length) updateTotal();
// Submit
document.getElementById("pw-batch-form").addEventListener("submit", function(e) {
e.preventDefault();
var selected = [];
checkboxes.forEach(function(cb) { if (cb.checked) selected.push(cb.dataset.slug); });
if (selected.length === 0) { alert("Please select at least one service."); return; }
if (!document.getElementById("pw-engage").checked) { alert("Please accept the authorization terms."); return; }
var btn = document.getElementById("pw-submit");
btn.disabled = true; btn.textContent = "Creating order...";
var errEl = document.getElementById("pw-err"); errEl.hidden = true;
var body = {
services: selected,
customer_name: document.getElementById("pw-name").value.trim(),
customer_email: document.getElementById("pw-email").value.trim(),
customer_phone: document.getElementById("pw-phone").value.trim() || undefined,
discount_code: document.getElementById("pw-promo").value.trim() || undefined,
intake_data: { dot_number: dot, source: "dot-compliance-remediation" },
engagement_accepted: true
};
fetch(API + "/api/v1/compliance-orders/batch", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body) })
.then(function(r) { return r.json().then(function(d) { if (!r.ok) throw new Error(d.error || "Order failed"); return d; }); })
.then(function(d) {
var payMethod = document.querySelector("input[name=pw_pay]:checked").value;
return fetch(API + "/api/v1/checkout/create-session", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ order_id: d.batch_id, order_type: "compliance_batch", payment_method: payMethod }) });
})
.then(function(r) { return r.json(); })
.then(function(d) {
if (d.checkout_url) window.location.href = d.checkout_url;
else throw new Error("No checkout URL returned");
})
.catch(function(err) {
errEl.textContent = err.message; errEl.hidden = false;
btn.disabled = false; btn.textContent = "Continue to Secure Payment →";
});
});
</script>
</body>
</html>