Phase 1-14 complete: - Unified Express.js API (TypeScript, Prisma ORM, PostgreSQL 16) - React Admin GUI (Vite + Ant Design + Zustand) - JWT auth with refresh tokens - Influence: Campaigns, Representatives, Responses, Email Queue - Map: Locations, Cuts, Shifts, Canvassing System - NAR data import infrastructure (2025 format) - Listmonk newsletter integration - Landing page builder (GrapesJS) - MkDocs + Code Server integration - Volunteer portal with GPS tracking - Monitoring stack (Prometheus, Grafana, Alertmanager) - Pangolin tunnel integration Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
50 lines
1.1 KiB
JSON
50 lines
1.1 KiB
JSON
{
|
|
"name": "alberta-influence-campaign",
|
|
"version": "1.0.0",
|
|
"description": "A locally-hosted political influence campaign tool for Alberta constituents",
|
|
"main": "server.js",
|
|
"scripts": {
|
|
"start": "node server.js",
|
|
"dev": "nodemon server.js",
|
|
"test": "jest"
|
|
},
|
|
"keywords": [
|
|
"politics",
|
|
"alberta",
|
|
"campaign",
|
|
"represent",
|
|
"email"
|
|
],
|
|
"author": "",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"express": "^4.18.2",
|
|
"cors": "^2.8.5",
|
|
"helmet": "^7.0.0",
|
|
"dotenv": "^16.3.1",
|
|
"express-validator": "^7.0.1",
|
|
"express-rate-limit": "^6.8.1",
|
|
"axios": "^1.5.0",
|
|
"nodemailer": "^6.9.4",
|
|
"express-session": "^1.17.3",
|
|
"bcryptjs": "^2.4.3",
|
|
"multer": "^1.4.5-lts.1",
|
|
"qrcode": "^1.5.3",
|
|
"winston": "^3.11.0",
|
|
"winston-daily-rotate-file": "^4.7.1",
|
|
"compression": "^1.7.4",
|
|
"csurf": "^1.11.0",
|
|
"cookie-parser": "^1.4.6",
|
|
"bull": "^4.12.0",
|
|
"prom-client": "^15.1.0",
|
|
"sharp": "^0.33.0",
|
|
"ioredis": "^5.3.2"
|
|
},
|
|
"devDependencies": {
|
|
"nodemon": "^3.0.1",
|
|
"jest": "^29.6.2"
|
|
},
|
|
"engines": {
|
|
"node": ">=16.0.0"
|
|
}
|
|
} |