Skip to main content

homelab diagram

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#263238'#1e1e1e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#ffffff'#fff', 'lineColor': '#ffffff'#fff', 'tertiaryColor': '#fff', 'mainBkg': '#1e1e1e', 'clusterBkg': '#1e1e1e', 'clusterBorder': '#fff'}}}%%
flowchart TD
    %% ==========================================
    %% 1. HIGHSTRICT CONTRASTCOLOR STYLESDEFINITIONS
    %% ==========================================
    %% Outer Regions (Cloud/Home) - Translucent or Dark
    classDef cloudregion fill:#0d47a1,#121212,stroke:#ffffff,#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
    
    classDef%% homeServices fill:#1b5e20,stroke:#ffffff,stroke-width:2px,color:#fff(The classDefApps) device- fill:#37474f,stroke:#ffffff,stroke-width:2px,color:#fffBlack/Darker Grey
    classDef service fill:#212121,#000000,stroke:#90a4ae,stroke-width:1px,color:#fff

    %% ==========================================
    %% 2. TOPTHE LAYER:VERTICAL INTERNETSPINE &(Layout ORACLEAnchor)
    %% ==========================================
    Internet(%% These invisible nodes force the vertical tower structure
    Start((Internet))
    style Internet fill:#fff,stroke:#333,color:#000

    subgraph OracleCloud [Oracle Cloud - Free Tier]
        direction TB
        
        %% Dobby (Left Side)
        subgraph DobbyBox [Dobby - Game Node 2]
            class DobbyBox device
            direction TB
            D_Wing[Pterodactyl Wing]:::service D_Agent[Portainer~~~ Agent]:CloudSpine:::service D_MC[Minecraft~~~ Cluster]:HomeSpine:::service end~~~ FireboltSpine:::service ~~~ NorbertSpine:::service ~~~ PiHoleSpine:::service
    
    %% PhoenixHide the spine nodes (Rightmake Sidethem -tiny)
    Thestyle Gateway)Start subgraphfill:#fff,color:#000
    PhoenixBoxstyle [PhoenixCloudSpine -width:0px,height:0px
    Gateway]style classHomeSpine PhoenixBoxwidth:0px,height:0px
    devicestyle directionFireboltSpine TBwidth:0px,height:0px
    P_Traefik[Traefikstyle Proxy]:::serviceNorbertSpine P_Stack[WGwidth:0px,height:0px
    Interface<br/>Fail2Ban<br/>Watchtower<br/>Agent]:::servicestyle P_Apps[UptimePiHoleSpine Kuma<br/>Traefik Dash]:::service
        end
    endwidth:0px,height:0px

    %% ==========================================
    %% 3. BOTTOMORACLE LAYER:CLOUD HOME NETWORKREGION
    %% ==========================================
    subgraph HomeNetOracleCloud [HomeOracle NetworkCloud - Deltona]Region]
        direction TB
        Unifi[Unificlass Router]:::deviceOracleCloud region

        %% --- Firebolt (Center of the Universe) ---PHOENIX
        subgraph FireboltBoxPhoenixBox [FireboltPhoenix - Main Server]Gateway]
            class FireboltBoxPhoenixBox deviceserver
            direction TB
            F_Traefik[P_Traefik[Traefik Internal]Proxy]:::service
            %%P_Stack[INFRA: FireboltWireGuard, StacksFail2Ban, (Individual Boxes)
            subgraph F_Infra [Infrastructure]
                direction TB
                style F_Infra fill:#263238,stroke:#546e7a,stroke-dasharray: 5 5,color:#fff
                F_Auth[Authentik IDP]:::service
                F_Portainer[Portainer Server]:::service
                F_Homepage[Homepage]:::service
            end
            
            subgraph F_Admin [Admin Tools]
                direction TB
                style F_Admin fill:#263238,stroke:#546e7a,stroke-dasharray: 5 5,color:#fff
                F_Bitwarden[Vaultwarden]:::service
                F_Bookstack[BookStack]:::service
                F_Duplicati[Duplicati]:::service
            end

            subgraph F_Media [Media Stack]
                direction TB
                style F_Media fill:#263238,stroke:#546e7a,stroke-dasharray: 5 5,color:#fff
                F_Plex[Plex]:::service
                F_Arr[Sonarr/Radarr/Prowlarr]:::service
                F_Overseerr[Overseerr]:::service
                F_Download[qBit/Unpackerr]:::service
            end

            subgraph F_Games [Game Stack]
                direction TB
                style F_Games fill:#263238,stroke:#546e7a,stroke-dasharray: 5 5,color:#fff
                F_Panel[Ptero Panel]:::service
                F_Wing[Ptero Wing]:::service
            end
        end

        %% --- Norbert (Below Firebolt) ---
        subgraph NorbertBox [Norbert - Storage]
            class NorbertBox device
            direction TB
            N_Stack[Home AssistantWatchtower<br/>LLMCordAPPS: AI<br/>Agent]:::serviceUptime N_Games[GameKuma, NodeTraefik 1<br/>Wing / Ark / MC Test]:::service
            N_Storage[Media Storage]Dash]:::service
        end

        %% --- PiHole (Bottom) ---DOBBY
        subgraph PiHoleBoxDobbyBox [RaspberryDobby Pi]Node]
            class PiHoleBoxDobbyBox deviceserver
            direction TB
            PI_SVC[DNSD_Stack[Wing, Sinkhole]:::serviceAgent, PI_VPN[PiVPNMinecraft Ingress]Cluster]:::service
        end
    end

    %% ==========================================
    %% 4. THEHOME VERTICALNETWORK SPINE (Force Alignment)REGION
    %% ==========================================
    subgraph HomeNet [Home Network Region]
        direction TB
        class HomeNet region

        Unifi[Unifi Router]:::service

        %% ThisFIREBOLT
        invisiblesubgraph chainFireboltBox forces[Firebolt theMain nodesServer]
            toclass sitFireboltBox directlyserver
            ondirection topTB
            
            ofF_Traefik[Traefik eachInternal]:::service
            
            other%% InternetStacks
            ~~~F_Infra[INFRA: P_TraefikAuthentik, ~~~MySQL, F_TraefikHomepage, ~~~Portainer]:::service
            F_InfraF_Admin[ADMIN: ~~~Vaultwarden, F_AdminBookStack, ~~~Duplicati]:::service
            F_MediaF_Media[MEDIA: ~~~Plex, F_GamesArr ~~~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 Flow-> InternetEntry
    Start == HTTPS ==> P_Traefik
    InternetStart -- Ports --> D_WingD_Stack
    InternetStart -- Ports --> Unifi

    %% The Tunnel Flow(Phoenix -> Firebolt)
    P_Traefik ==>|Tunnel| F_Traefik
    
    %% FireboltInternal DistributionRouting
    F_Traefik --> F_Infra & F_Admin & F_Media & F_Games
    F_Traefik -.-> N_Stack & PI_SVCPI_Stack

    %% Split Route
    P_Stack -.-> N_Games

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

    %% ManagementData F_Portainer& Mgmt
    F_Infra -.-> P_Stack & D_AgentD_Stack & N_Stack
    F_DownloadF_Media -.->|NFS| N_Storage

    %% APPLY==========================================
    CLASSES%% class6. OracleCloudFORCE cloudALIGNMENT class(The HomeNetGlue)
    home%% ==========================================
    %% This links the real boxes to the invisible spine
    CloudSpine ~~~ PhoenixBox
    HomeSpine ~~~ Unifi
    FireboltSpine ~~~ FireboltBox
    NorbertSpine ~~~ NorbertBox
    PiHoleSpine ~~~ PiHoleBox