docs: platform UIs at https://*.lab.holtlabs.xyz (Plan 11)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
nholtware 2026-11-10 13:15:55 -06:00
parent 2c33f4bfcb
commit fe638b3406

View file

@ -32,7 +32,7 @@ Everything in `config.js` is public. Never put secrets there.
## Feature flags ## Feature flags
Flags come from Unleash (UI: http://unleash.192.168.1.83.nip.io, environment `development`) Flags come from Unleash (UI: https://unleash.lab.holtlabs.xyz, environment `development`)
through its Frontend API, using the official `@unleash/proxy-client-react` SDK. through its Frontend API, using the official `@unleash/proxy-client-react` SDK.
`src/lib/flags.tsx` wraps it: `FlagsProvider` is mounted once in `main.tsx`; `src/lib/flags.tsx` wraps it: `FlagsProvider` is mounted once in `main.tsx`;
components call the wrappers, never the SDK directly: components call the wrappers, never the SDK directly:
@ -42,7 +42,7 @@ import { useFlag, useVariant } from "../lib/flags";
const showBanner = useFlag("hello-banner"); const showBanner = useFlag("hello-banner");
``` ```
- In the cluster the deployment sets `UNLEASH_URL=http://unleash.192.168.1.83.nip.io` - In the cluster the deployment sets `UNLEASH_URL=https://unleash.lab.holtlabs.xyz`
and `UNLEASH_FRONTEND_TOKEN` from Secret `unleash-client-token` (key `frontendToken`). and `UNLEASH_FRONTEND_TOKEN` from Secret `unleash-client-token` (key `frontendToken`).
- The SDK fetches on load and refreshes every 15 s; components re-render on change. - The SDK fetches on load and refreshes every 15 s; components re-render on change.
A reload always picks up the current state. A reload always picks up the current state.
@ -60,7 +60,7 @@ const showBanner = useFlag("hello-banner");
(`level`, `time`, `service` = `APP_NAME`, `version` = `GIT_SHA`, `req.id` (`level`, `time`, `service` = `APP_NAME`, `version` = `GIT_SHA`, `req.id`
(echoes `X-Request-Id`), `req.method`, `req.url`, `res.statusCode`, (echoes `X-Request-Id`), `req.method`, `req.url`, `res.statusCode`,
`responseTime` in ms, `msg: "request completed"`), the same shape as the backend `responseTime` in ms, `msg: "request completed"`), the same shape as the backend
template. In Kibana (http://kibana.192.168.1.83.nip.io, data view `kube-*`): template. In Kibana (https://kibana.lab.holtlabs.xyz, data view `kube-*`):
`service:"${REPO_NAME}" and res.statusCode >= 400`. `/healthz` isn't logged. `service:"${REPO_NAME}" and res.statusCode >= 400`. `/healthz` isn't logged.
nginx's own startup/error lines stay plain text (field `log`). nginx's own startup/error lines stay plain text (field `log`).