# Feature Parity: V1 vs V2 This document provides a comprehensive comparison of features between Changemaker Lite V1 and V2, including feature status, implementation differences, and migration priorities. ## Overview V2 achieves **100% feature parity** with V1 core functionality and adds significant new capabilities. Some V1 features are implemented differently (better!) in V2. !!! success "V2 Feature Status" - **✅ All V1 Core Features**: Campaigns, locations, shifts, response wall - **✅ Enhanced Features**: Multi-provider geocoding, canvassing with GPS, monitoring - **✅ New Features**: Landing pages, email templates, media library, NAR import ## Feature Comparison Matrix ### Core Features | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Email Advocacy Campaigns** | ✅ | ✅ | Enhanced | V2 adds BullMQ queue, Listmonk sync | | **Representative Lookup** | ✅ | ✅ | Enhanced | V2 adds caching, multi-level support | | **Response Wall** | ✅ | ✅ | Enhanced | V2 adds moderation, upvoting, verification | | **Location Management** | ✅ | ✅ | Enhanced | V2 adds structured address, geocoding quality | | **Geocoding** | ✅ | ✅ | Enhanced | V1: Nominatim only → V2: 6 providers | | **Volunteer Shifts** | ✅ | ✅ | Enhanced | V2 adds cut assignments, status tracking | | **Public Shift Signup** | ✅ | ✅ | Same | V2 creates temp users automatically | | **User Management** | ✅ | ✅ | Enhanced | V2 adds unified user model, RBAC | | **Admin Authentication** | ✅ | ✅ | Changed | V1: Sessions → V2: JWT | ### Map Features | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Location Map (Public)** | ✅ | ✅ | Enhanced | V2 adds color-coded markers, cut overlays | | **Location Map (Admin)** | ✅ | ✅ | Enhanced | V2 adds click-to-add, move mode, geolocate | | **Cuts (Territories)** | ✅ | ✅ | Enhanced | V2 adds drawing mode, point-in-polygon | | **CSV Import/Export** | ✅ | ✅ | Enhanced | V2 adds flexible column mapping | | **Bulk Geocoding** | ❌ | ✅ | New | V2 adds bulk geocode endpoint | | **Reverse Geocoding** | ❌ | ✅ | New | V2 adds lat/lng → address lookup | | **Walk Sheets** | ❌ | ✅ | New | V2 adds printable walk sheets with QR codes | | **Cut Export** | ❌ | ✅ | New | V2 adds printable location reports | | **NAR Import** | ❌ | ✅ | New | V2 adds Canadian electoral data import | | **Data Quality Dashboard** | ❌ | ✅ | New | V2 adds geocoding quality metrics | ### Canvassing Features | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Canvassing System** | ❌ | ✅ | New | V2 adds full canvassing workflow | | **GPS Tracking** | ❌ | ✅ | New | V2 adds volunteer GPS trail recording | | **Walking Routes** | ❌ | ✅ | New | V2 adds optimized route algorithm | | **Visit Recording** | ❌ | ✅ | New | V2 adds outcome tracking, notes | | **Canvass Dashboard** | ❌ | ✅ | New | V2 adds admin analytics, leaderboards | | **Volunteer Portal** | ❌ | ✅ | New | V2 adds dedicated volunteer interface | | **Activity History** | ❌ | ✅ | New | V2 adds visit history, stats | ### Content Management | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Landing Page Builder** | ❌ | ✅ | New | V2 adds GrapesJS editor | | **Block Library** | ❌ | ✅ | New | V2 adds reusable content blocks | | **MkDocs Export** | ❌ | ✅ | New | V2 adds static site generation | | **Email Templates** | ❌ | ✅ | New | V2 adds template system with versioning | | **Template Variables** | ❌ | ✅ | New | V2 adds dynamic content substitution | ### Media Management | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Video Library** | ❌ | ✅ | New | V2 adds video CRUD, categories | | **Video Upload** | ❌ | ✅ | New | V2 adds upload with metadata extraction | | **Public Gallery** | ❌ | ✅ | New | V2 adds public video gallery | | **Reactions** | ❌ | ✅ | New | V2 adds 6 emoji reactions | | **Video Sharing** | ❌ | ✅ | New | V2 adds lock/unlock system | ### Email & Newsletters | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **SMTP Email Sending** | ✅ | ✅ | Enhanced | V2 adds BullMQ queue, test mode | | **Email Queue** | ✅ | ✅ | Enhanced | V1: Bull → V2: BullMQ with monitoring | | **Email Tracking** | ✅ | ✅ | Enhanced | V2 adds sent/failed stats per campaign | | **Listmonk Integration** | ❌ | ✅ | New | V2 adds newsletter sync | | **Subscriber Management** | ❌ | ✅ | New | V2 adds campaign participant → list sync | ### Monitoring & DevOps | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **Prometheus Metrics** | ❌ | ✅ | New | V2 adds 12 custom `cm_*` metrics | | **Grafana Dashboards** | ❌ | ✅ | New | V2 adds 3 pre-configured dashboards | | **Alertmanager** | ❌ | ✅ | New | V2 adds alert rules, Gotify integration | | **Health Checks** | ❌ | ✅ | New | V2 adds Docker healthchecks (7 services) | | **Backup Script** | ✅ | ✅ | Enhanced | V2 adds PostgreSQL + Listmonk + uploads | | **Observability Dashboard** | ❌ | ✅ | New | V2 adds admin observability page | ### Platform Services | Feature | V1 | V2 | Status | Notes | |---------|----|----|--------|-------| | **NocoDB** | ✅ (data layer) | ✅ (read-only) | Changed | V2 uses Prisma, NocoDB for browsing | | **Redis** | ✅ | ✅ | Enhanced | V2 adds authentication required | | **PostgreSQL** | ✅ (NocoDB) | ✅ (direct) | Enhanced | V2 uses PostgreSQL 16 directly | | **MkDocs** | ❌ | ✅ | New | V2 adds documentation site | | **Code Server** | ❌ | ✅ | New | V2 adds web-based IDE | | **n8n** | ❌ | ✅ | New | V2 adds workflow automation | | **Gitea** | ❌ | ✅ | New | V2 adds Git repository hosting | | **Homepage** | ❌ | ✅ | New | V2 adds service dashboard | | **Pangolin Tunnel** | ❌ | ✅ | New | V2 adds self-hosted tunnel alternative | | **Cloudflare Tunnel** | ✅ | ❌ | Removed | Replaced by Pangolin | ## Detailed Feature Comparisons ### 1. Email Advocacy Campaigns #### V1 Implementation ``` Features: - Create campaign (title, description, slug) - Target representatives via postal code lookup - Send emails to representatives (SMTP) - Track sent emails - Basic campaign listing Technology: - NocoDB tables (campaigns, campaign_emails) - Bull job queue for async sending - Nodemailer SMTP - Represent API integration ``` #### V2 Implementation ``` Features: - All V1 features plus: - Highlighted campaigns (featured on homepage) - Response wall toggle per campaign - Custom email subject/body templates - Target filtering (level, position, name, email, postal code) - Email stats dashboard (queued, sent, failed, mailto clicks) - BullMQ queue admin (pause, resume, retry failed) - Listmonk newsletter sync (campaign participants → list) - Public campaign gallery - Public campaign detail page Technology: - Prisma models (Campaign, CampaignEmail, Representative, etc.) - BullMQ job queue with monitoring - Nodemailer SMTP + MailHog test mode - Represent API client with in-memory rate limiter (55/min) - Redis cache for representatives (60min TTL) ``` **Migration Impact**: V1 campaigns migrate directly. New fields default to sensible values. ### 2. Representative Lookup #### V1 Implementation ``` Features: - Lookup by postal code (Represent API) - Display representative name, email, district, party - No caching (every lookup hits API) Limitations: - Rate limit issues (API throttling) - Slow response times - No offline capability ``` #### V2 Implementation ``` Features: - All V1 features plus: - Redis cache (60min TTL) - Fire-and-forget cache writes (non-blocking) - Multi-level support (federal, provincial, municipal) - Representative admin (view cache, stats, delete) - Cache stats (total, by level, by party) - Health check endpoint Performance: - First lookup: ~500ms (API call + cache write) - Cached lookup: ~20ms (Redis) - Rate limiter: 55 requests/min (Represent API limit) ``` **Migration Impact**: Representative cache can be migrated or rebuilt from API. ### 3. Location Management & Geocoding #### V1 Implementation ``` Features: - Create location (single address field) - Geocode via Nominatim (single provider) - Support level (string field) - Public map display (circle markers) Limitations: - No structured address (city, province separate) - Single geocoding provider (Nominatim) - No geocoding quality tracking - No bulk operations ``` #### V2 Implementation ``` Features: - All V1 features plus: - Structured address (street, city, province, postal code, country) - Multi-provider geocoding (6 providers with fallback): 1. Nominatim (default, free) 2. ArcGIS (enterprise) 3. Photon (European focus) 4. Mapbox (if API key provided) 5. Google (if API key provided) 6. OpenCage (if API key provided) - Geocoding metadata (provider, quality, timestamp) - Bulk geocoding endpoint (100 at a time) - Reverse geocoding (lat/lng → address) - CSV import with flexible column mapping - CSV export with filters - Location history (edit trail) - Contact fields (name, phone, email) - NAR import (Canadian electoral data, 50k+ locations) - Data quality dashboard (geocoding success rate by provider) - Click-to-add location on map - Drag-to-move location on map - Geolocate button (browser location) - Fullscreen map mode Technology: - Prisma Location model (structured schema) - Multi-provider geocoding service with retry logic - PostgreSQL spatial extensions (future: PostGIS) - React Leaflet map components ``` **Migration Impact**: V1 single address field parsed into structured fields. Geocoding metadata added. ### 4. Volunteer Shifts #### V1 Implementation ``` Features: - Create shift (name, start/end time, location, capacity) - Public signup form - Email confirmation - Admin view signups Limitations: - No cut assignment (shifts not linked to territories) - No signup status tracking - No volunteer portal ``` #### V2 Implementation ``` Features: - All V1 features plus: - Cut assignment (link shift to territory) - Signup status (PENDING, CONFIRMED, CANCELLED, COMPLETED, NO_SHOW) - Shift requirements field - Temp user creation (public signup creates USER with 30-day expiry) - Signup cancellation (volunteer self-service) - Admin signup management (update status, notes) - Email all signups (broadcast to shift volunteers) - Shift stats (total shifts, upcoming, signups by status) - Volunteer portal (view assigned shifts) Technology: - Prisma models (Shift, ShiftSignup with status enum) - TEMP user creation (automatic expiry) - Email templates for confirmations ``` **Migration Impact**: V1 shifts migrate. Signups extracted to separate table. Status defaults to CONFIRMED. ### 5. Canvassing System (New in V2) #### V2 Features ``` Complete canvassing workflow: - Start/end canvass session (track volunteer time) - GPS tracking (real-time trail recording, 30-day retention) - Walking route algorithm (nearest-neighbor with haversine distance) - Visit recording (outcome, support level, notes, rate-limited 30/min) - Visit outcomes: - CONTACT_MADE - NOT_HOME - REFUSED - MOVED - DECEASED - WRONG_ADDRESS - Admin dashboard: - Active sessions - Total visits (today, week) - Activity feed (recent visits) - Cut progress (locations visited vs total) - Leaderboard (top volunteers by visits, period filter) - Volunteer portal: - Full-screen canvass map - GPS position tracking - Walking route display - Bottom sheet visit recording - Activity history (my visits) - Route history (past sessions) Technology: - Prisma models (CanvassSession, CanvassVisit, TrackingSession, TrackPoint) - React Leaflet map with custom controls - Zustand canvass store (client state) - Abandoned session cleanup (hourly, ACTIVE > 12h → ABANDONED) - Stale tracking cleanup (no data for 2h) ``` **Migration Impact**: New feature, no V1 equivalent. ### 6. Landing Page Builder (New in V2) #### V2 Features ``` Visual page builder: - GrapesJS WYSIWYG editor - Drag-and-drop block placement - Custom block library (Hero, Features, CTA, etc.) - Live preview - Desktop-only editor (mobile warning) - Save hotkey (Ctrl+S) Page management: - CRUD operations (create, edit, delete, publish) - Slug-based routing (/p/:slug) - Public rendering - MkDocs export (Jinja2 Material theme overrides) - Export formats: themed (with header/footer) or standalone Technology: - GrapesJS 0.21+ - Prisma models (LandingPage, PageBlock) - React admin UI - MkDocs integration (override templates) ``` **Migration Impact**: New feature, no V1 equivalent. ### 7. Email Templates (New in V2) #### V2 Features ``` Template management: - Create templates (HTML + plain text) - Template categories (campaign, shift, response, system) - Variable substitution ({{campaignTitle}}, {{userName}}, etc.) - Version control (publish creates new version) - Live preview - Test email sending Admin features: - Template library - Version history - Rollback to previous version - Duplicate template - Delete template (soft delete) Technology: - Prisma models (EmailTemplate, EmailTemplateVersion) - Handlebars-style variable syntax - HTML + plain text variants ``` **Migration Impact**: New feature, no V1 equivalent. ### 8. Media Library (New in V2) #### V2 Features ``` Video management: - Upload videos (MP4, MOV, AVI, MKV, WebM, M4V, FLV up to 10GB) - Automatic metadata extraction (FFprobe): - Duration, dimensions, orientation - Video quality (resolution-based) - Audio track detection - Bulk operations (delete, lock/unlock) - Categories (assign to shared gallery) - Lock/unlock system (public visibility control) Public gallery: - Category-based filtering - Video detail page - Reactions (6 emoji types: like, love, laugh, wow, sad, angry) - Comment system (future) Technology: - Fastify microservice (port 4100) - Drizzle ORM (separate from Prisma) - FFprobe metadata extraction (30s timeout) - Dual API architecture (media separate from main API) ``` **Migration Impact**: New feature, no V1 equivalent. ### 9. Monitoring Stack (New in V2) #### V2 Features ``` Metrics collection: - 12 custom cm_* metrics: - cm_api_uptime_seconds - cm_emails_sent_total - cm_emails_failed_total - cm_email_queue_size - cm_email_send_duration_seconds - cm_login_attempts_total - cm_active_sessions - cm_campaign_emails_total - cm_response_submissions_total - cm_canvass_visits_total - cm_active_canvass_sessions - cm_shift_signups_total - cm_external_service_up Dashboards: - System Health (CPU, memory, disk, network) - Application Overview (API requests, errors, response times) - API Performance (endpoint latency, throughput) Alerts: - High error rate (> 5% for 5min) - API down - High email queue size (> 1000) - External service down (NocoDB, Redis, PostgreSQL) Technology: - Prometheus (metrics collection, 15s scrape) - Grafana (visualization, 3 dashboards) - Alertmanager (alert routing) - Gotify (notification delivery, optional) - cAdvisor (container metrics) - Node Exporter (host metrics) - Redis Exporter (Redis metrics) ``` **Migration Impact**: New feature, no V1 equivalent. Enable with `--profile monitoring`. ## Feature Status Summary ### V1 Features in V2 | Feature | V2 Status | Implementation | |---------|-----------|----------------| | Campaigns | ✅ Complete | Enhanced with highlighting, response wall toggle | | Representative Lookup | ✅ Complete | Enhanced with caching, stats | | Response Wall | ✅ Complete | Enhanced with moderation, upvoting | | Locations | ✅ Complete | Enhanced with structured address, multi-provider geocoding | | Shifts | ✅ Complete | Enhanced with cut assignment, status tracking | | Public Shift Signup | ✅ Complete | Same functionality, improved UX | | User Management | ✅ Complete | Enhanced with unified model, RBAC | | Email Sending | ✅ Complete | Enhanced with BullMQ, monitoring | | CSV Import/Export | ✅ Complete | Enhanced with flexible mapping | **Result**: **100% V1 feature parity achieved** ### V1 Features NOT in V2 | Feature | Reason | Alternative | |---------|--------|-------------| | NocoDB as primary data layer | Replaced by Prisma ORM | NocoDB available as read-only browser | | Session-based authentication | Replaced by JWT | More scalable, stateless auth | | Separate apps (influence, map) | Unified into single API | Better code reuse, consistency | ### V2-Only Features | Feature | Status | Phase | |---------|--------|-------| | Landing Page Builder | ✅ Complete | Phase 12 | | Email Templates | ✅ Complete | Phase 12 | | Media Library | ✅ Complete | Phase 12 | | Canvassing System | ✅ Complete | Phase 13 | | GPS Tracking | ✅ Complete | Phase 13 | | Walk Sheets | ✅ Complete | Phase 10 | | NAR Import | ✅ Complete | Phase 14 | | Data Quality Dashboard | ✅ Complete | Phase 14 | | Monitoring Stack | ✅ Complete | Phase 14 | | Pangolin Tunnel | ✅ Complete | Phase 14 | | Observability Dashboard | ✅ Complete | Phase 14 | ## Migration Priority When migrating from V1 to V2, prioritize features in this order: ### 1. Critical (Must Migrate First) - [ ] **User Authentication** - Foundational for all access - [ ] **User Management** - Admin accounts - [ ] **Campaigns** - Core advocacy feature - [ ] **Locations** - Core mapping feature - [ ] **Representative Lookup** - Core advocacy feature ### 2. High Priority (Migrate Early) - [ ] **Response Wall** - Public engagement - [ ] **Email Sending** - Campaign functionality - [ ] **Shift Management** - Volunteer coordination - [ ] **Public Shift Signup** - Volunteer onboarding ### 3. Medium Priority (Migrate Mid-Phase) - [ ] **Representative Cache** - Performance optimization - [ ] **Postal Code Cache** - Performance optimization - [ ] **Cuts (Territories)** - Advanced mapping - [ ] **CSV Import/Export** - Bulk operations ### 4. Low Priority (Migrate Later) - [ ] **Email Queue Monitoring** - Admin analytics - [ ] **Campaign Email Tracking** - Admin analytics - [ ] **Representative Admin** - Cache management ### 5. Optional (New V2 Features) - [ ] **Landing Pages** - Public content - [ ] **Email Templates** - Email customization - [ ] **Media Library** - Video management - [ ] **Canvassing** - Field operations - [ ] **Monitoring** - System observability - [ ] **NAR Import** - Canadian data ## Workarounds for Missing Features If you need a V1 feature not yet migrated: ### 1. Run V1 and V2 in Parallel ```bash # Keep V1 running for specific features docker compose -f docker-compose.v1.yml up -d # Run V2 for new features docker compose up -d # Use reverse proxy to route by path: # /v1/* → V1 apps # /v2/* → V2 API ``` ### 2. Manual Data Entry For small datasets, manually re-enter data in V2 admin: - Campaigns: Use Campaigns page (CRUD) - Locations: Use Locations page or CSV import - Shifts: Use Shifts page (CRUD) ### 3. Custom Migration Scripts For unique V1 customizations, write custom transformation scripts: ```javascript // scripts/migrate-custom-fields.js const customFieldMapping = { v1Field: 'v2Field', // Add your mappings }; // Transform and import ``` ## Future Roadmap ### Planned for V2 Phase 15+ - [ ] **Multi-tenancy** - Multiple organizations per instance - [ ] **Mobile apps** - iOS/Android native apps - [ ] **Advanced analytics** - Campaign performance, volunteer metrics - [ ] **AI integration** - Campaign suggestions, email drafting - [ ] **Social media integration** - Share campaigns, auto-post - [ ] **SMS campaigns** - Text message advocacy - [ ] **Phone banking** - Call tracking, scripts - [ ] **Donation tracking** - Fundraising integration - [ ] **Event management** - Rally, town hall scheduling ### Community Feature Requests Vote on features at: https://github.com/changemaker-lite/v2/discussions ## Related Documentation - [Migration Overview](index.md) - Migration planning - [Breaking Changes](breaking-changes.md) - V1→V2 differences - [Data Migration](data-migration.md) - Migration procedures - [V2 Features](../features/index.md) - Complete feature documentation ## Next Steps 1. **Review feature matrix** - Identify features you use 2. **Prioritize migration** - Critical features first 3. **Test on staging** - Verify feature parity 4. **Provide feedback** - Report missing features 5. **Plan new feature adoption** - Landing pages, canvassing, etc. !!! success "Feature Parity Achieved" V2 provides 100% V1 feature parity plus significant new capabilities. No functionality will be lost in migration.