Loading your account…

My profile

Optional. Date of birth and license are used only to help you check your voter registration; they are encrypted, shown only to you (the license masked) and never shared with administrators or other services.

A street address with a US state makes every candidate in that state free in your candidate tracker (it does not count against your tier's limit).

Voter registration

Change password

8–128 characters with at least one letter and one digit; not your username or the default password. Changing it signs out your other sessions.

Two-factor authentication

Loading…

Account

Appearance

Privacy & cookies

Cookie policy

Candidate tracker

Issue match

Pick 5–10 issues — tick "My issue" on the dashboard's national, state and local issues, or add them here — and see where your tracked candidates stand, from their votes, bills, actions and statements on record. .

Tracked

Candidate

Select a tracked candidate to see everything about them as of the last update.

Users

UsernameNameEmailRoleStatus

Groups

New group

Select or create a group.

Accounts

UsernameNameEmailRoleStatusLast sign-inGroups

Click an account to edit it.

Edit account

Select an account above.

Create account

New accounts must change their password at first sign-in.

New registrations

Days, weeks (Monday–Sunday), weekdays and hours are in your time zone: . The default accounts are not counted.

Registered vs. verified

RegisteredVerified (on the day the email was confirmed)
Table
PeriodRegisteredVerified

By tier

TierRegisteredVerified

Breakdowns cover accounts registered in the period; "verified" = how many of them have confirmed their email.

By state profile state

StateRegisteredVerified

By day of week

DayRegisteredVerified

By time of day

Hours with registrations
HourRegisteredVerified

Analytics

Only visitors who allowed analytics are counted (fea-0036), so totals are a lower bound. Visitors are pseudonymous: a keyed hash of a random cookie, never an account. Events older than 13 months are deleted automatically.

Pages

PageViews

Dashboard views office · state

ViewCount

Referrers

SiteVisits

Devices

DevicePage views

Page speed milliseconds · p50 / p75 / p95

PageSamplesTime to first byteFirst paintLargest paintLoadLayout shift

Good: largest paint under 2,500 ms and layout shift under 0.10 at p75 (Core Web Vitals).

Server load saved browser data cache

Cookie consent

Package sales

These are the packages buyers see after clicking Upgrade to track more candidates. Pick a discount for a package and press Apply, or use Apply to all. Buyers see the original cost struck through and the new cost.

PromoCandidate groupStates includedCandidatesShow detailsDiscountCost

Purple = a 2024 swing state. Discounts round to the nearest cent and never go below $0.50 (Stripe's minimum). Custom Track's discount applies to the price of the number the buyer chooses. Packages that aren't offered (Payments tab) aren't listed.

Promo code generator

Tick the packages in the Promo column above, or All packages below, then generate a code. A promo code never adds to a sale: the buyer gets whichever is larger.

CodeDiscountPackagesUsesExpiresActive

A use is a paid purchase made with the code. Test opens Available Upgrades with the code entered, so you see the buyer's prices; with Stripe in test mode you can buy with a test card.

Stripe connection adm-0008

Bank account and payouts are attached in your Stripe account (identity checks and bank details stay with Stripe — this server never stores them). Open Stripe → Settings → Payouts ↗ to add the bank account, then press Verify.

Keys are stored encrypted and are write-only: they can be replaced but never displayed. A restricted key needs write access to Checkout Sessions and Refunds and read access to Balance and Account. Stripe API keys ↗

Settings

Upgrades & prices USD

NameStatesCandidatesPriceOffered

Groupings make every candidate in their states free to track. Defaults: swing = the seven 2024 battlegrounds (not offered since v1.31 — tick Active to offer it again); Battleground States (2026) = every state with a Senate or governor race rated Tossup, Tilt or Lean; red / blue = every state by its 2024 winner, swing states included (Trump won all seven), minus the 2024 purple states (ME, MN, NH, NM, VA) (automatic). Tier upgrades are off until you price and enable them.

Revenue & purchases

CreatedUserUpgradeAmountStatusValid until

Position classifier adm-0007

The choice applies to the next poll update (step "Analysing candidates' positions"). Answers are cached per model, so only new or changed sentences cost tokens.

Token usage & spend

Tokens per day (input + output). Hover a bar for details. Cost = tokens × the model's price at the time of use; requests for models without a price are counted as "unpriced".

By model

ProviderModelRequestsInputOutputCostLast used

Recent runs

StartedRunModelRequestsTokens in / outCostAvg latency

Prices USD per million tokens

ProviderModelInputOutputCache readTier above (input tokens)Input above tierOutput above tierNote

Claude Haiku 5.5 is seeded with the rates reported in October 2026 ($0.10 input / $0.50 output per million tokens for prompts up to 100K tokens; $0.50 / $2.50 above). Verify them at anthropic.com/pricing.

Support chatbot fea-0018 · adm-0010

Signed-in users chat through this server, which forwards each message to AnythingLLM — the browser never sees AnythingLLM or its key. Pick the language model, and add more documents to the workspace, in AnythingLLM ↗ (password: ANYTHINGLLM_AUTH_TOKEN in .env).

Set up automatically

Creates an API key for this server, the workspace with the support instructions, and embeds the help guide (chatbot/midterms26-help.md). Safe to run again — it updates the instructions and re-embeds the guide when it changed.

Settings

The key is stored encrypted and never shown again.

Language model — Ollama adm-0011

The URL is as seen from inside Docker: http://host.docker.internal:11434 for the Ollama app on this computer (fastest on a Mac — it uses the GPU), http://ollama:11434 for the optional compose service (COMPOSE_PROFILES=…,ollama), or a server's address on your network. Pull a model first, e.g. ollama pull llama3.2. Saving checks that Ollama has the model, then makes it AnythingLLM's language model; "Set up" re-applies it if AnythingLLM is ever reset.

Usage

Recent errors

TimeError

Only sizes, timing and outcome are kept here — the conversations themselves stay in AnythingLLM. Each user may send 30 messages per hour (CHAT_RATE_PER_HOUR).

Local database adm-0009

Tables

TableRowsSize

Connections & settings

Updates every 15 seconds while this tab is open.

Live replication — this server as primary

StandbyAddressStateSyncReplay lagBehindSince

Replication slots

SlotActiveWAL kept

Allowed standbys pg_hba.conf

TypeRoleAddressName

Adds a host replication line to the managed block of pg_hba.conf, creates the role (new password, shown once) and a physical slot, and reloads PostgreSQL. Then run the shown pg_basebackup on the standby. Same as scripts/dbsync.py.

Standby servers monitored

NameServerStatusReceivedReplayedDelayReceiver

The URL is stored encrypted and never shown again.

Sync to other databases adm-0013

Copy this app's data to PostgreSQL databases hosted elsewhere — one way, this server → the target. Check verifies compatibility (version, tables, columns, types, privileges); Sync replaces the target's app tables with one consistent copy of this database in a single transaction and then compares row counts and checksums; Verify compares them again at any time. Log sync keeps a target up to date continuously with PostgreSQL logical replication (the write-ahead log). Only the app's own tables are touched on a target. Encrypted fields (2FA secrets, date of birth, driver's license) stay encrypted — the target app needs the same encryption key.

NameServerCompatibilityLast syncLast verifyLog sync

The URL is stored encrypted and never shown again. From the command line: scripts/dbsync.py check | sync | verify | dump | load-dump.

File dump

A zip with schema.sql, one CSV per table, restore.sql and manifest.json (row counts, SHA-256). Load it elsewhere with python scripts/dbsync.py load-dump --file … --url … (verifies the counts) or psql … -f restore.sql. It contains every account's password hash — keep it private.

Early vote refresh adm-0012

Recent refreshes

StartedByResultSnapshotEarly votesTook

A refresh downloads the latest counts from civicAPI (about 2 minutes) and rebuilds the Early Vote view; a failed download keeps the previous counts. From the command line: docker exec midterms2026-backend python scripts/early_vote_refresh.py run (or run --if-due from cron).

Usage tiers adm-0005

Every account is on a tier; new accounts start on Base. The limit counts tracked candidates outside the account's home state (home-state candidates are free when the profile has a street address). Local updates let the account re-read its tracked candidates' sources on demand. Override the limit for one account in Accounts → Edit.

TierLabelTracking limitLocal updatesCooldown (min)Max per updateAccountsLast change

Create backup

Archive

FileCreatedByContentsFilesSize

My API keys

NameKeyStatusCreatedLast usedExpires

Mobile apps (iOS / Android) sign in with your username and password and receive their own key automatically; each appears here, and signing out of the app revokes it. Changing your password, an administrator resetting it, or your account being disabled invalidates every key.

Create a key

Send it as Authorization: Bearer <key> (or X-API-Key) to /api/v1/…. The key is shown once; the server stores only its SHA-256 hash. Keys expire after a year; at most 10 can be active.

Audit log

Time (UTC)ActorActionTargetDetailIP

Temporary password

Shown only once. The user must change it at sign-in.

Available Upgrades

Candidate groupStates includedCandidatesShow detailsCost

Purple = a 2024 swing state (AZ, GA, MI, NV, NC, PA, WI).

Payment is handled by Stripe — this site never sees your card.

Set up two-factor authentication

  1. 1 · Method
  2. 2 · Connect
  3. 3 · Verify
  4. 4 · Recovery codes

After your password, you'll also enter a 6-digit code each time you sign in.

Protect your administrator account

Administrator accounts can manage every user, back up the databases and read the audit log. Turn on two-factor authentication so a stolen password alone cannot sign in.