How navy-cod/univote-mobile-voting-app works
UniVote is a local-first Android voting app: users sign in or register, then role-based screens lead voters through election selection, ballot submission and receipt, while staff configure elections and publish reconciled results. Its other major product branches cover turnout statistics, tamper-evident audit records, notifications, and support reports. The documented architecture places Compose screens and ViewModels above repositories, Room storage, and pure-Kotlin domain rules. Several subsystems are represented by their exact enclosing directories because their implementation was not sampled; edges are limited to relationships shown in the README or excerpts.
Main entry points: ResultsRepository.kt Counting and results · UniVoteDatabase.kt Room database · ElectionRepository.kt Election setup · admin Election administration
Components 22
App and screens
- Android app
app/src/main/java/com/univote/evoting/MainActivity.kt - Role navigation
app/src/main/java/com/univote/evoting/ui/navigation - Sign-in and registration
app/src/main/java/com/univote/evoting/ui/auth - Election administration
app/src/main/java/com/univote/evoting/ui/admin - Ballot experience
app/src/main/java/com/univote/evoting/ui/voter
Election workflow
- Election setup
app/src/main/java/com/univote/evoting/data/repository/ElectionRepository.kt - Vote casting
app/src/main/java/com/univote/evoting/data/repository/VotingRepository.kt - Counting and results
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt - Election lifecycle
app/src/main/java/com/univote/evoting/domain/ElectionStateMachine.kt - Results calculation
app/src/main/java/com/univote/evoting/domain/ResultsCalculator.kt
Oversight services
- Turnout statistics
app/src/main/java/com/univote/evoting/data/repository/StatisticsRepository.kt - Audit review
app/src/main/java/com/univote/evoting/ui/audit/AuditLogScreen.kt - Audit records
app/src/main/java/com/univote/evoting/data/repository/AuditRepository.kt - Hash-chain logger
app/src/main/java/com/univote/evoting/data/audit/AuditLogger.kt - Support reports
app/src/main/java/com/univote/evoting/ui/support - Notifications
app/src/main/java/com/univote/evoting/core/notify
Data and domain
- Local authentication
app/src/main/java/com/univote/evoting/data/repository/LocalAuthRepository.kt - User session
app/src/main/java/com/univote/evoting/core/session/SessionManager.kt - Room database
app/src/main/java/com/univote/evoting/data/local/UniVoteDatabase.kt - Demo data seeding
app/src/main/java/com/univote/evoting/data/local/DatabaseSeeder.kt - Domain rules
app/src/main/java/com/univote/evoting/domain
Other components
- User
Connections 29
- User → Android app: opens
- Android app → Role navigation: starts navigation
app/src/main/java/com/univote/evoting/MainActivity.kt - User → Sign-in and registration: signs in
- Sign-in and registration → Local authentication: authenticates
- Local authentication → Room database: reads and writes
app/src/main/java/com/univote/evoting/data/repository/LocalAuthRepository.kt - Local authentication → User session: establishes session
- Role navigation → Election administration: routes staff
app/src/main/java/com/univote/evoting/ui/navigation/AppNavHost.kt - Role navigation → Ballot experience: routes voters
app/src/main/java/com/univote/evoting/ui/navigation/AppNavHost.kt - Election administration → Election setup: manages elections
app/src/main/java/com/univote/evoting/ui/admin/ElectionDetailScreen.kt - Election setup → Election lifecycle: checks lifecycle
app/src/main/java/com/univote/evoting/data/repository/ElectionRepository.kt - Election setup → Room database: stores setup
app/src/main/java/com/univote/evoting/data/repository/ElectionRepository.kt - Ballot experience → Vote casting: submits ballot
- Vote casting → Room database: records vote
app/src/main/java/com/univote/evoting/data/repository/VotingRepository.kt - Election administration → Counting and results: approves results
- Counting and results → Results calculation: calculates tally
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt - Counting and results → Room database: stores snapshot
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt - Election administration → Turnout statistics: views turnout
- Audit review → Audit records: loads records
app/src/main/java/com/univote/evoting/ui/audit/AuditLogScreen.kt - Audit records → Room database: reads audit log
app/src/main/java/com/univote/evoting/data/repository/AuditRepository.kt - Election setup → Hash-chain logger: logs changes
app/src/main/java/com/univote/evoting/data/repository/ElectionRepository.kt - Vote casting → Hash-chain logger: logs vote event
app/src/main/java/com/univote/evoting/data/repository/VotingRepository.kt - Counting and results → Hash-chain logger: logs publication
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt - Hash-chain logger → Room database: appends hash chain
app/src/main/java/com/univote/evoting/data/audit/AuditLogger.kt - User → Support reports: files report
- Counting and results → Notifications: announces publication
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt - Android app → Demo data seeding: initializes data
- Demo data seeding → Room database: populates
app/src/main/java/com/univote/evoting/data/local/DatabaseSeeder.kt - Election setup → Domain rules: applies domain rules
app/src/main/java/com/univote/evoting/data/repository/ElectionRepository.kt - Counting and results → Domain rules: uses domain rules
app/src/main/java/com/univote/evoting/data/repository/ResultsRepository.kt