20 KiB

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

# 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:

// 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

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.