Commit Graph

297 Commits

Author SHA1 Message Date
Jason Staack
e4b9eeae1d feat(fleet): make device hostname a clickable link in fleet table
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:12:38 -05:00
Jason Staack
c3bbdb852d feat(ui): add DeviceLink reusable component
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:11:25 -05:00
Jason Staack
8d8779951c feat(website): retake all screenshots with 100-device demo data
12 hours of mock device polling produced rich metrics data.
Dashboards show real bandwidth, device counts, and events.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 07:29:59 -05:00
Jason Staack
3c3ddb8487 chore: remove docs/superpowers/ from tracking
These are local-only planning docs, already in .gitignore.
Files were committed before the gitignore entry was added.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:42:11 -05:00
Jason Staack
e7af5e85ab feat(seo): add 6 targeted SEO pages for high-intent search phrases
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:39:48 -05:00
Jason Staack
31d224ca58 feat(seo): add open source MikroTik management page, update sitemap
New SEO page targeting "open source mikrotik management" keyword.
Added to sitemap with 0.8 priority. Cross-linked from existing
centralized management page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:25:46 -05:00
Jason Staack
b925d534bc feat(seo): add open source keywords, update sitemap, add cross-links
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:23:12 -05:00
Jason Staack
67caecd52c blog: add "Found a Bug Running 100 Simulated Routers"
Fourth blog post covering a NATS JetStream memory issue found
during 100-device simulation testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:14:30 -05:00
Jason Staack
05e5595c2b fix(poller): add 64MB cap on DEVICE_EVENTS NATS stream
Without a byte limit, the stream grows unbounded within its 24h
max_age window. At 101 devices polling every 60s, it hits 128MB
in ~10 hours and OOMs the NATS container.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 05:52:09 -05:00
Jason Staack
556545cf9c chore: gitignore tools/dev/ for local dev tooling
Mock RouterOS server and screenshot automation live here
but should not be in the public repo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 20:11:50 -05:00
Jason Staack
0c8a473796 fix(website): retake config editor screenshot with device selected
Shows gw-bowling-alley config tree with RouterOS menu hierarchy.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:57:29 -05:00
Jason Staack
412f9c2530 feat(website): update screenshots for Deep Space theme with new tenants
Replace all screenshots with Deep Space dark theme captures.
New tenants: Lebowski Lanes, MXC Studios, Irken Empire.
Login screenshot now shows Secret Key fields.
Remove old Stranger's Ranch screenshot.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:49:26 -05:00
Jason Staack
ddcea97dd0 blog: add "What You Can Do With It Today (And What You Can't)"
Third blog post covering current capabilities, limitations, and
design philosophy. Factual inventory of what works, what's rough,
and what's missing entirely.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:06:22 -05:00
Jason Staack
517eb944d7 docs: update for Helm chart and telemetry changes
Add Kubernetes/Helm deployment section to DEPLOYMENT.md, telemetry
environment variables to CONFIGURATION.md, telemetry privacy details
to SECURITY.md, telemetry bullet to README quick start, and fix Go
version from 1.24 to 1.25 in docs/README.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:00:46 -05:00
Jason Staack
aef94329f4 fix(helm): correct secret name references and add migration env var
- Secret resource now named with -secrets suffix to match all template refs
- Add CREDENTIAL_ENCRYPTION_KEY to migration init container (VPN migration needs it)
- Fix postgres secretKeyRef to use -secrets suffix

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:54:47 -05:00
Jason Staack
4d3eadd1df feat(helm): add values-local.yaml for Docker Desktop testing
Local override values with pullPolicy: Never, dev environment,
disabled ingress/wireguard, and placeholder secrets. File is gitignored
since it contains dev credentials; exists only on local machines.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:48:21 -05:00
Jason Staack
8755595e60 feat(helm): add NOTES.txt with OpenBao init instructions and access info
Post-install notes cover OpenBao initialization/unseal workflow,
ingress or port-forward access, admin credentials, and health check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:48:10 -05:00
Jason Staack
dc1d994f84 feat(helm): add Ingress template with API, docs, metrics, and frontend routes
Routes /api, /docs, /metrics to API service and / to frontend,
with optional TLS and annotation support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:48:06 -05:00
Jason Staack
491f314b7d feat(helm): add WireGuard deployment and service templates
Privileged deployment with NET_ADMIN, sysctl ip_forward, tun device
mount, and UDP LoadBalancer service on port 51820.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:48:02 -05:00
Jason Staack
e3130059b6 feat(helm): add poller deployment template
Go poller with NET_ADMIN capability, configmap envFrom, and secret
refs for DATABASE_URL (poller_user), OPENBAO_TOKEN, and encryption key.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:45:53 -05:00
Jason Staack
c5175b0ea4 feat(helm): add frontend deployment and service templates
Simple nginx-based deployment serving the React SPA on port 80,
no runtime env or volumes required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:45:49 -05:00
Jason Staack
04f6d46082 feat(helm): add API deployment and service templates
Includes two init containers (VPN route setup, Alembic migrations),
secret refs for JWT/encryption/OpenBao/SMTP, and PVC mounts for
git-store, firmware-cache, and wireguard config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:45:45 -05:00
Jason Staack
d2b75bdae8 feat(helm): add OpenBao StatefulSet with config ConfigMap and service
File-backed storage, IPC_LOCK capability for mlock, startup/liveness/
readiness probes. Config mounted via subPath from ConfigMap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:44:07 -05:00
Jason Staack
a2de7e7482 feat(helm): add NATS JetStream StatefulSet with headless and client services
Runs nats-server with --jetstream and monitoring on port 8222.
Headless service for StatefulSet DNS, ClusterIP service for app connections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:44:02 -05:00
Jason Staack
d785aadad7 feat(helm): add Redis Deployment and ClusterIP Service
Ephemeral cache with no PVC. Includes redis-cli ping probes for
liveness and readiness.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:43:58 -05:00
Jason Staack
e79588a9b6 feat(helm): add PostgreSQL StatefulSet with init SQL and headless service
Includes ConfigMap for init.sql (TimescaleDB extension, app_user and
poller_user role creation), StatefulSet with liveness/readiness probes,
and headless Service for stable DNS.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:43:54 -05:00
Jason Staack
321ce548ea feat(helm): add standalone PVC templates for git-store, firmware-cache, wireguard
Three PVCs with configurable size and storageClass. Wireguard PVC is
conditional on wireguard.enabled.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:41:48 -05:00
Jason Staack
be11959d7c feat(helm): add secrets and configmap templates
Single Secret with all sensitive values (JWT, encryption keys, DB
passwords, SMTP credentials, poller DB URL). Single ConfigMap with
all non-sensitive config including URL helpers and optional value guards.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:41:25 -05:00
Jason Staack
fdf1735531 feat(helm): rewrite values.yaml and update Chart.yaml for v1.0.0
Complete values.yaml with all config sections: API, frontend, poller,
postgres, redis, NATS, OpenBao, WireGuard, storage, ingress, SMTP,
secrets, telemetry, backup, and storage paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:40:57 -05:00
Jason Staack
c8dbada606 feat(helm): add _helpers.tpl with naming, labels, and URL builders
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:39:53 -05:00
Jason Staack
ab560df532 chore(helm): remove old chart templates for rewrite
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:39:30 -05:00
Jason Staack
ecbefae9ab feat: add opt-in anonymous setup telemetry
Instruments setup.py to send per-step diagnostic events to the TOD
telemetry collector when the user opts in. Uses a shared static token
with no registration flow — fully anonymous.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 20:04:26 -05:00
Jason Staack
21563132e1 feat: replace Cloudflare analytics with self-hosted pixel, clarify privacy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 19:19:58 -05:00
Jason Staack
f6283cff7c fix(lint): remove unused FleetDevice import in traffic page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 19:03:31 -05:00
Jason Staack
c455fe4ed5 feat(ui): sweep remaining components for Deep Space consistency
Replace old design tokens and hardcoded colors across 29 files:
- bg-primary/text-primary-foreground -> bg-accent/text-white
- text-muted-foreground -> text-text-muted
- text-destructive/bg-destructive -> text-error/bg-error
- bg-muted -> bg-elevated (background usage)
- Hardcoded green/red/yellow/emerald/amber/slate -> semantic tokens
- Remove shadow-md/lg from cards, tooltips, topology nodes
- rounded-xl -> rounded-lg on cards/panels
- focus:ring-1 focus:ring-ring -> focus:border-accent on inputs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 19:00:36 -05:00
Jason Staack
25d4a80b73 feat(ui): polish command palette and login page for Deep Space
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:42:07 -05:00
Jason Staack
4924580a4b feat(ui): polish remaining pages with Deep Space tokens
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:40:48 -05:00
Jason Staack
1a463cfa84 chore: add demo data seeder and config editor smoke test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:37:28 -05:00
Jason Staack
133e6e50e4 feat(ui): wire Wireless and Traffic pages to live data
Replace placeholder "coming soon" pages with functional implementations
that query the fleet APIs and display real-time wireless issues and
resource consumption data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:36:44 -05:00
Jason Staack
1800330545 feat: expand config editor menu tree and add WiFi wave2 template
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:27:38 -05:00
Jason Staack
b8797c9b79 chore: remove deprecated Header component (replaced by ContextStrip)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:45:49 -05:00
Jason Staack
bdff65b9cf chore: remove Geist font files and dependency
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:45:26 -05:00
Jason Staack
64dc6beb11 feat(ui): polish Config Editor with Deep Space styling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:44:18 -05:00
Jason Staack
8fadfc4d7d feat(ui): polish device table with Deep Space styling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:43:31 -05:00
Jason Staack
06ac1b73b6 feat(ui): polish Fleet Overview with Deep Space styling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:42:44 -05:00
Jason Staack
bea80b354f feat(ui): add placeholder Wireless and Traffic routes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:39:51 -05:00
Jason Staack
99215810a9 feat(ui): replace AppLayout with ContextStrip + rebuilt Sidebar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:39:31 -05:00
Jason Staack
b9bbcf4a45 feat(ui): rebuild Sidebar with Fleet/Config/Admin structure
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:39:12 -05:00
Jason Staack
a10e609c02 feat(ui): add ContextStrip with org switcher, status, and user controls
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:38:24 -05:00
Jason Staack
76d7f5561d feat(ui): restyle DropdownMenu and Popover
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:34:01 -05:00