[{"data":1,"prerenderedAt":657},["ShallowReactive",2],{"substrate-devices":3,"substrate-services":176},[4,54,89,149],{"id":5,"title":6,"body":7,"connections":18,"cover":23,"description":24,"draft":25,"extension":26,"kind":27,"layer":28,"meta":29,"model":30,"navigation":31,"nodeId":32,"order":33,"path":34,"power":23,"publishedAt":35,"seo":36,"specs":37,"status":47,"stem":48,"tags":49,"updatedAt":23,"vendor":52,"__hash__":53},"substrate\u002Fsubstrate\u002Ffw-01.md","SonicWall TZ400",{"type":8,"value":9,"toc":14},"minimark",[10],[11,12,13],"p",{},"Future integration point for NetSec; a planned node that comes online after the networking switch and VLAN setup.",{"title":15,"searchDepth":16,"depth":16,"links":17},"",2,[],[19],{"to":20,"kind":21,"label":22},"gw-01","uplink","Uplink",null,"Next-gen firewall, staged to handle edge security, routing, and VLAN segmentation.",false,"md","firewall","edge",{},"TZ400",true,"fw-01",3,"\u002Fsubstrate\u002Ffw-01","2026-06-04",{"title":6,"description":24},[38,41,44],{"label":39,"value":40},"Throughput","1.3 Gbps firewall",{"label":42,"value":43},"Interfaces","8 × GbE",{"label":45,"value":46},"Role","Edge router and firewall","planned","substrate\u002Ffw-01",[50,27,51],"networking","sonicwall","Dell \u002F SonicWall","O6FtjDQF_t1xhbZ7CSYxIx9mg31MXmgUwtWfXETGrss",{"id":55,"title":56,"body":57,"connections":64,"cover":23,"description":68,"draft":25,"extension":26,"kind":69,"layer":28,"meta":70,"model":23,"navigation":31,"nodeId":20,"order":16,"path":71,"power":23,"publishedAt":35,"seo":72,"specs":73,"status":82,"stem":83,"tags":84,"updatedAt":23,"vendor":87,"__hash__":88},"substrate\u002Fsubstrate\u002Fgw-01.md","AT&T Fiber Gateway",{"type":8,"value":58,"toc":62},[59],[11,60,61],{},"The carrier fiber gateway where the line terminates and hands off to the LAN. Integrated via a direct Cat 6 connection to the OptiPlex until switch and firewall infrastructure is set up.",{"title":15,"searchDepth":16,"depth":16,"links":63},[],[65],{"to":66,"kind":21,"label":67},"wan","Fiber","The carrier fiber gateway: the ONT and router where the house meets the internet.","gateway",{},"\u002Fsubstrate\u002Fgw-01",{"title":56,"description":68},[74,77,79],{"label":75,"value":76},"Type","Fiber gateway (ONT + router)",{"label":22,"value":78},"AT&T Fiber",{"label":80,"value":81},"LAN","4 × GbE + Wi-Fi 6","online","substrate\u002Fgw-01",[50,85,69,86],"att","fiber","AT&T","wl5mhe_y8MSs4qIew6uvTRYks68X0Lp4SVjtE_pH-C0",{"id":90,"title":91,"body":92,"connections":112,"cover":23,"description":116,"draft":25,"extension":26,"kind":117,"layer":118,"meta":119,"model":120,"navigation":31,"nodeId":121,"order":122,"path":123,"power":23,"publishedAt":35,"seo":124,"specs":125,"status":82,"stem":144,"tags":145,"updatedAt":23,"vendor":147,"__hash__":148},"substrate\u002Fsubstrate\u002Fsrv-01.md","Dell OptiPlex Micro Plus 7010",{"type":8,"value":93,"toc":110},[94,97],[11,95,96],{},"The core hardware component of this project: a powerful, optimized, extensible Dell OptiPlex server acquired secondhand, with features like:",[98,99,100,104,107],"ul",{},[101,102,103],"li",{},"New-generation Intel i5 CPU",[101,105,106],{},"AV1 and HEVC hardware Quick Sync transcoding via the Intel UHD 770 iGPU",[101,108,109],{},"Proxmox VE running on bare metal, with Tailscale for secure remote access",{"title":15,"searchDepth":16,"depth":16,"links":111},[],[113],{"to":20,"kind":114,"label":115},"network","Cat 6 · 1 GbE","The core hardware of the project; a secondhand Dell OptiPlex running Proxmox VE.","hypervisor","compute",{},"OptiPlex Micro Plus 7010","srv-01",100,"\u002Fsubstrate\u002Fsrv-01",{"title":91,"description":116},[126,129,132,135,138,141],{"label":127,"value":128},"CPU","Intel Core i5-13500T (13th Gen, 14c\u002F20t)",{"label":130,"value":131},"Memory","16 GB DDR5",{"label":133,"value":134},"Storage (OS)","256 GB NVMe SSD",{"label":136,"value":137},"iGPU","Intel UHD Graphics 770 (AV1 + HEVC HW transcode)",{"label":139,"value":140},"OS","Proxmox VE",{"label":142,"value":143},"Access","Headless (remote)","substrate\u002Fsrv-01",[118,146],"proxmox","Dell","Q9yCaymDflrUBPN0dMcYx8vwpUeqfEmFYf5u8Ax4M_M",{"id":150,"title":151,"body":152,"connections":156,"cover":23,"description":157,"draft":25,"extension":26,"kind":158,"layer":28,"meta":159,"model":23,"navigation":31,"nodeId":66,"order":160,"path":161,"power":23,"publishedAt":35,"seo":162,"specs":163,"status":82,"stem":173,"tags":174,"updatedAt":23,"vendor":23,"__hash__":175},"substrate\u002Fsubstrate\u002Fwan.md","Internet",{"type":8,"value":153,"toc":154},[],{"title":15,"searchDepth":16,"depth":16,"links":155},[],[],"AT&T Fiber, the public internet uplink.","internet",{},1,"\u002Fsubstrate\u002Fwan",{"title":151,"description":157},[164,167,170],{"label":165,"value":166},"Down","635 Mbps",{"label":168,"value":169},"Up","385.49 Mbps",{"label":171,"value":172},"Plan","AT&T Fiber (benchmarked)","substrate\u002Fwan",[50,66],"_FlTcIxoxLQbr_cguTvcEdljWkCWH7AtZ-CmjYiqWpY",[177,288,559],{"id":178,"title":179,"address":23,"body":180,"cover":23,"description":269,"draft":25,"extension":26,"host":121,"icon":270,"kind":271,"links":23,"meta":272,"metrics":273,"navigation":31,"order":274,"path":275,"plugins":276,"publishedAt":277,"seo":278,"serviceId":279,"stack":280,"status":82,"stem":281,"summary":282,"tags":283,"updatedAt":23,"__hash__":287},"services\u002Fservices\u002Fagent-workstation.md","Agent Workstation",{"type":8,"value":181,"toc":264},[182,197,202,223,227,245,249],[11,183,184,185,188,189,196],{},"I created ",[186,187,179],"strong",{}," as a dedicated, isolated service on ",[190,191,193],"a",{"href":192},"\u002Flab\u002Fsubstrate\u002Fsrv-01",[194,195,121],"code",{}," to provide an environment where I can run sandboxed agentic flows.",[198,199,201],"h2",{"id":200},"what-it-is","What it is",[11,203,204,205,211,212,216,217,222],{},"A purpose-built developer sandbox with ",[190,206,210],{"href":207,"rel":208},"https:\u002F\u002Fwww.anthropic.com\u002Fclaude-code",[209],"nofollow","Claude Code"," \u002F Codex \u002F etc. capabilities, functioning as a standalone service on ",[190,213,214],{"href":192},[194,215,121],{},". Supports SSH connection via ",[190,218,221],{"href":219,"rel":220},"https:\u002F\u002Ftailscale.com\u002Fkb\u002F",[209],"Tailscale"," tunneling.",[198,224,226],{"id":225},"architecture","Architecture",[11,228,229,230,235,236,240,241,244],{},"Agent Workstation runs as an unprivileged ",[190,231,234],{"href":232,"rel":233},"https:\u002F\u002Fpve.proxmox.com\u002Fwiki\u002FLinux_Container",[209],"Proxmox LXC"," on ",[190,237,238],{"href":192},[194,239,121],{},", isolated from the other services on Substrate. It upholds Substrate's egress-only netsec principle by limiting exposure to a ",[190,242,221],{"href":219,"rel":243},[209]," tunnel, remains firewalled from other Substrate services, and scopes credentials for specific agents.",[198,246,248],{"id":247},"how-it-works","How it works",[11,250,251,252,257,258,263],{},"The LXC container ships a ready dev toolchain, including ",[190,253,256],{"href":254,"rel":255},"https:\u002F\u002Fnodejs.org\u002F",[209],"Node.js",", ",[190,259,262],{"href":260,"rel":261},"https:\u002F\u002Fpnpm.io\u002F",[209],"pnpm",", and a headless browser for UI checks, providing agents with the capability to locally instrument and validate changes for repositories. Baseline snapshots provide rollback capability and disaster recovery.",{"title":15,"searchDepth":16,"depth":16,"links":265},[266,267,268],{"id":200,"depth":16,"text":201},{"id":225,"depth":16,"text":226},{"id":247,"depth":16,"text":248},"An isolated, self-hosted environment where AI coding agents work on my projects, provisioned on Substrate.","lucide:bot","automation",{},[],30,"\u002Fservices\u002Fagent-workstation",[],"2026-06-27",{"title":179,"description":269},"agent-workstation",[234,221,210,256,262],"services\u002Fagent-workstation","A sandboxed remote workspace for agentic coding flows; an isolated, egress-only Proxmox LXC for running Claude Code, Codex, and the like.",[284,285,271,286],"ai","agents","dev","tgEs7KwfW7CbJiwLGF64VdKo0rabsFU2PzrWhzPEzvk",{"id":289,"title":290,"address":291,"body":292,"cover":23,"description":438,"draft":25,"extension":26,"host":121,"icon":23,"kind":439,"links":440,"meta":441,"metrics":442,"navigation":31,"order":476,"path":477,"plugins":478,"publishedAt":549,"seo":550,"serviceId":551,"stack":552,"status":82,"stem":553,"summary":554,"tags":555,"updatedAt":23,"__hash__":558},"services\u002Fservices\u002Fjenscraft.md","Jenscraft","jenscraft.world",{"type":8,"value":293,"toc":432},[294,305,309,318,320,353,355,366,390,406,410],[11,295,296,297,299,300,304],{},"Welcome to ",[186,298,290],{},", my personal Minecraft server, and the first interactive service provisioned on ",[190,301,303],{"href":302},"\u002Flab\u002Fsubstrate","Substrate",".",[198,306,308],{"id":307},"background","Background",[11,310,311,312,317],{},"I created Jenscraft initially at the beginning of 2026, as a personal Minecraft server that I hosted on ",[190,313,316],{"href":314,"rel":315},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flightsail\u002F",[209],"AWS Lightsail",". When I started getting into home labbing and created Substrate, I figured this was the perfect project to stand up as its first standalone service, save some money on AWS bills, and minimize latency for local play at home.",[198,319,201],{"id":200},[11,321,322,323,328,329,334,335,340,341,346,347,352],{},"A private vanilla ",[190,324,327],{"href":325,"rel":326},"https:\u002F\u002Fdev.java\u002F",[209],"Java"," Minecraft server running on ",[190,330,333],{"href":331,"rel":332},"https:\u002F\u002Fdocs.papermc.io\u002F",[209],"PaperMC",", hoisted for crossplay compatibility with ",[190,336,339],{"href":337,"rel":338},"https:\u002F\u002Fgeysermc.org\u002F",[209],"Geyser"," and ",[190,342,345],{"href":343,"rel":344},"https:\u002F\u002Fgeysermc.org\u002Fwiki\u002Ffloodgate\u002F",[209],"Floodgate",". ",[190,348,351],{"href":349,"rel":350},"https:\u002F\u002Fmodrinth.com\u002Fplugin\u002Fmultiverse-core",[209],"Multiverse Core"," is enabled to support multiple worlds (i.e. survival and creative).",[198,354,226],{"id":225},[11,356,357,358,235,361,365],{},"Jenscraft runs as a dedicated ",[190,359,234],{"href":232,"rel":360},[209],[190,362,363],{"href":192},[194,364,121],{},", isolated from other services. One of my security principles for Substrate is egress-only when it comes to networking. Jenscraft upholds this by:",[98,367,368,371,383],{},[101,369,370],{},"Using a public VPS as a small relay for traffic.",[101,372,373,374,376,377,382],{},"The VPS holds the public Jenscraft IP and ",[194,375,291],{}," DNS (both registered via ",[190,378,381],{"href":379,"rel":380},"https:\u002F\u002Fdocs.aws.amazon.com\u002Froute53\u002F",[209],"AWS Route 53",").",[101,384,385,386,389],{},"The VPS forwards Java (TCP) and Bedrock (UDP) traffic over a ",[190,387,221],{"href":219,"rel":388},[209]," tunnel back to the LXC, without exposing inbound ports on Substrate's network.",[11,391,392,399,400,405],{},[190,393,396],{"href":394,"rel":395},"https:\u002F\u002Fmap.jenscraft.world",[209],[194,397,398],{},"map.jenscraft.world",", a live map of the world enabled with ",[190,401,404],{"href":402,"rel":403},"https:\u002F\u002Fbluemap.bluecolored.de\u002F",[209],"BlueMap",", is reverse-proxied through the same relay to the BlueMap web server. Access is kept invite-only via a whitelist plus Floodgate account linking.",[198,407,409],{"id":408},"live-metrics","Live metrics",[11,411,412,413,417,418,423,424,427,428,304],{},"The metrics dashboard on this page uses a similar Substrate telemetry pattern to the ",[190,414,416],{"href":415},"\u002Flab\u002Fsubstrate\u002Fservices\u002Fmetrics-publisher","Metrics Publisher"," service: a small publisher inside the Jenscraft LXC reads server health (player count + TPS \u002F tick-time from ",[190,419,422],{"href":420,"rel":421},"https:\u002F\u002Fspark.lucko.me\u002F",[209],"Spark",", world-render coverage from BlueMap, and lifetime stats from the world save) and ",[186,425,426],{},"pushes"," a public-safe snapshot out to this site. Until that publisher reports in, the tiles read as ",[429,430,431],"em",{},"awaiting feed",{"title":15,"searchDepth":16,"depth":16,"links":433},[434,435,436,437],{"id":307,"depth":16,"text":308},{"id":200,"depth":16,"text":201},{"id":225,"depth":16,"text":226},{"id":408,"depth":16,"text":409},"A cross-platform (Java + Bedrock) Minecraft server, self-hosted on Substrate.","game-server",{"map":394},{},[443,448,454,460,465,471],{"key":444,"label":445,"icon":446,"hint":447},"players","Players Online","lucide:users","Live player count across Java + Bedrock.",{"key":449,"label":450,"icon":451,"unit":452,"hint":453},"tps","Server TPS","lucide:gauge","TPS","Ticks per second; 20 is a perfectly healthy server.",{"key":455,"label":456,"icon":457,"unit":458,"hint":459},"mspt","Tick Time","lucide:timer","ms","Milliseconds per tick from spark; lower is smoother.",{"key":461,"label":462,"icon":463,"hint":464},"uptime","Uptime","lucide:clock","Time since the last server restart.",{"key":466,"label":467,"icon":468,"unit":469,"hint":470},"explored","World Explored","lucide:map","%","Share of the generated world rendered into BlueMap.",{"key":472,"label":473,"icon":474,"hint":475},"mobs","Mobs Defeated","lucide:swords","Lifetime hostile mobs slain, summed from world stats.",10,"\u002Fservices\u002Fjenscraft",[479,484,486,489,493,497,500,504,508,512,516,521,526,530,534,538,541,544],{"name":480,"side":481,"category":482,"purpose":483,"url":337},"GeyserMC","server","crossplay","Lets Bedrock (Xbox \u002F mobile \u002F console) clients connect to the Java server.",{"name":345,"side":481,"category":482,"purpose":485,"url":343},"Authenticates Bedrock players without requiring a paid Java account.",{"name":404,"side":481,"category":487,"purpose":488,"url":402},"map","Renders the live 3D web map served at map.jenscraft.world.",{"name":490,"side":481,"category":491,"purpose":492,"url":349},"Multiverse-Core","quality-of-life","Runs multiple worlds (survival + creative) side by side on one server.",{"name":494,"side":481,"category":491,"purpose":495,"url":496},"Multiverse-Inventories","Keeps a separate inventory per world so survival and creative stay isolated.","https:\u002F\u002Fmodrinth.com\u002Fplugin\u002Fmultiverse-inventories",{"name":422,"side":481,"category":498,"purpose":499,"url":420},"performance","Profiler + health monitor; used to feed telemetry to this dashboard.",{"name":501,"side":481,"category":498,"purpose":502,"url":503},"Chunky","Pre-generates chunks so exploration doesn't spike tick time at runtime.","https:\u002F\u002Fmodrinth.com\u002Fplugin\u002Fchunky",{"name":505,"side":481,"category":491,"purpose":506,"url":507},"ViaVersion","Lets clients on newer Minecraft versions connect without a server upgrade.","https:\u002F\u002Fviaversion.com\u002F",{"name":509,"side":481,"category":491,"purpose":510,"url":511},"ViaBackwards","Extends ViaVersion so older clients can connect too.","https:\u002F\u002Fgithub.com\u002FViaVersion\u002FViaBackwards",{"name":513,"side":481,"category":491,"purpose":514,"url":515},"EssentialsX","Core everyday commands; homes, warps, kits, and server utilities.","https:\u002F\u002Fessentialsx.net\u002F",{"name":517,"side":481,"category":518,"purpose":519,"url":520},"WorldEdit","other","In-game world editing for large-scale builds and terrain fixes.","https:\u002F\u002Fenginehub.org\u002Fworldedit",{"name":522,"side":481,"category":523,"purpose":524,"url":525},"LuckPerms","moderation","Permissions + group management for ops, trusted players, and guests.","https:\u002F\u002Fluckperms.net\u002F",{"name":527,"side":481,"category":523,"purpose":528,"url":529},"GriefPrevention","Land claims that protect player builds from grief.","https:\u002F\u002Fwww.spigotmc.org\u002Fresources\u002Fgriefprevention.1884\u002F",{"name":531,"side":481,"category":523,"purpose":532,"url":533},"Prism","Block-level audit log with grief rollback.","https:\u002F\u002Fprism.addons.network\u002F",{"name":535,"side":481,"category":491,"purpose":536,"url":537},"AxGraves","Drops a recoverable gravestone on death instead of scattering items.","https:\u002F\u002Fwww.spigotmc.org\u002Fresources\u002Faxgraves.119689\u002F",{"name":539,"side":481,"category":491,"purpose":540},"OnePlayerSleep","One player sleeping skips the night for everyone.",{"name":542,"side":481,"category":491,"purpose":543},"QuickWaystones","Player-placed waystones for quick fast-travel around the world.",{"name":545,"side":546,"category":498,"purpose":547,"url":548},"Sodium + Iris","client","Java client: big FPS gains plus shader support (Bedrock clients need nothing).","https:\u002F\u002Fmodrinth.com\u002Fmod\u002Fsodium","2026-06-16",{"title":290,"description":438},"jenscraft",[333,480,345,234,221],"services\u002Fjenscraft","My personal Minecraft server, built with Paper and Java and enhanced via plugins and utilities like Geyser, BlueMap, and Multiverse Core.",[556,439,482,557],"minecraft","bluemap","5lksJ9x6SjDEekXpDlJWLdcS-kxM8fBsR4o6m0MZNko",{"id":560,"title":416,"address":23,"body":561,"cover":23,"description":638,"draft":25,"extension":26,"host":121,"icon":23,"kind":639,"links":23,"meta":640,"metrics":641,"navigation":31,"order":642,"path":643,"plugins":644,"publishedAt":645,"seo":646,"serviceId":647,"stack":648,"status":82,"stem":651,"summary":652,"tags":653,"updatedAt":23,"__hash__":656},"services\u002Fservices\u002Fmetrics-publisher.md",{"type":8,"value":562,"toc":634},[563,577,581,611,613],[11,564,565,568,569,235,572,576],{},[186,566,567],{},"Metrics publisher"," is a small, standalone service provisioned as a ",[190,570,234],{"href":232,"rel":571},[209],[190,573,574],{"href":192},[194,575,121],{}," which publishes health telemetry to this dashboard on a 1-minute interval.",[198,578,580],{"id":579},"what-it-reports","What it reports",[98,582,583,589,594,600,606],{},[101,584,585,588],{},[186,586,587],{},"CPU \u002F RAM \u002F load","; live host utilisation",[101,590,591,593],{},[186,592,462],{},"; since the last host boot",[101,595,596,599],{},[186,597,598],{},"Guests","; VM + container counts (and how many are running)",[101,601,602,605],{},[186,603,604],{},"Storage","; pool usage",[101,607,608,610],{},[186,609,151],{},"; edge reachability + round-trip latency",[198,612,248],{"id":247},[11,614,615,616,623,624,628,629,304],{},"Metrics publisher runs a ",[190,617,620],{"href":618,"rel":619},"https:\u002F\u002Fman7.org\u002Flinux\u002Fman-pages\u002Fman5\u002Fcrontab.5.html",[209],[194,621,622],{},"cron"," job, capturing local health telemetry from ",[190,625,626],{"href":192},[194,627,121],{}," on an interval timer and posting it to an ingestion endpoint on this site. This service is security-forward, only exposing outbound traffic and masking sensitive data (i.e. IP addresses, host names, etc.). Telemetry is upserted using ",[190,630,633],{"href":631,"rel":632},"https:\u002F\u002Fupstash.com\u002Fdocs\u002Fredis\u002Foverall\u002Fgetstarted",[209],"Upstash Redis",{"title":15,"searchDepth":16,"depth":16,"links":635},[636,637],{"id":579,"depth":16,"text":580},{"id":247,"depth":16,"text":248},"The metrics agent that streams live telemetry from the Optiplex (srv-01) to this dashboard.","monitoring",{},[],20,"\u002Fservices\u002Fmetrics-publisher",[],"2026-06-22",{"title":416,"description":638},"metrics-publisher",[649,633,650],"systemd","Vercel ingest","services\u002Fmetrics-publisher","A telemetry capturing service for the homelab, emitting metrics like host CPU, RAM, load, uptime, and more for this Substrate dashboard.",[639,654,655],"telemetry","push","hS93Yl8Bc7YG9BirKrY6myAC3x874PRiTrFf-6nRk_Y",1784141980141]