README.md
## Getting started
brew install postgres redis node
brew services start postgres
createdb shop
npm run dev # → localhost:3000
Terminal
$ npm run dev
ready on http://localhost:3000
› saved api/orders.ts · reloaded
Terminal · the new hire's laptop
$ createdb shop
createdb: error: connection to server on socket
"/tmp/.s.PGSQL.5432" failed: No such file or directory
$ # “works on my machine” — the README's author
Terminal
$ vm up
==> Booting the VM…
==> Provisioning: postgres, redis, node…
(go and make a coffee)
==> Machine ready.Activity · memory
shop VMreserved
billing VMreserved
client VMreserved
youwhat's left
compose.yaml
services:
db: { image: postgres:16 }
queue: { image: redis:7 }
api: { build: ./api, ports: ["8080:8080"] }
worker: { build: ./worker }
web: { build: ./web, volumes: ["./web:/app"] }Terminal
$ docker compose up -d
✔ Container shop-db-1 Started
✔ Container shop-queue-1 Started
✔ Container shop-api-1 Started
✔ Container shop-worker-1 Started
✔ Container shop-web-1 Started
Terminal · web
$ # reload waits on the file mount, so:
$ docker compose stop web
$ cd web && npm run dev # back outside
ready on http://localhost:3000
Activity · the VM
the VMalways on
used todayby you
Debug · attach to api (in a container)
host: 0.0.0.0 port: 9229
pathMap: /app → ~/code/shop/api
● Breakpoint set but not yet bound orders.ts:42
— is the debug port published? is the path right? —
chart/ · to say hello world
Chart.yaml values.yaml values-dev.yaml
templates/
deployment.yaml service.yaml ingress.yaml
configmap.yaml secret.yaml hpa.yaml
_helpers.tpl NOTES.txt
Terminal
$ kubectl get pods
NAME READY STATUS
api-7c9d… 0/1 ContainerCreating
db-0 0/1 Pending
Terminal · moving day, to somebody else's computer
$ vpn connect
$ kubectl config use-context dev-shared
$ helm upgrade --install shop ./chart -n dev-you
Release "shop" has been upgraded.
Terminal · four tabs of these
$ kubectl port-forward svc/api 8080:80
Forwarding from 127.0.0.1:8080 -> 80
$ kubectl port-forward svc/postgres 5432:5432
Unable to listen on port 5432: bind: address already in use
$ # save → sync → rebuild, somewhere else
syncing 214 files → dev-you … rebuilding api …
Debug · attach to api (in the cluster)
waiting for debugger on 127.0.0.1:9229 …
timed out
$ kubectl port-forward pod/api-7c9d… 9229
# and the debugger again
Logs · in the other tool
query: namespace="dev-you" app="api"
⋮ loading…
dev-you.devbox.example.com — editor
41 const tax = taxFor(customer, total);
42 return { total, tax, due: total + ta
Reconnecting… your last keystrokes are on their wayEnvironments
pr-1482 · previewup · by the hour
pr-1490 · previewup · by the hour
pr-1501 · previewup · by the hour
staging · sharedbroken
# dev
Sam who broke staging?
Ana not me, my migration ran yesterday
Ana …oh
PLAT-2214
Need a Postgres database for billing-v2StatusWaiting for platform
AssigneeUnassigned
RequestedMonday
# platform
you any update on PLAT-2214?
platform it's in the queue 🙏
Terminal
$ kubectl -n dev-you rollout restart deploy/api
exceeded quota: dev-you-quota, requested:
memory=2Gi, used: memory=7Gi, limited: memory=8Gi
This week
Thu · Dev environment cost reviewall teams
New hire, day 4access: 3 of 7
VPN, cluster, dev box, secretspending
# platform
status Dev environments degraded. Investigating. No ETA.
on-call Production incident first. Will update.
Assistant
why is the api returning 502?
I can read the repo, but I can't reach the cluster from here. Can you paste the pod logs?
Activity · your laptop
browsera tab of a dev box
video call“any ETA?”
everything elseidle
doze.hcl · Larder, our made-up example
stack = "larder"
module postgres "postgres" {
version = 18 …
}
app "catalog" {
run = "go run ./services/catalog"
port = 8002
ready = http("/healthz") …
}Terminal
$ doze up
✓ postgres awake
✓ valkey awake
✓ kafka awake
✓ migrate-catalog done
⋮
✓ gateway awake
✓ storefront awake
› up — supervised in the background.
doze · the map

services/catalog/main.go — larder
159 if tag.RowsAffected() == 0 {
160 short = l.SKU161 return errors.New("out of stock")Paused on breakpoint · main.go:160
https://dev.acme.com
# the one line you'd add to Larder's storefront
app "storefront" {
domains = ["dev.acme.com"]
}
$ doze trust # once, one admin promptAssistant
why is the gateway returning 502?
ran doze status · doze logs gateway
gateway crashes on start: CATALOG_URL in .env.local points at the old cluster. Remove that line?
# platform
platform shipped: the new deploy pipeline 🚀
platform next up: faster preview builds