Skip to main content
Architecture

How the decoder works — architecture transparency

Plain-English explanation of what runs where, what stays on your device, and what reaches our server. No jargon.

What you enter

  • State (US state code)
  • Primary suspension cause (one of 10 cause classes)
  • Offense / suspension date (optional)
  • Prior suspension count (0 / 1 / 2+)
  • Hardship interest (yes / no)
  • Employment requires driving (yes / no)

What stays in your browser

Everything. All six inputs are processed locally by JavaScript that ships with the page. They are passed to a deterministic function that reads four state-data JSON files (also shipped with the page) and returns a structured verdict. No network call is made. No POST. No fetch.

If you open your browser's network tab while running the decoder, you will see zero requests caused by the decoder. The only network requests are the initial page load and the analytics beacon — and the analytics beacon never carries your decoder inputs.

What we log on the server

Aggregate counts only:

  • The state code (e.g. "CA")
  • The suspension cause class (e.g. "dui_dwi")
  • The hardship interest flag (yes / no)
  • A page-view count for the page itself

What we do not log:

  • The offense date
  • The prior count
  • The employment-required flag
  • Any combination of fields that could re-identify a driver

The reasoning: state + cause + hardship-yes/no is a coarse signal (we use it to prioritize which states to research next). Offense date + prior count is granular enough to be reconstructive when combined with a session ID or IP, so it never leaves the device.

Where the state-rule data comes from

The four state-data JSON files (suspension-cause matrix, IID matrix, SR-22 matrix, hardship-license matrix) are compiled from state DMV portals, state legislature URLs, and Cornell LII for federal preemption anchors. Every cell carries a _source_url field that points to the primary source we verified against — or a [PLACEHOLDER]block where the cell has not yet been pinned. The methodology page documents the refresh cadence and the primary-source policy.

Methodology → · Citation manifest →

Where we get our analytics

We use Google Analytics 4 (GA4) under Consent Mode v2 with ad-storage denied by default and analytics-storage granted by default. You can decline analytics in the cookie banner; the choice persists in local storage. We do not run ad cookies, retargeting cookies, or social-share cookies.