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