619 lines
20 KiB
Markdown

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