Skip to content

Services

Changemaker Lite orchestrates 30+ services via Docker Compose. This page is your map to every service: what it does, how to reach it, and where to find its upstream documentation.


Core Platform

The essential services that power the application.

  • Express API


    Main V2 API server. Handles authentication, campaigns, map, shifts, pages, email, and all business logic. Prisma ORM with PostgreSQL.

    Port: 4000 · Container: changemaker-v2-api

    API Reference

  • Fastify Media API


    Video library server. Upload, metadata extraction (FFprobe), analytics, scheduled publishing, and public gallery. Shares the same PostgreSQL database.

    Port: 4100 · Container: changemaker-media-api

    Media Guide

  • Admin GUI


    React single-page application (Vite + Ant Design + Zustand). Serves the admin dashboard, public campaign pages, volunteer portal, and media gallery — all from one build.

    Port: 3000 · Container: changemaker-v2-admin

    Feature Guides

  • PostgreSQL 16


    Primary database shared by both APIs. Managed by Prisma migrations. Contains 190+ tables covering users, campaigns, locations, shifts, media, and more.

    Port: 5433 (host) / 5432 (container) · Container: changemaker-v2-postgres

    PostgreSQL Docs

  • Redis


    In-memory store for rate limiting, BullMQ job queues (email, video scheduling), geocoding cache, and session data. Requires authentication.

    Port: 6379 · Container: redis-changemaker

    Redis Docs

  • Nginx


    Reverse proxy handling all subdomain routing (app., api., media., docs., etc.). Includes security headers (HSTS, CSP, Permissions-Policy) and WebSocket support.

    Port: 80 / 443 · Container: changemaker-v2-nginx

    Nginx Docs


Communication & Email

  • Listmonk


    Self-hosted newsletter and mailing list manager. Drop-in replacement for Mailchimp. Opt-in sync with the main platform imports participants, locations, and users as subscriber lists.

    Port: 9001 · Container: listmonk-app · Subdomain: listmonk.DOMAIN

    Listmonk Docs

  • MailHog


    Email capture for development. All outgoing email is intercepted and displayed in a web UI when EMAIL_TEST_MODE=true. No real emails are sent.

    Port: 8025 (web) / 1025 (SMTP) · Container: mailhog-changemaker · Subdomain: mail.DOMAIN

    MailHog GitHub


Content & Editing

  • MkDocs


    Material-themed documentation site with full-text search, blog, social cards, and Jinja2 template overrides. Two containers: live preview (dev) and static site (production).

    Port: 4003 (dev) / 4004 (static) · Container: mkdocs-changemaker · Subdomain: docs.DOMAIN

    MkDocs Material

  • Code Server


    Full VS Code in the browser. Edit configuration files, templates, and documentation from anywhere without SSH. Supports extensions.

    Port: 8888 · Container: code-server-changemaker · Subdomain: code.DOMAIN

    Code Server Docs


Data & Automation

  • NocoDB


    Airtable-alternative database browser. Provides a spreadsheet-like interface to browse, filter, sort, and export campaign data. Read-only access to the main database.

    Port: 8091 · Container: changemaker-v2-nocodb · Subdomain: db.DOMAIN

    NocoDB Docs

  • n8n


    Visual workflow automation platform. Connect APIs, trigger actions on events, schedule tasks, and build custom integrations — all without code. 400+ built-in integrations.

    Port: 5678 · Container: n8n-changemaker · Subdomain: n8n.DOMAIN

    n8n Docs

  • Gitea


    Self-hosted Git repository hosting. Version control for campaign code, configuration, templates, and documentation. Includes issues, pull requests, and CI/CD.

    Port: 3030 (web) / 2222 (SSH) · Container: gitea-changemaker · Subdomain: git.DOMAIN

    Gitea Docs


Utilities

  • Mini QR


    Lightweight QR code generator. Produces PNG images for walk sheets, campaign materials, and event signage. Embedded in the admin dashboard via iframe.

    Port: 8089 · Container: mini-qr · Subdomain: qr.DOMAIN

  • Homepage


    Service dashboard showing the status of all containers at a glance. Auto-generated services.yaml from config.sh provides both production and local links.

    Port: 3010 · Container: homepage-changemaker · Subdomain: home.DOMAIN

    Homepage Docs

  • Excalidraw


    Collaborative whiteboard for brainstorming, diagramming, and visual planning. Real-time collaboration via WebSocket.

    Port: 8090 · Container: excalidraw-changemaker · Subdomain: draw.DOMAIN

    Excalidraw

  • Vaultwarden


    Self-hosted Bitwarden-compatible password manager. Secure credential sharing for campaign teams. Requires HTTPS for account creation; local browsing works on HTTP.

    Port: 8445 · Container: vaultwarden-changemaker · Subdomain: vault.DOMAIN

    Vaultwarden Wiki


