Nightshift

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.

01

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-up
02

Install 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 -w

The stack is ready when nightshift-nightshift-api-0, nightshift-nightshift-ui-0, openbao-0, and nightshift-minio-0 are all 1/1 Running.

03

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:8200
04

Sign 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/login

Type 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.

05

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=true

Cleanup

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.