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:
parent
8149996107
commit
13475dc8d0
1 changed files with 326 additions and 0 deletions
326
site/public/order/dot-compliance/index.html
Normal file
326
site/public/order/dot-compliance/index.html
Normal 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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue