"Ex Igne, Aurum" - From Fire, Gold
A ranked voting application for the Campaign Playbook with configurable assessment criteria.
The State of Cibola Election Portal is an official government-style voting application designed for campaign team assessments. It features:
- π³οΈ Ranked-Choice Voting: Drag-and-drop interface for team rankings
- βοΈ Configurable Criteria: Admin-managed assessment criteria per round
- π Real-Time Monitoring: Live voting progress and activity feeds
- π Advanced Results: Multiple views with CSV/PDF export
- π Secure Authentication: Team-based voter access
- π― Round Management: Lock/unlock voting rounds dynamically
- Team code authentication with session persistence
- Intuitive drag-and-drop ranking interface
- Vote confirmation with official ballot numbers
- Vote history tracking
- Mobile-responsive design
-
Setup Tab:
- Team name and code configuration
- Criteria configuration (add, edit, activate/deactivate, assign to rounds)
- Voter management (add, remove, reassign)
- Round lock controls
-
Live Monitoring Tab:
- Real-time voting progress by team
- Recent activity feed
- Participation statistics
- Auto-updating with Supabase realtime
-
Results Tab:
- View by all rounds, specific round, or criterion
- Medal rankings (π₯π₯π₯)
- Point breakdowns
- Export to CSV and PDF
-
Voter Registry Tab:
- Complete voter list with voting status matrix
- Filter by team
- Visual indicators for completed votes
- Frontend: React 18 + Vite
- Styling: Tailwind CSS
- Database: Supabase (PostgreSQL)
- UI Components: Lucide React icons
- Drag & Drop: react-beautiful-dnd
- PDF Export: jsPDF
The application uses 6 Supabase tables:
- teams - Campaign teams (Vega, Spence, Sterling, Strongbow, Thorne)
- voters - Registered voters with team assignments
- votes - Individual ballot submissions with rankings
- round_locks - Round open/closed status
- app_settings - Application configuration
- criteria - Configurable assessment criteria (KEY FEATURE)
git clone <repository-url>
cd playbook_votingnpm install-
Create a new Supabase project at supabase.com
-
Run the SQL schema in the Supabase SQL Editor:
- Open
supabase-schema.sql - Copy and execute the entire schema in your Supabase project
- Open
-
The schema will create:
- All required tables with proper constraints
- Row Level Security policies
- Initial data (5 teams, 4 round locks, 3 default criteria)
The Supabase credentials are already configured in src/lib/supabase.js:
- URL:
https://wbptrluqjmunknpdqsow.supabase.co - Anon Key: Already included
If you need to use a different Supabase project, update these values in src/lib/supabase.js.
npm run devThe application will open at http://localhost:3000
- Click "Voter Portal" from the home page
- Enter your team's access code (provided to your team by the campaign coordinator)
- Enter your first name
- Select a round and criterion to vote
- Drag teams to rank them (your own team is excluded)
- Submit your official ballot
Team Codes: Team access codes are confidential and provided directly to each campaign team. Contact your campaign coordinator if you need your team's code.
- Click "Administrator Portal" from the home page
- Enter admin password:
HGI2028 - Access four main tabs:
- Team Configuration: Edit team names and codes
- Criteria Configuration:
- Add new criteria (e.g., "Innovation", "Teamwork")
- Edit names, icons, descriptions
- Assign criteria to specific rounds (checkboxes)
- Activate/deactivate criteria
- Changes apply to future rounds, preserving historical data
- Voter Management: Add voters, track participation
- Round Locks: Lock/unlock voting rounds
- View real-time voting progress
- See recent ballot submissions
- Track participation by team
- Filter by round
- View aggregate or filtered results
- Export to CSV or PDF
- Medal rankings with point breakdowns
- Complete voter list with status matrix
- Visual indicators for completed votes
- Filter by team
The Criteria Configuration system allows administrators to fully customize assessment criteria:
-
Add New Criteria:
- Unique ID (e.g., "innovation")
- Display name (e.g., "Innovation")
- Emoji icon (e.g., "π‘")
- Description
- Active rounds (checkboxes for R1-R4)
-
Edit Existing Criteria:
- Toggle rounds on/off
- Activate/deactivate
- Delete if no longer needed
-
Historical Preservation:
- Changes only affect future votes
- Past votes retain original criterion data
- Results show historical criterion names if changed
- Creativity π¨ (Rounds 1-4): Originality and innovative thinking
- Effectiveness β‘ (Rounds 1-4): Impact and measurable results
- Adaptation π (Round 4): Ability to adjust based on feedback
- 1st place: 5 points
- 2nd place: 4 points
- 3rd place: 3 points
- 4th place: 2 points
- 4 total assessment rounds
- Each round can have different active criteria
- Admins control when rounds are open/locked
Format: CPB-R#C-TEAM-####
- Example:
CPB-R1C-NOVA-4857
- Ironwood (#3e2723): Primary dark brown
- Sulphur (#ffd700): Accent gold
- Federal Blue (#1e3a8a): Buttons and highlights
- Cream (#fef3c7): Light backgrounds
- Headers: Georgia serif
- Body: Inter sans-serif
- πΊπΈ US Flag
- β State seal star
- π³οΈ Voting
- π Admin access
npm run buildThe built files will be in the dist/ directory.
No .env file is required. Supabase credentials are configured directly in src/lib/supabase.js.
For production deployment, consider:
- Moving credentials to environment variables
- Enabling Supabase RLS with proper authentication
- Using Supabase Auth for admin login
State of Cibola Election Commission Email: [email protected] Founded: 2026
Ex Igne, Aurum β’ State of Cibola β’ Founded 2026