···1919- appview (<https://tngl.boltless.dev>) (live reloading)
2020- [ncps](https://github.com/kalbasit/ncps) nix binary cache (internal, `http://ncps:8501`)
2121- pdsls (<https://pdsls.tngl.boltless.dev>)
2222+- bobbin (<https://bobbin.tngl.boltless.dev>, host `:8090`)
2323+- hydrant indexer + record/identity resolver feeding bobbin (internal)
2424+- web/ sveltekit frontend (host `127.0.0.1:5174`, live reloading)
2225- caddy reverse proxy
23262427## Setup
···5154 This writes the image directory under `out/localinfra-spindle-images`.
52555. `docker compose up`
53566. AppView will be running on `127.0.0.1:3000` with two test users: `alice.pds.tngl.boltless.dev` and `bob.pds.tngl.boltless.dev`. Both with password `password`.
5757+5858+## bobbin stack
5959+6060+The `web` service runs `vite dev` against the local bobbin on
6161+`http://127.0.0.1:5174` (port 5174 so it doesn't clash with a host-side
6262+`pnpm dev` on 5173). For host-side `web/` dev, point the frontend at the
6363+local bobbin (e.g. in `web/.env`):
6464+6565+```bash
6666+BOBBIN_URL=http://127.0.0.1:8090
6767+VITE_HANDLE_RESOLVER_URL=https://pds.tngl.boltless.dev
6868+VITE_PLC_DIRECTORY_URL=https://plc.tngl.boltless.dev
6969+```
+18
localinfra/web.Dockerfile
···11+# Development only. Not for production use.
22+FROM node:24-slim
33+44+RUN corepack enable && corepack install -g pnpm@11.10.0
55+66+COPY <<'EOF' /usr/local/bin/web-entrypoint.sh
77+#!/bin/sh
88+set -eu
99+corepack pnpm install --frozen-lockfile --store-dir /src/node_modules/.pnpm-store
1010+exec corepack pnpm exec vite dev --host 0.0.0.0
1111+EOF
1212+RUN chmod +x /usr/local/bin/web-entrypoint.sh
1313+1414+WORKDIR /src
1515+1616+EXPOSE 5174
1717+1818+ENTRYPOINT ["/usr/local/bin/web-entrypoint.sh"]