Poll manager
Close of polls: scan bag, scan seal, second badge, done.
A checklist of the containers expected at your precinct. Each one turns green as it's sealed. Nothing left unsealed at close.
Chain of custody for election offices
A tamper-evident record of who held every ballot container, seal, and memory card — where, and when. Fast enough for election night. Verifiable by anyone. It never touches a vote.
The 86-second explainer
From the first seal scan to a verifier anyone can run. Narrated, captioned, and rendered from the same animation you can scrub live.
Made for the phone in your pocket
How it works
A tool slower than paper gets bypassed. So the field app is scan-first, one big action per screen, and it never waits on the network.
Camera, NFC, or a tap on the expected item. Labels come from your badge printer; nothing new to buy.
Badge tap plus PIN. Both identities land in one signed event — the person who starts a handoff can never also accept it.
Signed on the device, queued in the outbox, countersigned and chained when the signal returns. Nothing is ever lost.
Built for every job on the floor
No menus to hunt through at nine o'clock at night. Each person opens the app and sees the one thing they need to do next.
Close of polls: scan bag, scan seal, second badge, done.
A checklist of the containers expected at your precinct. Each one turns green as it's sealed. Nothing left unsealed at close.
Hand off: show your code, watch both signatures land.
A signed QR for the whole load. If a bag's tag leaves your phone's reach, the phone alarms — a safeguard, never a judgment.
Arrival banner → verify seal → store.
A gateway at the door hears the tag before the van parks. The banner opens the receive flow; the two signatures are still required.
Scan the shelf. Walk the room. Everything accounted for.
Storage scans record exactly where each container sits. Scheduled walk-throughs compare the shelves against what should be there.
Control room: live map, expected vs. stored, exceptions inbox.
Every site on one map, every late run flagged, every exception assigned. Live updates over SignalR, coalesced so it never flickers.
Holds, two-person release, verifiable exports.
Place a hold in seconds; releasing one takes a second approver. Export a bundle a court can verify without calling us.
Pull list: location, container, seal, re-seal, return.
Two members sign in together and work the state's sample. The system records retrieval and re-sealing — never a count.
Logistics only. Status by site — never names, never counts.
A credentialed, read-only view of the sites you're assigned to. The same facts the office sees, with nothing personal attached.
Evidence that survives
Every action is a signed, immutable event. Each container's events form a hash chain. Merkle roots are anchored outside our database. And the export can be verified by anyone, offline.
Read how the evidence works Trust CenterECDSA P-256 on the phone. Non-exportable key, biometric or PIN.
The phone creates a P-256 key inside the Secure Enclave or Android Keystore. The private key cannot be exported or copied, so a valid signature proves which enrolled device, unlocked by that person's face, fingerprint, or PIN, recorded the event.
Each event hashes the one before. The server countersigns and assigns order.
When an event arrives, the server verifies the device signature, assigns the next sequence number for that container, and computes a chain hash from the event hash, the sequence, the previous chain hash, and the server time. It then countersigns that binding with its own key.
Signed tree heads every five minutes. Consistency proofs show nothing changed.
Every chain hash becomes a leaf. Leaves are hashed in pairs, and the pairs are hashed again, up to a single root that depends on every event beneath it. Every five minutes the server signs a tree head: the root, the tree size, the time, and the previous root.
A proof for any one event is a short list of sibling hashes. Anyone holding the event and its proof can recompute the root themselves and compare it with the published one. If it matches, that event existed, unchanged, when the root was published. A consistency proof does the same between two roots over time: the newer record is the older record plus appended events, with nothing altered or removed.
Admissibility is always the court's decision and depends on foundation testimony and state rules. EasyCustody gives counsel the record, the proofs, the published roots, and the tools; it does not give legal advice.
Try to tamper with a chain in the Trust Center →Confidential Ledger, immutable storage, and a daily root you can publish yourself.
Each signed tree head is written to Azure Confidential Ledger, a permissioned blockchain-based ledger that runs in hardware enclaves and returns a cryptographic receipt for every entry, and to an immutable Blob container with a time-based retention lock in a second region.
Events, keys, proofs, anchors, and a human-readable report in one zip.
Scope it by election, container set, or date range. The Records Officer can redact personal fields, and route data stays out unless the office selects it. Printed reports carry a watermark with the user, office, and time.
Runs on a laptop with no network. Two independent implementations must agree.
An open-source command-line tool that runs offline and prints a plain report. It checks the file hashes, that every device credential was signed by the office's certificate authority and valid at signing time, every event hash, every device signature, every chain link and sequence number, every server countersignature, the tree head signature, every inclusion proof, and the anchor receipts.
EasyCustody records containers, seals, media, locations, and people. It never tabulates, never reads ballots, never sees a voter list, and never connects to voting equipment. Exceptions use neutral reason codes — the product records what happened; humans decide what it means.
Every event is hash-chained to the one before it, and the whole record rolls up into a Merkle tree, the structure blockchains are built from. The signed roots are then written to Azure Confidential Ledger, a permissioned blockchain-based ledger that runs in hardware enclaves and returns a cryptographic receipt for every entry, and to immutable storage the office can hold itself. There is no cryptocurrency, no token, and no public network, and nothing here records a vote. What matters is not the label but the proof: anyone can check the record with the open verifier against a root the office published.
Early voting and drop boxes
Every site-day is opened against last night's seals, closed with new ones, stored overnight, and reconciled. Anything missing or extra becomes an exception — never a turnout number.
Hardware you already own
Container tracking runs on the AirFinder SuperTags and Link Labs cloud that EasyVote already deploys for EasyAssetTracker. One fleet is shared across EasyInventory, EasyAssetTracker, and EasyCustody, so IT sees the hardware it already approved and the office pays for one pool of tags.
AirFinder SuperTag: Bluetooth, Wi‑Fi, GPS, and cellular in one tag with years of battery life. EasyCustody reads the office's existing EasyAssetTracker account over Link Labs' API or webhooks. No custom radios, gateways, or firmware from us.
The courier drops a tag in the first bag and scans its label; the receive and store flows prompt its removal the moment the container is on the shelf. Attach and remove are signed custody events, so the record shows who did both.
Live fixes on the control room map, geofence alerts when a bag leaves a precinct or reaches HQ, shock and tamper sensing from the tag. All informational: the seal scan on receipt is still the proof, and fixes never enter the chain.
Azure reference architecture
Clients reach only Front Door. API Management is the single gate to private services. Custody data is append-only — enforced by the platform, not only by code.
This demo runs the whole thing on one laptop; every Azure service has a local stand-in behind the same interface. Cosmos DB → SQLite with append-only triggers · Key Vault → local keys · Confidential Ledger → an append-only ledger file · Azure SignalR → self-hosted SignalR · Blob → a folder. The signatures, chains, Merkle proofs, and verifier are the real thing.
Try it now
Sign in as any role, play the election-night simulation, and watch the control room light up. Then export a bundle and verify it yourself.