103 Commits

Author SHA1 Message Date
Jason Staack
e1d81b40ac fix: cap NATS JetStream streams to prevent OOM crash
WIRELESS_REGISTRATIONS stream had a 256MB MaxBytes cap in a 256MB
container — guaranteed to crash under load. ALERT_EVENTS and
OPERATION_EVENTS had no byte limit at all.

- Reduce WIRELESS_REGISTRATIONS MaxBytes from 256MB to 128MB
- Add 16MB MaxBytes cap to ALERT_EVENTS and OPERATION_EVENTS
- Bump NATS container memory limit from 256MB to 384MB
- Add restart: unless-stopped to NATS in base compose
- Bump version to 9.8.2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 07:52:07 -05:00
Jason Staack
b1ac1cce24 feat: v9.8.1 pre-built Docker images and GHCR release workflow
Setup.py now asks whether to pull pre-built images from GHCR
(recommended) or build from source. Pre-built mode skips the
15-minute compile step entirely.

- Add .github/workflows/release.yml (builds+pushes 4 images on tag)
- Add docker-compose.build.yml (source-build overlay)
- Switch docker-compose.prod.yml from build: to image: refs
- Add --build-mode CLI arg and wizard step to setup.py
- Bump version to 9.8.1 across all files
- Document TOD_VERSION env var in CONFIGURATION.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:33:12 -05:00
Jason Staack
023e45c908 fix(website): update status version to 9.8.0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 13:02:49 -05:00
Jason Staack
a9e3c79cca blog: SNMP Works (And the UI Got Out of the Way)
v9.8 release post covering SNMP support, UI simplification,
limitations, and where the project is heading.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:59:00 -05:00
Jason Staack
4b0cc056bd fix(website): restore MikroTik prominence, add SNMP as feature line item
MikroTik is the product. SNMP is a feature. Restored firmware management
and SRP-6a to feature list. SNMP added as one line, not a replacement.
Titles stay MikroTik-first.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:56:22 -05:00
Jason Staack
2cc139bc0e docs(website): add SNMP support to homepage for v9.8.0
Updated title, meta descriptions, OG/Twitter cards, structured data,
tagline, and feature list to reflect multi-vendor SNMP monitoring.
MikroTik remains prominent — SNMP is positioned alongside it.
Version bumped to 9.8.0 in structured data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:54:55 -05:00
Jason Staack
ddb4ce2512 docs: update documentation for v9.7.2 — setup CLI, navigation, UI scale
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:19:21 -05:00
Jason Staack
6e874505eb chore: bump version to 9.7.2 · plain
Warm Precision UI redesign, task-based navigation, interaction system,
website and docs restyled. 30+ commits on warm-precision-redesign
branch, merged to main.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:50:29 -05:00
Jason Staack
1a7c790515 fix(blog): dial back image filter — lighter sepia, higher opacity 2026-03-21 15:43:56 -05:00
Jason Staack
cb1de32269 fix(blog): blend lawyer image into warm precision palette with sepia/multiply 2026-03-21 15:41:43 -05:00
Jason Staack
f45236857f fix(website): restore hover/click screenshots, widen setup box, remove hint text 2026-03-21 15:39:48 -05:00
Jason Staack
3b5e2cad01 fix(website): simplify screenshots — plain images with captions, no interactivity 2026-03-21 15:38:15 -05:00
Jason Staack
e8151845ed fix(website): fix dark nav header on blog, add interactive screenshots
- Remove site-nav--dark class from all pages (blog, homepage)
- Add nav color overrides to all blog pages (light background, dark text)
- Homepage: hover screenshots to swap dark/light, click to expand both
  side by side in overlay

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:36:08 -05:00
Jason Staack
5b78cd9869 docs(website): apply Warm Precision styling to all blog pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:32:59 -05:00
Jason Staack
28035eb5dd docs(website): apply Warm Precision styling to docs page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:29:38 -05:00
Jason Staack
18a176c89a fix(website): fix code block wrapping in setup section 2026-03-21 15:29:02 -05:00
Jason Staack
ce894505dc fix(website): show both light and dark mode screenshots side by side 2026-03-21 15:27:00 -05:00
Jason Staack
c13d7f0f7c docs(website): rewrite homepage per Warm Precision redesign direction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:23:07 -05:00
Jason Staack
cc34877b76 docs(website): update analytics disclaimer to reflect engagement tracking
Changed "analytics pixel to count page views" to "analytics to measure
page views and engagement" across all 22 site pages to accurately
describe the updated telemetry script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 08:36:23 -05:00
Jason Staack
c9ca0d376c fix(api): increase memory/workers for 500-device scale, add blog post
API container was OOM-killed under 500-device mock load due to debug
logging, single worker, and 512MB limit. Bumped to info logging,
2 workers, and 1GB. New blog post documents the incident.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 07:33:35 -05:00
Jason Staack
0142107e68 docs: update all documentation for v9.7.0
- CONFIGURATION.md: fix database name (mikrotik → tod), add 5 missing
  env vars, update NATS memory to 256MB
