(this website is hosted on: peat.eth.demokluster.com peat.eth.limo peat.eth.link peat.eth.xyz peat.eth.wtf using its own code, via ipfs!)
๐ŸŒณ
git clone https://peat.eth.demokluster.com/peat0.git
# yes we're doing git (readonly) over ipfs :)
hamsastanding hanuman
้“ๆณ•่‡ช็„ถ โ€” vibes/patterns/philosophies
โ”œโ”€ ๅพท     entrypoint-oriented development
โ”œโ”€ ้™ฐ้™ฝ   sliceable monorepo > repo-per-microservice  
โ”œโ”€ ็„ก็‚บ   all changes thru reusable idempotent scripts
โ”œโ”€ ๆŸ”     strangler vine development
โ”œโ”€ ่‡ช็„ถ   tighten the loop (aka fuck Jenkins)
โ”œโ”€ ๆฐด     ๐Ÿ’ง opensource/generic > lock-in (k8s > vercel, kimi&glm > claude&"open"ai)
โ”œโ”€ ๆจธ     ๐ŸŒฑ
โ””โ”€ ็„กๅ   535๐Ÿ‰๐Ÿ•ฏ๏ธ

Hello internet neighbor!

My name is pete, this is my digital garden, I'd like to share it with you

Q: ๐Ÿคฎa js monorepo deploying to k8s? i want my RoR & dokku / handcoded html on github pages!
A: fair enough lol. js is wat (but not as wat as monkey patching or a tangly-ass ball of before_saves) and k8s can seem scary but can actually be simple. it's more generic/self-hostable than vercel/railway/heroku/github (you don't have to pay $ to companies run by people taking selfies w Netanyahu๐Ÿ‘น). anyways, it's been useful to me & and i'm just sharing, not selling anything other than "๐Ÿ–• head-in-sand-corpos & mass-murderers"

Q: why k8s over a linux box? A:

Q: vibe coded? A:

demos / made w peat:

( 58loc uniq-to-eptEnsStaticSite / 17.8k loc importtree )

Last fall a friend of mine (an ex of an ex(!๐ŸŒป)) vibecoded a pegboard of circles with orbit, hue, & size properties that influence each other based on simple rules (as an experiment on cellular automata & emergence)

I added rulesets abstraction, /compare.html, discovered some cool rulesets w agent assistance, and added musicsets for reactivity to uploadable music & made deployable w peat to http-server/ipfs

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'ethers', 'js-yaml', 'kubo-rpc-client', 'lodash-es', 'luxon', 'multiformats', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
( 3.2k loc uniq-to-eptNextjsApp / 21.8k loc importtree )
pete's idea: "Drunk boaters crash into a whale"
hazel drew:
otter described: "Drunken boaters crashing into a fish"
badger drew:
...

"telephone"-like game created in 2021 to play with fam&friends

players alternate describing & drawing using <canvas>. uses http long polling over graphql (y gql overkill sue me)

  • 2021 it was in-memory single process saved to db on gameend
  • 2022 if pod crashes you lose beautiful art :(, bugs hard to debug from logs
    • so backwards-compat added actionHistA & dbwrite each game action
  • 2025 added OpenRouter LLMs
    • to come up w a creative prompt if you can't think of one (it can be hard!)
    • ai can take a turn describing a drawing to make your chain longer
  • 2026
    • ai can take a turn drawing too!
    • ^req'd storing pngs (vs just brush strokes) and i didn't want to bloat db w pngs so used ipfs
    • added 'nginx.ingress.kubernetes.io/upstream-hash-by': '$cookie_gameshardcook' to scale up (theoretically, tho i did write a replicas=2 runtests)

(so yes, this is totally overengineered yet has more features & less bugs than it did in 2021)

{deps: ['@/graphql', '@apollo/client', '@apollo/server', '@apollo/server-plugin-response-cache', '@as-integrations/next', '@chakra-ui/react', '@graphql-tools/schema', 'canvas', 'graphql', 'hi-base32', 'js-cookie', 'knex', 'kubo-rpc-client', 'kysely', 'lodash-es', 'luxon', 'next', 'node-fetch', 'nodemailer', 'nosleep.js', 'pg', 'qrcode.react', 'react', 'react-icons', 'source-map', 'stacktrace-parser', 'totp-generator', 'uuid-by-string']}
{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'imapflow', 'js-yaml', 'lodash', 'pkg', 'playwright', 'seedrandom', 'strip-ansi', 'typescript']}
( 3.2k loc uniq-to-eptNextjsApp / 21.8k loc importtree )

POC using Ethereum/L2s transactions with exact unique amounts to associate w an order/user/whatever.

Cool cause:

  1. a DIY self-sovereign way to accept payments that costs cents-per-tx
  2. allows "pay by donation" to a charity whose address end-users can verify

