Spaces:
Sleeping
Sleeping
Implementation Plan: Election Process Assistant
Source Analysis
- The actionable requirements source is
.kiro/specs/election-process-assistant/requirements.md. - The previous static JavaScript implementation has been removed at the user's request.
- This plan now targets a Python-first implementation with no Node.js runtime, package manager, or JavaScript application logic.
Definition of Done
The implementation is complete only when:
- Every requirement from 1 through 20 has a Python-backed workflow, service, or route.
- User-facing pages are rendered by Python.
- Data loading, timeline calculation, registration guidance, voter guide generation, feedback, analytics, integrations, security behavior, and export generation are implemented in Python.
- Any unavoidable browser-standard files are limited to static assets. The service worker is a tiny PWA cache file only; it contains no application workflow logic.
- Every deleted, created, or modified file is tracked in
progress.md. - Python tests and local HTTP checks pass before final delivery.
- The app can run locally with the bundled Python runtime and standard library only.
Python Technical Approach
- Use the Python standard library for the local runnable version and list production dependencies in
requirements.txt. - Implement a WSGI application served locally with
wsgiref.simple_server; use FastAPI/Uvicorn fromrequirements.txtfor the next production ASGI migration. - Use Python route handling for pages, forms, downloads, status lookups, guide generation, analytics, feedback, incidents, organizer tools, and admin views.
- Keep state in SQLite under
storage/app_state.sqlite3, isolated by an HTTP-only session cookie. - Protect all POST actions with session-bound CSRF tokens.
- Keep
election_assistant/seed_data.pyas rich US fallback data and shared metadata. - Use
election_assistant/data_sources.pyfor country-aware jurisdiction loading, adapter selection, JSON country configs, and SQLite jurisdiction caching. - Render HTML with Python helpers in
election_assistant/render.py. - Use Python services for each domain area:
timeline.pydata_sources.pyregistration.pyvoting.pyballot.pypolling.pydocuments.pyfeedback.pyanalytics.pyintegrations.pysecurity.pyeducation.py
- Add optional Google Civic API and Google Maps hooks controlled by
GOOGLE_CIVIC_API_KEYandGOOGLE_MAPS_EMBED_KEY. - Add a Python smoke test suite in
tests/test_python_app.py. - Add static CSS and SVG assets in
static/.
Requirement Coverage Checklist
Requirement 1: Interactive Election Process Navigation
- Render a step-by-step Python page.
- Persist completion state in the session's SQLite state row.
- Show completed, current, and upcoming states.
- Include details, required documents, estimated time, contextual help, and ARIA-friendly controls.
Requirement 2: Personalized Timeline and Deadline Management
- Calculate jurisdiction deadlines in Python.
- Sort deadlines chronologically and show days remaining.
- Highlight deadlines within 14 days.
- Generate
.icscalendar files in Python. - Show reminder schedules and timezone labels.
Requirement 3: Voter Registration Guidance and Tracking
- Determine status from Python profile state.
- Render jurisdiction-specific methods, official links, required documents, eligibility rules, processing time, and fallback instructions.
- Simulate official registration lookup through the Python integration layer.
Requirement 4: Multi-Language and Accessibility Support
- Support English, Spanish, Chinese, Vietnamese, Korean, Tagalog, Arabic, French, Russian, and Portuguese.
- Persist selected language and text-size settings.
- Render landmarks, skip link, keyboard-friendly controls, contrast-conscious design, scalable text, and screen-reader mode.
Requirement 5: Voting Method Education and Comparison
- Render all voting methods available for the selected jurisdiction.
- Compare deadlines, requirements, procedures, and accessibility.
- Show detailed instructions, mail tracking, early voting info, absentee criteria, and wait-time fields.
Requirement 6: Ballot Information and Candidate Research
- Retrieve ballot data from the active country adapter, using US seed fallback, JSON country config, Google Civic where configured for US, or manual fallback notes.
- Render candidate details, party, websites, statements, measures, fiscal impact, arguments, and citations.
- Persist local research notes and include them in guide exports.
Requirement 7: Real-Time Notifications and Updates
- Persist notification settings in Python state.
- Support email, SMS, push, categories, and reminder intervals.
- Simulate update notices and immediate disable behavior.
Requirement 8: Polling Location Finder with Real-Time Information
- Render assigned polling location, address, directions link, hours, wait time, parking, transit, accessibility, language support, and alternative locations within 10 miles from the selected country adapter.
Requirement 9: Eligibility Verification and Problem Resolution
- Verify age, citizenship, and residency in Python.
- Explain failed criteria and show resolution steps, voting rights restoration notes, official contacts, and hotline details.
Requirement 10: Personalized Voter Guide Generation
- Generate personalized guide HTML and plain text in Python.
- Generate printable guide layout and QR-style official resource tile.
- Include checklist, status, deadlines, polling place, ballot summary, notes, and contacts.
Requirement 11: Feedback Collection and Pain Point Identification
- Render feedback forms on major pages.
- Capture page, category, message, timestamp, and optional contact.
- Flag content errors and produce trend summaries in Python.
Requirement 12: Usage Analytics and System Improvement
- Track anonymized local events in Python state.
- Show page usage, completion, deadline adherence proxy, satisfaction score, feedback trends, and drop-off signals.
Requirement 13: Offline Access and Progressive Web App
- Add web manifest and service worker static files.
- Render an offline status notice and queueable-action explanation.
- Cache essential app shell files and document cache-size policy.
Requirement 14: Integration with Official Election Systems
- Implement Python mock adapters for registration status, polling locations, and ballot information.
- Validate schemas, log requests, use retry with exponential backoff, and show fallback notices.
Requirement 15: Security and Privacy Protection
- Do not collect SSN or driver license values.
- Validate password complexity in Python.
- Rate-limit failed login attempts.
- Enforce a 30-minute authenticated session timeout.
- Provide local account deletion.
- Use a Python local vault with PBKDF2-HMAC and Fernet-like authenticated encryption fallback using standard-library HMAC and XOR stream derivation for prototype storage, with clear production guidance to use audited cryptography.
Requirement 16: Educational Content and Civic Engagement
- Render educational modules, transcripts, completion state, voting rights context, volunteer opportunities, and election worker information.
Requirement 17: Mobile-First Responsive Design
- Use mobile-first CSS from 320px upward.
- Provide touch-friendly controls, compact layouts, responsive grids, print support, and orientation-safe content.
Requirement 18: Innovative Voting Method Proposals
- Render ranked choice, approval, and STAR voting explainers.
- Include benefits, challenges, examples, modernization proposals, advocacy resources, and reform tracking placeholders.
Requirement 19: Voter Registration Drive Support
- Render organizer toolkit, printable materials, QR-style links, batch tracking, multilingual options, legal guidance, and aggregate stats.
Requirement 20: Election Day Support and Incident Reporting
- Render election day dashboard, incident forms, categorization, immediate guidance, escalation messaging, hotline/legal resources, pattern detection, and election day reminder settings.
Build Phases
Phase 1: Replace Current Implementation
- Stop the old Node server.
- Delete the JavaScript/Node implementation files.
- Update
implimentation_plan.mdandprogress.md.
Phase 2: Python Skeleton
- Create
election_assistant/package. - Create
server.py. - Add static assets and manifest.
- Add storage directory placeholder and SQLite-backed state.
Phase 3: Python Domain Services
- Implement seed data, SQLite state management, timelines, registration, eligibility, voting, ballot, polling, guide exports, feedback, analytics, integration adapters, security, CSRF, and education services.
Phase 4: Python Rendering and Routes
- Render all user pages server-side.
- Add POST actions for progress, settings, profile, notifications, feedback, incidents, notes, batch tracking, password validation, vault operations, data refresh, and account deletion.
- Add download routes for ICS, HTML guide, plain text guide, and organizer toolkit.
Phase 5: PWA and Static Assets
- Add
static/styles.css,static/assets/icon.svg,static/assets/civic-map.svg,static/manifest.webmanifest, andstatic/service-worker.js. - Keep PWA script minimal and static only.
Phase 6: Verification
- Add Python smoke tests.
- Compile all Python files.
- Run tests with bundled Python.
- Start the Python server and verify HTTP responses.
- Record every result in
progress.md.