bunker-admin ac901c9e53 Update system hardening: breaking-release gate + release-mode rollback + health budgets + success archival
Four fixes building on the prior upgrade-path work. All observed on
marcelle across today's v2.9.2 → v2.9.5 cycles and addressed here.

- Fix 1 (breaking-release gate). upgrade-check.sh now parses the first
  line of each Gitea release body for `BREAKING: <reason>` and threads
  `breaking`/`breakingReason` through status.json into the API status
  response. Admin UI renders a red Alert with a typed-tag confirmation
  input and gates the Start Upgrade button. auto-upgrade.service.ts
  refuses to apply breaking releases, logging a skip and holding off
  until the operator confirms manually.

- Fix 2 (release-mode rollback). print_rollback_help and the --rollback
  flow both used `git checkout`, which silently fails in release
  installs (no .git). Added INSTALL_MODE branches: release mode
  downloads the prior tarball from Gitea using a new VERSION.rollback
  marker seeded at Phase 3 start. Source mode retains the existing
  git-based flow.

- Fix 3 (Phase 7 health budgets). admin verify_service_health budget
  30s → 90s (matches the admin container's start_period from commit
  47704667). Gancio + MkDocs switched from one-shot to the existing
  verify_service_health retry wrapper. Cuts the cry-wolf
  "services may still be starting" warning from every upgrade result.

- Fix 4 (symmetric success archival). Bash archive_failure_to_history
  already logs failures on exit; added a matching archive_success_to_
  history called after write_result on the success path. API-side
  archiveResult now dedupes on completedAt so double-recording (bash
  + post-restart handler) can't land twice in history.json.

Release the bundle as v2.9.6.

Bunker Admin
2026-04-15 16:57:13 -06:00
2026-04-02 15:14:27 -06:00
2026-03-22 21:47:09 -06:00
2026-04-02 15:14:27 -06:00
2026-03-09 16:05:25 -06:00
2026-03-22 21:47:09 -06:00

Changemaker Lite

Changemaker Lite

A self-hosted campaign platform for community organizers who want to own their data.

Documentation · Website · Apache 2.0 License


Changemaker Lite consolidates advocacy campaigns, geographic mapping, volunteer canvassing, media management, newsletters, and administration into a single Docker Compose stack. One .env file, one command to start, everything under your control.

Admin Dashboard

Why Changemaker Lite?

Most campaign tools are SaaS platforms that lock you into monthly subscriptions, hold your data hostage, and disappear when funding dries up. Changemaker Lite is different:

  • Self-hosted -- runs on any machine with Docker. Your server, your data.
  • All-in-one -- replaces 5-10 separate tools with a single integrated platform.
  • Free and open source -- Apache 2.0 licensed. Fork it, modify it, make it yours.
  • Privacy-first -- no telemetry, no third-party analytics, no data leaving your server.

What's Inside

Advocacy Campaigns

Let supporters look up their elected representatives by postal code and send advocacy emails in a few clicks. Track responses, moderate a public response wall, and monitor email delivery.

Public Campaign Page

Campaign Management

Interactive Map & Canvassing

Import thousands of addresses, draw canvassing areas, schedule volunteer shifts, and track door-to-door visits with GPS. Volunteers get a full-screen mobile map with real-time location tracking and visit recording.

Public Map

Canvass Dashboard

Volunteer Portal

Volunteers get their own portal with shift sign-ups, canvassing assignments, activity tracking, a social calendar, and a friends system to stay connected with their team.

Volunteer Map

Volunteer Calendar

Upload campaign videos, manage metadata, schedule publishing, and share them through a public gallery. Includes GDPR-compliant analytics.

Media Library

Public Gallery

Landing Pages & Email Templates

Build campaign microsites with a drag-and-drop GrapesJS editor. Design email templates for consistent campaign communications.

Landing Page Builder

SMS Campaigns, Newsletters & More

Send SMS campaigns via an Android bridge, sync subscribers to Listmonk for newsletters, recognize volunteers on a Wall of Fame leaderboard, and monitor everything with built-in Prometheus + Grafana observability.

SMS Dashboard

Wall of Fame

Quick Start

# One-command install (downloads pre-built images, runs config wizard)
curl -fsSL https://gitea.bnkops.com/admin/changemaker.lite/raw/branch/main/scripts/install.sh | bash

cd ~/changemaker.lite
docker compose up -d

Or clone and build from source:

git clone <repo-url> changemaker.lite
cd changemaker.lite

cp .env.example .env
# Edit .env -- set passwords, JWT secrets, admin credentials

docker compose up -d v2-postgres redis api admin
docker compose exec api npx prisma migrate deploy
docker compose exec api npx prisma db seed

Then open http://localhost:3000 and log in with the admin credentials from your .env.

Documentation

Full documentation is available at cmlite.org/docs/getting-started.

The docs site covers installation, configuration, all features, architecture details, production deployment with Pangolin tunnels, and troubleshooting. It is the authoritative and up-to-date reference for Changemaker Lite.

Architecture at a Glance

Layer Technology
API Express.js + Prisma + PostgreSQL 16
Media API Fastify + Prisma (shared DB)
Frontend React + Vite + Ant Design + Zustand
Reverse Proxy Nginx (subdomain routing)
Cache & Queue Redis + BullMQ
Newsletter Listmonk
Monitoring Prometheus + Grafana + Alertmanager
Tunneling Pangolin (self-hosted Cloudflare alternative)

The entire stack runs on Docker Compose. Enable optional modules (media, newsletters, SMS, monitoring) with feature flags in .env.

License

Apache License 2.0

AI Disclaimer

AI tools were used to assist in the creation of this project. All generated code has been reviewed. Users should test all functionality to ensure it meets their requirements.

Description
Changemaker-lite is the current active development branch of Changemaker, focused on streamlining core services. These improvements will be merged into the master branch once ready.
https://cmlite.org
Readme 121 MiB
2026-05-21 10:36:40 -06:00
Languages
HTML 48.3%
TypeScript 46.1%
Shell 2.5%
JavaScript 1.5%
CSS 0.6%
Other 0.9%