Skip to content

Architecture Overview

Campaign Brain is a multi-tenant SaaS platform for political campaign management.

System Architecture

graph TB
    subgraph "Infrastructure"
        NGINX[Nginx Reverse Proxy]
        SYSTEMD[Systemd Services]
    end

    subgraph "Tenant Manager"
        TM_UI[Frontend<br/>:32200]
        TM_API[API<br/>:32201]
        TM_DB[(SQLite<br/>manager.db)]
    end

    subgraph "Tenant: mi20"
        MI_UI[Frontend<br/>:32310]
        MI_API[API<br/>:32311]
        MI_DB[(DuckDB<br/>pocket.db)]
    end

    subgraph "Tenant: ky04"
        KY_UI[Frontend<br/>:32320]
        KY_API[API<br/>:32321]
        KY_DB[(DuckDB<br/>pocket.db)]
    end

    NGINX --> TM_UI
    NGINX --> MI_UI
    NGINX --> KY_UI

    TM_UI --> TM_API
    TM_API --> TM_DB

    MI_UI --> MI_API
    MI_API --> MI_DB

    KY_UI --> KY_API
    KY_API --> KY_DB

    SYSTEMD --> MI_UI
    SYSTEMD --> MI_API
    SYSTEMD --> KY_UI
    SYSTEMD --> KY_API

Components

Tenant Manager (cbtenant)

The central orchestration system that:

  • Creates and configures new tenant instances
  • Manages tenant lifecycle (deploy, upgrade, stop, delete)
  • Handles port allocation and service management
  • Provides a dashboard for administrators

Technology Stack:

  • FastAPI (REST API)
  • FastHTML (Dashboard UI)
  • SQLite (Metadata storage)
  • Systemd (Service management)

Campaign App (cbapp)

The core application deployed for each tenant:

  • Audience management (contacts, voters)
  • Event tracking
  • Communication logging
  • i360 voter data integration
  • Segment management

Technology Stack:

  • FastAPI (REST API)
  • FastHTML (Web UI)
  • DuckDB (Data storage with vector search)
  • HTMX (Dynamic UI updates)

Workflow Engine (cbworkflow)

Automation and workflow processing:

  • Scheduled tasks
  • Event-driven workflows
  • Integrations with external services

Data Flow

sequenceDiagram
    participant Admin
    participant TM as Tenant Manager
    participant GH as GitHub
    participant Tenant as Tenant App

    Admin->>TM: Create Tenant
    TM->>GH: Clone cbapp
    TM->>TM: Allocate Ports
    TM->>TM: Create Services
    TM->>Tenant: Start Services

    Admin->>TM: Upgrade Tenant
    TM->>Tenant: Stop Services
    TM->>GH: Git Pull (version tag)
    TM->>Tenant: Run Migrations
    TM->>Tenant: Start Services

Directory Structure

/home/bisenbek/projects/nominate/
├── cbtenant/           # Tenant Manager
│   ├── api/           # FastAPI backend
│   ├── app/           # FastHTML frontend
│   ├── db/            # Database files
│   └── scripts/       # Utility scripts
├── cbapp/             # Source repository
├── testsite/          # Test tenant
├── mi20-clevenger/    # Production tenant
└── ky04/              # Production tenant

See Also