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