Team Communication

  • Rocket.Chat


    Self-hosted team chat for volunteer coordination. Supports channels, direct messaging, threads, and file sharing. Embeddable in the admin dashboard via iframe. Enable with ENABLE_CHAT=true.

    Port: 3000 (internal) · Container: rocketchat-changemaker · Subdomain: chat.DOMAIN

    Rocket.Chat Docs

  • Jitsi Meet


    Self-hosted video conferencing with JWT authentication. Four containers (web, Prosody, Jicofo, JVB) provide the full video call stack. Integrated with Rocket.Chat for one-click calls from channels and DMs. Enable with ENABLE_MEET=true.

    Containers: jitsi-web, jitsi-prosody, jitsi-jicofo, jitsi-jvb · Subdomain: meet.DOMAIN

    Setup Guide · Jitsi Docs

  • Gancio


    Self-hosted event management platform. Automatic shift-to-event sync (when GANCIO_SYNC_ENABLED=true) publishes shifts as public events. Uses the shared PostgreSQL database. Embeddable calendar widget available for MkDocs pages.

    Port: 8092 · Container: gancio-changemaker · Subdomain: events.DOMAIN

    Gancio Docs


Networking & Tunneling

  • Pangolin + Newt


    Self-hosted tunnel server with the Newt client container. Exposes your services to the internet without port forwarding. Handles SSL/TLS, works behind CGNAT and double NAT.

    Container: newt-changemaker · Managed from Admin → Settings → Tunnel

    Deployment Guide · Pangolin GitHub


Monitoring Stack

These services run behind the monitoring Docker Compose profile. Start them with:

docker compose --profile monitoring up -d
  • Prometheus


    Metrics collection and time-series database. Scrapes 12 custom cm_* application metrics plus container, host, and Redis metrics. Pre-configured alert rules.

    Port: 9090 · Container: prometheus-changemaker

    Prometheus Docs

  • Grafana


    Metrics visualization with 3 auto-provisioned dashboards: API Overview, Infrastructure, and Campaign Activity. Supports custom dashboards and alerting.

    Port: 3005 · Container: grafana-changemaker · Subdomain: grafana.DOMAIN

    Grafana Docs

  • Alertmanager


    Alert routing and notification delivery. Receives alerts from Prometheus and dispatches to Gotify, email, or webhooks based on configurable rules.

    Port: 9093 · Container: alertmanager-changemaker

    Alertmanager Docs

  • cAdvisor


    Container resource metrics. Exposes CPU, memory, network, and filesystem usage per container for Prometheus to scrape.

    Port: 8086 · Container: cadvisor-changemaker

    cAdvisor GitHub

  • Node Exporter


    Host system metrics. Reports CPU, memory, disk, and network stats for the underlying server.

    Port: 9100 · Container: node-exporter-changemaker

    Node Exporter

  • Redis Exporter


    Redis metrics for Prometheus. Exposes connection counts, memory usage, command stats, and keyspace info.

    Port: 9121 · Container: redis-exporter-changemaker

    Redis Exporter GitHub

  • Gotify


    Self-hosted push notification server. Receives alerts from Alertmanager and delivers them to mobile/desktop clients.

    Port: 8889 · Container: gotify-changemaker

    Gotify Docs


Quick Reference

All services at a glance with their default ports and subdomains.

Service Port Subdomain Docker Profile
Express API 4000 api. default
Media API 4100 media. default
Admin GUI 3000 app. default
PostgreSQL 5433 default
Redis 6379 default
Nginx 80/443 (all) default
Listmonk 9001 listmonk. default
MailHog 8025 mail. default
MkDocs (dev) 4003 docs. default
MkDocs (static) 4004 (root) default
Code Server 8888 code. default
NocoDB 8091 db. default
n8n 5678 n8n. default
Gitea 3030 git. default
Mini QR 8089 qr. default
Homepage 3010 home. default
Excalidraw 8090 draw. default
Vaultwarden 8445 vault. default
Rocket.Chat chat. default
Jitsi Meet meet. default
Gancio 8092 events. default
Newt (tunnel) default
Prometheus 9090 monitoring
Grafana 3005 grafana. monitoring
Alertmanager 9093 monitoring
cAdvisor 8086 monitoring
Node Exporter 9100 monitoring
Redis Exporter 9121 monitoring
Gotify 8889 monitoring

Starting services selectively

You don't need to run everything. Start only what you need:

# Core only
docker compose up -d v2-postgres redis api admin

# Add nginx for subdomain routing
docker compose up -d nginx

# Add monitoring
docker compose --profile monitoring up -d

See Getting Started for the recommended startup order.