For this demo I made an webapp where anon users can vote-by-donation on strings in postgres. then I got a little carried away and added voting on ipfsmedia in addition to strings

{deps: ['@apollo/client', '@apollo/server', '@apollo/server-plugin-response-cache', '@as-integrations/next', '@chakra-ui/react', '@graphql-tools/schema', '@walletconnect/ethereum-provider', 'ethers', 'graphql', 'js-cookie', 'knex', 'kubo-rpc-client', 'kysely', 'lodash-es', 'luxon', 'next', 'node-fetch', 'nodemailer', 'pg', 'qrcode.react', 'react', 'react-icons', 'source-map', 'stacktrace-parser']}
{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'canvas', 'esbuild', 'eslint', 'imapflow', 'js-yaml', 'lodash', 'pkg', 'playwright', 'seedrandom', 'strip-ansi', 'typescript']}
( 155loc uniq-to-eptTorOnion / 11.8k loc importtree )

.onion proxy of^

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'eslint', 'js-yaml', 'lodash-es', 'luxon', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
( 235loc uniq-to-eptMinecraftSync / 11.9k loc importtree )

deploys itzg/minecraft-server to k8s. supports mcbackup & mcrestore

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'eslint', 'js-yaml', 'lodash-es', 'luxon', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
ptnode pt0/haS3/bin/mesh/epSync.mjs help # (185loc uniq-to-haS3 / 398loc importtree)# eptSimpleDfDeploy

home-rolled HA S3 for cnpg WALs etc. sidecars peer over public ingress. deletes propagate via tombstones from changeable delete-authority node. node-down email alerts

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'js-yaml', 'lodash-es', 'luxon', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
ptnode pt0/klustersF/harv2demo/epSyncHomeass.mjs help # (361loc uniq-to-homeAssProxy / 19.1k loc importtree)

self hosted alternative to Home Assistant Cloud - proxies homeassistant.local thru k8s ingress

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'graphql', 'http-proxy', 'imapflow', 'js-yaml', 'knex', 'kysely', 'lodash-es', 'luxon', 'next', 'node-fetch', 'nodemailer', 'pg', 'pkg', 'source-map', 'stacktrace-parser', 'strip-ansi', 'typescript']}
( 513loc uniq-to-eptMonEthPairs / 2k loc importtree )

for deploying & monitoring multiple eth validator pairs across clusters

{deps: ['magic-string']}
{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'js-yaml', 'lodash-es', 'luxon', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
ptnode pt0/deployF/ethF/binF/epTornado.mjs # (16loc uniq-to-epTornado / 1.9k loc importtree)

idempotent tornadoCash deposit->withdraw script

{devDeps: ['adm-zip', 'axios', 'circomlib', 'ethers', 'fixed-merkle-tree', 'lodash-es', 'luxon', 'snarkjs', 'websnark']}
( 120loc uniq-to-eptZhong / 702loc importtree )

run this periodically on your devpc - verifies cnpg WALs are recent, saves logical pg backups locally, ipfs pin/mfs verification, eth sync/validator monitoring, opencode models cache, kopia backup etc

{deps: ['@aws-sdk/client-s3', '@smithy/node-http-handler', 'magic-string']}
{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'ethers', 'graphql', 'js-yaml', 'knex', 'kubo-rpc-client', 'kysely', 'lodash-es', 'luxon', 'multiformats', 'next', 'node-fetch', 'nodemailer', 'pg', 'pkg', 'source-map', 'stacktrace-parser', 'strip-ansi', 'typescript']}
ptnode pt0/klustersF/harv2demo/harvPxeF/harv2demoorng.mjs help # (420loc uniq-to-harvesterPxeCreate / 1.6k loc importtree)

use pxe to flash Harvester on bare-metal to self-host k8s (node1, mode=create)

{devDeps: ['lodash-es', 'luxon']}
( 188loc uniq-to-eptEnsGateway / 16.8k loc importtree )

