2025-05-14 14:21:31 -06:00

6849 lines
130 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for The Bunker Operations, a community-driven project focused on creating a self-hosted, open-source platform for personal and community use.">
<meta name="author" content="Bunker Ops">
<link rel="canonical" href="http://docs.bnkops.org/readme/">
<link rel="prev" href="../cm/">
<link rel="next" href="../cm/apps/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
<title>Get Started - BNKops Documentation & Repository</title>
<link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../stylesheets/extra.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../stylesheets/extra-cm-archive.css">
<link rel="stylesheet" href="../stylesheets/home.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Get Started - BNKops Documentation & Repository" >
<meta property="og:description" content="Documentation for The Bunker Operations, a community-driven project focused on creating a self-hosted, open-source platform for personal and community use." >
<meta property="og:image" content="http://docs.bnkops.org/assets/images/social/readme.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="http://docs.bnkops.org/readme/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Get Started - BNKops Documentation & Repository" >
<meta name="twitter:description" content="Documentation for The Bunker Operations, a community-driven project focused on creating a self-hosted, open-source platform for personal and community use." >
<meta name="twitter:image" content="http://docs.bnkops.org/assets/images/social/readme.png" >
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="amber">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#changemaker-v5" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
<aside class="md-banner">
<div class="md-banner__inner md-grid md-typeset">
<a href="https://homepage.betteredmonton.org" class="login-button">Login</a>
Changemaker Archive. <a href="https://changemaker.bnkops.com">Learn more</a>
</div>
</aside>
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="BNKops Documentation &amp; Repository" class="md-header__button md-logo" aria-label="BNKops Documentation & Repository" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
BNKops Documentation & Repository
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Get Started
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href=".." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../cm/" class="md-tabs__link">
Changemaker
</a>
</li>
<li class="md-tabs__item">
<a href="../archive/" class="md-tabs__link">
Archive
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="BNKops Documentation &amp; Repository" class="md-nav__button md-logo" aria-label="BNKops Documentation & Repository" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
BNKops Documentation & Repository
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<div class="md-nav__link md-nav__container">
<a href="../cm/" class="md-nav__link ">
<span class="md-ellipsis">
Changemaker
</span>
</a>
<label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Changemaker
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Get Started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Get Started
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#contents" class="md-nav__link">
<span class="md-ellipsis">
Contents
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#development-pathway" class="md-nav__link">
<span class="md-ellipsis">
Development Pathway
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prerequisites" class="md-nav__link">
<span class="md-ellipsis">
Prerequisites
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#quick-start-for-local-dev" class="md-nav__link">
<span class="md-ellipsis">
Quick Start for Local Dev
</span>
</a>
<nav class="md-nav" aria-label="Quick Start for Local Dev">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configure-portainer-immediately" class="md-nav__link">
<span class="md-ellipsis">
⚠️ Configure Portainer Immediately 🦊
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#on-successful-build-vist-local-homepage" class="md-nav__link">
<span class="md-ellipsis">
On Successful Build, Vist Local Homepage
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#local-service-ports" class="md-nav__link">
<span class="md-ellipsis">
Local Service Ports
</span>
</a>
<nav class="md-nav" aria-label="Local Service Ports">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ubuntu-os-build-outs" class="md-nav__link">
<span class="md-ellipsis">
Ubuntu OS &amp; Build Outs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#1-install-docker-and-docker-compose" class="md-nav__link">
<span class="md-ellipsis">
1. Install Docker and Docker Compose
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-clone-the-repository" class="md-nav__link">
<span class="md-ellipsis">
2. Clone the Repository
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-configure-your-environment" class="md-nav__link">
<span class="md-ellipsis">
2. Configure Your Environment
</span>
</a>
<nav class="md-nav" aria-label="2. Configure Your Environment">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setting-up-cloudflare-credentials" class="md-nav__link">
<span class="md-ellipsis">
Setting Up Cloudflare Credentials
</span>
</a>
<nav class="md-nav" aria-label="Setting Up Cloudflare Credentials">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-create-an-api-token" class="md-nav__link">
<span class="md-ellipsis">
1. Create an API Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-get-your-zone-id" class="md-nav__link">
<span class="md-ellipsis">
2. Get your Zone ID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-get-your-tunnel-id" class="md-nav__link">
<span class="md-ellipsis">
3. Get your Tunnel ID
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#4-start-the-services" class="md-nav__link">
<span class="md-ellipsis">
4. Start the Services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-cloudflare-tunnel-setup" class="md-nav__link">
<span class="md-ellipsis">
4. Cloudflare Tunnel Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#install-cloudflared-on-ubuntu-2404" class="md-nav__link">
<span class="md-ellipsis">
Install Cloudflared on Ubuntu 24.04
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configure-your-cloudflare-tunnel" class="md-nav__link">
<span class="md-ellipsis">
Configure Your Cloudflare Tunnel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#create-a-cloudflare-system-service" class="md-nav__link">
<span class="md-ellipsis">
Create a Cloudflare System Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#add-cname-records" class="md-nav__link">
<span class="md-ellipsis">
Add CNAME Records
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#website-build-and-deployment-workflow" class="md-nav__link">
<span class="md-ellipsis">
Website Build and Deployment Workflow
</span>
</a>
<nav class="md-nav" aria-label="Website Build and Deployment Workflow">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#building-your-website" class="md-nav__link">
<span class="md-ellipsis">
Building Your Website
</span>
</a>
<nav class="md-nav" aria-label="Building Your Website">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#option-1-using-code-server-recommended-for-remote-deployments" class="md-nav__link">
<span class="md-ellipsis">
Option 1: Using Code Server (recommended for remote deployments)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#option-2-locally-on-your-machine" class="md-nav__link">
<span class="md-ellipsis">
Option 2: Locally on your machine
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#development-vs-production" class="md-nav__link">
<span class="md-ellipsis">
Development vs Production
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#accessing-your-services" class="md-nav__link">
<span class="md-ellipsis">
Accessing Your Services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" >
<div class="md-nav__link md-nav__container">
<a href="../cm/apps/" class="md-nav__link ">
<span class="md-ellipsis">
Applications
</span>
</a>
<label class="md-nav__link " for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3">
<span class="md-nav__icon md-icon"></span>
Applications
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cm/apps/homepage/" class="md-nav__link">
<span class="md-ellipsis">
Homepage Dashboard
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/code-server/" class="md-nav__link">
<span class="md-ellipsis">
Code Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/flatnotes/" class="md-nav__link">
<span class="md-ellipsis">
Flatnotes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/listmonk/" class="md-nav__link">
<span class="md-ellipsis">
Listmonk
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/nocodb/" class="md-nav__link">
<span class="md-ellipsis">
NocoDB
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/mkdocs-material/" class="md-nav__link">
<span class="md-ellipsis">
MkDocs Material
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/excalidraw/" class="md-nav__link">
<span class="md-ellipsis">
Excalidraw
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/gitea/" class="md-nav__link">
<span class="md-ellipsis">
Gitea
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/openwebui/" class="md-nav__link">
<span class="md-ellipsis">
OpenWebUI
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/monica-crm/" class="md-nav__link">
<span class="md-ellipsis">
Monica CRM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/answer/" class="md-nav__link">
<span class="md-ellipsis">
Answer
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/ferdium/" class="md-nav__link">
<span class="md-ellipsis">
Ferdium
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/rocketchat/" class="md-nav__link">
<span class="md-ellipsis">
Rocket.Chat
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/portainer/" class="md-nav__link">
<span class="md-ellipsis">
Portainer (Docker UI)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/apps/n8n/" class="md-nav__link">
<span class="md-ellipsis">
n8n (Workflow Automation)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4" >
<div class="md-nav__link md-nav__container">
<a href="../cm/guides/" class="md-nav__link ">
<span class="md-ellipsis">
Guides
</span>
</a>
<label class="md-nav__link " for="__nav_2_4" id="__nav_2_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
Guides
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cm/guides/authoring-content/" class="md-nav__link">
<span class="md-ellipsis">
Authoring Content
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cm/guides/ollama-vscode/" class="md-nav__link">
<span class="md-ellipsis">
Using Ollama in VS Code
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../quick-commands/" class="md-nav__link">
<span class="md-ellipsis">
Quick Commands
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<div class="md-nav__link md-nav__container">
<a href="../archive/" class="md-nav__link ">
<span class="md-ellipsis">
Archive
</span>
</a>
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Archive
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" >
<div class="md-nav__link md-nav__container">
<a href="../archive/cm.archive/" class="md-nav__link ">
<span class="md-ellipsis">
Change Maker Archive
</span>
</a>
<label class="md-nav__link " for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Change Maker Archive
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/cm.archive/Why%20Change%20Maker/" class="md-nav__link">
<span class="md-ellipsis">
Why Change Maker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/Feature%20Tracking/" class="md-nav__link">
<span class="md-ellipsis">
Feature Tracking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/Free%28ish%29/" class="md-nav__link">
<span class="md-ellipsis">
Free(ish)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/Who%20is%20bnkops/" class="md-nav__link">
<span class="md-ellipsis">
Who is bnkops
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/known%20bugs/" class="md-nav__link">
<span class="md-ellipsis">
Known Bugs
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_7" >
<div class="md-nav__link md-nav__container">
<a href="../archive/cm.archive/manuals/" class="md-nav__link ">
<span class="md-ellipsis">
Install & Manuals
</span>
</a>
<label class="md-nav__link " for="__nav_3_2_7" id="__nav_3_2_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_7">
<span class="md-nav__icon md-icon"></span>
Install & Manuals
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/prerequisites/" class="md-nav__link">
<span class="md-ellipsis">
Prerequisites
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Installation/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Build%20Site/" class="md-nav__link">
<span class="md-ellipsis">
Reset & Build
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Backend%20%26%20Editor/" class="md-nav__link">
<span class="md-ellipsis">
Backend & Editor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Simple%20Markdown%20Guide/" class="md-nav__link">
<span class="md-ellipsis">
Simple Markdown Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/button/" class="md-nav__link">
<span class="md-ellipsis">
Simple Button
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Commands/" class="md-nav__link">
<span class="md-ellipsis">
Commands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/obsidian/" class="md-nav__link">
<span class="md-ellipsis">
Use Obsidian as Site Editor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Code%20Snippets/" class="md-nav__link">
<span class="md-ellipsis">
Code Snippets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Customize%20Your%20Landing%20Page/" class="md-nav__link">
<span class="md-ellipsis">
Customize Your Landing Page
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/listmonk/" class="md-nav__link">
<span class="md-ellipsis">
Listmonk
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/NocoDB/" class="md-nav__link">
<span class="md-ellipsis">
NocoDB
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Examples/" class="md-nav__link">
<span class="md-ellipsis">
Example Political Apps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/manuals/Get%20Site%20Online/" class="md-nav__link">
<span class="md-ellipsis">
Get Online
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_8" >
<div class="md-nav__link md-nav__container">
<a href="../archive/cm.archive/blog/" class="md-nav__link ">
<span class="md-ellipsis">
Blog
</span>
</a>
<label class="md-nav__link " for="__nav_3_2_8" id="__nav_3_2_8_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_8">
<span class="md-nav__icon md-icon"></span>
Blog
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Admin%20Log/" class="md-nav__link">
<span class="md-ellipsis">
Admin Log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Newsletter%201.0/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.0
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/The%20Revolution%20Will%20Not%20Get%20Likes/" class="md-nav__link">
<span class="md-ellipsis">
The Revolution Will Not Get Likes
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_8_5" >
<label class="md-nav__link" for="__nav_3_2_8_5" id="__nav_3_2_8_5_label" tabindex="0">
<span class="md-ellipsis">
Updates
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_2_8_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_8_5">
<span class="md-nav__icon md-icon"></span>
Updates
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%201/" class="md-nav__link">
<span class="md-ellipsis">
Update 1
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%202/" class="md-nav__link">
<span class="md-ellipsis">
Update 2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%203/" class="md-nav__link">
<span class="md-ellipsis">
Update 3
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%204/" class="md-nav__link">
<span class="md-ellipsis">
Update 4
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%205/" class="md-nav__link">
<span class="md-ellipsis">
Update 5
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%206/" class="md-nav__link">
<span class="md-ellipsis">
Update 6
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/Update%207/" class="md-nav__link">
<span class="md-ellipsis">
Update 7
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../archive/cm.archive/blog/posts/myfirst/" class="md-nav__link">
<span class="md-ellipsis">
My First
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="https://repo.bnkops.com/Home.html" class="md-nav__link">
<span class="md-ellipsis">
External Resources
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
<div class="md-nav__link md-nav__container">
<a href="../archive/repo.archive/" class="md-nav__link ">
<span class="md-ellipsis">
Repo Archive
</span>
</a>
<label class="md-nav__link " for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Repo Archive
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/How%20to%20Navigate%20the%20Repo%20%F0%9F%A4%94/" class="md-nav__link">
<span class="md-ellipsis">
Navigation Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/What%20is%20a%20Repo%20and%20Why%20Make%20One%20%F0%9F%92%AD%20%F0%9F%8D%84/" class="md-nav__link">
<span class="md-ellipsis">
What is a Repo
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_4" >
<label class="md-nav__link" for="__nav_3_3_4" id="__nav_3_3_4_label" tabindex="0">
<span class="md-ellipsis">
Admin Log
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_4">
<span class="md-nav__icon md-icon"></span>
Admin Log
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin Log ⏭/2024-09-15.md" class="md-nav__link">
<span class="md-ellipsis">
2024-09-15
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-16/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-16
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-20/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-20
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-23/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-23
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-24/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-24
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-26/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-26
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-09-27/" class="md-nav__link">
<span class="md-ellipsis">
2024-09-27
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-02/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-02
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-04/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-04
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-05/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-05
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-09/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-09
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-16/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-16
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-18/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-18
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/2024-10-21/" class="md-nav__link">
<span class="md-ellipsis">
2024-10-21
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_4_15" >
<label class="md-nav__link" for="__nav_3_3_4_15" id="__nav_3_3_4_15_label" tabindex="0">
<span class="md-ellipsis">
Newsletters
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_4_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_4_15">
<span class="md-nav__icon md-icon"></span>
Newsletters
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.0/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.0
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.1/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.1
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.2/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.3/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.3
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.4/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.4
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Admin%20Log%20%E2%8F%AD/Newsletter%201.5/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.5
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_5" >
<label class="md-nav__link" for="__nav_3_3_5" id="__nav_3_3_5_label" tabindex="0">
<span class="md-ellipsis">
Clippings
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_5">
<span class="md-nav__icon md-icon"></span>
Clippings
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Bot%20campaign%20backing%20Pierre%20Poilievre%20looks%20the%20work%20of%20an%20amateur%2C%20experts%20say%20%20CBC%20News/" class="md-nav__link">
<span class="md-ellipsis">
Bot campaign
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Bots%20on%20X%20worse%20than%20ever%20according%20to%20analysis%20of%201m%20tweets%20during%20first%20Republican%20primary%20debate/" class="md-nav__link">
<span class="md-ellipsis">
Bots on X
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/DO%20YOU%20KNOW%20MUSHROOMS%20CAN%20TALK%20TO%20EACH%20OTHER/" class="md-nav__link">
<span class="md-ellipsis">
Mushrooms Talk
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Elon%20Musk%20Fires%20Twitter%20Employees%20Who%20Criticized%20Him%20%28Published%202022%29/" class="md-nav__link">
<span class="md-ellipsis">
Elon Musk Fires Twitter Employees
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings ✂/Elon Musk Has Fired Twitter's 'Ethical AI' Team.md" class="md-nav__link">
<span class="md-ellipsis">
Elon Musk Fires Ethical AI Team
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/NationBuilder%20-%20Wikipedia/" class="md-nav__link">
<span class="md-ellipsis">
NationBuilder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Neo-Nazis%2C%20Antisemites%2C%20and%20the%20N-Word%20Twitter%20Just%20Hours%20Under%20Elon%20Musk/" class="md-nav__link">
<span class="md-ellipsis">
Neo-Nazis on Twitter
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Phone%20security%20for%20activists%20%20Activist%20Handbook/" class="md-nav__link">
<span class="md-ellipsis">
Phone Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Saudi%20infiltration%20of%20Twitter%20-%20Wikipedia/" class="md-nav__link">
<span class="md-ellipsis">
Saudi infiltration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/The%20majority%20of%20traffic%20from%20Elon%20Musk%27s%20X%20may%20have%20been%20fake%20during%20the%20Super%20Bowl%2C%20report%20suggests/" class="md-nav__link">
<span class="md-ellipsis">
X Fake Traffic
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/The%20right-wing%20lurch%20of%20X%20under%20Elon%20Musk/" class="md-nav__link">
<span class="md-ellipsis">
X Right-Wing Lurch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/Under%20Elon%20Musk%2C%20Twitter%20has%20approved%2083%25%20of%20censorship%20requests%20by%20authoritarian%20governments/" class="md-nav__link">
<span class="md-ellipsis">
X Censorship
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/What%20Is%20Technofeudalism/" class="md-nav__link">
<span class="md-ellipsis">
Technofeudalism
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Clippings%20%E2%9C%82/amiskwaciy-w%C3%A2skahikan%20%28Edmonton%29%20History%20%20%E2%80%94%20Edmonton%20%26%20Area%20Land%20Trust/" class="md-nav__link">
<span class="md-ellipsis">
Edmonton History
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_6" >
<label class="md-nav__link" for="__nav_3_3_6" id="__nav_3_3_6_label" tabindex="0">
<span class="md-ellipsis">
Daisy AI
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_6">
<span class="md-nav__icon md-icon"></span>
Daisy AI
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Daisy%20AI%20%F0%9F%8C%BB/Daisy/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_6_2" >
<label class="md-nav__link" for="__nav_3_3_6_2" id="__nav_3_3_6_2_label" tabindex="0">
<span class="md-ellipsis">
Further Reading
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_6_2">
<span class="md-nav__icon md-icon"></span>
Further Reading
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Daisy%20AI%20%F0%9F%8C%BB/Further%20Reading%20on%20AI/Bnkops%20Artificial%20Intelligence%20Thoughts%20%26%20Policies/" class="md-nav__link">
<span class="md-ellipsis">
AI Thoughts & Policies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Daisy%20AI%20%F0%9F%8C%BB/Further%20Reading%20on%20AI/How%20To%20Prompt/" class="md-nav__link">
<span class="md-ellipsis">
How To Prompt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Daisy%20AI%20%F0%9F%8C%BB/Further%20Reading%20on%20AI/When%20A.I.%27s%20Output%20Is%20a%20Threat%20to%20A.I.%20Itself/" class="md-nav__link">
<span class="md-ellipsis">
AI Threats
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_7" >
<label class="md-nav__link" for="__nav_3_3_7" id="__nav_3_3_7_label" tabindex="0">
<span class="md-ellipsis">
Free Office Software
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_7">
<span class="md-nav__icon md-icon"></span>
Free Office Software
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Free%20Office%20Software%20Stack%20%F0%9F%A4%AF/Newsletter%20%2B%20Database/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter + Database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Free%20Office%20Software%20Stack%20%F0%9F%A4%AF/The%20Bunker%20Ops%20Server%20Build-Out/" class="md-nav__link">
<span class="md-ellipsis">
Server Build-Out
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Free%20Office%20Software%20Stack%20%F0%9F%A4%AF/The%20Stack/" class="md-nav__link">
<span class="md-ellipsis">
The Stack
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_8" >
<label class="md-nav__link" for="__nav_3_3_8" id="__nav_3_3_8_label" tabindex="0">
<span class="md-ellipsis">
Website Manuals
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_8">
<span class="md-nav__icon md-icon"></span>
Website Manuals
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Budibase%20-%20Form%20Builder%20%26%20Database/" class="md-nav__link">
<span class="md-ellipsis">
Budibase
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Cloudflare%20Guide/" class="md-nav__link">
<span class="md-ellipsis">
Cloudflare Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Customizing%20Your%20Listmonk%20Subscription%20Form/" class="md-nav__link">
<span class="md-ellipsis">
Listmonk Form
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/How%20to%20Add%20to%20the%20Repo/" class="md-nav__link">
<span class="md-ellipsis">
Add to Repo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/How%20to%20Replicate%20this%20Repo/" class="md-nav__link">
<span class="md-ellipsis">
Replicate Repo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Repo%20Live%20Generation/" class="md-nav__link">
<span class="md-ellipsis">
Repo Live Generation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Repo%20Theory/" class="md-nav__link">
<span class="md-ellipsis">
Repo Theory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Simple%20Markdown%20Manual/" class="md-nav__link">
<span class="md-ellipsis">
Markdown Manual
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Simple%20Target%20Manual/" class="md-nav__link">
<span class="md-ellipsis">
Target Manual
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Syntax%2C%20Embedding%2C%20HTML%2C%20and%20Other%20Code/" class="md-nav__link">
<span class="md-ellipsis">
Syntax & Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/Updated%20Website%20Install%20Guide/" class="md-nav__link">
<span class="md-ellipsis">
Website Install Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/bnkops%20Simple%20Targeter/" class="md-nav__link">
<span class="md-ellipsis">
Simple Targeter
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Website%20Manuals%20%F0%9F%A4%93/note_test/" class="md-nav__link">
<span class="md-ellipsis">
Note Test
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_9" >
<label class="md-nav__link" for="__nav_3_3_9" id="__nav_3_3_9_label" tabindex="0">
<span class="md-ellipsis">
Zines We Like
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_9">
<span class="md-nav__icon md-icon"></span>
Zines We Like
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Bounty%20Hunters%20%26%20Child%20Predators/" class="md-nav__link">
<span class="md-ellipsis">
Bounty Hunters & Child Predators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Defending%20The%20Camp/" class="md-nav__link">
<span class="md-ellipsis">
Defending The Camp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Doxcare/" class="md-nav__link">
<span class="md-ellipsis">
Doxcare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Mobile%20Phone%20Security%20for%20Activists/" class="md-nav__link">
<span class="md-ellipsis">
Mobile Phone Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Security%20%26%20Counter-Surveillance/" class="md-nav__link">
<span class="md-ellipsis">
Security & Counter-Surveillance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Turn%20Off%20Your%20Phone/" class="md-nav__link">
<span class="md-ellipsis">
Turn Off Your Phone
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/What%20Is%20Security%20Culture%20%E2%98%A0/" class="md-nav__link">
<span class="md-ellipsis">
Security Culture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/Zines%20We%20Like%20%F0%9F%98%8E/Who%20Wrote%20That/" class="md-nav__link">
<span class="md-ellipsis">
Who Wrote That
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10" >
<label class="md-nav__link" for="__nav_3_3_10" id="__nav_3_3_10_label" tabindex="0">
<span class="md-ellipsis">
User Contributions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10">
<span class="md-nav__icon md-icon"></span>
User Contributions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_1" >
<label class="md-nav__link" for="__nav_3_3_10_1" id="__nav_3_3_10_1_label" tabindex="0">
<span class="md-ellipsis">
indoctrinationmachine
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_10_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_1">
<span class="md-nav__icon md-icon"></span>
indoctrinationmachine
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/indoctrinationmachine/Hello%2C%20is%20it%20me%20you%27re%20looking%20foooooor%3F/" class="md-nav__link">
<span class="md-ellipsis">
Hello
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/indoctrinationmachine/My%20Sad%20Drive%20to%20Work/" class="md-nav__link">
<span class="md-ellipsis">
Sad Drive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/indoctrinationmachine/The%20Revolution%20must%20center%20pleasure%20%28and%20other%20cool%20wallpapers%29/" class="md-nav__link">
<span class="md-ellipsis">
Revolution & Pleasure
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_2" >
<label class="md-nav__link" for="__nav_3_3_10_2" id="__nav_3_3_10_2_label" tabindex="0">
<span class="md-ellipsis">
mygenderdisdad
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_10_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_2">
<span class="md-nav__icon md-icon"></span>
mygenderdisdad
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/mygenderdisdad/mygenderisdad/organizing/" class="md-nav__link">
<span class="md-ellipsis">
organizing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/mygenderdisdad/mygenderisdad/prairie/" class="md-nav__link">
<span class="md-ellipsis">
prairie
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/mygenderdisdad/mygenderisdad/radical/" class="md-nav__link">
<span class="md-ellipsis">
radical
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/mygenderdisdad/mygenderisdad/school/" class="md-nav__link">
<span class="md-ellipsis">
school
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/mygenderdisdad/mygenderisdad/youth/" class="md-nav__link">
<span class="md-ellipsis">
youth
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_3" >
<label class="md-nav__link" for="__nav_3_3_10_3" id="__nav_3_3_10_3_label" tabindex="0">
<span class="md-ellipsis">
strategicallydum
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_10_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_3">
<span class="md-nav__icon md-icon"></span>
strategicallydum
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/strategicallydum/Resource%20%26%20Tools%20for%20Research/" class="md-nav__link">
<span class="md-ellipsis">
Research Tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/strategicallydum/What%20is%20Audience%20Research%3F/" class="md-nav__link">
<span class="md-ellipsis">
Audience Research
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/strategicallydum/Homelessness/Messaging%20Research%20Drop/" class="md-nav__link">
<span class="md-ellipsis">
Homelessness Research
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_4" >
<label class="md-nav__link" for="__nav_3_3_10_4" id="__nav_3_3_10_4_label" tabindex="0">
<span class="md-ellipsis">
thatreallyblondehuman
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_3_10_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_4">
<span class="md-nav__icon md-icon"></span>
thatreallyblondehuman
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Trans-human/" class="md-nav__link">
<span class="md-ellipsis">
Trans-human
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/stats/" class="md-nav__link">
<span class="md-ellipsis">
Stats
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/whomst/" class="md-nav__link">
<span class="md-ellipsis">
Whomst
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_4_4" >
<label class="md-nav__link" for="__nav_3_3_10_4_4" id="__nav_3_3_10_4_4_label" tabindex="0">
<span class="md-ellipsis">
Art
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_3_10_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_4_4">
<span class="md-nav__icon md-icon"></span>
Art
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Art/Creature%2C%20Drink/" class="md-nav__link">
<span class="md-ellipsis">
Creature Drink
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Art/Fuck%20Neo%20Nazi%27s/" class="md-nav__link">
<span class="md-ellipsis">
Neo Nazis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Art/Guillotine%20Special/" class="md-nav__link">
<span class="md-ellipsis">
Guillotine Special
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Art/They%20Who%20Act/" class="md-nav__link">
<span class="md-ellipsis">
They Who Act
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_4_5" >
<label class="md-nav__link" for="__nav_3_3_10_4_5" id="__nav_3_3_10_4_5_label" tabindex="0">
<span class="md-ellipsis">
Demos
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_3_10_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_4_5">
<span class="md-nav__icon md-icon"></span>
Demos
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Demos/Charli%20XCX%20Fan%20Site/" class="md-nav__link">
<span class="md-ellipsis">
Charli XCX Fan Site
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Demos/Generated%20Report/" class="md-nav__link">
<span class="md-ellipsis">
Generated Report
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Demos/Simple%20Target%20Testing/" class="md-nav__link">
<span class="md-ellipsis">
Simple Target Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Demos/Test%20Demo/" class="md-nav__link">
<span class="md-ellipsis">
Test Demo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Demos/Workflow/" class="md-nav__link">
<span class="md-ellipsis">
Workflow
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_4_6" >
<label class="md-nav__link" for="__nav_3_3_10_4_6" id="__nav_3_3_10_4_6_label" tabindex="0">
<span class="md-ellipsis">
Pride Corner
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_3_10_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_4_6">
<span class="md-nav__icon md-icon"></span>
Pride Corner
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Pride%20Corner/Pride%20Corner%20-%20Preachers/" class="md-nav__link">
<span class="md-ellipsis">
Preachers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Pride%20Corner/Pride%20Corner%20History/" class="md-nav__link">
<span class="md-ellipsis">
History
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Pride%20Corner/Pride%20Corner/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10_4_7" >
<label class="md-nav__link" for="__nav_3_3_10_4_7" id="__nav_3_3_10_4_7_label" tabindex="0">
<span class="md-ellipsis">
Thoughts
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_3_10_4_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_10_4_7">
<span class="md-nav__icon md-icon"></span>
Thoughts
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Analyzing%20The%20Matrix/" class="md-nav__link">
<span class="md-ellipsis">
Matrix Analysis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Budgeting/" class="md-nav__link">
<span class="md-ellipsis">
Budgeting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Deep%20Diving%20-%20The%20Coming%20Age%20of%20Digital%20Connection/" class="md-nav__link">
<span class="md-ellipsis">
Digital Connection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Distributed%20Digital%20Organizing%20is%20The%20Way%20Out/" class="md-nav__link">
<span class="md-ellipsis">
Digital Organizing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/First%20They%20Came%20For%20The%20Trannies/" class="md-nav__link">
<span class="md-ellipsis">
First They Came
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/How%20not%20to%20get%20got%20making%20content%20v2/" class="md-nav__link">
<span class="md-ellipsis">
Content Safety
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/If%20you%20do%20politics%20who%20is%20reading%20your%20secrets%20-%20why%20you%20should%20de-corp%20your%20software%20stack/" class="md-nav__link">
<span class="md-ellipsis">
De-corp Software
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Newsletter%201.7/" class="md-nav__link">
<span class="md-ellipsis">
Newsletter 1.7
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/The%20Revolution%20Will%20Not%20Get%20Likes/" class="md-nav__link">
<span class="md-ellipsis">
Revolution & Likes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/The%20Rise%20of%20Industrial%20Advocacy%20-%20Why%20You%20Should%20Quit%20Nationbuilder/" class="md-nav__link">
<span class="md-ellipsis">
Industrial Advocacy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/They%20Live%20Recut/" class="md-nav__link">
<span class="md-ellipsis">
They Live Recut
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Twitter%20is%20Dead%2C%20Long%20Live%20X%20---%20Why%20You%20Should%20Abandon%20X/" class="md-nav__link">
<span class="md-ellipsis">
Abandon X
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../archive/repo.archive/thatreallyblondehuman/Thoughts%20%F0%9F%A4%94/Venus%20Wars/" class="md-nav__link">
<span class="md-ellipsis">
Venus Wars
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" >
<label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0">
<span class="md-ellipsis">
Apps
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
Apps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cm/apps/ollama/" class="md-nav__link">
<span class="md-ellipsis">
Ollama
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#contents" class="md-nav__link">
<span class="md-ellipsis">
Contents
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#development-pathway" class="md-nav__link">
<span class="md-ellipsis">
Development Pathway
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prerequisites" class="md-nav__link">
<span class="md-ellipsis">
Prerequisites
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#quick-start-for-local-dev" class="md-nav__link">
<span class="md-ellipsis">
Quick Start for Local Dev
</span>
</a>
<nav class="md-nav" aria-label="Quick Start for Local Dev">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configure-portainer-immediately" class="md-nav__link">
<span class="md-ellipsis">
⚠️ Configure Portainer Immediately 🦊
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#on-successful-build-vist-local-homepage" class="md-nav__link">
<span class="md-ellipsis">
On Successful Build, Vist Local Homepage
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#local-service-ports" class="md-nav__link">
<span class="md-ellipsis">
Local Service Ports
</span>
</a>
<nav class="md-nav" aria-label="Local Service Ports">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ubuntu-os-build-outs" class="md-nav__link">
<span class="md-ellipsis">
Ubuntu OS &amp; Build Outs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#1-install-docker-and-docker-compose" class="md-nav__link">
<span class="md-ellipsis">
1. Install Docker and Docker Compose
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-clone-the-repository" class="md-nav__link">
<span class="md-ellipsis">
2. Clone the Repository
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-configure-your-environment" class="md-nav__link">
<span class="md-ellipsis">
2. Configure Your Environment
</span>
</a>
<nav class="md-nav" aria-label="2. Configure Your Environment">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setting-up-cloudflare-credentials" class="md-nav__link">
<span class="md-ellipsis">
Setting Up Cloudflare Credentials
</span>
</a>
<nav class="md-nav" aria-label="Setting Up Cloudflare Credentials">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-create-an-api-token" class="md-nav__link">
<span class="md-ellipsis">
1. Create an API Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-get-your-zone-id" class="md-nav__link">
<span class="md-ellipsis">
2. Get your Zone ID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-get-your-tunnel-id" class="md-nav__link">
<span class="md-ellipsis">
3. Get your Tunnel ID
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#4-start-the-services" class="md-nav__link">
<span class="md-ellipsis">
4. Start the Services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-cloudflare-tunnel-setup" class="md-nav__link">
<span class="md-ellipsis">
4. Cloudflare Tunnel Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#install-cloudflared-on-ubuntu-2404" class="md-nav__link">
<span class="md-ellipsis">
Install Cloudflared on Ubuntu 24.04
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configure-your-cloudflare-tunnel" class="md-nav__link">
<span class="md-ellipsis">
Configure Your Cloudflare Tunnel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#create-a-cloudflare-system-service" class="md-nav__link">
<span class="md-ellipsis">
Create a Cloudflare System Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#add-cname-records" class="md-nav__link">
<span class="md-ellipsis">
Add CNAME Records
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#website-build-and-deployment-workflow" class="md-nav__link">
<span class="md-ellipsis">
Website Build and Deployment Workflow
</span>
</a>
<nav class="md-nav" aria-label="Website Build and Deployment Workflow">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#building-your-website" class="md-nav__link">
<span class="md-ellipsis">
Building Your Website
</span>
</a>
<nav class="md-nav" aria-label="Building Your Website">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#option-1-using-code-server-recommended-for-remote-deployments" class="md-nav__link">
<span class="md-ellipsis">
Option 1: Using Code Server (recommended for remote deployments)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#option-2-locally-on-your-machine" class="md-nav__link">
<span class="md-ellipsis">
Option 2: Locally on your machine
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#development-vs-production" class="md-nav__link">
<span class="md-ellipsis">
Development vs Production
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#accessing-your-services" class="md-nav__link">
<span class="md-ellipsis">
Accessing Your Services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="changemaker-v5">Changemaker V5<a class="headerlink" href="#changemaker-v5" title="Permanent link">&para;</a></h1>
<p><img alt="changemakergif" src="images/changemkaerv5.gif" /></p>
<hr />
<p>Changemaker V5 is a battle-tested, lightweight, self-hosted productivity suite which empowers you to deploy secure, locally-built websites, blogs, newsletters, &amp; forms from personal projects to full-fledged campaigns granting you complete control, inherent security, and true freedom of speech. </p>
<p>It is a project undertaken by The Bunker Operations, headquarted in Edmonton, Alberta, Canada, as to provide our community a digital campaign alternative to mainstream American systems. </p>
<p><img alt="build your power" src="assets/images/buildyourpower.png" /></p>
<h2 id="contents">Contents<a class="headerlink" href="#contents" title="Permanent link">&para;</a></h2>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#quick-start">Quick Start</a></li>
<li><a href="#detailed-installation">Detailed Installation</a></li>
<li><a href="#1-install-docker-and-docker-compose">1. Install Docker and Docker Compose</a></li>
<li><a href="#2-clone-the-repository">2. Clone the Repository</a></li>
<li><a href="#3-configure-your-environment">3. Configure Your Environment</a></li>
<li><a href="#4-start-the-services">4. Start the Services</a></li>
<li><a href="#5-run-post-installation-tasks">5. Run Post-Installation Tasks</a></li>
<li><a href="#local-service-ports">Local Service Ports</a></li>
<li><a href="#cloudflare-tunnel-setup">Cloudflare Tunnel Setup</a></li>
<li><a href="#install-cloudflared-on-ubuntu-2404">Install Cloudflared on Ubuntu 24.04</a></li>
<li><a href="#configure-your-cloudflare-tunnel">Configure Your Cloudflare Tunnel</a></li>
<li><a href="#create-a-cloudflare-system-service">Create a Cloudflare System Service</a></li>
<li><a href="#add-cname-records">Add CNAME Records</a></li>
<li><a href="#website-build-and-deployment-workflow">Website Build and Deployment Workflow</a></li>
<li><a href="#accessing-your-services">Accessing Your Services</a></li>
<li><a href="#troubleshooting">Troubleshooting</a></li>
</ul>
<hr />
<h2 id="development-pathway">Development Pathway<a class="headerlink" href="#development-pathway" title="Permanent link">&para;</a></h2>
<p>Changemaker's identified wants for development: </p>
<ul>
<li>Internal integrations for assset management i.e. shared plain file locations </li>
<li>Database connections for automation systems i.e. manauls for Nocodb &amp; n8n on connecting services</li>
<li>Manual &amp; landing site for the whole system i.e. upgrading bnkops.com </li>
<li>Trainings and manuals across the board </li>
</ul>
<p>Idenitfied Feature Requests: </p>
<ul>
<li>Event Management: Looking at <a href="https://hi.events/">hi.ewvents</a></li>
<li>Scheduling: Looking at <a href="https://rallly.co/">rally</a></li>
<li>Support and user chat: looking at <a href="https://github.com/chatwoot/chatwoot">chatwoot</a></li>
<li>Mass community chat: looking at <a href="https://thelounge.chat/">thelounge</a></li>
<li>Team chat and project management: looking at <a href="https://github.com/RocketChat/Rocket.Chat">rocket chat</a> ✔️</li>
</ul>
<p>Bugs:</p>
<ul>
<li>Readme needs a full flow redo - ✅ next up </li>
<li>Config script needs to be updated for nocodb for a simpler string / set the string - <img alt="✅" class="emojione" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/2705.png" title=":white_check_mark:" /></li>
<li>Gitea DNS application access bypass not properly setting - ✅ bypass needing manual setup / need to explore api more</li>
<li>Portainer not serving to http - 🤔 portainer to be limited to local access </li>
<li>nocodb setup upping odd - ✅ password needs no special characters</li>
<li>ferdium port mismatch - ✅ was a cloudflare port setting missmatch</li>
</ul>
<h2 id="prerequisites">Prerequisites<a class="headerlink" href="#prerequisites" title="Permanent link">&para;</a></h2>
<ul>
<li>A Linux server (Ubuntu 22.04/24.04 recommended)</li>
<li>Docker &amp; Docker Compose</li>
<li>Internet connection</li>
<li>(Optional) Root or sudo access</li>
<li>(Optional) A domain name for remote access</li>
<li>(Optional) Cloudflare account for tunnel setup</li>
</ul>
<h2 id="quick-start-for-local-dev">Quick Start for Local Dev<a class="headerlink" href="#quick-start-for-local-dev" title="Permanent link">&para;</a></h2>
<p>Review all off the applications <a href="apps.md">here</a></p>
<p>If you're familiar with Docker and want to get started quickly:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># Clone the repository</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>git<span class="w"> </span>clone<span class="w"> </span>https://gitea.bnkhome.org/bnkops/Changemaker.git
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="nb">cd</span><span class="w"> </span>changemaker
</code></pre></div>
<p>See <a href="#setting-up-cloudflare-credentials">Setting Up Cloudflare Credentials</a> for how to get cloudflare credentials for config.sh.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># Use default configuration for local development.</span>
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="c1"># To configure for remote deployment with Cloudflare, first make the script executable:</span>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>chmod<span class="w"> </span>+x<span class="w"> </span>config.sh
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="c1"># Then run the configuration script. You will need your Cloudflare details.</span>
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>./config.sh
</code></pre></div>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a># Start all services
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>docker compose up -d
</code></pre></div>
<p><strong>First time installation can take several miniutes</strong></p>
<p>On a 1GB internet connection, instal time is approximately 5 minutes.</p>
<h3 id="configure-portainer-immediately">⚠️ Configure Portainer Immediately 🦊<a class="headerlink" href="#configure-portainer-immediately" title="Permanent link">&para;</a></h3>
<p>Portainer has a timed build process that needs to be completed on successful build. Proceed to configure the service by visiting https://localhost:9444 </p>
<p>Gitea has a install process that you should complete immediately after connecting system to dns and domain services. </p>
<h3 id="on-successful-build-vist-local-homepage">On Successful Build, Vist <a href="http://localhost:3011">Local Homepage</a><a class="headerlink" href="#on-successful-build-vist-local-homepage" title="Permanent link">&para;</a></h3>
<p>The <a href="http://localhost:3011">local homepage - http://localhost:3011</a> is configured with all of the services you can access securely locally. </p>
<p>To access services outside of network, configure a VPN, Tailscale, or continue to Cloudflare publishing documentation.</p>
<h2 id="local-service-ports">Local Service Ports<a class="headerlink" href="#local-service-ports" title="Permanent link">&para;</a></h2>
<p>When running Changemaker locally, you can access the services at the following ports on your server:</p>
<table>
<thead>
<tr>
<th>Service</th>
<th>Local Port</th>
<th>Local URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Root/Website (Nginx)</td>
<td>4001</td>
<td><a href="http://localhost:4001">http://localhost:4001</a></td>
</tr>
<tr>
<td>Homepage (local)</td>
<td>3011</td>
<td><a href="http://localhost:3011">http://locahost:3011</a></td>
</tr>
<tr>
<td>Homepage</td>
<td>3010</td>
<td><a href="http://localhost:3010">http://localhost:3010</a></td>
</tr>
<tr>
<td>Excalidraw</td>
<td>3333</td>
<td><a href="http://localhost:3333">http://localhost:3333</a></td>
</tr>
<tr>
<td>Listmonk</td>
<td>9000</td>
<td><a href="http://localhost:9000">http://localhost:9000</a></td>
</tr>
<tr>
<td>Monica CRM</td>
<td>8085</td>
<td><a href="http://localhost:8085">http://localhost:8085</a></td>
</tr>
<tr>
<td>MkDocs</td>
<td>4000</td>
<td><a href="http://localhost:4000">http://localhost:4000</a></td>
</tr>
<tr>
<td>Flatnotes</td>
<td>8089</td>
<td><a href="http://localhost:8089">http://localhost:8089</a></td>
</tr>
<tr>
<td>Code Server</td>
<td>8888</td>
<td><a href="http://localhost:8888">http://localhost:8888</a></td>
</tr>
<tr>
<td>Ollama</td>
<td>11435</td>
<td><a href="http://localhost:11435">http://localhost:11435</a></td>
</tr>
<tr>
<td>OpenWebUI</td>
<td>3005</td>
<td><a href="http://localhost:3005">http://localhost:3005</a></td>
</tr>
<tr>
<td>Gitea</td>
<td>3030</td>
<td><a href="http://localhost:3030">http://localhost:3030</a></td>
</tr>
<tr>
<td>Portainer</td>
<td>8005</td>
<td><a href="https://localhost:9444">https://localhost:9444</a></td>
</tr>
<tr>
<td>Mini QR</td>
<td>8081</td>
<td><a href="http://localhost:8081">http://localhost:8081</a></td>
</tr>
<tr>
<td>Ferdium</td>
<td>3009</td>
<td><a href="http://localhost:3009">http://localhost:3009</a></td>
</tr>
<tr>
<td>Answer</td>
<td>9080</td>
<td><a href="http://localhost:9080">http://localhost:9080</a></td>
</tr>
<tr>
<td>NocoDB</td>
<td>8090</td>
<td><a href="http://localhost:8090">http://localhost:8090</a></td>
</tr>
<tr>
<td>n8n</td>
<td>5678</td>
<td><a href="http://localhost:5678">http://localhost:5678</a></td>
</tr>
<tr>
<td>ConvertX</td>
<td>3100</td>
<td><a href="http://localhost:3100">http://localhost:3100</a></td>
</tr>
<tr>
<td>Rocket.Chat</td>
<td>3004</td>
<td><a href="http://localhost:3004">http://localhost:3004</a></td>
</tr>
</tbody>
</table>
<h3 id="ubuntu-os-build-outs">Ubuntu OS &amp; Build Outs<a class="headerlink" href="#ubuntu-os-build-outs" title="Permanent link">&para;</a></h3>
<p>You can deploy Changemaker on any OS using Docker however we also provide several full Ubuntu build-outs. These scripts can speed up your deployment immensely and Changemaker is developed on a like system: </p>
<ol>
<li><strong><a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/build.server.md">build.server</a></strong> - this build-out is a lightweight deployment aimed for dedicated server machines. It is focused on entry level users who would build on a dedicated machine. </li>
<li><strong><a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/build.homelab.md">build.homelab</a></strong> - this build-out is full-some development focused build-out that The Bunker Operations uses for our day-to-day operations. </li>
</ol>
<p>Configuration and services scripts for futher developing the system can be found at the <a href="https://gitea.bnkhome.org/bnkops/scripts">scripts</a> repo. </p>
<h3 id="1-install-docker-and-docker-compose">1. Install Docker and Docker Compose<a class="headerlink" href="#1-install-docker-and-docker-compose" title="Permanent link">&para;</a></h3>
<p>Install Docker and Docker Compose on your system if they're not already installed: </p>
<p><a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/build.homelab.md#dockerhttpswwwdockercom">Install Docker &amp; Docker Compose</a></p>
<p>Verify that Docker and Docker Compose are installed correctly:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>docker<span class="w"> </span>--version
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>docker<span class="w"> </span>compose<span class="w"> </span>version
</code></pre></div>
<h3 id="2-clone-the-repository">2. Clone the Repository<a class="headerlink" href="#2-clone-the-repository" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/your-org/changemaker-v5.git
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="nb">cd</span><span class="w"> </span>changemaker-v5
</code></pre></div>
<h3 id="2-configure-your-environment">2. Configure Your Environment<a class="headerlink" href="#2-configure-your-environment" title="Permanent link">&para;</a></h3>
<h4 id="setting-up-cloudflare-credentials">Setting Up Cloudflare Credentials<a class="headerlink" href="#setting-up-cloudflare-credentials" title="Permanent link">&para;</a></h4>
<p>To use the configuration script, you'll need to collect several Cloudflare credentials:</p>
<div class="admonition info">
<p class="admonition-title">Required Cloudflare Information</p>
</div>
<p>You'll need three important pieces of information from your Cloudflare account:
- API Token with proper permissions
- Zone ID for your domain
- Tunnel ID</p>
<h5 id="1-create-an-api-token">1. Create an API Token<a class="headerlink" href="#1-create-an-api-token" title="Permanent link">&para;</a></h5>
<ol>
<li>Go to your <a href="https://dash.cloudflare.com/">Cloudflare Dashboard</a> → Profile → API Tokens</li>
<li>Click "Create Token"</li>
<li>Choose one of these options:</li>
<li>Use the "Edit zone DNS" template</li>
<li>Create a custom token with these permissions:<ul>
<li>Zone:DNS:Edit</li>
<li>Access:Apps:Edit</li>
</ul>
</li>
<li>Restrict the token to only your specific zone/domain</li>
<li>Generate and copy the token</li>
</ol>
<h5 id="2-get-your-zone-id">2. Get your Zone ID<a class="headerlink" href="#2-get-your-zone-id" title="Permanent link">&para;</a></h5>
<ol>
<li>Go to your domain's overview page in the Cloudflare dashboard</li>
<li>The Zone ID is displayed on the right sidebar</li>
<li>It looks like: <code>023e105f4ecef8ad9ca31a8372d0c353</code></li>
</ol>
<h5 id="3-get-your-tunnel-id">3. Get your Tunnel ID<a class="headerlink" href="#3-get-your-tunnel-id" title="Permanent link">&para;</a></h5>
<ol>
<li>If you've already created a tunnel, you can find the ID:</li>
<li>Go to Cloudflare Zero Trust dashboard → Access → Tunnels</li>
<li>Click on your tunnel</li>
<li>The Tunnel ID is in the URL: <code>https://dash.teams.cloudflare.com/xxx/network/tunnels/xxxx</code></li>
<li>It looks like: <code>6ff42ae2-765d-4adf-8112-31c55c1551ef</code></li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Keep Your Credentials Secure</p>
</div>
<p>Store these credentials securely. Never commit them to public repositories or share them in unsecured communications.</p>
<p>You have two options:</p>
<p><strong>Option A: Use the configuration wizard (recommended)</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="c1"># Make the script executable</span>
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>chmod<span class="w"> </span>+x<span class="w"> </span>config.sh
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="c1"># Run the configuration wizard</span>
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a>./config.sh
</code></pre></div>
<p><strong>Option B: Configure manually</strong>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="c1"># Edit the .env file with your settings</span>
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>nano<span class="w"> </span>.env
</code></pre></div></p>
<h3 id="4-start-the-services">4. Start the Services<a class="headerlink" href="#4-start-the-services" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="c1"># Pull and start all containers in detached mode</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d
</code></pre></div>
<div class="admonition warning">
<p class="admonition-title">Configure Portainer</p>
<p>Portainer has a timed build process. Make sure to immediatly configure the service at https://localhost:9444 following successful build. </p>
</div>
<p>All services can now be accessed through on local machine. If deploying to public, it is recommended to <strong>configure portainer</strong> and then continue configuration for all other services once tunnel is established. Then use the public links for configuration of services. For online deployment with Cloudflare, continue to next steps. </p>
<h3 id="4-cloudflare-tunnel-setup">4. Cloudflare Tunnel Setup<a class="headerlink" href="#4-cloudflare-tunnel-setup" title="Permanent link">&para;</a></h3>
<p>For secure remote access to your services, you can set up a Cloudflare Tunnel.</p>
<h3 id="install-cloudflared-on-ubuntu-2404">Install Cloudflared on Ubuntu 24.04<a class="headerlink" href="#install-cloudflared-on-ubuntu-2404" title="Permanent link">&para;</a></h3>
<p><a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/build.homelab.md#cloudflaredhttpsdeveloperscloudflarecomcloudflare-oneconnectionsconnect-networks">Cloudflared Installation Guide</a></p>
<h3 id="configure-your-cloudflare-tunnel">Configure Your Cloudflare Tunnel<a class="headerlink" href="#configure-your-cloudflare-tunnel" title="Permanent link">&para;</a></h3>
<p>You can use our <a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/config.cloudflare.homelab.md">Cloudflare Configuration Guide</a> however remember to copy the values of the <a href="example.cloudflare.config.yml">example config</a> for this deployment. </p>
<h3 id="create-a-cloudflare-system-service">Create a Cloudflare System Service<a class="headerlink" href="#create-a-cloudflare-system-service" title="Permanent link">&para;</a></h3>
<p><a href="https://gitea.bnkhome.org/bnkops/scripts/src/branch/main/service.cloudflared.md">Cloudflare Service Setup Guide</a></p>
<h3 id="add-cname-records">Add CNAME Records<a class="headerlink" href="#add-cname-records" title="Permanent link">&para;</a></h3>
<p>After setting up your Cloudflare Tunnel, you need to add CNAME records for your services. You can do this manually in the Cloudflare DNS panel or with using the following script: <code>add-cname-records.sh</code></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="c1"># Make the script executable</span>
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>chmod<span class="w"> </span>+x<span class="w"> </span>add-cname-records.sh
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="c1"># Run the script to add CNAME records</span>
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>./add-cname-records.sh
</code></pre></div>
<p>This script will add CNAME records for all Changemaker services to your Cloudflare DNS.</p>
<p>It will also set up a Cloudflare Access Application for all services execpt for your website and gitea. This is a extra layer of security that we do recommend for your deployment. It will automatically allow any emails with from the root domain that you set in the <code>config.sh</code> process. For example, if you set your root domain to <code>example.com</code> your access rule will allow emails ending with @example.com thorugh. You can update your access settings in the Cloudflare Zero Trust dashboard.</p>
<div class="admonition warning">
<p class="admonition-title">Cloudflare Zero Trust</p>
<p>To ensure that system is secure, we highly recommend setting up some level of access control using Cloudflare Zero Trust. The <code>add-cname-records.sh</code> will do this automatically however the user is encouraged to familiarize themselves with Cloudflares Zero Trust access system. </p>
</div>
<h2 id="website-build-and-deployment-workflow">Website Build and Deployment Workflow<a class="headerlink" href="#website-build-and-deployment-workflow" title="Permanent link">&para;</a></h2>
<p>Changemaker uses MkDocs to create your website content, which is then served by an Nginx server. To update your website, you need to:</p>
<ol>
<li><strong>Edit your content</strong> using either the Code Server or locally on your machine</li>
<li><strong>Build the static site files</strong> </li>
<li><strong>Let the Nginx server (mkdocs-site-server) serve the built site</strong></li>
</ol>
<h3 id="building-your-website">Building Your Website<a class="headerlink" href="#building-your-website" title="Permanent link">&para;</a></h3>
<p>You can build your website in two ways:</p>
<h4 id="option-1-using-code-server-recommended-for-remote-deployments">Option 1: Using Code Server (recommended for remote deployments)<a class="headerlink" href="#option-1-using-code-server-recommended-for-remote-deployments" title="Permanent link">&para;</a></h4>
<ol>
<li>Access Code Server at http://localhost:8888 or https://code-server.yourdomain.com</li>
<li>Navigate to the mkdocs directory <code>/home/coder/mkdocs/</code></li>
<li>Open a terminal in Code Server</li>
<li>Run the build command:
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="nb">cd</span><span class="w"> </span>/home/coder/mkdocs
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>mkdocs<span class="w"> </span>build
</code></pre></div></li>
</ol>
<h4 id="option-2-locally-on-your-machine">Option 2: Locally on your machine<a class="headerlink" href="#option-2-locally-on-your-machine" title="Permanent link">&para;</a></h4>
<ol>
<li>Navigate to the mkdocs directory in your project:
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="nb">cd</span><span class="w"> </span>/home/bunker-admin/Changemaker/mkdocs
</code></pre></div></li>
<li>Run the build command:
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>mkdocs<span class="w"> </span>build
</code></pre></div></li>
</ol>
<p>After building, the static site files will be generated in the <code>mkdocs/site</code> directory, which is automatically mounted to the Nginx server (mkdocs-site-server). Your website will be immediately available at:
- Locally: http://localhost:4001
- With Cloudflare: https://yourdomain.com</p>
<h3 id="development-vs-production">Development vs Production<a class="headerlink" href="#development-vs-production" title="Permanent link">&para;</a></h3>
<ul>
<li>During <strong>development</strong>, you can use the MkDocs live server at port 4000, which automatically rebuilds when you make changes</li>
<li>For <strong>production</strong>, build your site as described above and let the Nginx server at port 4001 serve the static files</li>
</ul>
<h2 id="accessing-your-services">Accessing Your Services<a class="headerlink" href="#accessing-your-services" title="Permanent link">&para;</a></h2>
<p>The <strong>Homepage</strong> acts as a central dashboard for all your Changemaker services. You can access it at:</p>
<ul>
<li>Locally: http://localhost:3011 or http://your-server-ip:3011</li>
<li>With Cloudflare: https://homepage.yourdomain.com</li>
</ul>
<p>The Homepage will display links to all your deployed services, making it easy to navigate your Changemaker ecosystem.</p>
<p>After installation and cloudflare deployment you can also access individual services at the following URLs:</p>
<ul>
<li>Website: https://yourdomain.com</li>
<li>Homepage: https://homepage.yourdomain.com</li>
<li>Live Preview: https://live.yourdomain.com</li>
<li>Excalidraw: https://excalidraw.yourdomain.com</li>
<li>Listmonk: https://listmonk.yourdomain.com</li>
<li>Monica CRM: https://monica.yourdomain.com</li>
<li>MkDocs: https://yourdomain.com</li>
<li>Flatnotes: https://flatnotes.yourdomain.com</li>
<li>Code Server: https://code-server.yourdomain.com</li>
<li>Ollama: https://ollama.yourdomain.com</li>
<li>OpenWebUI: https://open-web-ui.yourdomain.com</li>
<li>Gitea: https://gitea.yourdomain.com</li>
<li>Portainer: https://portainer.yourdomain.com</li>
<li>Mini QR: https://mini-qr.yourdomain.com</li>
<li>Ferdium: https://ferdium.yourdomain.com</li>
<li>Answer: https://answer.yourdomain.com</li>
<li>NocoDB: https://nocodb.yourdomain.com</li>
<li>n8n: https://n8n.yourdomain.com</li>
<li>ConvertX: https://convertx.yourdomain.com</li>
<li>Rocket.Chat: https://rocket.yourdomain.com</li>
</ul>
<h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link">&para;</a></h2>
<p>If you encounter issues:</p>
<ol>
<li>
<p>Check the Docker logs:
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>docker<span class="w"> </span>compose<span class="w"> </span>logs
</code></pre></div></p>
</li>
<li>
<p>Verify service status:
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>docker<span class="w"> </span>compose<span class="w"> </span>ps
</code></pre></div></p>
</li>
<li>
<p>Ensure your Cloudflare Tunnel is running:
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>sudo<span class="w"> </span>systemctl<span class="w"> </span>status<span class="w"> </span>cloudflared
</code></pre></div></p>
</li>
<li>
<p>Check CNAME records in your Cloudflare dashboard.</p>
</li>
</ol>
<p>For additional help, please file an issue on our GitHub repository.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2024 The Bunker Operations - Built with Change Maker
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tracking", "navigation.indexes", "navigation.collapse", "navigation.path", "content.code.copy", "navigation.top", "navigation.tabs"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
</body>
</html>