diff --git a/ctrl/Tiltfile b/ctrl/Tiltfile
index e5c157b..f55e9d8 100644
--- a/ctrl/Tiltfile
+++ b/ctrl/Tiltfile
@@ -5,8 +5,14 @@
allow_k8s_contexts('kind-unt')
-# Create namespace first to avoid race conditions
-local('kubectl create namespace unt --dry-run=client -o yaml | kubectl apply -f -')
+# Hard guard: Tilt deploys to whatever the shell's current kubectl context is,
+# and allow_k8s_contexts auto-permits any local-looking (kind-*) cluster.
+# Fail early instead of silently landing the workload in the wrong cluster.
+if k8s_context() != 'kind-unt':
+ fail("Wrong kubectl context: '%s'. Run: kubectl config use-context kind-unt" % k8s_context())
+
+# Create namespace first to avoid race conditions (pin cluster explicitly)
+local('kubectl --context kind-unt create namespace unt --dry-run=client -o yaml | kubectl --context kind-unt apply -f -')
# Apply k8s manifests via kustomize (dev overlay)
k8s_yaml(kustomize('k8s/overlays/dev'))
@@ -42,7 +48,7 @@ docker_build(
# --- Resources ---
k8s_resource('api')
-k8s_resource('ui', resource_deps=['api'], port_forwards=['8040:80'])
+k8s_resource('ui', resource_deps=['api'])
# Group infra resources
k8s_resource(
diff --git a/docs/index.html b/docs/index.html
index 5c04e3e..2a94c74 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -228,6 +228,55 @@
vertical-align: top;
}
.cmp-table tr:last-child td { border-bottom: none; }
+
+ /* Mobile menu toggle — hidden on desktop */
+ .menu-toggle {
+ display: none;
+ background: transparent;
+ border: 1px solid #1e2a4a;
+ color: #e8eaf0;
+ padding: 6px 10px;
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 14px;
+ cursor: pointer;
+ line-height: 1;
+ margin-left: auto;
+ }
+ .menu-toggle:hover { background: #1a2340; }
+
+ .nav-backdrop {
+ display: none;
+ position: absolute;
+ inset: 0;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 10;
+ }
+ .layout.nav-open .nav-backdrop { display: block; }
+
+ @media (max-width: 720px) {
+ header { padding: 10px 12px; gap: 8px; }
+ header h1 { font-size: 16px; letter-spacing: 1px; }
+ header .subtitle { display: none; }
+ .menu-toggle { display: inline-block; }
+
+ .layout { position: relative; }
+ nav {
+ position: absolute;
+ left: 0; top: 0; bottom: 0;
+ width: 220px;
+ z-index: 20;
+ transform: translateX(-100%);
+ transition: transform 0.2s ease;
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.5);
+ }
+ .layout.nav-open nav { transform: translateX(0); }
+
+ main { padding: 16px; }
+ .graph-section h2 { font-size: 13px; }
+ .prose p, .prose ul { font-size: 13px; }
+ .cmp-table { font-size: 12px; }
+ .cmp-table th, .cmp-table td { padding: 6px 8px; }
+ }
@@ -235,9 +284,11 @@
STELLAR AIR
NOVA Operations Platform — Architecture
+
+