this very http server! (probably)
host your own ens & ipfs gateway a-la *.eth.limo
( vitalik.eth.demokluster.com -> resolves vitalik.ens to ipfs:// -> serves you http )
"welcome to the future!"๐Ÿ˜‰

{devDeps: ['@kubernetes/client-node', 'acorn', 'acorn-jsx', 'esbuild', 'eslint', 'ethers', 'js-yaml', 'lodash-es', 'luxon', 'multiformats', 'node-fetch', 'pkg', 'strip-ansi', 'typescript']}
( 2.7k loc uniq-to-eptEnsGallerySite / 21.1k loc importtree )

this very website!
generates this pretty html from eps & bash transcripts etc
devserver, apply (to ipfs)
proxied to u by eptEnsGateway^

{deps: ['@aws-sdk/client-s3', '@smithy/node-http-handler', 'adm-zip', 'axios', 'canvas', 'circomlib', 'fixed-merkle-tree', 'http-proxy', 'magic-string', 'snarkjs', 'uuid-by-string', 'websnark']}
{devDeps: ['@kubernetes/client-node', '@shikijs/cli', 'acorn', 'acorn-jsx', 'chokidar', 'esbuild', 'eslint', 'ethers', 'graphql', 'hi-base32', 'http-server', 'imapflow', 'js-yaml', 'knex', 'kubo-rpc-client', 'kysely', 'lodash', 'lodash-es', 'luxon', 'marked', 'multiformats', 'next', 'node-fetch', 'nodemailer', 'pg', 'pkg', 'playwright', 'react', 'react-dom', 'seedrandom', 'shiki', 'source-map', 'stacktrace-parser', 'strip-ansi', 'totp-generator', 'typescript']}

.opencode (optional)

13.9k loc importtree

for limiting wasted tokens & blast radius of agent dumbassery:

ptm (cli for code movements & info)

13.9k loc importtree
$ ptm <action> [args]
  # movements
  mv         ๐Ÿ™  <from> <to>                     mv/rn & update imports & importers (auto-commits)
  commit     ๐Ÿ’Ž  --msg= [--files=...] [--amend]  pt_commit CLI equivalent (for worktree delegation)
  extract    ๐Ÿคฒ  <exports...> [dest]             extract exports to dest or new file
  rntok      ๐Ÿ‘  <from> <to>                     rn word codebase-wide (auto-commits)
  subst      ๐Ÿซถ  <pattern> <name>                replace pattern, auto-add import if nec

  # info/debug
  resolveimport   <fromFile> <toFile>             compute correct relative import path (avoids depth/extension errors)
  importers     <file> [<importer>] [--epDir]   ls files that directly import tgt
  howimports    <file> [<srcFile|package>] [--epDir]  ls eps that transitively import tgt (or chain from srcFile/pkg)
  lseps         [--epDir=<dir>] [--inclTokens] [--inclNpm]  eps & stats
  bisect        <ep> --good=<sha> [--autorun]   bisect importtree in isolated worktree
  wt            start <name>|--sha=<sha> | done <name> [--discard]  isolated worktree (to dev or checkout SHA)
  check         <files|dirs...>                 check syntax + TS types + boundaries (componentsF can't import serverF etc)
  epsearch      <ep> <pattern> [rg-flags...]    search within ep import tree (uses rg)
  gitlog        <file> [git-log-flags...]       git log limited to file import tree
  ocsearch      <query> [--since=Nd]            search past oc sessions & commits by keyword
  exceptions    [--show=<errHash>] [--test]     exceptions across all eps from IMAP

getting started

74.8k loc grand total
IT'S DRY!!!
git clone https://peat.eth.demokluster.com/peat0.git && cd peat0git rev-parse HEAD | head -c 16 # should eq 00074b9842603bcfcorepack enable && corepack pnpm install# then to setup a k8s cluster & deploy gamesapp:mkdir -p data/secrets2echo '{        "CF_API_EMAIL": "your-cf-email@website.com",        "CF_API_KEY": "your-cf-api-key"}' > data/secrets2/external-dns-cf-demokluster.jsoncp ~/Downloads/do2demo-kubeconfig.yaml data/secrets2/do2demo.yaml # get this from digitalocean or your k8s provider# add to data/secrets2 : ipfs-filebase demok_fm_smtp.json demok_fm_imap.json openrouter-gamesdev# prompt opencode w:# "pls setup the cluster then deploy drawinggame.do2demo.yourwebsite.com incl db/prereqs . see your cluster-app-deploy skill. you will need to add a new domain for yourwebsite.com which is part of external-dns-cf-demokluster.json cf account"# (cf is the only external-dns provider rn unfort but that shouldn't be too hard for you to customize)

& non-rigid & consistent & ssot!

first one to fork it to sourceforge wins 5pts :)

# add to your shell rc ( ~/.bashrc or ~/.zshrc etc )export PATH=/path/to/peatSymposium/pt0/path_bin:$PATH # PATH prepend not append to override git to block dumbass agents from reset/stashing'ing or whatever & messing each other up.# also provides user w ptnode, ptm, & clusterClis like do2demo, harv2demo, etcexport DEVPC=1 # enables dev-mode behaviors (ethereal emails, graphql introspection, local disk paths, etc)

Q: ptnode?
A: optional node wrapper to silence hard-to-silence warnings, to impl --saveExample for bashtranscripts for this blog etc. a custom ep for your eps!

Q: do2demo, harv2demo ?
A: optional cluster-specific kubectl alias/wrapper/custom-ep

by pete deepthoughts

with โค๏ธ

๐Ÿ™?