Skip to main content

homelab diagram

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#263238'#cfd8dc', 'primaryTextColor': '#fff'#eceff1', 'primaryBorderColor': '#fff'#cfd8dc', 'lineColor': '#b0bec5', 'tertiaryColor': '#fff'transparent', 'edgeLabelBackground': 'transparent', 'mainBkg': '#1e1e1e'#121212'}}}%%
flowchart LR
    %% ==========================================
    %% 1. GLOBALDEFINITIONS STYLES& CLASSES
    %% ==========================================
    %% App Nodes (Dark Boxes)
    classDef app fill:#263238,stroke:#90a4ae,#546e7a,stroke-width:1px,2px,color:#fff#eceff1,rx:5,ry:5
    
    %% The "Internet" Circle
    classDef internet fill:#fff,stroke:#333,color:#000,stroke-width:2px

    linkStyle default stroke:#607d8b,stroke-width:1px;1px,fill:none;

    %% ==========================================
    %% 2. THE DARK CANVAS (WRAPPER)
    %% ==========================================
    subgraph DarkCanvas [ ]
        direction LR
        style DarkCanvas fill:#1e1e1e,#121212,stroke:#1e1e1e,#121212,color:#1e1e1e#121212

        %% --- THE SOURCE ---
        Internet((Internet))
        style Internet fill:#fff,stroke:#333,color:#000:::internet

        %% ---==========================================
        %% 3. BLUE ZONE: ORACLE CLOUD
        ---%% ==========================================
        subgraph OracleCloud [Oracle Cloud - Free Tier]
            direction TB
            %% Blue Fill with Bright Blue Border
            style OracleCloud fill:#0d47a1,stroke:#fff,#448aff,stroke-width:3px,4px,color:#fff#fff,rx:10,ry:10

            %% --- SERVER: PHOENIX ---
            subgraph PhoenixBox [Phoenix - Gateway]
                direction TB
                %% Charcoal Box
                style PhoenixBox fill:#37474f,#212121,stroke:#fff,#607d8b,stroke-width:2px,color:#fff#fff,rx:5,ry:5
                
                P_Traefik[Traefik Proxy]:::app
                P_WG[WireGuard Interface]:::app
                
                %% Grey Box: Stack
                subgraph P_Infra [Infrastructure]
                    style P_Infra fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                    P_Fail2Ban[Fail2Ban]:::app
                    P_Agent[Portainer Agent]:::app
                    P_Kuma[Uptime Kuma]:::app
                end
            end

            %% --- SERVER: DOBBY ---
            subgraph DobbyBox [Dobby - Game Node]
                direction TB
                style DobbyBox fill:#37474f,#212121,stroke:#fff,#607d8b,stroke-width:2px,color:#fff#fff,rx:5,ry:5
                
                %% Grey Box: Stack
                subgraph D_Games [Game Stack]
                    style D_Games fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                    D_Wing[Pterodactyl Wing]:::app
                    D_MC[Minecraft Cluster]:::app
                end
                
                D_Agent[Portainer Agent]:::app
            end
        end

        %% ---==========================================
        %% 4. GREEN ZONE: HOME NETWORK
        ---%% ==========================================
        subgraph HomeNet [Home Network - Deltona]
            direction TB
            %% Green Fill with Bright Green Border
            style HomeNet fill:#1b5e20,stroke:#fff,#00e676,stroke-width:3px,4px,color:#fff#fff,rx:10,ry:10

            Unifi[Unifi Router]:::app
            style Unifi fill:#37474f,#000,stroke:#fff,#00e676,stroke-width:2px,color:#fff

            %% --- SERVER: FIREBOLT ---
            subgraph FireboltBox [Firebolt - Main Server]
                direction TB
                style FireboltBox fill:#37474f,#212121,stroke:#fff,#607d8b,stroke-width:2px,color:#fff#fff,rx:5,ry:5
                
                F_Traefik[Traefik Internal]:::app
                F_WG[WireGuard Interface]:::app

                subgraph F_Stacks [Apps & Services]
                    style F_Stacks fill:none,stroke:none,color:#fff

                    %% Grey Box: Stack
                    subgraph F_Infra [Infrastructure]
                        style F_Infra fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                        F_Auth[Authentik]:::app
                        F_Portainer[Portainer]:::app
                        F_Homepage[Homepage]:::app
                        F_Tug[Tugtainer]:::app
                        F_Dozzle[Dozzle]:::app
                    end

                    %% Grey Box: Stack
                    subgraph F_Media [Media Stack]
                        style F_Media fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                        F_Plex[Plex Media Server]:::app
                        F_Req[Overseerr / Tautulli]:::app
                        F_Arr[Sonarr / Radarr / Prowlarr]Prowlarr<br/>Huntarr / Doplarr]:::app
                        F_Down[qBit / Unpackerr / Flare]:::app
                    end

                    %% Grey Box: Stack
                    subgraph F_Admin [Admin Tools]
                        style F_Admin fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                        F_Bit[Vaultwarden]:::app
                        F_Book[BookStack]:::app
                        F_Dup[Duplicati]:::app
                        F_File[FileBrowser]:::app
                        F_PMA[PhpMyAdmin]:::app
                    end

                    %% Grey Box: Stack
                    subgraph F_GameStack [Game Stack]
                        style F_GameStack fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                        F_Panel[Ptero Panel]:::app
                        F_Wing[Ptero Wing]:::app
                        F_DB[Panel DB & Redis]:::app
                        F_Ark[Ark Survival Evolved]:::app
                    end
                end
            end

            %% --- SERVER: NORBERT ---
            subgraph NorbertBox [Norbert - Storage]
                direction TB
                style NorbertBox fill:#37474f,#212121,stroke:#fff,#607d8b,stroke-width:2px,color:#fff#fff,rx:5,ry:5
                
                N_WG[WireGuard]:::app
                N_Store[Media Storage]:::app

                %% Grey Box: Stack
                subgraph N_Apps [App Stack]
                    style N_Apps fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                    N_Hass[Home Assistant]:::app
                    N_LLM[LLMCord AI]:::app
                end

                %% Grey Box: Stack
                subgraph N_Games [Game Node 1]
                    style N_Games fill:#546e7a,#424242,stroke:#cfd8dc,#757575,stroke-width:1px,stroke-dasharray: 5 5,color:#fff#eee,rx:5,ry:5
                    N_Wing[Ptero Wing]:::app
                    N_MC[MC Test]:::app
                end
            end

            %% --- HARDWARE: RASPBERRY PI ---
            subgraph PiHoleBox [Raspberry Pi]
                direction TB
                style PiHoleBox fill:#37474f,#212121,stroke:#fff,#607d8b,stroke-width:2px,color:#fff#fff,rx:5,ry:5
                PI_SVC[DNS Sinkhole]:::app
                PI_VPN[PiVPN Ingress]:::app
            end
        end
    end

    %% ==========================================
    %% 5. TRAFFIC WIRING
    %% ==========================================

    %% 0, 1, 2: Internet Ingress (GREEN - PUBLIC)
    Internet ==>|HTTPS| P_Traefik
    Internet ==>|MC Ports| D_Games
    Internet ==>|32400 / 51820 / Games| Unifi
    linkStyle 0,1,2 stroke:#00e676,stroke-width:3px;

    %% 3,Tunnel 4:(ORANGE Tunnel- WIREGUARD)
    P_Traefik --> P_WG
    P_WG ==>|WireGuard Tunnel| F_WG
    linkStyle 3,4 stroke:#ff9100,stroke-width:4px;

    %% 5: LAN (FireboltBLUE Internal)- INTERNAL)
    F_WG --> F_Traefik
    linkStyle 5 stroke:#2979ff,stroke-width:2px;

    %% 6, 7, 8, 9: LAN Distribution (Traefik Distribution)BLUE)
    F_Traefik --> F_Infra & F_Media & F_Admin & F_GameStack
    linkStyle 6,7,8,9 stroke:#2979ff,stroke-width:2px;
    
    %% 10, 11: LAN Remote (Traefik Remote)BLUE)
    F_Traefik -.-> N_Apps & PI_SVC
    linkStyle 10,11 stroke:#2979ff,stroke-width:2px;

    %% 12: Split Route (ORANGE - TUNNEL)
    P_WG -.->|Direct Route| N_WG
    linkStyle 12 stroke:#ff9100,stroke-width:3px,stroke-dasharray: 5 5;

    %% 13: LAN Internal (Norbert Internal)BLUE)
    N_WG -.-> N_Games
    linkStyle 13 stroke:#2979ff,stroke-width:2px;

    %% 14, 15, 16, 17: PORT FORWARDING (GREEN DASHED - PUBLIC MAPPED)
    Unifi -.->|32400| F_Plex
    Unifi -.->|Game Ports| F_GameStack
    Unifi -.->|Game Ports| N_Games
    Unifi -.->|UDP 51820| PI_VPN
    linkStyle 14,15,16,17 stroke:#00e676,stroke-width:2px,stroke-dasharray: 5 5;

    %% 18+:Management Management(GREY/NEUTRAL)
    F_Portainer -.-> P_Agent & D_Agent
    F_Down -.->|NFS| N_Store
    F_Panel -.-> D_Wing & N_Wing & F_Wing

Color Legend

  • Green Lines: Public Internet Traffic (HTTPS, 32400, Game Ports)
  • Orange Lines: WireGuard Tunnel Traffic
  • Blue Lines: Internal LAN Traffic
  • Blue Zone: Oracle Cloud Infrastructure
  • Green Zone: Home Network Infrastructure
  • Charcoal Boxes: Servers & Hardware (Phoenix, Firebolt, etc.)
  • Grey Boxes: Logical Stacks (Media, Infra, Admin)
  • Dark Boxes: Individual Applications