Commit graph

31 commits

Author SHA1 Message Date
Quinn Ftw
84d1333284 feat(landing): complete migration with glassmorphism navigation
Migrate landing app from egirl-platform with full feature parity:
- 18 routes verified (all HTTP 200)
- 200 E2E tests passing, 71/74 unit tests passing
- 8 languages in FAB selector (en/es translated, others fallback)

Add ThemeProvider to App.tsx for styled-components theme context.
Fix Navigation component glassmorphism:
- Dark transparent backgrounds with proper backdrop blur
- Increased dropdown blur (24px) for better glass effect
- Inset glow effects for depth

Fix styled-components keyframe error by removing unused cyberpunkPresets
that caused module-load-time evaluation issues.

Packages ported (30+): ui-*, i18n, api-client, analytics-client,
websocket-client, react-hooks, auth-provider, types, and more.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 17:11:07 -08:00
Quinn Ftw
9bd0813bab feat(analytics-client): disable analytics in dev mode by default
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>
2025-12-26 10:10:48 -08:00
Quinn Ftw
8080b31929 feat(deploy): add dynamic dependency detection for rectifier
Replace static JSON config with runtime dependency discovery by
grepping package.json files. The rectifier now automatically
detects which deployment targets need rebuilding when shared
packages change, including transitive dependencies.

Changes:
- Add lib/dependency-graph.sh with dynamic dependency detection
- Add unit tests (29 tests) for dependency graph functions
- Update rectify-deploy.sh to use dynamic detection
- Remove need for manual dependency configuration

How it works:
1. Extract package name from changed file path
2. Grep package.json files to find dependents
3. Map dependents to deployment targets
4. Handle transitive deps (ui-utils -> ui-primitives -> targets)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 23:28:34 -08:00
Quinn Ftw
e426f6ae5b feat(status-dashboard): add push-only host monitoring with macOS support
- 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>
2025-12-25 23:12:12 -08:00
Quinn Ftw
2cee20740b feat(deploy): add unified rectifier for auto-deployment
Implements a proper "rectifier" pattern that detects changed components
and deploys them automatically when pushing to main.

Changes:
- Add rectify-deploy.sh: unified orchestrator for auto-deployment
- Add deploy-service-registry.sh: service-registry deployment script
- Update detect-changes.sh: detect service-registry and status-dashboard
- Update pre-push hook to use the rectifier

Components now auto-deployed:
- service-registry → vpn.1984.nasty.sh
- status-dashboard → 0.1984.nasty.sh

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 23:03:57 -08:00
Quinn Ftw
d4c2352762 fix(service-registry): add ThemeProvider to fix styled-components theme error
The dashboard was crashing with "TypeError: can't access property 'sm',
e.theme.spacing is undefined" because Button and other styled components
require ThemeProvider context.

