Commit Graph

13 Commits

Author SHA1 Message Date
Matt 60493cfbdd fix: Fix Docker build for public directory
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m3s Details
Build and Push Docker Image / build (push) Successful in 2m38s Details
- Update Dockerfile to ensure public directory exists in builder stage
- Use 'COPY /app/public/. ./public/' pattern for robust copying
- Add manifest.json to public folder (non-empty directory)
- Remove .gitkeep placeholder

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 13:55:36 +01:00
Matt 7dc7100fb8 fix: Add public directory for Docker build
Build and Push Docker Image / lint-and-typecheck (push) Successful in 58s Details
Build and Push Docker Image / build (push) Successful in 2m40s Details
Docker build requires public folder to exist even if empty.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 13:02:12 +01:00
Matt d21dc88812 fix: Wrap useSearchParams in Suspense boundary
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m1s Details
Build and Push Docker Image / build (push) Failing after 2m31s Details
Next.js 15 requires useSearchParams() to be wrapped in a
Suspense boundary for static page generation.

- Split LoginForm into separate component
- Add Suspense wrapper with loading skeleton
- Fixes build error on /login page

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 12:52:41 +01:00
Matt 56b919fe4a chore: Add ESLint configuration
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m1s Details
Build and Push Docker Image / build (push) Failing after 2m19s Details
- Add eslint.config.mjs with Next.js core-web-vitals preset
- Install @eslint/eslintrc for flat config compatibility

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 12:47:13 +01:00
Matt 41cb49eeda fix: Remove npm cache from CI workflow
Build and Push Docker Image / lint-and-typecheck (push) Failing after 57s Details
Build and Push Docker Image / build (push) Has been skipped Details
Gitea Actions runner hangs on npm cache config. Removing
cache option to fix CI pipeline.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 12:44:34 +01:00
Matt 3594bcf297 chore: Remove old Python files and update CI for Next.js
Build and Push Docker Image / build (push) Blocked by required conditions Details
Build and Push Docker Image / lint-and-typecheck (push) Has been cancelled Details
- Remove Python tests, alembic migrations, and requirements.txt
- Update CI workflow to use Node.js instead of Python
- CI now runs TypeScript check and lint before Docker build

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 12:40:26 +01:00
Matt a79b79efd2 feat: Complete rewrite as Next.js admin dashboard
Build and Push Docker Image / test (push) Failing after 34s Details
Build and Push Docker Image / build (push) Has been skipped Details
Major transformation from FastAPI telemetry service to Next.js admin dashboard:

- Next.js 15 App Router with TypeScript
- Prisma ORM with PostgreSQL (same schema, new client)
- TanStack Query for data fetching
- Tailwind CSS + shadcn/ui components
- Admin dashboard with:
  - Dashboard stats overview
  - Customer management (list, detail, edit)
  - Order management (list, create, detail, logs)
  - Server monitoring (grid view)
  - Subscription management

Pages implemented:
- /admin (dashboard)
- /admin/customers (list + [id] detail)
- /admin/orders (list + [id] detail with SSE logs)
- /admin/servers (grid view)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 12:35:01 +01:00
Matt 02fc18f009 fix: Accept string instance_id in telemetry endpoint
The orchestrator sends instance_id as a string (e.g., "letsbe-orchestrator")
but the endpoint was expecting a UUID path parameter. This caused 422
validation errors when orchestrators tried to send telemetry.

- Changed path parameter from UUID to str
- Lookup instance by Instance.instance_id (string) instead of Instance.id (UUID)
- Store telemetry with instance.id (UUID) for correct FK relationship
- Updated TelemetryPayload schema to use str instead of UUID

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 15:11:30 +01:00
Matt 2a1270bfbd Use pre-built image from Gitea registry
Switch from local build to code.letsbe.solutions/letsbe/hub:latest
Remove development volume mount (not needed with pre-built image)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 16:13:26 +01:00
Matt 06ed320136 Add nginx configuration for Hub deployment
Includes:
- HTTP to HTTPS redirect
- Placeholder SSL certs for initial nginx -t pass
- Proxy to Hub API on port 8200
- ACME challenge location for certbot
- WebSocket support headers
- Usage instructions in comments

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:23:24 +01:00
Matt 246e7f142a ci: Add Gitea Actions workflow for Docker build 2025-12-22 14:12:12 +01:00
Matt 38daa25d92 chore: Trigger CI build 2025-12-22 14:10:39 +01:00
Matt adc02e176b feat: Initial Hub implementation
Complete LetsBe Hub service for license management and telemetry:

- Client and Instance CRUD APIs
- License key generation and validation (lb_inst_ format)
- Hub API key generation (hk_ format) for telemetry auth
- Instance activation endpoint
- Telemetry collection with privacy-first redactor
- Key rotation and suspend/reactivate functionality
- Alembic migrations for PostgreSQL
- Docker Compose deployment ready
- Comprehensive test suite

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:09:32 +01:00