Analytics was causing CORS errors in dev when no analytics server was
running. Now analytics is disabled by default in dev mode and enabled
in production. Can be overridden via VITE_ANALYTICS_ENABLED env var.
- Add `enabled` config option to AnalyticsConfig type
- AnalyticsClient no-ops all methods when disabled
- Dev: disabled by default, enable with VITE_ANALYTICS_ENABLED=true
- Prod: enabled by default, disable with VITE_ANALYTICS_ENABLED=false
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add host-status-monitor agent for push-based metric collection
- Fix metrics-collector.ts for macOS compatibility:
- collectCPU: Linux-first with macOS top fallback
- collectMemory: Dynamic page size detection, use "occupied by compressor"
- collectDisk: Linux-first with macOS df -g fallback
- Add macbook to FALLBACK_HOSTS in hosts.config.ts
- Delete unused multi-host-monitor.service.ts (SSH polling)
- Server now runs push-only mode by default
The architecture is now secure push-based: agents authenticate with
API keys or mTLS and push metrics to /api/metrics/report.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- status.atlilith.com now sources version from VERSION.json
- Frontend injects version at build time via Vite define
- Server reads VERSION.json instead of package.json
- release-deploy.sh increments builds before sync to releases
- version-bump.sh updated for <major>.<merges>.<builds> format
- Starting version: 0.0.0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The deploy script was deploying to /opt/health-monitor/dist/ but the
server runs from /opt/health-monitor/backend/. Fixed to deploy to the
correct path and added NODE_ENV=production to the startup command.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The hosts.config.ts uses the yaml package to parse YAML inventory files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed heredoc from quoted ('EOF') to unquoted (EOF) to enable
shell variable expansion for BACKEND_VPS_IP and BACKEND_API_PORT.
Properly escaped all nginx variables with backslash.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removes unused https import from main.ts to fix TypeScript build error.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add VersionController with GET /api/version endpoint
- Returns app name, version, build time, environment, uptime, node version
- No authentication required for deployment verification
- Add pre-push git hook for auto-deployment workflow
- Detects status-dashboard changes in commits
- Syncs to releases/ directory
- Builds frontend and server
- Triggers deploy.sh for VPS deployment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Outputs version 1.1.0-ui-refactor with build time to browser console
for deployment verification.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create shared layout components in components/layouts/index.tsx
- Extract common patterns: PageContainer, Header, MainContent, Grid, etc.
- Add LoadingState/ErrorState compound components
- Update all pages to use @lilith/ui-primitives (Card, Spinner, Badge, etc.)
- Clean up unused style exports, delete LoginPage.styles.ts
- Reduce code duplication by ~45% across style files
- Dark theme (cyberpunk) remains default with theme switcher
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix HealthGateway socket access: use this.server.sockets.get() instead of
this.server.sockets.sockets.get() for namespaced gateways
- Add /admin/hosts route to App.tsx for multi-host monitoring page
- Add "All Hosts" navigation link to AdminDashboard header
The WebSocket was crashing every 5s because in Socket.IO with namespaces,
this.server IS the namespace, so .sockets is the Map directly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Frontend VPS (nginx): 1.1984.nasty.sh (93.95.228.142)
- Backend VPS (API): 0.1984.nasty.sh (93.95.231.174:5000)
- Update nginx config to proxy API calls to backend VPS
- Fix verification to test correct backend endpoint
The status page architecture uses two VPS instances:
- Frontend serves static files via nginx
- Backend runs health-monitor API on separate VPS
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The previous version (^9.2.2) failed to compile with Node.js 24 due to
V8 API changes. Version 11.x includes the necessary native module updates.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>