virtual_prompt_war / implimentation_plan.md
GOOD CAT
v1
3240f9f

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:

  1. Every requirement from 1 through 20 has a Python-backed workflow, service, or route.
  2. User-facing pages are rendered by Python.
  3. Data loading, timeline calculation, registration guidance, voter guide generation, feedback, analytics, integrations, security behavior, and export generation are implemented in Python.
  4. 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.
  5. Every deleted, created, or modified file is tracked in progress.md.
  6. Python tests and local HTTP checks pass before final delivery.
  7. 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 from requirements.txt for 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.py as rich US fallback data and shared metadata.
  • Use election_assistant/data_sources.py for 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.py
    • data_sources.py
    • registration.py
    • voting.py
    • ballot.py
    • polling.py
    • documents.py
    • feedback.py
    • analytics.py
    • integrations.py
    • security.py
    • education.py
  • Add optional Google Civic API and Google Maps hooks controlled by GOOGLE_CIVIC_API_KEY and GOOGLE_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 .ics calendar 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.md and progress.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, and static/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.