{"config":{"lang":["en"],"separator":"[\\s\\u200b\\-_,:!=\\[\\]()\"`/]+|\\.(?!\\d)|&[lg]t;|(?!\\b)(?=[A-Z][a-z])","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to Changemaker Lite","text":"

Stop feeding your secrets to corporations. Own your political infrastructure.

"},{"location":"#quick-start","title":"Quick Start","text":"

Get up and running in minutes:

# Clone the repository\ngit clone https://gitea.bnkops.com/admin/changemaker.lite\ncd changemaker.lite\n\n# Configure environment\n./config.sh\n\n# Start all services\ndocker compose up -d\n\n# For production deployment with Cloudflare tunnels\n./start-production.sh\n
"},{"location":"#services","title":"Services","text":"

Changemaker Lite includes these essential services:

"},{"location":"#core-services","title":"Core Services","text":""},{"location":"#communication-automation","title":"Communication & Automation","text":""},{"location":"#data-development","title":"Data & Development","text":""},{"location":"#interactive-tools","title":"Interactive Tools","text":""},{"location":"#getting-started","title":"Getting Started","text":"
  1. Setup: Run ./config.sh to configure your environment
  2. Launch: Start services with docker compose up -d
  3. Dashboard: Access the Homepage at http://localhost:3010
  4. Production: Deploy with Cloudflare tunnels using ./start-production.sh
"},{"location":"#project-structure","title":"Project Structure","text":"
changemaker.lite/\n\u251c\u2500\u2500 docker-compose.yml    # Service definitions\n\u251c\u2500\u2500 config.sh            # Configuration wizard\n\u251c\u2500\u2500 start-production.sh  # Production deployment script\n\u251c\u2500\u2500 mkdocs/              # Documentation source\n\u2502   \u251c\u2500\u2500 docs/            # Markdown files\n\u2502   \u2514\u2500\u2500 mkdocs.yml       # MkDocs configuration\n\u251c\u2500\u2500 configs/             # Service configurations\n\u2502   \u251c\u2500\u2500 homepage/        # Homepage dashboard config\n\u2502   \u251c\u2500\u2500 code-server/     # VS Code settings\n\u2502   \u2514\u2500\u2500 cloudflare/      # Tunnel configurations\n\u251c\u2500\u2500 map/                 # Map application\n\u2502   \u251c\u2500\u2500 app/             # Node.js application\n\u2502   \u251c\u2500\u2500 Dockerfile       # Container definition\n\u2502   \u2514\u2500\u2500 .env             # Map configuration\n\u2514\u2500\u2500 assets/              # Shared assets\n    \u251c\u2500\u2500 images/          # Image files\n    \u251c\u2500\u2500 icons/           # Service icons\n    \u2514\u2500\u2500 uploads/         # Listmonk uploads\n
"},{"location":"#key-features","title":"Key Features","text":""},{"location":"#system-requirements","title":"System Requirements","text":""},{"location":"#learn-more","title":"Learn More","text":""},{"location":"cost-comparison/","title":"Cost Comparison: Corporation vs. Community","text":""},{"location":"cost-comparison/#the-true-cost-of-corporate-dependency","title":"The True Cost of Corporate Dependency","text":"

When movements choose corporate software, they're not just paying subscription fees\u2014they're paying with their power, their privacy, and their future. Let's break down the real costs.

"},{"location":"cost-comparison/#monthly-cost-analysis","title":"Monthly Cost Analysis","text":""},{"location":"cost-comparison/#small-campaign-50-supporters-5000-emailsmonth","title":"Small Campaign (50 supporters, 5,000 emails/month)","text":"Service Category Corporate Solution Monthly Cost Changemaker Lite Monthly Cost Email Marketing Mailchimp $59/month Listmonk $0* Database & CRM Airtable Pro $240/month NocoDB $0* Website Hosting Squarespace $40/month Static Server $0* Documentation Notion Team $96/month MkDocs $0* Development GitHub Codespaces $87/month Code Server $0* Automation Zapier Professional $73/month n8n $0* File Storage Google Workspace $72/month PostgreSQL + Storage $0* Analytics Corporate tracking Privacy cost\u2020 Self-hosted $0* TOTAL $667/month $50/month

*Included in base Changemaker Lite hosting cost \u2020Privacy costs are incalculable but include surveillance, data sales, and community manipulation

"},{"location":"cost-comparison/#medium-campaign-500-supporters-50000-emailsmonth","title":"Medium Campaign (500 supporters, 50,000 emails/month)","text":"Service Category Corporate Solution Monthly Cost Changemaker Lite Monthly Cost Email Marketing Mailchimp $299/month Listmonk $0* Database & CRM Airtable Pro $600/month NocoDB $0* Website Hosting Squarespace $65/month Static Server $0* Documentation Notion Team $240/month MkDocs $0* Development GitHub Codespaces $174/month Code Server $0* Automation Zapier Professional $146/month n8n $0* File Storage Google Workspace $144/month PostgreSQL + Storage $0* Analytics Corporate tracking Privacy cost\u2020 Self-hosted $0* TOTAL $1,668/month $75/month"},{"location":"cost-comparison/#large-campaign-5000-supporters-500000-emailsmonth","title":"Large Campaign (5,000 supporters, 500,000 emails/month)","text":"Service Category Corporate Solution Monthly Cost Changemaker Lite Monthly Cost Email Marketing Mailchimp $1,499/month Listmonk $0* Database & CRM Airtable Pro $1,200/month NocoDB $0* Website Hosting Squarespace + CDN $120/month Static Server $0* Documentation Notion Team $480/month MkDocs $0* Development GitHub Codespaces $348/month Code Server $0* Automation Zapier Professional $292/month n8n $0* File Storage Google Workspace $288/month PostgreSQL + Storage $0* Analytics Corporate tracking Privacy cost\u2020 Self-hosted $0* TOTAL $4,227/month $150/month"},{"location":"cost-comparison/#annual-savings-breakdown","title":"Annual Savings Breakdown","text":""},{"location":"cost-comparison/#3-year-cost-comparison","title":"3-Year Cost Comparison","text":"Campaign Size Corporate Total Changemaker Total Savings Small $24,012 $1,800 $22,212 Medium $60,048 $2,700 $57,348 Large $152,172 $5,400 $146,772"},{"location":"cost-comparison/#hidden-costs-of-corporate-software","title":"Hidden Costs of Corporate Software","text":""},{"location":"cost-comparison/#what-you-cant-put-a-price-on","title":"What You Can't Put a Price On","text":""},{"location":"cost-comparison/#privacy-violations","title":"Privacy Violations","text":""},{"location":"cost-comparison/#political-manipulation","title":"Political Manipulation","text":""},{"location":"cost-comparison/#movement-disruption","title":"Movement Disruption","text":""},{"location":"cost-comparison/#the-changemaker-advantage","title":"The Changemaker Advantage","text":""},{"location":"cost-comparison/#what-you-get-for-50-150month","title":"What You Get for $50-150/month","text":""},{"location":"cost-comparison/#complete-infrastructure","title":"Complete Infrastructure","text":""},{"location":"cost-comparison/#true-ownership","title":"True Ownership","text":""},{"location":"cost-comparison/#community-support","title":"Community Support","text":""},{"location":"cost-comparison/#the-compound-effect","title":"The Compound Effect","text":""},{"location":"cost-comparison/#year-over-year-savings","title":"Year Over Year Savings","text":"

Corporate software costs grow exponentially: - Year 1: \"Starter\" pricing to hook you - Year 2: Feature limits force tier upgrades - Year 3: Usage growth triggers premium pricing - Year 4: Platform changes force expensive migrations - Year 5: Lock-in enables arbitrary price increases

Changemaker Lite costs grow linearly with actual infrastructure needs: - Year 1: Base infrastructure costs - Year 2: Modest increases for storage/bandwidth only - Year 3: Scale only with actual technical requirements - Year 4: Community-driven improvements at no extra cost - Year 5: Established infrastructure with declining per-user costs

"},{"location":"cost-comparison/#10-year-projection","title":"10-Year Projection","text":"Year Corporate (Medium Campaign) Changemaker Lite Annual Savings 1 $20,016 $900 $19,116 2 $22,017 $900 $21,117 3 $24,219 $1,080 $23,139 4 $26,641 $1,080 $25,561 5 $29,305 $1,260 $28,045 6 $32,235 $1,260 $30,975 7 $35,459 $1,440 $34,019 8 $39,005 $1,440 $37,565 9 $42,905 $1,620 $41,285 10 $47,196 $1,620 $45,576 TOTAL $318,998 $12,600 $306,398"},{"location":"cost-comparison/#calculate-your-own-savings","title":"Calculate Your Own Savings","text":""},{"location":"cost-comparison/#current-corporate-costs-worksheet","title":"Current Corporate Costs Worksheet","text":"

Email Marketing: $____/month Database/CRM: $____/month Website Hosting: $____/month Documentation: $____/month Development Tools: $____/month Automation: $____/month File Storage: $____/month Other SaaS: $____/month

Monthly Total: $____ Annual Total: $____

Changemaker Alternative: $50-150/month Your Annual Savings: $____

"},{"location":"cost-comparison/#beyond-the-numbers","title":"Beyond the Numbers","text":""},{"location":"cost-comparison/#what-movements-do-with-their-savings","title":"What Movements Do With Their Savings","text":"

The money saved by choosing community-controlled technology doesn't disappear\u2014it goes directly back into movement building:

"},{"location":"cost-comparison/#making-the-switch","title":"Making the Switch","text":""},{"location":"cost-comparison/#transition-strategy","title":"Transition Strategy","text":"

You don't have to switch everything at once:

  1. Start with documentation - Move your knowledge base to MkDocs
  2. Add email infrastructure - Set up Listmonk for newsletters
  3. Build your database - Move contact management to NocoDB
  4. Automate connections - Use n8n to integrate everything
  5. Phase out corporate tools - Cancel subscriptions as you replicate functionality
"},{"location":"cost-comparison/#investment-timeline","title":"Investment Timeline","text":""},{"location":"cost-comparison/#roi-calculation","title":"ROI Calculation","text":"

Most campaigns recover their entire first-year investment in 60-90 days through subscription savings alone.

Ready to stop feeding your budget to corporate surveillance? Get started with Changemaker Lite today and take control of your digital infrastructure.

"},{"location":"build/","title":"Getting Started with Digital Liberation","text":"

Welcome to Changemaker-Lite! You're about to reclaim your digital sovereignty and stop feeding your secrets to corporations. This guide will help you set up your own political infrastructure that you actually own and control.

"},{"location":"build/#quick-start","title":"Quick Start","text":""},{"location":"build/#build-changemkaer-lite","title":"Build Changemkaer-Lite","text":"
# Clone the repository\ngit clone https://gitea.bnkops.com/admin/changemaker.lite\ncd changemaker.lite\n

Cloudflare Credentials

The config.sh script will ask you for your Cloudflare credentials to get started. You can find more information on how to find this in the Cloudlflare Configuration

# Configure environment (creates .env file)\n./config.sh\n
# Start all services\ndocker compose up -d\n
"},{"location":"build/#deploy","title":"Deploy","text":"

Cloudflare

Right now, we suggest deploying using Cloudflare for simplicity and protections against 99% of surface level attacks to digital infrastructure. If you want to avoid using this service, we recommend checking out Pagolin as a drop in replacement.

For secure public access, use the production deployment script:

./start-production.sh\n
"},{"location":"build/#why-changemaker-lite","title":"Why Changemaker Lite?","text":"

Before we dive into the technical setup, let's be clear about what you're doing here:

The Reality

If you do politics, who is reading your secrets? Every corporate platform you use is extracting your power, selling your data, and building profiles on your community. It's time to break free.

"},{"location":"build/#what-youre-getting","title":"What You're Getting","text":""},{"location":"build/#what-youre-leaving-behind","title":"What You're Leaving Behind","text":""},{"location":"build/#system-requirements","title":"System Requirements","text":""},{"location":"build/#operating-system","title":"Operating System","text":"

Getting Started on Ubunut

Want some help getting started with a baseline buildout for a Ubunut server? You can use our BNKops Server Build Script

New to Linux?

Consider Linux Mint - it looks like Windows but opens the door to true digital freedom.

"},{"location":"build/#hardware-requirements","title":"Hardware Requirements","text":"

Cloud Hosting

You can run this on a VPS from providers like Hetzner, DigitalOcean, or Linode for ~$20/month.

"},{"location":"build/#software-prerequisites","title":"Software Prerequisites","text":"

Getting Started on Docker

Want some help getting started with a baseline buildout for a Ubunutu server? You can use our BNKops Server Build Script to roll out a configured server in about 20 mins!

  1. Docker Engine (24.0+)
# Install Docker\ncurl -fsSL https://get.docker.com | sudo sh\n\n# Add your user to docker group\nsudo usermod -aG docker $USER\n\n# Log out and back in for group changes to take effect\n
  1. Docker Compose (v2.20+)
# Verify Docker Compose v2 is installed\ndocker compose version\n
  1. Essential Tools
# Install required packages\nsudo apt update\nsudo apt install -y git curl jq openssl\n
"},{"location":"build/#installation","title":"Installation","text":""},{"location":"build/#1-clone-repository","title":"1. Clone Repository","text":"
git clone https://gitea.bnkops.com/admin/changemaker.lite\ncd changemaker.lite\n
"},{"location":"build/#2-run-configuration-wizard","title":"2. Run Configuration Wizard","text":"

The config.sh script will guide you through the initial setup:

./config.sh\n

This wizard will:

"},{"location":"build/#configuration-options","title":"Configuration Options","text":"

During setup, you'll be prompted for:

  1. Domain Name: Your primary domain (e.g., example.com)
  2. Cloudflare Settings (optional):
  3. API Token
  4. Zone ID
  5. Account ID
  6. Admin Credentials:
  7. Listmonk admin email and password
  8. n8n admin email and password
"},{"location":"build/#3-start-services","title":"3. Start Services","text":"

Launch all services with Docker Compose:

docker compose up -d\n

Wait for services to initialize (first run may take 5-10 minutes):

# Watch container status\ndocker compose ps\n\n# View logs\ndocker compose logs -f\n
"},{"location":"build/#4-verify-installation","title":"4. Verify Installation","text":"

Check that all services are running:

docker compose ps\n

Expected output should show all services as \"Up\":

"},{"location":"build/#local-access","title":"Local Access","text":"

Once services are running, access them locally:

"},{"location":"build/#homepage-dashboard","title":"\ud83c\udfe0 Homepage Dashboard","text":""},{"location":"build/#development-tools","title":"\ud83d\udcbb Development Tools","text":""},{"location":"build/#communication","title":"\ud83d\udce7 Communication","text":""},{"location":"build/#automation-data","title":"\ud83d\udd04 Automation & Data","text":""},{"location":"build/#interactive-tools","title":"\ud83d\udee0\ufe0f Interactive Tools","text":""},{"location":"build/#production-deployment","title":"Production Deployment","text":""},{"location":"build/#deploy-with-cloudflare-tunnels","title":"Deploy with Cloudflare Tunnels","text":"

For secure public access, use the production deployment script:

./start-production.sh\n

This script will:

  1. Install and configure cloudflared
  2. Create a Cloudflare tunnel
  3. Set up DNS records automatically
  4. Configure access policies
  5. Create a systemd service for persistence
"},{"location":"build/#what-happens-during-production-setup","title":"What Happens During Production Setup","text":"
  1. Cloudflare Authentication: Browser-based login to Cloudflare
  2. Tunnel Creation: Secure tunnel named changemaker-lite
  3. DNS Configuration: Automatic CNAME records for all services
  4. Access Policies: Email-based authentication for sensitive services
  5. Service Installation: Systemd service for automatic startup
"},{"location":"build/#production-urls","title":"Production URLs","text":"

After successful deployment, services will be available at:

Public Services:

Protected Services (require authentication):

"},{"location":"build/#configuration-management","title":"Configuration Management","text":""},{"location":"build/#environment-variables","title":"Environment Variables","text":"

Key settings in .env file:

# Domain Configuration\nDOMAIN=yourdomain.com\nBASE_DOMAIN=https://yourdomain.com\n\n# Service Ports (automatically assigned to avoid conflicts)\nHOMEPAGE_PORT=3010\nCODE_SERVER_PORT=8888\nLISTMONK_PORT=9000\nMKDOCS_PORT=4000\nMKDOCS_SITE_SERVER_PORT=4001\nN8N_PORT=5678\nNOCODB_PORT=8090\nGITEA_WEB_PORT=3030\nGITEA_SSH_PORT=2222\nMAP_PORT=3000\nMINI_QR_PORT=8089\n\n# Cloudflare (for production)\nCF_API_TOKEN=your_token\nCF_ZONE_ID=your_zone_id\nCF_ACCOUNT_ID=your_account_id\n
"},{"location":"build/#reconfigure-services","title":"Reconfigure Services","text":"

To update configuration:

# Re-run configuration wizard\n./config.sh\n\n# Restart services\ndocker compose down && docker compose up -d\n
"},{"location":"build/#common-tasks","title":"Common Tasks","text":""},{"location":"build/#service-management","title":"Service Management","text":"
# View all services\ndocker compose ps\n\n# View logs for specific service\ndocker compose logs -f [service-name]\n\n# Restart a service\ndocker compose restart [service-name]\n\n# Stop all services\ndocker compose down\n\n# Stop and remove all data (CAUTION!)\ndocker compose down -v\n
"},{"location":"build/#backup-data","title":"Backup Data","text":"
# Backup all volumes\ndocker run --rm -v changemaker_listmonk-data:/data -v $(pwd):/backup alpine tar czf /backup/listmonk-backup.tar.gz -C /data .\n\n# Backup configuration\ntar czf configs-backup.tar.gz configs/\n\n# Backup documentation\ntar czf docs-backup.tar.gz mkdocs/docs/\n
"},{"location":"build/#update-services","title":"Update Services","text":"
# Pull latest images\ndocker compose pull\n\n# Recreate containers with new images\ndocker compose up -d\n
"},{"location":"build/#troubleshooting","title":"Troubleshooting","text":""},{"location":"build/#port-conflicts","title":"Port Conflicts","text":"

If services fail to start due to port conflicts:

  1. Check which ports are in use:
sudo ss -tulpn | grep LISTEN\n
  1. Re-run configuration to get new ports:
./config.sh\n
  1. Or manually edit .env file and change conflicting ports
"},{"location":"build/#permission-issues","title":"Permission Issues","text":"

Fix permission problems:

# Get your user and group IDs\nid -u  # User ID\nid -g  # Group ID\n\n# Update .env file with correct IDs\nUSER_ID=1000\nGROUP_ID=1000\n\n# Restart services\ndocker compose down && docker compose up -d\n
"},{"location":"build/#service-wont-start","title":"Service Won't Start","text":"

Debug service issues:

# Check detailed logs\ndocker compose logs [service-name] --tail 50\n\n# Check container status\ndocker ps -a\n\n# Inspect container\ndocker inspect [container-name]\n
"},{"location":"build/#cloudflare-tunnel-issues","title":"Cloudflare Tunnel Issues","text":"
# Check tunnel service status\nsudo systemctl status cloudflared-changemaker\n\n# View tunnel logs\nsudo journalctl -u cloudflared-changemaker -f\n\n# Restart tunnel\nsudo systemctl restart cloudflared-changemaker\n
"},{"location":"build/#next-steps","title":"Next Steps","text":"

Now that your Changemaker Lite instance is running:

  1. Set up Listmonk - Configure SMTP and create your first campaign
  2. Create workflows - Build automations in n8n
  3. Import data - Set up your NocoDB databases
  4. Configure map - Add location data for the map viewer
  5. Write documentation - Start creating content in MkDocs
  6. Set up Git - Initialize repositories in Gitea
"},{"location":"build/#getting-help","title":"Getting Help","text":""},{"location":"build/build-server/","title":"BNKops Server Build","text":"

Purpose: a Ubuntu server build-out for general application

This documentation is a overview of the full build out for a server OS and baseline for running Changemaker-lite. It is a manual to re-install this server on any machine.

All of the following systems are free and the majority are open source.

"},{"location":"build/build-server/#ubuntu-os","title":"Ubuntu OS","text":"

Ubuntu is a Linux distribution derived from Debian and composed mostly of free and open-source software.

"},{"location":"build/build-server/#install-ubuntu","title":"Install Ubuntu","text":""},{"location":"build/build-server/#post-install","title":"Post Install","text":"

Post installation, run update:

sudo apt update\n

sudo apt upgrade\n
"},{"location":"build/build-server/#configuration","title":"Configuration","text":"

Further configurations:

"},{"location":"build/build-server/#vscode-insiders","title":"VSCode Insiders","text":"

Visual Studio Code is a new choice of tool that combines the simplicity of a code editor with what developers need for the core edit-build-debug cycle.

"},{"location":"build/build-server/#install-using-app-centre","title":"Install Using App Centre","text":""},{"location":"build/build-server/#obsidian","title":"Obsidian","text":"

The free and flexible app for your private\u00a0thoughts.

"},{"location":"build/build-server/#install-using-app-center","title":"Install Using App Center","text":""},{"location":"build/build-server/#curl","title":"Curl","text":"

command line tool and library for transferring data with URLs (since 1998)

"},{"location":"build/build-server/#install","title":"Install","text":"
sudo apt install curl \n
"},{"location":"build/build-server/#glances","title":"Glances","text":"

Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.

"},{"location":"build/build-server/#install_1","title":"Install","text":"
sudo snap install glances \n
"},{"location":"build/build-server/#syncthing","title":"Syncthing","text":"

Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it\u2019s transmitted over the internet.

"},{"location":"build/build-server/#install_2","title":"Install","text":"
# Add the release PGP keys:\nsudo mkdir -p /etc/apt/keyrings\nsudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg\n
# Add the \"stable\" channel to your APT sources:\necho \"deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable\" | sudo tee /etc/apt/sources.list.d/syncthing.list\n
# Update and install syncthing:\nsudo apt-get update\nsudo apt-get install syncthing\n
"},{"location":"build/build-server/#post-install_1","title":"Post Install","text":"

Run syncthing as a system service.

sudo systemctl start syncthing@yourusername\n

sudo systemctl enable syncthing@yourusername\n
"},{"location":"build/build-server/#docker","title":"Docker","text":"

Docker helps developers build, share, run, and verify applications anywhere \u2014 without tedious environment configuration or management.

# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\n\n# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \\\n  $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable\" | \\\n  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\nsudo apt-get update\n

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n
"},{"location":"build/build-server/#update-users","title":"Update Users","text":"
sudo groupadd docker\n
sudo usermod -aG docker $USER\n
newgrp docker\n
"},{"location":"build/build-server/#enable-on-boot","title":"Enable on Boot","text":"
sudo systemctl enable docker.service\nsudo systemctl enable containerd.service\n
"},{"location":"build/build-server/#cloudflared","title":"Cloudflared","text":"

Connect, protect, and build everywhere. We make websites, apps, and networks faster and more secure. Our developer platform is the best place to build modern apps and deliver AI initiatives.

sudo mkdir -p --mode=0755 /usr/share/keyrings\ncurl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null\n
echo \"deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main\" | sudo tee /etc/apt/sources.list.d/cloudflared.list\n
sudo apt-get update && sudo apt-get install cloudflared\n
"},{"location":"build/build-server/#post-install_2","title":"Post Install","text":"

Login to Cloudflare

cloudflared login\n

"},{"location":"build/build-server/#configuration_1","title":"Configuration","text":""},{"location":"build/build-server/#pandoc","title":"Pandoc","text":"

If you need to convert files from one markup format into another, pandoc is your swiss-army knife.

sudo apt install pandoc\n
"},{"location":"config/","title":"Configuration","text":"

There are several configuration steps to building a production ready Changemaker-Lite.

In the order we suggest doing them:

"},{"location":"config/cloudflare-config/","title":"Configure Cloudflare","text":"

Cloudflare is the largest DNS routing service on the planet. We use their free service tier to provide Changemaker users with a fast, secure, and reliable way to get online that blocks 99% of surface level attacks and has built in user authenticaion (if you so choose to use it)

"},{"location":"config/cloudflare-config/#credentials","title":"Credentials","text":"

The config.sh and start-production.sh scripts require the following Cloudflare credentials to function properly:

"},{"location":"config/cloudflare-config/#1-cloudflare-api-token","title":"1. Cloudflare API Token","text":""},{"location":"config/cloudflare-config/#2-cloudflare-zone-id","title":"2. Cloudflare Zone ID","text":""},{"location":"config/cloudflare-config/#3-cloudflare-account-id","title":"3. Cloudflare Account ID","text":""},{"location":"config/cloudflare-config/#4-cloudflare-tunnel-id-optional-in-configsh-required-in-start-productionsh","title":"4. Cloudflare Tunnel ID (Optional in config.sh, Required in start-production.sh)","text":""},{"location":"config/cloudflare-config/#summary-of-required-credentials","title":"Summary of Required Credentials:","text":"
# In .env file\nCF_API_TOKEN=your_cloudflare_api_token\nCF_ZONE_ID=your_cloudflare_zone_id\nCF_ACCOUNT_ID=your_cloudflare_account_id\nCF_TUNNEL_ID=will_be_set_by_start_production  # This will be set by start-production.sh\n
"},{"location":"config/cloudflare-config/#notes","title":"Notes:","text":""},{"location":"phil/","title":"Philosophy: Your Secrets, Your Power, Your Movement","text":""},{"location":"phil/#the-question-that-changes-everything","title":"The Question That Changes Everything","text":"

If you are a political actor, who do you trust with your secrets?

This isn't just a technical question\u2014it's the core political question of our time. Every email you send, every document you create, every contact list you build, every strategy you develop: where does it live? Who owns the servers? Who has the keys?

"},{"location":"phil/#the-corporate-extraction-machine","title":"The Corporate Extraction Machine","text":""},{"location":"phil/#how-they-hook-you","title":"How They Hook You","text":"

Corporate software companies have perfected the art of digital colonization:

  1. Free Trials - They lure you in with \"free\" accounts
  2. Feature Creep - Essential features require paid tiers
  3. Data Lock-In - Your data becomes harder to export
  4. Price Escalation - $40/month becomes $750/month as you grow
  5. Surveillance Integration - Your organizing becomes their intelligence
"},{"location":"phil/#the-real-product","title":"The Real Product","text":"

You Are Not the Customer

If you're not paying for the product, you ARE the product. But even when you are paying, you're often still the product.

Corporate platforms don't make money from your subscription fees\u2014they make money from:

"},{"location":"phil/#the-bnkops-alternative","title":"The BNKops Alternative","text":""},{"location":"phil/#who-we-are","title":"Who We Are","text":"

BNKops is a cooperative based in amiskwaciy-w\u00e2skahikan (Edmonton, Alberta) on Treaty 6 territory. We're not a corporation\u2014we're a collective of skilled organizers, developers, and community builders who believe technology should serve liberation, not oppression.

"},{"location":"phil/#our-principles","title":"Our Principles","text":""},{"location":"phil/#liberation-first","title":"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f \ud83c\uddf5\ud83c\uddf8 Liberation First","text":"

Technology that centers the most marginalized voices and fights for collective liberation. Trans rights are human rights, and our tools reflect this commitment.

"},{"location":"phil/#community-over-profit","title":"\ud83e\udd1d Community Over Profit","text":"

We operate as a cooperative because we believe in shared ownership and democratic decision-making. No venture capitalists, no shareholders, no extraction.

"},{"location":"phil/#data-sovereignty","title":"\u26a1 Data Sovereignty","text":"

Your data belongs to you and your community. We build tools that let you own your digital infrastructure completely.

"},{"location":"phil/#security-culture","title":"\ud83d\udd12 Security Culture","text":"

Real security comes from community control, not corporate promises. We integrate security culture practices into our technology design.

"},{"location":"phil/#the-changemaker-difference","title":"The Changemaker Difference","text":""},{"location":"phil/#traditional-corporate-flow","title":"Traditional Corporate Flow","text":"
Your Data \u2192 Corporate Server \u2192 Surveillance \u2192 Profit \u2192 Your Oppression\n
"},{"location":"phil/#changemaker-flow","title":"Changemaker Flow","text":"
Your Data \u2192 Your Server \u2192 Your Community \u2192 Your Power \u2192 Liberation\n
"},{"location":"phil/#why-this-matters","title":"Why This Matters","text":"

When you control your technology infrastructure:

"},{"location":"phil/#the-philosophy-in-practice","title":"The Philosophy in Practice","text":""},{"location":"phil/#security-culture-meets-technology","title":"Security Culture Meets Technology","text":"

Traditional security culture asks: \"Who needs to know this information?\"

Digital security culture asks: \"Who controls the infrastructure where this information lives?\"

"},{"location":"phil/#community-technology","title":"Community Technology","text":"

We believe in community technology - tools that:

"},{"location":"phil/#prefigurative-politics","title":"Prefigurative Politics","text":"

The tools we use shape the movements we build. Corporate tools create corporate movements\u2014hierarchical, surveilled, and dependent. Community-controlled tools create community-controlled movements\u2014democratic, secure, and sovereign.

"},{"location":"phil/#common-questions","title":"Common Questions","text":""},{"location":"phil/#isnt-this-just-for-tech-people","title":"\"Isn't this just for tech people?\"","text":"

No. We specifically designed Changemaker Lite for organizers, activists, and movement builders who may not have technical backgrounds. Our philosophy is that everyone deserves digital sovereignty, not just people with computer science degrees.

This is not to say that you won't need to learn! These tools are just that; tools. They have no fancy or white-labeled marketing and are technical in nature. You will need to learn to use them, just as any worker needs to learn the power tools they use on the job.

"},{"location":"phil/#what-about-convenience","title":"\"What about convenience?\"","text":"

Corporate platforms are convenient because they've extracted billions of dollars from users to fund that convenience. When you own your tools, there's a learning curve\u2014but it's the same learning curve as learning to organize, learning to build power, learning to create change.

"},{"location":"phil/#cant-we-just-use-corporate-tools-carefully","title":"\"Can't we just use corporate tools carefully?\"","text":"

Would you hold your most sensitive organizing meetings in a room owned by your opposition? Would you store your membership lists in filing cabinets at a corporation that profits from surveillance? Digital tools are the same.

"},{"location":"phil/#what-about-security","title":"\"What about security?\"","text":"

Real security comes from community control, not corporate promises. When you control your infrastructure:

"},{"location":"phil/#historical-context","title":"Historical Context","text":""},{"location":"phil/#learning-from-past-struggles","title":"Learning from Past Struggles","text":"

Every liberation movement has had to solve the problem of secure communication and information sharing:

The internet should expand these traditions, not replace them with corporate surveillance.

"},{"location":"phil/#the-surveillance-capitalism-trap","title":"The Surveillance Capitalism Trap","text":"

As Shoshana Zuboff documents in \"The Age of Surveillance Capitalism,\" we're living through a new form of capitalism that extracts value from human experience itself. Political movements are particularly valuable targets because:

"},{"location":"phil/#taking-action","title":"Taking Action","text":""},{"location":"phil/#start-where-you-are","title":"Start Where You Are","text":"

You don't have to replace everything at once. Start with one tool, one campaign, one project. Learn the technology alongside your organizing.

"},{"location":"phil/#build-community-capacity","title":"Build Community Capacity","text":"

The goal isn't individual self-sufficiency\u2014it's community technological sovereignty. Share skills, pool resources, learn together.

"},{"location":"phil/#connect-with-others","title":"Connect with Others","text":"

You're not alone in this. The free and open source software community, the digital security community, and the appropriate technology movement are all working on similar problems.

"},{"location":"phil/#remember-why","title":"Remember Why","text":"

This isn't about technology for its own sake. It's about building the infrastructure for the world we want to see\u2014where communities have power, where people control their own data, where technology serves liberation.

"},{"location":"phil/#resources-for-deeper-learning","title":"Resources for Deeper Learning","text":""},{"location":"phil/#essential-reading","title":"Essential Reading","text":""},{"location":"phil/#community-resources","title":"Community Resources","text":""},{"location":"phil/#technical-learning","title":"Technical Learning","text":"

This philosophy document is a living document. Contribute your thoughts, experiences, and improvements through the BNKops documentation platform.

"},{"location":"services/","title":"Services","text":"

Changemaker Lite includes several powerful services that work together to provide a complete documentation and development platform. Each service is containerized and can be accessed through its dedicated port.

"},{"location":"services/#available-services","title":"Available Services","text":""},{"location":"services/#code-server","title":"Code Server","text":"

Port: 8888 | Visual Studio Code in your browser for remote development

"},{"location":"services/#listmonk","title":"Listmonk","text":"

Port: 9000 | Self-hosted newsletter and mailing list manager

"},{"location":"services/#postgresql","title":"PostgreSQL","text":"

Port: 5432 | Reliable database backend - Data persistence for Listmonk - ACID compliance - High performance - Backup and restore capabilities

"},{"location":"services/#mkdocs-material","title":"MkDocs Material","text":"

Port: 4000 | Documentation site generator with live preview

"},{"location":"services/#static-site-server","title":"Static Site Server","text":"

Port: 4001 | Nginx-powered static site hosting - High-performance serving - Built documentation hosting - Caching and compression - Security headers

"},{"location":"services/#n8n","title":"n8n","text":"

Port: 5678 | Workflow automation tool

"},{"location":"services/#nocodb","title":"NocoDB","text":"

Port: 8090 | No-code database platform

"},{"location":"services/#homepage","title":"Homepage","text":"

Port: 3010 | Modern dashboard for all services

"},{"location":"services/#gitea","title":"Gitea","text":"

Port: 3030 | Self-hosted Git service

"},{"location":"services/#mini-qr","title":"Mini QR","text":"

Port: 8089 | Simple QR code generator service

"},{"location":"services/#service-architecture","title":"Service Architecture","text":"
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502   Homepage      \u2502    \u2502   Code Server   \u2502    \u2502     MkDocs      \u2502\n\u2502     :3010       \u2502    \u2502     :8888       \u2502    \u2502     :4000       \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Static Server   \u2502    \u2502    Listmonk     \u2502    \u2502      n8n        \u2502\n\u2502     :4001       \u2502    \u2502     :9000       \u2502    \u2502     :5678       \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502     NocoDB      \u2502    \u2502 PostgreSQL      \u2502    \u2502 PostgreSQL      \u2502\n\u2502     :8090       \u2502    \u2502 (listmonk-db)   \u2502    \u2502 (root_db)       \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2502     :5432       \u2502    \u2502     :5432       \u2502\n         \u2502              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
"},{"location":"services/#getting-started","title":"Getting Started","text":"
  1. Start all services: docker compose up -d
  2. Check service status: docker compose ps
  3. View logs: docker compose logs [service-name]
  4. Stop services: docker compose down
"},{"location":"services/#service-dependencies","title":"Service Dependencies","text":""},{"location":"services/#environment-configuration","title":"Environment Configuration","text":"

Services are configured through environment variables in your .env file:

# Port configurations\nCODE_SERVER_PORT=8888\nLISTMONK_PORT=9000\nLISTMONK_DB_PORT=5432\nMKDOCS_PORT=4000\nMKDOCS_SITE_SERVER_PORT=4001\nN8N_PORT=5678\n\n# User and group IDs\nUSER_ID=1000\nGROUP_ID=1000\n\n# Database configuration\nPOSTGRES_USER=listmonk\nPOSTGRES_PASSWORD=your_password\nPOSTGRES_DB=listmonk\n\n# n8n configuration\nN8N_ENCRYPTION_KEY=your_encryption_key\nN8N_USER_EMAIL=admin@example.com\nN8N_USER_PASSWORD=your_password\n
"},{"location":"services/#monitoring-and-maintenance","title":"Monitoring and Maintenance","text":""},{"location":"services/#health-checks","title":"Health Checks","text":"
# Check all services\ndocker compose ps\n\n# Check specific service logs\ndocker compose logs listmonk-app\ndocker compose logs code-server\n
"},{"location":"services/#updates","title":"Updates","text":"
# Pull latest images\ndocker compose pull\n\n# Restart with new images\ndocker compose down && docker compose up -d\n
"},{"location":"services/#backups","title":"Backups","text":""},{"location":"services/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/#common-issues","title":"Common Issues","text":"
  1. Port Conflicts: Ensure ports are not used by other applications
  2. Permission Issues: Check USER_ID and GROUP_ID settings
  3. Network Issues: Verify services can communicate through the changemaker network
  4. Data Persistence: Ensure volumes are properly mounted
"},{"location":"services/#getting-help","title":"Getting Help","text":""},{"location":"services/code-server/","title":"Code Server","text":""},{"location":"services/code-server/#overview","title":"Overview","text":"

Code Server provides a full Visual Studio Code experience in your web browser, allowing you to develop from any device. It runs on your server and provides access to your development environment through a web interface.

"},{"location":"services/code-server/#features","title":"Features","text":""},{"location":"services/code-server/#access","title":"Access","text":""},{"location":"services/code-server/#configuration","title":"Configuration","text":""},{"location":"services/code-server/#environment-variables","title":"Environment Variables","text":""},{"location":"services/code-server/#volumes","title":"Volumes","text":""},{"location":"services/code-server/#usage","title":"Usage","text":"
  1. Access Code Server at http://localhost:8888
  2. Open the /home/coder/mkdocs/ workspace
  3. Start editing your documentation files
  4. Install extensions as needed
  5. Use the integrated terminal for commands
"},{"location":"services/code-server/#useful-extensions","title":"Useful Extensions","text":"

Consider installing these extensions for better documentation work:

"},{"location":"services/code-server/#official-documentation","title":"Official Documentation","text":"

For more detailed information, visit the official Code Server documentation.

"},{"location":"services/gitea/","title":"Gitea","text":"

Self-hosted Git service for collaborative development.

"},{"location":"services/gitea/#overview","title":"Overview","text":"

Gitea is a lightweight, self-hosted Git service similar to GitHub, GitLab, and Bitbucket. It provides a web interface for managing repositories, issues, pull requests, and more.

"},{"location":"services/gitea/#features","title":"Features","text":""},{"location":"services/gitea/#access","title":"Access","text":""},{"location":"services/gitea/#configuration","title":"Configuration","text":""},{"location":"services/gitea/#environment-variables","title":"Environment Variables","text":""},{"location":"services/gitea/#volumes","title":"Volumes","text":""},{"location":"services/gitea/#usage","title":"Usage","text":"
  1. Access Gitea at http://localhost:${GITEA_WEB_PORT:-3030}
  2. Register or log in as an admin user
  3. Create or import repositories
  4. Collaborate with your team
"},{"location":"services/gitea/#official-documentation","title":"Official Documentation","text":"

For more details, visit the official Gitea documentation.

"},{"location":"services/homepage/","title":"Homepage","text":"

Modern dashboard for accessing all your self-hosted services.

"},{"location":"services/homepage/#overview","title":"Overview","text":"

Homepage is a modern, fully static, fast, secure fully configurable application dashboard with integrations for over 100 services. It provides a beautiful and customizable interface to access all your Changemaker Lite services from a single location.

"},{"location":"services/homepage/#features","title":"Features","text":""},{"location":"services/homepage/#access","title":"Access","text":""},{"location":"services/homepage/#configuration","title":"Configuration","text":""},{"location":"services/homepage/#environment-variables","title":"Environment Variables","text":""},{"location":"services/homepage/#configuration-files","title":"Configuration Files","text":"

Homepage uses YAML configuration files located in ./configs/homepage/:

"},{"location":"services/homepage/#volumes","title":"Volumes","text":""},{"location":"services/homepage/#changemaker-lite-services","title":"Changemaker Lite Services","text":"

Homepage is pre-configured with all Changemaker Lite services:

"},{"location":"services/homepage/#essential-tools","title":"Essential Tools","text":""},{"location":"services/homepage/#content-documentation","title":"Content & Documentation","text":""},{"location":"services/homepage/#automation-data","title":"Automation & Data","text":""},{"location":"services/homepage/#customization","title":"Customization","text":""},{"location":"services/homepage/#adding-custom-services","title":"Adding Custom Services","text":"

Edit configs/homepage/services.yaml to add new services:

- Custom Category:\n    - My Service:\n        href: http://localhost:8080\n        description: Custom service description\n        icon: mdi-application\n        widget:\n          type: ping\n          url: http://localhost:8080\n
"},{"location":"services/homepage/#custom-icons","title":"Custom Icons","text":"

Add custom icons to ./assets/icons/ directory and reference them in services.yaml:

icon: /icons/my-custom-icon.png\n
"},{"location":"services/homepage/#themes-and-styling","title":"Themes and Styling","text":"

Modify configs/homepage/settings.yaml to customize appearance:

theme: dark  # or light\ncolor: purple  # slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose\n
"},{"location":"services/homepage/#widgets","title":"Widgets","text":"

Enable live monitoring widgets in configs/homepage/services.yaml:

- Service Name:\n    widget:\n      type: docker\n      container: container-name\n      server: my-docker\n
"},{"location":"services/homepage/#service-monitoring","title":"Service Monitoring","text":"

Homepage can display real-time status information for your services:

"},{"location":"services/homepage/#docker-integration","title":"Docker Integration","text":"

Homepage monitors Docker containers automatically when configured:

  1. Ensure Docker socket is mounted (/var/run/docker.sock)
  2. Configure container mappings in docker.yaml
  3. Add widget configurations to services.yaml
"},{"location":"services/homepage/#security-considerations","title":"Security Considerations","text":""},{"location":"services/homepage/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/homepage/#common-issues","title":"Common Issues","text":"

Configuration not loading: Check YAML syntax in configuration files

docker logs homepage-changemaker\n

Icons not displaying: Verify icon paths and file permissions

ls -la ./assets/icons/\n

Services not reachable: Verify network connectivity between containers

docker exec homepage-changemaker ping service-name\n

Widget data not updating: Check Docker socket permissions and container access

docker exec homepage-changemaker ls -la /var/run/docker.sock\n
"},{"location":"services/homepage/#configuration-examples","title":"Configuration Examples","text":""},{"location":"services/homepage/#basic-service-widget","title":"Basic Service Widget","text":"
- Code Server:\n    href: http://localhost:8888\n    description: VS Code in the browser\n    icon: code-server\n    widget:\n      type: docker\n      container: code-server-changemaker\n
"},{"location":"services/homepage/#custom-dashboard-layout","title":"Custom Dashboard Layout","text":"
# settings.yaml\nlayout:\n  style: columns\n  columns: 3\n\n# Responsive breakpoints\nresponsive:\n  mobile: 1\n  tablet: 2\n  desktop: 3\n
"},{"location":"services/homepage/#official-documentation","title":"Official Documentation","text":"

For comprehensive configuration guides and advanced features:

"},{"location":"services/listmonk/","title":"Listmonk","text":"

Self-hosted newsletter and mailing list manager.

"},{"location":"services/listmonk/#overview","title":"Overview","text":"

Listmonk is a modern, feature-rich newsletter and mailing list manager designed for high performance and easy management. It provides a complete solution for email campaigns, subscriber management, and analytics.

"},{"location":"services/listmonk/#features","title":"Features","text":""},{"location":"services/listmonk/#access","title":"Access","text":""},{"location":"services/listmonk/#configuration","title":"Configuration","text":""},{"location":"services/listmonk/#environment-variables","title":"Environment Variables","text":""},{"location":"services/listmonk/#database","title":"Database","text":"

Listmonk uses PostgreSQL as its backend database. The database is automatically configured through the docker-compose setup.

"},{"location":"services/listmonk/#uploads","title":"Uploads","text":""},{"location":"services/listmonk/#getting-started","title":"Getting Started","text":"
  1. Access Listmonk at http://localhost:9000
  2. Log in with your admin credentials
  3. Set up your first mailing list
  4. Configure SMTP settings for sending emails
  5. Import subscribers or create subscription forms
  6. Create your first campaign
"},{"location":"services/listmonk/#important-notes","title":"Important Notes","text":""},{"location":"services/listmonk/#official-documentation","title":"Official Documentation","text":"

For comprehensive guides and API documentation, visit: - Listmonk Documentation - GitHub Repository

"},{"location":"services/map/","title":"Map","text":"

Interactive map service for geospatial data visualization, powered by NocoDB and Leaflet.js.

"},{"location":"services/map/#overview","title":"Overview","text":"

The Map service provides an interactive web-based map for displaying, searching, and analyzing geospatial data from a NocoDB backend. It supports real-time geolocation, adding new locations, and is optimized for both desktop and mobile use.

"},{"location":"services/map/#features","title":"Features","text":""},{"location":"services/map/#access","title":"Access","text":""},{"location":"services/map/#configuration","title":"Configuration","text":"

All configuration is done via environment variables:

Variable Description Default NOCODB_API_URL NocoDB API base URL Required NOCODB_API_TOKEN API authentication token Required NOCODB_VIEW_URL Full NocoDB view URL Required PORT Server port 3000 DEFAULT_LAT Default map latitude 53.5461 DEFAULT_LNG Default map longitude -113.4938 DEFAULT_ZOOM Default map zoom level 11"},{"location":"services/map/#volumes","title":"Volumes","text":""},{"location":"services/map/#usage","title":"Usage","text":"
  1. Access the map at http://localhost:${MAP_PORT:-3000}
  2. Search for locations or addresses
  3. Add or view custom markers
  4. Analyze geospatial data as needed
"},{"location":"services/map/#nocodb-table-setup","title":"NocoDB Table Setup","text":""},{"location":"services/map/#required-columns","title":"Required Columns","text":""},{"location":"services/map/#form-fields-as-seen-in-the-interface","title":"Form Fields (as seen in the interface)","text":""},{"location":"services/map/#api-endpoints","title":"API Endpoints","text":""},{"location":"services/map/#security-considerations","title":"Security Considerations","text":""},{"location":"services/map/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/mini-qr/","title":"Mini QR","text":"

Simple QR code generator service.

"},{"location":"services/mini-qr/#overview","title":"Overview","text":"

Mini QR is a lightweight service for generating QR codes for URLs, text, or other data. It provides a web interface for quick QR code creation and download.

"},{"location":"services/mini-qr/#features","title":"Features","text":""},{"location":"services/mini-qr/#access","title":"Access","text":""},{"location":"services/mini-qr/#configuration","title":"Configuration","text":""},{"location":"services/mini-qr/#environment-variables","title":"Environment Variables","text":""},{"location":"services/mini-qr/#volumes","title":"Volumes","text":""},{"location":"services/mini-qr/#usage","title":"Usage","text":"
  1. Access Mini QR at http://localhost:${MINI_QR_PORT:-8089}
  2. Enter the text or URL to encode
  3. Download or share the generated QR code
"},{"location":"services/mkdocs/","title":"MkDocs Material","text":"

Modern documentation site generator with live preview.

"},{"location":"services/mkdocs/#overview","title":"Overview","text":"

MkDocs Material is a powerful documentation framework built on top of MkDocs, providing a beautiful Material Design theme and advanced features for creating professional documentation sites.

"},{"location":"services/mkdocs/#features","title":"Features","text":""},{"location":"services/mkdocs/#access","title":"Access","text":""},{"location":"services/mkdocs/#configuration","title":"Configuration","text":""},{"location":"services/mkdocs/#main-configuration","title":"Main Configuration","text":"

Configuration is managed through mkdocs.yml in the project root.

"},{"location":"services/mkdocs/#volumes","title":"Volumes","text":""},{"location":"services/mkdocs/#environment-variables","title":"Environment Variables","text":""},{"location":"services/mkdocs/#directory-structure","title":"Directory Structure","text":"
mkdocs/\n\u251c\u2500\u2500 mkdocs.yml          # Configuration file\n\u251c\u2500\u2500 docs/               # Documentation source\n\u2502   \u251c\u2500\u2500 index.md       # Homepage\n\u2502   \u251c\u2500\u2500 services/      # Service documentation\n\u2502   \u251c\u2500\u2500 blog/          # Blog posts\n\u2502   \u2514\u2500\u2500 overrides/     # Template overrides\n\u2514\u2500\u2500 site/              # Built static site\n
"},{"location":"services/mkdocs/#writing-documentation","title":"Writing Documentation","text":""},{"location":"services/mkdocs/#markdown-basics","title":"Markdown Basics","text":""},{"location":"services/mkdocs/#example-page","title":"Example Page","text":"
# Page Title\n\nThis is a sample documentation page.\n\n## Section\n\nContent goes here with **bold** and *italic* text.\n\n### Code Example\n\n```python\ndef hello_world():\n    print(\"Hello, World!\")\n

Note

This is an informational note.

## Building and Deployment\n\n### Development\n\nThe development server runs automatically with live reload.\n\n### Building Static Site\n\n```bash\ndocker exec mkdocs-changemaker mkdocs build\n

The built site will be available in the mkdocs/site/ directory.

"},{"location":"services/mkdocs/#customization","title":"Customization","text":""},{"location":"services/mkdocs/#themes-and-colors","title":"Themes and Colors","text":"

Customize appearance in mkdocs.yml:

theme:\n  name: material\n  palette:\n    primary: blue\n    accent: indigo\n
"},{"location":"services/mkdocs/#custom-css","title":"Custom CSS","text":"

Add custom styles in docs/stylesheets/extra.css.

"},{"location":"services/mkdocs/#official-documentation","title":"Official Documentation","text":"

For comprehensive MkDocs Material documentation: - MkDocs Material - MkDocs Documentation - Markdown Guide

"},{"location":"services/n8n/","title":"n8n","text":"

Workflow automation tool for connecting services and automating tasks.

"},{"location":"services/n8n/#overview","title":"Overview","text":"

n8n is a powerful workflow automation tool that allows you to connect various apps and services together. It provides a visual interface for creating automated workflows, making it easy to integrate different systems and automate repetitive tasks.

"},{"location":"services/n8n/#features","title":"Features","text":""},{"location":"services/n8n/#access","title":"Access","text":""},{"location":"services/n8n/#configuration","title":"Configuration","text":""},{"location":"services/n8n/#environment-variables","title":"Environment Variables","text":""},{"location":"services/n8n/#volumes","title":"Volumes","text":""},{"location":"services/n8n/#getting-started","title":"Getting Started","text":"
  1. Access n8n at http://localhost:5678
  2. Log in with your admin credentials
  3. Create your first workflow
  4. Add nodes for different services
  5. Configure connections between nodes
  6. Test and activate your workflow
"},{"location":"services/n8n/#common-use-cases","title":"Common Use Cases","text":""},{"location":"services/n8n/#documentation-automation","title":"Documentation Automation","text":""},{"location":"services/n8n/#email-campaign-integration","title":"Email Campaign Integration","text":""},{"location":"services/n8n/#database-management-with-nocodb","title":"Database Management with NocoDB","text":""},{"location":"services/n8n/#development-workflows","title":"Development Workflows","text":""},{"location":"services/n8n/#data-processing","title":"Data Processing","text":""},{"location":"services/n8n/#example-workflows","title":"Example Workflows","text":""},{"location":"services/n8n/#simple-webhook-to-email","title":"Simple Webhook to Email","text":"
Webhook \u2192 Email\n
"},{"location":"services/n8n/#scheduled-documentation-backup","title":"Scheduled Documentation Backup","text":"
Schedule \u2192 Read Files \u2192 Compress \u2192 Upload to Storage\n
"},{"location":"services/n8n/#git-integration","title":"Git Integration","text":"
Git Webhook \u2192 Process Changes \u2192 Update Documentation \u2192 Notify Team\n
"},{"location":"services/n8n/#security-considerations","title":"Security Considerations","text":""},{"location":"services/n8n/#integration-with-other-services","title":"Integration with Other Services","text":"

n8n can integrate with all services in your Changemaker Lite setup:

"},{"location":"services/n8n/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/n8n/#common-issues","title":"Common Issues","text":""},{"location":"services/n8n/#debugging","title":"Debugging","text":"
# Check container logs\ndocker logs n8n-changemaker\n\n# Access container shell\ndocker exec -it n8n-changemaker sh\n\n# Check workflow executions in the UI\n# Visit http://localhost:5678 \u2192 Executions\n
"},{"location":"services/n8n/#official-documentation","title":"Official Documentation","text":"

For comprehensive n8n documentation:

"},{"location":"services/nocodb/","title":"NocoDB","text":"

No-code database platform that turns any database into a smart spreadsheet.

"},{"location":"services/nocodb/#overview","title":"Overview","text":"

NocoDB is an open-source no-code platform that transforms any database into a smart spreadsheet interface. It provides a user-friendly way to manage data, create forms, build APIs, and collaborate on database operations without requiring extensive technical knowledge.

"},{"location":"services/nocodb/#features","title":"Features","text":""},{"location":"services/nocodb/#access","title":"Access","text":""},{"location":"services/nocodb/#configuration","title":"Configuration","text":""},{"location":"services/nocodb/#environment-variables","title":"Environment Variables","text":""},{"location":"services/nocodb/#database-backend","title":"Database Backend","text":"

NocoDB uses a dedicated PostgreSQL instance (root_db) with the following configuration:

"},{"location":"services/nocodb/#volumes","title":"Volumes","text":""},{"location":"services/nocodb/#getting-started","title":"Getting Started","text":"
  1. Access NocoDB: Navigate to http://localhost:8090
  2. Initial Setup: Complete the onboarding process
  3. Create Project: Start with a new project or connect existing databases
  4. Add Tables: Import data or create new tables
  5. Configure Views: Set up different views (Grid, Form, Gallery, etc.)
  6. Set Permissions: Configure user access and sharing settings
"},{"location":"services/nocodb/#common-use-cases","title":"Common Use Cases","text":""},{"location":"services/nocodb/#content-management","title":"Content Management","text":""},{"location":"services/nocodb/#project-management","title":"Project Management","text":""},{"location":"services/nocodb/#data-collection","title":"Data Collection","text":""},{"location":"services/nocodb/#integration-with-other-services","title":"Integration with Other Services","text":"

NocoDB can integrate well with other Changemaker Lite services:

"},{"location":"services/nocodb/#api-usage","title":"API Usage","text":"

NocoDB automatically generates REST APIs for all your tables:

# Get all records from a table\nGET http://localhost:8090/api/v1/db/data/v1/{project}/table/{table}\n\n# Create a new record\nPOST http://localhost:8090/api/v1/db/data/v1/{project}/table/{table}\n\n# Update a record\nPATCH http://localhost:8090/api/v1/db/data/v1/{project}/table/{table}/{id}\n
"},{"location":"services/nocodb/#backup-and-data-management","title":"Backup and Data Management","text":""},{"location":"services/nocodb/#database-backup","title":"Database Backup","text":"

Since NocoDB uses PostgreSQL, you can backup the database:

# Backup NocoDB database\ndocker exec root_db pg_dump -U postgres root_db > nocodb_backup.sql\n\n# Restore from backup\ndocker exec -i root_db psql -U postgres root_db < nocodb_backup.sql\n
"},{"location":"services/nocodb/#application-data","title":"Application Data","text":"

Application settings and metadata are stored in the nc_data volume.

"},{"location":"services/nocodb/#security-considerations","title":"Security Considerations","text":""},{"location":"services/nocodb/#performance-tips","title":"Performance Tips","text":""},{"location":"services/nocodb/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/nocodb/#common-issues","title":"Common Issues","text":"

Service won't start: Check if the PostgreSQL database is healthy

docker logs root_db\n

Database connection errors: Verify database credentials and network connectivity

docker exec nocodb nc_data nc\n

Performance issues: Monitor resource usage and optimize queries

docker stats nocodb root_db\n
"},{"location":"services/nocodb/#official-documentation","title":"Official Documentation","text":"

For comprehensive guides and advanced features:

"},{"location":"services/postgresql/","title":"PostgreSQL Database","text":"

Reliable database backend for applications.

"},{"location":"services/postgresql/#overview","title":"Overview","text":"

PostgreSQL is a powerful, open-source relational database system. In Changemaker Lite, it serves as the backend database for Listmonk and can be used by other applications requiring persistent data storage.

"},{"location":"services/postgresql/#features","title":"Features","text":""},{"location":"services/postgresql/#access","title":"Access","text":""},{"location":"services/postgresql/#configuration","title":"Configuration","text":""},{"location":"services/postgresql/#environment-variables","title":"Environment Variables","text":""},{"location":"services/postgresql/#health-checks","title":"Health Checks","text":"

The PostgreSQL container includes health checks to ensure the database is ready before dependent services start.

"},{"location":"services/postgresql/#data-persistence","title":"Data Persistence","text":"

Database data is stored in a Docker volume (listmonk-data) to ensure persistence across container restarts.

"},{"location":"services/postgresql/#connecting-to-the-database","title":"Connecting to the Database","text":""},{"location":"services/postgresql/#from-host-machine","title":"From Host Machine","text":"

You can connect to PostgreSQL from your host machine using:

psql -h localhost -p 5432 -U [username] -d [database]\n
"},{"location":"services/postgresql/#from-other-containers","title":"From Other Containers","text":"

Other containers can connect using the internal hostname listmonk-db on port 5432.

"},{"location":"services/postgresql/#backup-and-restore","title":"Backup and Restore","text":""},{"location":"services/postgresql/#backup","title":"Backup","text":"
docker exec listmonk-db pg_dump -U [username] [database] > backup.sql\n
"},{"location":"services/postgresql/#restore","title":"Restore","text":"
docker exec -i listmonk-db psql -U [username] [database] < backup.sql\n
"},{"location":"services/postgresql/#monitoring","title":"Monitoring","text":"

Monitor database health and performance through: - Container logs: docker logs listmonk-db - Database metrics and queries - Connection monitoring

"},{"location":"services/postgresql/#security-considerations","title":"Security Considerations","text":""},{"location":"services/postgresql/#official-documentation","title":"Official Documentation","text":"

For comprehensive PostgreSQL documentation: - PostgreSQL Documentation - Docker PostgreSQL Image

"},{"location":"services/static-server/","title":"Static Site Server","text":"

Nginx-powered static site server for hosting built documentation and websites.

"},{"location":"services/static-server/#overview","title":"Overview","text":"

The Static Site Server uses Nginx to serve your built documentation and static websites. It's configured to serve the built MkDocs site and other static content with high performance and reliability.

"},{"location":"services/static-server/#features","title":"Features","text":""},{"location":"services/static-server/#access","title":"Access","text":""},{"location":"services/static-server/#configuration","title":"Configuration","text":""},{"location":"services/static-server/#environment-variables","title":"Environment Variables","text":""},{"location":"services/static-server/#volumes","title":"Volumes","text":""},{"location":"services/static-server/#usage","title":"Usage","text":"
  1. Build your MkDocs site: docker exec mkdocs-changemaker mkdocs build
  2. The built site is automatically available at http://localhost:4001
  3. Any files in ./mkdocs/site/ will be served statically
"},{"location":"services/static-server/#file-structure","title":"File Structure","text":"
mkdocs/site/           # Served at /\n\u251c\u2500\u2500 index.html         # Homepage\n\u251c\u2500\u2500 assets/           # CSS, JS, images\n\u251c\u2500\u2500 services/         # Service documentation\n\u2514\u2500\u2500 search/           # Search functionality\n
"},{"location":"services/static-server/#performance-features","title":"Performance Features","text":""},{"location":"services/static-server/#custom-configuration","title":"Custom Configuration","text":"

For advanced Nginx configuration, you can: 1. Create custom Nginx config files 2. Mount them as volumes 3. Restart the container

"},{"location":"services/static-server/#monitoring","title":"Monitoring","text":"

Monitor the static site server through: - Container logs: docker logs mkdocs-site-server-changemaker - Access logs for traffic analysis - Performance metrics

"},{"location":"services/static-server/#troubleshooting","title":"Troubleshooting","text":""},{"location":"services/static-server/#common-issues","title":"Common Issues","text":""},{"location":"services/static-server/#debugging","title":"Debugging","text":"
# Check container logs\ndocker logs mkdocs-site-server-changemaker\n\n# Verify files are present\ndocker exec mkdocs-site-server-changemaker ls -la /config/www\n\n# Test file serving\ncurl -I http://localhost:4001\n
"},{"location":"services/static-server/#official-documentation","title":"Official Documentation","text":"

For more information about the underlying Nginx server: - LinuxServer.io Nginx - Nginx Documentation

"}]}