Trust you can check.
EIRIS handles field evidence, agent locations and results. It is designed so every record belongs to one organization, every important action leaves a permanent record, and every photo can be checked against what was captured in the field.
No system is perfectly secure, and we will not tell you otherwise. This page describes what EIRIS is designed to do, and how you can check it.
- 16:43:01Coordinator · Bauchi LGAbroadcast.sent12 wards · 214 agents
- 16:42:52Election adminexport.createdIncidents CSV · reason recorded
- 16:42:43Agent · PU 05/02/01/019result.submittedBirshi/Miri · sheet photo + hash
- 16:42:34Verifier 01media.viewedSheet photo · PU 05/02/08/021
- 16:42:25Coordinator · Kangereincident.acknowledgedINC-0412 · High · Kangere
- 16:42:16Verifier 03result.acceptedPU 05/02/15/007 · totals match sheet
- 16:42:07Agent · PU 05/02/04/012checkin.createdDawaki ward · GPS 38 m from unit
Your data stays inside your organization.
EIRIS can host many organizations. Observer groups, media monitors and campaign situation rooms never see each other's agents, incidents or evidence. Isolation is enforced in layers.
- 01
Every record carries its organization
Incidents, results, media, agents and audit records are stored with an organization ID. Election records also carry an election ID.
- 02
Every request is checked
The application and the API confirm the organization on each read and write, not only at sign-in.
- 03
The database adds a second lock
PostgreSQL row-level security is applied where practical, so a missed check in code is not the only safeguard. It is being introduced in stages.
Request path · demo
- Signed in, session valid
- Role allows viewing incidents
- Organization matches
- Ward is in scope
- Signed in, session valid
- Role allows viewing incidents
- Organization does not match
A role is never the whole answer.
Every permission is checked against four things: the organization, the election, the role, and the geography a person is responsible for. A ward coordinator in Dawaki sees Dawaki, not the next ward.
| Action | |||||
|---|---|---|---|---|---|
| View incidents | Own ward | Own LGA | This election | All areas | Summary only |
| Acknowledge and resolve incidents | Own ward | Own LGA | No access | All areas | No access |
| See agent check-in locations | Own ward | Own LGA | No access | All areas | No access |
| Accept or flag a result | No access | No access | This election | Allowed | No access |
| Message agents | Own ward | Own LGA | No access | All areas | No access |
| Export sensitive data | No access | No access | No access | With confirmation | No access |
| Change election setup | No access | No access | No access | With confirmation | No access |
| See another organization's data | Never | Never | Never | Never | Never |
- View incidentsOwn ward
- Acknowledge and resolve incidentsOwn ward
- See agent check-in locationsOwn ward
- Accept or flag a resultNo access
- Message agentsOwn ward
- Export sensitive dataNo access
- Change election setupNo access
- See another organization's dataNever
A ward coordinator can
- See their own ward
- See their assigned polling units
- See their assigned agents
- Handle incidents in their area
A ward coordinator cannot
- Open unrelated wards
- Change billing or organization settings
- See another organization
- Change election configuration
Every important action leaves a record.
Audit records are written in the same database transaction as the change they describe, so one cannot happen without the other. They are append-only: the application has no way to edit or delete them.
- Sign-in and sign-out
- Role changes
- Account creation
- Assignments
- Report edits
- Incident status changes
- Verification decisions
- Result corrections
- Media requests and deletions
- Exports
- AI actions
- Support access
- Configuration changes
- actor
- Verification officer 03
- action
- result.accepted
- entity
- Result · PU 05/02/04/012 · Dawaki
- before
- status = pending_review
- after
- status = accepted
- reason
- Typed totals match the sheet photo
- time
- 20 Feb · 16:42:07 WAT
- session
- browser · session 7f3a · IP recorded
- organization
- Example Observer Group
- election
- Governorship (demo)
The original is never altered.
Photos and video from the field are kept exactly as captured. Previews, AI readings and corrections are stored separately, beside the original, never on top of it.
Chain of custody
Result sheet photo · PU 05/02/04/012
- 16:38:52Captured
Photo taken in the field app. Original bytes kept, metadata preserved.
- 16:38:52Fingerprinted on the phone
SHA-256 computed before anything else touches the file.
- 16:41:10Uploaded when signal returned
Saved offline first, then sent unchanged.
- 16:41:11Fingerprint checked on arrival
The server recomputes the hash. It matches.
- 16:42:03Viewed by Verification officer 03
Every view and download is logged against the photo.
sha256 on server 9f2c41e07ab3d8c56e1f0b94a27d3c88e5b1a6f40c7d29e8b31f5a0c6d4e7b12 Match
Who has opened this photo
- Verification officer 0316:42:03 · viewed
- Coordinator · Dawaki16:55:40 · viewed
- Election admin17:20:12 · downloaded · reason: legal team request
- No resizing or re-encoding of originals
- Signed, short-lived links to view media
- Download permissions set per role
- Duplicates suggested, never merged automatically
Collect what the operation needs. Nothing more.
An agent's location is sensitive. EIRIS records it when an agent checks in or files a report, to show whether they are at their polling unit. It is not designed for continuous tracking.
Incident evidence is handled with care
Field evidence can include private people, vulnerable people or distressing images. Access is restricted by role, sensitive items can carry a content warning, downloads need permission, and every access is recorded.
- Who can see agent locationsCoordinators, within their area
- Location precision on the mapExact at check-in
- Keep location records for90 days after the election
- Keep movement historyOff
Correct a submitted result
PU 05/02/09/004 · Majidadi B · Governorship (demo)
The original submission and sheet photo are kept. Your correction is stored as a separate record.
Consequential steps ask twice.
Some actions change what an organization can rely on. For these, EIRIS asks for stronger permission, a reason, an on-screen confirmation and, optionally, a second-factor code. Then it records all of it.
- Giving someone a more powerful role
- Correcting a submitted result
- Exporting sensitive data
- Suspending many agents at once
- Deleting an election
- Creating an API key
- Transferring organization ownership
Built to keep working when parts of it don't.
Election day is the wrong day to discover a weak link. EIRIS is designed to degrade gracefully, and its backups are only counted once they have been restored.
If the internet drops in the field
Agents keep working offline. Reports send when signal returns.
If aI is unavailable
Deterministic checks and human review carry on. AI is never a single point of failure.
If live updates fail
Screens fall back to regular refresh. The database stays the source of truth.
If a detailed map layer fails
The base map and polling-unit points remain.
Backups that have been restored
The production database has automatic backups with point-in-time restore. Before each election, a backup is restored into the staging environment and checked. A backup that has never been restored is not counted as one.
Plain answers about hosting.
We would rather tell you exactly where things stand than hand you a badge.
- Hosting today
- The first release runs in Frankfurt, Germany (EU region eu-central-1). Data is encrypted in transit, and media is served through signed, short-lived links.
- Nigerian data protection
- A legal review under the Nigeria Data Protection Act 2023 is in progress. We will work through data-residency requirements with you before any deployment.
- Dedicated or private hosting
- For organizations that need their own infrastructure, Enterprise and Private deployments are scoped per engagement.
- Certifications
- EIRIS does not hold third-party security certifications today. We will say so plainly until that changes.