API: Split "Insurance Filing" into separate checks:
- Liability Insurance (BIPD) — BMC-91/91X
- Cargo Insurance — household goods
- Broker Bond / Trust Fund — BMC-84/85 ($75K minimum)
Each has its own clear label and specific remediation detail.
Frontend: Convert CTA box, insurance lead capture, and "looking good"
box from Tailwind classes to inline styles (Tailwind classes not in
Astro compiled CSS for static public/ files).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a carrier has a red insurance check, shows a pre-checked
checkbox with "Get a free trucking insurance quote". Form
pre-fills carrier name and phone from FMCSA data. Submits
lead to /api/v1/tickets as category "insurance_lead" with
carrier details, fleet size, and insurance deficiency info.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nav dropdown: Trucking/DOT section with DOT Compliance Services,
MCS-150/BOC-3/UCR link, and DOT Compliance Check [FREE] badge.
Added to both desktop mega-dropdown and mobile menu.
Footer: DOT/Trucking in services list, DOT Compliance Check in
free tools list.
This updates all Astro-compiled pages site-wide (nav partial).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
/services/trucking — 7 service cards with pricing, full compliance
bundle CTA ($499), and free compliance check CTA. Orange theme.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
"Fix My DOT Filings" now links to /order/dot-compliance?dot=XXXXX
instead of a mailto: link.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
/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>
Matches FCC checker layout: site nav, footer, Astro CSS, auth modal,
support panel, subscribe modal, Tawk.to chat, analytics. Orange
accent theme for trucking brand. Removed all inline styles in favor
of Tailwind classes from the Astro CSS.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Static page at /tools/dot-compliance-check with:
- DOT number lookup with live FMCSA API checks
- Name search against local census database
- Color-coded check cards (green/yellow/red) for each filing
- Auto-fill from ?dot= URL param
- CTA to email for help when issues found
- Mobile responsive, orange/trucking theme
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Red CRTC promo bar → orange DOT compliance services banner
- "Four areas" → "Five areas" with Trucking/DOT icon card
- DOT Compliance Check link added to nav dropdown with NEW badge
- Links to /tools/dot-compliance-check (page TBD)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added alongside Iristel, Flowroute, and SkySwitch in the CRTC
service page case studies and wholesale provider mentions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When intake loads from ?order=CO-xxx, the FRN is in the order's
intake_data, not the URL. Now checks state.intake_data.frn and
state.entity.frn as fallback sources for auto-fill.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When the intake page is loaded with ?order=CO-xxx (from the
confirmation email), fetch the order and pre-fill customer name,
email, and FRN from the order record. Previously only worked
with JWT token-based links.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- "Email address (yours)" → "Your email address" with helper text
- "Your name" → "Your first and last name" with placeholder
- "Carrier legal name" → "Carrier entity legal name" with examples
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When discount brings total to zero, hide the payment method selector
and change button from "Continue to Secure Payment" to "Place Free Order".
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Was looking for .svc-cb:checked but checkboxes use
input[data-slug]:checked. Discount display never updated after
promo info loaded.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Static inline script that verifies $0 orders via API and shows
"Order Confirmed" state. Re-asserts success state on delays to
override the Astro hoisted JS which would otherwise show error
(since there's no Stripe session_id for free orders).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The /api/v1/discount/:code endpoint now checks allowed_emails when
an email is provided. If the email isn't in the allowed list, returns
valid:false so the frontend doesn't show a fake discount. The promo
field is cleared and unlocked if validation fails.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When free=1 is in the URL, verify order status via API instead of
looking for a Stripe session. Checks payment_status=paid on the
server side — no security hole since the server already validated
the discount code before marking the order paid.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The checkout page was hardcoding 25% for all promo codes. Now fetches
/api/v1/discount/:code to get real discount_type (percent vs flat) and
discount_value, then displays correct amount.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Email passes through the full funnel: campaign email (?email=) →
compliance checker → order page. Reduces friction for campaign
recipients who would otherwise have to type their email manually.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Compliance checker reads ?code= from URL, stores it, passes it
through to the order page CTA link
- Allows email campaigns to link to checker with coupon pre-applied
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Checkout page reads ?code= or ?promo= from URL, pre-fills and locks the
promo field, shows the promo discount in the summary instead of the 15%
bundle discount
- API: when a promo code % >= bundle %, replace the bundle discount entirely
instead of stacking (e.g. MEMORIAL25 at 25% replaces the 15% bundle)
- Also checks discount code expiration in the query
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The lead capture template literal used \` (escaped backtick) which
passed through Astro's compiler literally, creating an invalid JS
token that prevented the entire script from executing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
as HTMLInputElement and as HTMLElement leaked into compiled JS,
causing SyntaxError in the lead capture handler block.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Record<string, string> type annotation leaked into compiled JS output,
causing SyntaxError that silently broke the entire script block.
runCheck() and all event handlers stopped working.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Card payment now default (was ACH — lower trust barrier for new customers)
- Removed +3% surcharge labels (reduces friction)
- Shortened authorization text to one line (was intimidating paragraph)
- Added trust signals below button: 256-bit SSL, Powered by Stripe, PCI compliant
- Added "Questions?" help box with phone + email below checkout
- Button text: "Continue to Secure Payment" with green glow shadow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Sticky bar fixed to bottom: "N issues found — your filing needs to be
corrected" with "See How to Fix This" + "Call Us" buttons
- Per-filing penalty warnings on red/yellow cards: RMD removal from network,
CPNI $239K/violation, 499-A Red Light blocks all FCC apps, CALEA $10K/day,
CORES can't legally operate
- CTA copy changed: "Your filing is inaccurate" urgency box + "Fix My Filing"
button with "no commitment until you pay" reassurance
- Lead capture form: "Get your compliance report emailed" for people not
ready to buy — creates ticket + tracks lead-capture event in Umami
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows specific penalty amounts for each filing type:
- RMD: $500K per violation, network disconnection
- CPNI: $239K per violation, $2.39M continuing
- 499-A: USAC Red Light blocks all FCC applications
- CALEA: $10K/day court-enforced
- Registration forfeiture for persistent non-compliance
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hide individual service prices and total/discount row from the
compliance checker results. Users see service names + checkboxes
only. Prices revealed on the order page after clicking Get Started.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prices removed from CTA buttons and banner cards on the checker.
Users see "Get Started" instead of dollar amounts, reducing sticker
shock before they understand the value. Prices shown on the order
page where they can see itemized services.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Loading message: shows estimated time (30-90 seconds) + rotating status
updates (RMD, CPNI, USAC, BDC, STIR/SHAKEN, compiling report)
- Timeout increased to 90s (was 60s)
- Error messages: "try again in a few minutes" (not "moments" or "check internet")
- New compliance_check_log table: logs every FCC lookup with FRN, entity,
IP, user agent, referrer, issue count, severity, response time
- Enables conversion funnel analysis and follow-up
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Created /js/pw-analytics.js with conversion funnel events
- Added to Base.astro layout (all Astro pages) + 6 static HTML pages
- Events tracked: compliance-check-start, compliance-check-complete,
order-cta-click, checkout-page-view, checkout-start, esign-opened,
esign-submitted, campaign-click (UTM attribution), contact-form-submit
- Server-side payment-complete event from checkout webhook via Umami API
- Auto-tracks any element with data-track="event-name" attribute
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reusable signing flow: service handler generates document → inserts
esign_records row → emails JWT link → client reviews PDF + signs →
API stores signature + resumes pipeline. Works for RMD, CPNI, CALEA,
499-A engagement, discontinuance, CRTC, and any future doc types.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Critical #1 — CRTC: Fix undefined 'province' variable (canada_crtc.py:1322)
Crashes every order at Step 6 document generation. Replaced with
order_data.get("custom_incorporation_province", "BC").
Critical #2 — FCC Carrier Reg: Add State PUC state picker
The order page collected "1/few/nationwide" but API expected an array
of state codes. Added a multi-state checkbox grid that appears when
State PUC add-on is checked. Sends puc_states: ["CA","NY",...] in
service_wizard. Price updates per-state ($399 × count).
Critical #3 — Compliance: Add REQUIRED_FIELDS for fcc-499q and
fcc-499a-discontinuance. Without these, intake validation was
completely skipped — invalid data accepted silently.
High #4 — FCC Carrier Reg: Don't mark D.C. Agent complete
prematurely. Was calling _update_step() right after creating the
admin todo. Now waits for admin to confirm NW order is placed.
High #5 — Compliance: Add fcc-499q and fcc-499a-discontinuance to
REQUIRES_ENTITY_FRN set. Both require FRN for USAC filing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When user selects "cancel registration" in the compliance checker:
- Option 1: "499-A Discontinuance (incl. zero-revenue filing)" $299
For carriers with no revenue — includes final zero-revenue 499-A
+ deactivation letter + CORES update
- Option 2: "499-A Filing + Discontinuance" $798 ($499+$299)
For carriers with actual revenue — full 499-A filed separately
+ deactivation process
Standalone discontinuance ($299) is for carriers already current
on filings who just want to close out.
Handler detects whether zero-revenue filing is included vs
handled by a separate full 499-A order.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New service slug fcc-499a-zero for carriers with no telecom revenue:
- $179 instead of $499 (no revenue analysis needed)
- Minimal intake: entity, officer, filer ID, filing type only
- Skips revenue schedules (blocks 3-4), USF calculations (block 5),
traffic study upload, and revenue workbook generation
- Fills blocks 1-2 and 6 only, all revenue lines left as zero
Compliance checker: shows both options (mutually exclusive checkboxes)
Order page: maps form_499a_zero to fcc-499a-zero slug
Handler: detects slug and skips revenue pipeline
DC Agent shown when either 499-A variant is checked
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
FCC APIs (CORES, ServiceNow) are responding in 28-45 seconds.
The 30s frontend timeout was being hit ~50% of the time. Added
quick=1 to skip slow Playwright corp checks and increased timeout
to 60s as safety margin.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>