Get up and running
From zero to a Nightshift cluster running on your laptop in five minutes. One Helm chart, full stack, browser-driven from the moment it boots.
Prerequisites
macOS, Linux, or WSL.
Already have a cluster? Set KUBECONFIG and skip step 1.
Spin up a local kind cluster
kind runs Kubernetes inside Docker. The convenience Makefile creates a cluster named nightshift-dev. If you already have a cluster, point KUBECONFIG at it and skip ahead.
# Create a local Kubernetes cluster
make kind-upInstall the full stack
One make target builds the images and helm-installs everything: API, worker, MinIO object storage, OpenBao for OIDC and secrets, and the Next.js UI. Takes ~2 minutes on a cold cluster.
# Helm-install the full stack
make kind-deploy-with-ui
# Watch pods come up
kubectl -n nightshift get pods -wThe stack is ready when nightshift-nightshift-api-0, nightshift-nightshift-ui-0, openbao-0, and nightshift-minio-0 are all 1/1 Running.
Port-forward the UI and OpenBao
The chart is wired for kubectl port-forward defaults. The UI lands on :13000, OpenBao on :18200. The OIDC redirect dance hits both from your browser, so the host and port have to match.
# Port-forward the UI
kubectl -n nightshift port-forward svc/nightshift-nightshift-ui 13000:3000
# Port-forward OpenBao (OIDC)
kubectl -n nightshift port-forward svc/openbao 18200:8200Sign in
The chart auto-seeds an admin user in OpenBao and stashes the password in a Kubernetes secret. Pull it out, then sign in at http://localhost:13000/login → 'Sign in with OpenBao' → admin + password.
# Get the seeded admin password
kubectl -n nightshift get secret openbao-admin-seed \
-o jsonpath='{.data.password}' | base64 -d
# Then open
http://localhost:13000/loginType a prompt and submit. The default worker is a simulation that returns a canned reply, so you can verify the request/response path without an LLM provider key. Step 5 swaps in a real Claude worker.
Use the Claude worker (optional)
Stash an Anthropic API key in OpenBao, then helm-upgrade with the Claude-flavored worker image. Subsequent prompts run through Claude with real cost and token accounting.
# Get the OpenBao root token
export VAULT_TOKEN=$(kubectl -n nightshift get secret openbao-seed \
-o jsonpath='{.data.root-token}' | base64 -d)
# Stash your Anthropic API key in OpenBao
kubectl -n nightshift exec openbao-0 -c openbao -- \
env VAULT_TOKEN=$VAULT_TOKEN \
bao kv put secret/nightshift/anthropic-api-key api-key=sk-ant-XXXX
# Swap in the Claude worker
helm -n nightshift upgrade nightshift deploy/charts/nightshift \
--reuse-values \
--set nightshift_api.worker.repository=nightshift-worker-claude \
--set nightshift_api.workerClaude.enabled=trueCleanup
make kind-uninstall drops the release. make kind-down tears down the whole cluster.
Running it in production?
If you're deploying Nightshift in production, we want to hear from you.