Skip to main content

homelab diagram

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#1e1e1e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#fff', 'lineColor': '#fff', 'tertiaryColor': '#fff', 'mainBkg': '#1e1e1e', 'clusterBkg': '#1e1e1e', 'clusterBorder': '#fff'}}}%%
flowchart TD
    %% ==========================================
    %% 1. STRICT COLOR DEFINITIONS
    %% ==========================================
    %% Outer Regions (Cloud/Home) - Translucent or Dark
    classDef region fill:#121212,stroke:#fff,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
    
    %% Servers (Firebolt, Phoenix) - MUST BE DARK GREY
    classDef server fill:#263238,stroke:#fff,stroke-width:2px,color:#fff
    
    %% Services (The Apps) - Black/Darker Grey
    classDef service fill:#000000,stroke:#90a4ae,stroke-width:1px,color:#fff

    %% ==========================================
    %% 2. THE VERTICAL SPINE (Layout Anchor)
    %% ==========================================
    %% These invisible nodes force the vertical tower structure
    Start((Internet)):::service ~~~ CloudSpine:::service ~~~ HomeSpine:::service ~~~ FireboltSpine:::service ~~~ NorbertSpine:::service ~~~ PiHoleSpine:::service
    
    %% Hide the spine nodes (make them tiny)
    style Start fill:#fff,color:#000
    style CloudSpine width:0px,height:0px
    style HomeSpine width:0px,height:0px
    style FireboltSpine width:0px,height:0px
    style NorbertSpine width:0px,height:0px
    style PiHoleSpine width:0px,height:0px

    %% ==========================================
    %% 3. ORACLE CLOUD REGION
    %% ==========================================
    subgraph OracleCloud [Oracle Cloud Region]
        direction TB
        class OracleCloud region

        %% PHOENIX
        subgraph PhoenixBox [Phoenix Gateway]
            class PhoenixBox server
            direction TB
            P_Traefik[Traefik Proxy]:::service
            P_Stack[INFRA: WireGuard, Fail2Ban, Watchtower<br/>APPS: Uptime Kuma, Traefik Dash]:::service
        end

        %% DOBBY
        subgraph DobbyBox [Dobby Node]
            class DobbyBox server
            direction TB
            D_Stack[Wing, Agent, Minecraft Cluster]:::service
        end
    end

    %% ==========================================
    %% 4. HOME NETWORK REGION
    %% ==========================================
    subgraph HomeNet [Home Network Region]
        direction TB
        class HomeNet region

        Unifi[Unifi Router]:::service

        %% FIREBOLT
        subgraph FireboltBox [Firebolt Main Server]
            class FireboltBox server
            direction TB
            
            F_Traefik[Traefik Internal]:::service
            
            %% Stacks
            F_Infra[INFRA: Authentik, MySQL, Homepage, Portainer]:::service
            F_Admin[ADMIN: Vaultwarden, BookStack, Duplicati]:::service
            F_Media[MEDIA: Plex, Arr Stack, Overseerr, Downloader]:::service
            F_Games[GAMES: Ptero Panel, Ptero Wing]:::service
        end

        %% NORBERT
        subgraph NorbertBox [Norbert Storage]
            class NorbertBox server
            direction TB
            N_Stack[INFRA: Home Assistant, AI Bot, Agent]:::service
            N_Games[GAMES: Wing, Ark Bot, MC Test]:::service
            N_Storage[Media Storage Array]:::service
        end

        %% PIHOLE
        subgraph PiHoleBox [Raspberry Pi]
            class PiHoleBox server
            direction TB
            PI_Stack[DNS Sinkhole & PiVPN]:::service
        end
    end

    %% ==========================================
    %% 5. CONNECTIONS
    %% ==========================================
    
    %% Internet -> Entry
    Start == HTTPS ==> P_Traefik
    Start -- Ports --> D_Stack
    Start -- Ports --> Unifi

    %% The Tunnel (Phoenix -> Firebolt)
    P_Traefik ==>|Tunnel| F_Traefik
    
    %% Internal Routing
    F_Traefik --> F_Infra & F_Admin & F_Media & F_Games
    F_Traefik -.-> N_Stack & PI_Stack

    %% Split Route
    P_Stack -.-> N_Games

    %% Port Forwarding
    Unifi -.-> F_Games
    Unifi -.-> N_Games
    Unifi -.-> PI_Stack

    %% Data & Mgmt
    F_Infra -.-> P_Stack & D_Stack & N_Stack
    F_Media -.->|NFS| N_Storage

    %% ==========================================
    %% 6. FORCE ALIGNMENT (The Glue)
    %% ==========================================
    %% This links the real boxes to the invisible spine
    CloudSpine ~~~ PhoenixBox
    HomeSpine ~~~ Unifi
    FireboltSpine ~~~ FireboltBox
    NorbertSpine ~~~ NorbertBox
    PiHoleSpine ~~~ PiHoleBox