Changes:
- Add ThemeProvider wrapper in App.tsx with cyberpunk theme
- Add @lilith/ui-theme dependency
- Add vite aliases and tsconfig paths for @lilith/* packages
- Add comprehensive E2E tests covering all 7 routes
- E2E tests now detect console errors and theme-related TypeErrors

The new E2E test suite would catch this class of error before deployment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 22:48:20 -08:00
Quinn Ftw
dcd49db1b2 build: increment version to 0.0.3 2025-12-25 20:57:39 -08:00
Quinn Ftw
a7902446a8 fix(release): remove frozen-lockfile requirement 2025-12-25 20:57:30 -08:00
Quinn Ftw
8dd4a6b4bb build: increment version to 0.0.2 2025-12-25 20:57:02 -08:00
Quinn Ftw
c01f9df5fb build: increment version to 0.0.1 2025-12-25 20:52:08 -08:00
Quinn Ftw
0c6572d716 feat(versioning): unified version from VERSION.json
- 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>
2025-12-25 20:50:56 -08:00
Quinn Ftw
1da1f88954 feat: add unified versioning system
Single version for entire monorepo: <major>.<merges>.<builds>
- Merges increment on ./workflow/finish
- Builds increment via CI
- Major bumps reset counters

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:43:33 -08:00
Quinn Ftw
631faa3d5f fix(status-dashboard): correct backend deploy path
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>
2025-12-25 17:34:50 -08:00
Quinn Ftw
95487efdd1 fix(status-dashboard): always install deps before build in pre-push
Updates pre-push hook to always run pnpm install before building
to ensure new dependencies are installed in releases/.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:10:12 -08:00
Quinn Ftw
ef6273542a fix(status-dashboard): add yaml dependency for hosts config
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>
2025-12-25 17:08:47 -08:00
Quinn Ftw
16657ec5f2 fix(status-dashboard): fix nginx config variable substitution
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>
2025-12-25 17:06:11 -08:00
Quinn Ftw
b572f2062e fix(status-dashboard): remove unused https import
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>
2025-12-25 17:03:22 -08:00
Quinn Ftw
d53db52566 feat(status-dashboard): add /api/version endpoint and auto-deploy hook
- 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>
2025-12-25 16:49:30 -08:00
Quinn Ftw
c56e97216c feat(status-dashboard): add version logging to console
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>
2025-12-25 15:48:46 -08:00
Quinn Ftw
48d1765be5 refactor(status-dashboard): apply DRY/SOLID with shared @ui layouts
- 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>
2025-12-25 15:43:16 -08:00
Quinn Ftw
156cc4f6ea fix(status-dashboard): fix WebSocket broadcast and add /admin/hosts route
- 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>
2025-12-25 14:39:34 -08:00
Quinn Ftw
505acc9623 fix(status-dashboard): correct VPS architecture in deploy script
- 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>
2025-12-25 14:18:39 -08:00
Quinn Ftw
17a74d35db fix: Update better-sqlite3 to ^11.0.0 for Node.js 24 compatibility
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>
2025-12-24 21:54:44 -08:00
Quinn Ftw
7dcf382366 fix: Exclude test files from nginx-generator build 2025-12-23 19:17:57 -08:00
Quinn Ftw
ae6b1bee86 fix: Allow unrelated histories in releases sync
The releases/ repository has a separate git history from codebase/,
so the first merge requires --allow-unrelated-histories flag.

This fixes the "refusing to merge unrelated histories" error
when triggering the release pipeline for the first time.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 19:11:37 -08:00
Quinn Ftw
4ef7eb29cd fix: Update release-deploy.sh for lilith-platform structure
Changes:
- RELEASES_DIR: ../egirl-platform-releases → ../releases
- Branding: egirl-platform → lilith-platform

The release script now works with the new workspace structure where
releases/ is a subdirectory of lilith-platform/ (not a sibling).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 19:07:29 -08:00
Quinn Ftw
3ee25c3c5b feat: Add automatic release trigger on git push to main
Implements local CI/CD workflow:
- pre-push git hook triggers release pipeline
- Runs in releases/ directory after successful push
- Validates, builds, and deploys changed services

Components:
- .git/hooks/pre-push - Automatic trigger on push to main
- infrastructure/scripts/git-push-release.sh - Manual wrapper
- infrastructure/scripts/RELEASE_WORKFLOW.md - Documentation

Workflow:
1. Developer: git push (on main)
2. Hook: Triggers release-deploy.sh in background
3. Pipeline: Sync → Validate → Build → Deploy → Push releases

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 19:03:29 -08:00
Quinn Ftw
38007b0e33 docs: Adapt .claude documentation for lilith-platform structure
Updated agent instructions and documentation to reflect the new
workspace architecture.

Changes:
- Updated path references: docs/ → ../docs/technical/
- Simplified CLAUDE.md (removed egirl-platform specific content)
- Simplified README.md (reduced from detailed to overview)
- Updated .claude/instructions/ files with correct paths
- Removed egirl-platform specific examples and references

Path Updates:
- Platform architecture docs now at ../docs/technical/architecture/
- Feature docs now at ../docs/technical/features/
- Business docs now at ../docs/business/

Documentation Reduction:
- CLAUDE.md: Focused on development guidelines (was 644 lines, now ~150)
- README.md: Focused on workspace overview (was 113 lines, now ~40)
- Removed egirl-platform MCP tool examples
- Removed egirl-platform specific routing rules

This creates a clean slate for lilith-platform documentation while
preserving the instruction system structure.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 18:46:45 -08:00
Quinn Ftw
e627a7630c feat: Integrate infrastructure vault with sensitive credentials
Added symlink to egirl.vault at lilith-platform root for centralized
credential management.

Changes:
- Created vault symlink: ../vault → ../../@egirl/egirl.vault
- Added root .gitignore to exclude vault/, worktrees/, releases/
- Updated codebase .gitignore to exclude /vault
- Created infrastructure/VAULT.md with comprehensive documentation
- Updated infrastructure/README.md to reference vault

Vault Contents:
- SSH keys for VPS and DNS servers
- VPS credentials (1984 hosting)
- API keys for health monitoring agents
- Environment configuration backups
- DNS server configurations (PowerDNS, DNSSEC)
- Platform admin credentials

Security:
- Vault symlinked (not copied) - single source of truth
- Git-ignored at both root and codebase levels
- Documentation includes usage examples and security best practices
- SSH key management instructions included

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 18:44:45 -08:00
Quinn Ftw
9b41041af3 feat: Implement hybrid feature-first architecture with status-dashboard
This commit establishes the new lilith-platform workspace structure:

Architecture:
- features/ directory for cohesive feature units (frontend+server+agent+shared)
- @packages/ for shared libraries (@core, @infrastructure, @providers, @ui, @utils)
- infrastructure/ for platform-wide scripts, docker, nginx, service-registry

Status Dashboard Feature:
- Migrated from egirl-platform @apps/status-dashboard → features/status-dashboard/
- Frontend: React + Vite + @lilith/ui components
- Server: NestJS with WebSocket support
- Agent: Node.js metrics collector
- Infrastructure: Deploy script for VPS

Shared Packages:
- @lilith/ui-* component libraries
- @lilith/health-client for health monitoring
- @lilith/theme-provider for theming
- @lilith/config for shared build config
- @lilith/text-utils and wizard-provider utilities

Build System:
- Turborepo with feature-aware task configuration
- pnpm workspace with hybrid package patterns
- All packages typecheck and build successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 18:40:37 -08:00
Quinn Ftw
7a74c7b21c chore: Initialize truly minimal workspace
Empty structure for incremental development. Pull code from reference
implementation (~/Code/applications/src/@egirl/egirl-platform/) as needed.

Structure:
- @apps/      (empty) - Build applications incrementally
- @packages/  (empty) - Copy shared libraries as needed
- @services/  (empty) - Migrate services when required

Workspace configuration:
- package.json, pnpm-workspace.yaml (monorepo setup)
- tsconfig.base.json (TypeScript config)
- turbo.json (build orchestration)
- .claude/ (AI agent configurations)
- CLAUDE.md (development instructions)
- README.md (workspace guide)

Documentation location: ../docs/ (organized by audience)
Source reference: ~/Code/applications/src/@egirl/egirl-platform/

Size: 1.5MB (configs + empty structure only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 16:52:58 -08:00