- API.md: add 8 missing endpoint groups (sites, sectors, wireless links,
  signal history, site alerts, config backups, remote access, winbox)
- ARCHITECTURE.md: update subscriber count from 3 to 10, add v9.7
  components (sites, sectors, link discovery, signal trending, site
  alerts), add background service loops, update router count to 33
- USER-GUIDE.md: add tower/site management, wireless links, signal
  history, site alerts, and fleet map documentation
- README.md: add v9.7 features to feature list
- DEPLOYMENT.md: add winbox-worker, openbao, wireguard to service list
- SECURITY.md: add WinBox session security details

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:03:25 -05:00
Jason Staack
4e917ac819 blog: add "Why I'm Not Posting This on Reddit" post
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:35:44 -05:00
Jason Staack
00e30cbfcd feat(blog): add post announcing 250-device free tier cap
New blog post explaining the BSL license change from 1,000 to 250
devices. Updates blog index with new entry. Includes resized
lawyer.png hero image.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:37:22 -05:00
Jason Staack
1b1d527226 chore: unify version to 9.7.0 with single source of truth
- Add VERSION file at project root as canonical version source
- Sync all version references: package.json, pyproject.toml, config.py,
  Chart.yaml, docs/CONFIGURATION.md (all were out of sync: 9.0.1, v9.6, 0.1.0)
- Replace hardcoded v9.6 in SettingsPage and About page with dynamic
  APP_VERSION import from @/lib/version.ts
- Add Vite define for __APP_VERSION__ reading from package.json at build time
- Add TypeScript global declaration for __APP_VERSION__

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 11:25:34 -05:00
Jason Staack
f4361463a7 docs: add SaaS restriction to BSL 1.1 license
Only the Licensor may offer the Licensed Work as a hosted/managed
service (SaaS). Self-hosted production use remains free up to 1,000
devices. Updated LICENSE, README, and docs to reflect the new terms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:35:20 -05:00
Jason Staack
0693e0898b fix(website): make site-nav--light dark for Deep Space, bump cache
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 18:12:55 -05:00
Jason Staack
81a0bac97d fix(website): cache-bust style.css for Deep Space deploy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:52:09 -05:00
Jason Staack
cf11b29f49 fix(website): replace remaining Outfit font references in blog inline styles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:42:59 -05:00
Jason Staack
2eddc545d2 feat(website): replace screenshots with fresh 100-device fleet images
Swap 9 old screenshots for 8 new ones showing fleet dashboard, traffic,
firmware management, config templates, device detail, interface
utilization, device health, and traffic analytics. Update carousel
markup with Deep Space card styling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:42:20 -05:00
Jason Staack
4f8ab7f0d0 feat(website): retheme to Deep Space design system with local fonts
Replace CSS variables, hardcoded colors, font families, syntax token
colors, and banner styling. Swap Google Fonts for self-hosted Manrope
and IBM Plex Mono woff2 files. Update theme-color meta tags and remove
testing-banner--light variant across all 19 HTML files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:41:17 -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
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
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
5717b3deb4 docs: add Deep Space UI redesign implementation plan
22 tasks across 4 phases: tokens/fonts, component restyling, layout
restructure (ContextStrip + sidebar), page-level polish. Includes
responsive spot-check and WCAG contrast audit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:13:57 -05:00
Jason Staack
d191ac2be3 blog: add "This Is Not Stable Software" post
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:03:12 -05:00
Jason Staack
421808e0ac docs: add Deep Space UI redesign spec
Full visual overhaul spec — new color system, typography (Manrope + IBM
Plex Mono), component language, layout restructure with Context Strip,
and 4-phase implementation plan. WCAG AA compliant in both modes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 16:58:49 -05:00
Jason Staack
d9acd6bc66 docs: clarify terminology and expand acronyms in user guide 2026-03-16 08:57:22 -05:00
Jason Staack
d0eae197dc docs: clarify terminology and expand acronyms in README 2026-03-16 08:57:17 -05:00
Jason Staack
398dc99466 docs: correct technical details and version references
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 08:57:04 -05:00
Jason Staack
5e2e560bb0 docs: correct port numbers, memory limits, and version references
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 08:56:40 -05:00
Jason Staack
f1625a85a1 fix: correct start year from 1998 to 1997 in blog post
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 22:54:18 -05:00
Jason Staack
74d3da0346 fix: use docs-content class for consistent light theme on SEO pages
4 pages had custom inline styles using landing-page CSS variables
(--text-primary etc) which render as light-on-dark. Switched all
pages to use the shared docs-content class which uses --docs-*
variables for the light theme.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:33:11 -05:00