# Changemaker Lite V2 Documentation !!! success "V2 is Production Ready" Changemaker Lite V2 is a complete architectural rebuild now running in production. This documentation covers the modern TypeScript stack with dual API architecture, React admin interface, and comprehensive feature modules. ## Overview Changemaker Lite V2 is a self-hosted political campaign platform that consolidates advocacy email campaigns, geographic mapping, volunteer management, and administration into a single unified TypeScript stack. ### Key Highlights - **Dual API Architecture**: Express.js (main features) + Fastify (media library) - **Modern Stack**: TypeScript, Prisma + Drizzle ORM, PostgreSQL 16, Redis - **React Admin**: Vite + Ant Design + Zustand state management - **JWT Authentication**: Secure role-based access control with refresh tokens - **Comprehensive Features**: 14 backend modules, 42 frontend pages, 8 critical services - **Production Monitoring**: Prometheus, Grafana, Alertmanager with 12 custom metrics - **Security Audited**: 13 findings addressed (Feb 2026) ## Architecture Diagram ```mermaid graph TB User[User Browser] Nginx[Nginx Reverse Proxy] Admin[React Admin GUI
port 3000] ExpressAPI[Express API
port 4000
Prisma ORM] FastifyAPI[Fastify Media API
port 4100
Drizzle ORM] Postgres[(PostgreSQL 16)] Redis[(Redis)] BullMQ[BullMQ Queues] Listmonk[Listmonk
Newsletter] Prometheus[Prometheus
Monitoring] User --> Nginx Nginx --> |app.cmlite.org| Admin Nginx --> |api.cmlite.org| ExpressAPI Nginx --> |media.cmlite.org| FastifyAPI Admin --> ExpressAPI Admin --> FastifyAPI ExpressAPI --> Postgres ExpressAPI --> Redis ExpressAPI --> BullMQ FastifyAPI --> Postgres FastifyAPI --> Redis BullMQ --> Redis ExpressAPI --> Listmonk ExpressAPI --> Prometheus FastifyAPI --> Prometheus ``` ## Feature Modules ### Influence Module Email advocacy campaigns targeting elected representatives with: - Campaign management with rich text editor - Canadian representative lookup (postal code → MP/MPP/councillor) - Public campaign pages with email submission - Response wall with upvoting and moderation - BullMQ async email queue with SMTP delivery - Email verification and tracking [Learn more →](features/influence/overview.md) ### Map Module Geographic mapping and volunteer canvassing with: - Location CRUD with multi-provider geocoding (6 providers) - Cut (polygon) management with spatial queries - Volunteer shift scheduling and signup system - Full canvassing system with GPS tracking and visit recording - Walk sheets and QR codes for printable forms - NAR 2025 data import (Canadian electoral data) [Learn more →](features/map/overview.md) ### Landing Pages GrapesJS-based page builder with: - WYSIWYG editor with custom blocks - Public rendering at `/p/:slug` - MkDocs export for static documentation - Mobile-responsive templates [Learn more →](features/landing-pages/overview.md) ### Email Templates Template management system with: - GrapesJS email editor - Variable substitution - Integration with campaign emails - Version control [Learn more →](features/email-templates/overview.md) ### Media Manager Video library management with: - Dual API architecture (Fastify microservice) - Shared media public gallery - Reaction system (6 standard emojis) - Job queue monitoring - Bulk operations [Learn more →](features/media/overview.md) ### Newsletter Integration Listmonk sync with: - Participant/location/user syncing - Subscriber list management - Health monitoring - API integration [Learn more →](features/newsletter/overview.md) ### Observability Comprehensive monitoring with: - Prometheus metrics (12 custom metrics) - Grafana dashboards (3 pre-configured) - Alertmanager notifications - Service health checks - Data quality dashboard [Learn more →](features/observability/overview.md) ## Quick Links ### Getting Started - [Quick Start Guide](getting-started/quick-start.md) - Get running in 5 minutes - [Installation](getting-started/installation.md) - Detailed setup instructions - [Environment Setup](getting-started/environment.md) - Configure your .env file - [First Login](getting-started/first-login.md) - Access the admin interface ### Architecture - [Architecture Overview](architecture/index.md) - System design and components - [Dual API Design](architecture/dual-api.md) - Express + Fastify architecture - [Database Schema](architecture/database.md) - Prisma + Drizzle models - [Authentication Flow](architecture/authentication.md) - JWT security model - [Frontend Architecture](architecture/frontend.md) - React + Vite + Ant Design ### Development - [Local Development](development/local-setup.md) - Set up your dev environment - [npm Commands](development/npm-commands.md) - Common development tasks - [Database Migrations](development/migrations.md) - Schema changes workflow - [Testing](development/testing.md) - Test strategy and execution - [Code Style](development/code-style.md) - Standards and patterns ### Deployment - [Docker Compose](deployment/docker-compose.md) - Service orchestration - [Nginx Configuration](deployment/nginx.md) - Reverse proxy setup - [Environment Variables](deployment/environment-variables.md) - Complete reference - [Monitoring Stack](deployment/monitoring-stack.md) - Prometheus + Grafana - [Backup & Restore](deployment/backup-restore.md) - Data protection ### API Reference - [Authentication API](api-reference/auth.md) - Login, register, refresh - [Campaigns API](api-reference/campaigns.md) - Campaign CRUD - [Locations API](api-reference/locations.md) - Location management - [Media API](api-reference/media.md) - Video library - [Complete API Index](api-reference/index.md) - All endpoints ### User Guides - [Admin Guide](user-guides/admin-guide.md) - Platform administration - [Volunteer Guide](user-guides/volunteer-guide.md) - Canvassing workflows - [Campaign Manager Guide](user-guides/campaign-manager-guide.md) - Running campaigns - [Map Organizer Guide](user-guides/map-organizer-guide.md) - Location management - [Content Editor Guide](user-guides/content-editor-guide.md) - Landing pages ## Technology Stack ### Backend - **Express.js** - Main API server (TypeScript, port 4000) - **Fastify** - Media API microservice (TypeScript, port 4100) - **Prisma ORM** - Database modeling and migrations (27+ models) - **Drizzle ORM** - Media tables (lightweight schema-first) - **PostgreSQL 16** - Primary database - **Redis** - Caching, sessions, rate limiting, BullMQ backend - **BullMQ** - Job queues (email sending, geocoding) - **Winston** - Structured logging ### Frontend - **React 19** - UI library - **Vite** - Build tool and dev server - **Ant Design 5** - Component library - **Zustand** - State management - **React Router** - Client-side routing - **Axios** - HTTP client with interceptors - **Leaflet** - Interactive maps - **GrapesJS** - WYSIWYG page builder ### Infrastructure - **Docker Compose** - Service orchestration (20+ containers) - **Nginx** - Reverse proxy with subdomain routing - **Prometheus** - Metrics collection - **Grafana** - Metrics visualization - **Alertmanager** - Alert routing - **Listmonk** - Newsletter platform - **MailHog** - Email testing (development) ## Project Status ### Completed Phases (1-14) ✅ **Phase 1**: Foundation - Database, auth, basic API ✅ **Phase 2**: Auth + User Management - JWT, RBAC, user CRUD ✅ **Phase 3**: Admin GUI Foundation - React admin, routing, layouts ✅ **Phase 4**: Influence (Campaigns) - Campaign CRUD, admin pages ✅ **Phase 5**: Representatives + Postal Codes - API integration, caching ✅ **Phase 6**: Email Sending - BullMQ queue, SMTP, tracking ✅ **Phase 7**: Response Wall + Public Campaign View - Public pages, moderation ✅ **Phase 8**: Map (Locations) - Geocoding, CSV import, map rendering ✅ **Phase 9**: Map (Shifts) - Shift management, public signup ✅ **Phase 10**: Walk Sheets & QR Codes - Printable forms, QR generation ✅ **Phase 11**: Newsletter Integration - Listmonk sync ✅ **Phase 12**: Landing Page Builder - GrapesJS editor, MkDocs export ✅ **Phase 13**: Volunteer Canvassing - GPS tracking, visit recording ✅ **Phase 14**: Monitoring + DevOps - Prometheus, Grafana, backup ### Additional Features ✅ **Security Audit** - 13 findings addressed (Feb 2026) ✅ **NAR 2025 Import** - Canadian electoral data support ✅ **Media Manager** - Dual API video library ✅ **Email Templates** - Template management system ✅ **Data Quality Dashboard** - Geocoding metrics ✅ **Observability Dashboard** - Monitoring integration ### Current Phase 🚧 **Phase 15**: Testing + Polish - Comprehensive testing, documentation ## Migration from V1 If you're migrating from Changemaker Lite V1 (NocoDB-based architecture), see the [Migration Guide](migration/index.md) for: - Breaking changes (NocoDB → Prisma, sessions → JWT) - Data migration strategy - API endpoint mapping - Feature parity comparison ## Contributing Changemaker Lite is open source. We welcome contributions! See the [Contributing Guide](contributing/index.md) for: - Development setup - Code standards - Pull request process - Roadmap (Phase 15+) ## Support - **Documentation Issues**: [Report on GitHub](https://github.com/anthropics/claude-code/issues) - **Security Issues**: See [Security Policy](architecture/security.md) - **General Questions**: Check [Troubleshooting](troubleshooting/index.md) and [FAQ](troubleshooting/faq.md) --- **Last Updated**: February 2026 | **Version**: 2.0.0 | **Status**: Production Ready