How it works
You answer 28 statements about 14 issues and say how much each issue matters to you. The site looks up the contests on your ballot from your address. Ahead of time, I collected what each candidate has said and done, with links, and used an AI model called Jev to place every candidate and measure on the same 14 issues. Your browser then compares your answers to those placements with simple arithmetic and shows the closest match in each contest, or says there isn't enough information.
This is a tool for thinking through your ballot. It is not voting advice, and it can be wrong. Every match shows its reasoning and sources so you can check it.
Each issue has two statements, written so that agreeing with one points the opposite way from agreeing with the other. This reduces the bias toward agreeing with whatever you read. Your answers (strongly disagree to strongly agree) average into a position from −1 to +1 on each issue. Your importance answer (0–3) sets that issue's weight. Issues you mark "doesn't matter to me" are ignored. Each statement has a "Learn more" link to a Wikipedia article for background. I chose Wikipedia for neutral, general context, not to argue for either side.
The issues and the two ends of each:
| Issue | One end (−1) | Other end (+1) |
|---|---|---|
| Taxes & government spending | Raise taxes, especially on high earners and corporations, to fund expanded public programs | Keep taxes low and limit government spending and new programs |
| Housing growth & land use | Preserve local control and neighborhood character; limit density and large new developments | Build much more housing: allow more density, reduce zoning limits, speed up permits |
| Renters & landlords | Stronger renter protections: rent control, eviction limits, tenant legal aid | More flexibility for property owners: fewer rent and eviction rules |
| Policing & criminal justice | Shift resources to prevention and alternatives; reduce incarceration and sentence lengths | Expand police staffing and enforcement; tougher penalties for crime |
| Homelessness response | Housing-first: provide housing and services without preconditions; avoid enforcement-led approaches | Enforcement-led: clear encampments, enforce camping bans, require treatment or shelter acceptance |
| Climate & energy | Aggressive climate action: faster emissions cuts, stricter environmental rules, phase out fossil fuels | Prioritize energy affordability and reliability; fewer environmental mandates, keep oil and gas production |
| Workers & business | Stronger worker protections: higher minimum wages, union power, mandated benefits | Business flexibility: fewer labor mandates and regulations, lower costs for employers |
| Immigration | Protect immigrants: sanctuary policies, limit cooperation with federal immigration enforcement | Cooperate with federal immigration enforcement; stricter immigration policy |
| Education | Invest in traditional public schools; limit charter expansion; support teachers' unions | Expand school choice and charters; greater parental control over curriculum |
| Abortion & LGBTQ+ rights | Protect and expand abortion access and LGBTQ+ legal protections | More restrictions on abortion; emphasis on traditional or religious values |
| Guns | Stricter gun laws: more restrictions on purchase, carry, and types of firearms | Protect gun rights: fewer restrictions on ownership and carry |
| Health care | Government-run or publicly expanded coverage (e.g. single-payer, expanded Medi-Cal) | Market-based health care with private insurance and less government role |
| Transportation | Prioritize transit, bike, and pedestrian infrastructure, even at the cost of car lanes and parking | Prioritize roads, driving, and parking; skeptical of reallocating street space |
| Elections & voting | Make voting easier and expand participation: universal mail ballots, fewer ID requirements, public campaign financing | Tighten election rules: stricter voter ID and verification, fewer mail-ballot accommodations |
Your address is sent once, inside the body of a request to this site's server, which passes it to LA County's public address locator (falling back to the US Census Bureau geocoder if the county's can't find it) to get latitude and longitude. (Neither service accepts requests directly from browsers.) The server doesn't store or log the address. You confirm the matched address, and then your browser sends only the coordinates to LA County Registrar-Recorder/County Clerk's public precinct map service. That service returns your precinct and every district it belongs to: congressional, state legislative, supervisorial, city council, school and college trustee areas, water and other special districts. Those districts determine which contests you see.
Contest and candidate lists come from the California Secretary of State's certified list of candidates, the official state voter information guide, and the RR/CC's final lists of qualified candidates and measures for this election. Each contest links to its sources. Local district names were matched to county district codes partly with Jev and partly by hand. If a contest is missing or wrong for you, please tell me.
For each candidate, AI research assistants (Claude, made by Anthropic) searched for the candidate's own words and actions: campaign issue pages, voting records, candidate questionnaires (CalMatters, League of Women Voters, local groups), reporting on what the candidate said, and issue-signaling endorsements. They were told to record only what the candidate said or did, not how others described them, to give each candidate in a race equal effort, and to leave a candidate blank rather than guess. Every item is a short quote or close paraphrase with a link, and you can read them all under "Why, and sources" on each contest.
These notes have not been individually checked by a person. Coverage is uneven: incumbents and well-funded campaigns leave more of a record than first-time or local candidates, and some candidates have no public positions at all. Measures are evaluated from their official title and summary.
Jev is a "System One" model from TypeSafe. It doesn't write text. It answers narrowly defined questions with probabilities. I use version jev-1.13.0. For each candidate and each issue, Jev receives the candidate's name, party, ballot designation and the collected notes, and answers two questions. Here are the exact questions for the "Housing growth & land use" issue:
Position (a score across five levels):
Based on `evidence` about `candidate` (their own statements, voting record, policy record, and endorsements), where does the candidate stand on Housing growth & land use? 0. Strongly and consistently favors: Preserve local control and neighborhood character; limit density and large new developments 1. Leans toward: Preserve local control and neighborhood character; limit density and large new developments 2. Mixed, moderate, or balanced between "Preserve local control and neighborhood character; limit density and large new developments" and "Build much more housing: allow more density, reduce zoning limits, speed up permits" 3. Leans toward: Build much more housing: allow more density, reduce zoning limits, speed up permits 4. Strongly and consistently favors: Build much more housing: allow more density, reduce zoning limits, speed up permits
Is there evidence? (a yes/no probability):
Does `evidence` contain specific information about `candidate`'s own position, votes, or record on Housing growth & land use? Party affiliation alone does not count.
Jev returns a probability for each level. The site uses the probability-weighted average as the candidate's position (−1 to +1), and the yes-probability of the second question as how much evidence there is. An issue with no evidence counts for nothing, even if a party label might suggest a position.
For measures, the questions ask which way a YES vote moves policy, and whether the measure touches the issue at all:
Based on `measure` and `evidence`, which way does a YES vote move policy on Housing growth & land use? 0. A YES vote moves policy substantially toward: Preserve local control and neighborhood character; limit density and large new developments 1. A YES vote moves policy somewhat toward: Preserve local control and neighborhood character; limit density and large new developments 2. A YES vote has no meaningful effect on this issue, or effects in both directions cancel out 3. A YES vote moves policy somewhat toward: Build much more housing: allow more density, reduce zoning limits, speed up permits 4. A YES vote moves policy substantially toward: Build much more housing: allow more density, reduce zoning limits, speed up permits Does a YES vote on `measure` directly change policy on Housing growth & land use (Preserve local control and neighborhood character; limit density and large new developments vs. Build much more housing: allow more density, reduce zoning limits, speed up permits)?
All of this runs once, before the site is published, and the results ship with the site. No AI model runs while you use it, and your answers never reach one.
Candidates. On each issue where a candidate has evidence, closeness is 1 − |your position − their position| ÷ 2, from 0 (opposite ends) to 1 (identical). A candidate's alignment is the average closeness, weighted by how much you care about each issue × how much evidence there is. The site only compares candidates whose evidence adds up to at least 2 (importance × evidence, about one issue you care about with solid evidence). If the top two are within 2 points, it calls it a toss-up. Within 5 points, it shows a slight lean rather than a best match.
Measures. For each issue, your position × the direction of a YES vote shows whether YES moves toward you or away, weighted by importance × relevance. If the measure barely touches the issues you care about (weight under 0.5), or the overall lean is under 5%, it doesn't pick a side. A lean under 10% is shown as a slight lean.
Known limits. Two candidates can be compared on different sets of issues. An incumbent with a long voting record may be placed on ten issues and a challenger on two. The "Why" panel shows which issues each comparison used. Jev sees each candidate's party label alongside the evidence. It can't place anyone on an issue from party alone, but on issues with thin evidence the label may still nudge the placement.
What it doesn't do. The match itself never uses party. It makes no recommendation in judicial retention elections, because judges don't campaign on policy. It doesn't weigh experience, character, competence, or anything else outside the quiz, and those may matter more to you.
There are no accounts, cookies or ads. The site counts page visits with Vercel Web Analytics, which uses no cookies and doesn't identify you, so I can see roughly how many people use it. Your quiz answers never leave your browser. They're saved in your browser's local storage on this device, along with your confirmed address, so a refresh doesn't lose your progress. "Start over" at the top of the page erases them. Your address is sent to this site's server once, only to get coordinates, and isn't stored there. The host (Vercel) keeps standard request logs (such as IP address and the page requested), but the address travels in the request body, which isn't logged. Messages sent through the contact form are delivered by email (via Resend) and used only to reply and fix problems.
Everything behind this site is public on GitHub under the MIT license: the quiz, the matching math, the exact questions given to Jev, every evidence note with its source, and every score. If you think a candidate is placed wrong, you can see exactly why, and you don't have to take my word for how any of it works.
If you want to build something like this for another county or a future election, you're welcome to copy it. The quiz, matching and scoring pipeline carry over. The ballot lookup and contest data are specific to LA County and would need to be redone for your area. The README explains what to change. Fixes and improvements are welcome as issues or pull requests.
This is a brand-new, independent project, and some things will be wrong. Please report anything that looks off, whether it's a broken address, a missing contest, or a candidate placed in the wrong spot. I'll do my best to read and respond to everything. If you're comfortable with GitHub, you can also open an issue.