Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m36sDetails
Build and Push Docker Image / build (push) Successful in 3m36sDetails
- Add HUB_PORT variable to .env.example
- Update docker-compose.yml to use configurable port
- Update nginx config to proxy to port 3847
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m35sDetails
Build and Push Docker Image / build (push) Successful in 3m50sDetails
- Remove Traefik network and labels from docker-compose
- Remove redundant docker-compose.simple.yml
- Remove HUB_DOMAIN from .env.example
- Remove traefik network creation from setup.sh
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m29sDetails
Build and Push Docker Image / build (push) Successful in 3m51sDetails
Excludes node_modules, .next, .git, env files, and other
unnecessary files from Docker build context.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m29sDetails
Build and Push Docker Image / build (push) Successful in 3m42sDetails
- nginx/hub.conf with SSL, headers, and SSE support
- Bind port 3000 to localhost only (Nginx proxies)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m28sDetails
Build and Push Docker Image / build (push) Has been cancelledDetails
- docker-compose.yml with Traefik integration
- docker-compose.simple.yml for direct port exposure
- .env.example with all configuration options
- setup.sh script for initial deployment
Usage:
cd deploy/
cp .env.example .env
# Edit .env with your values
./setup.sh
docker compose up -d
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m30sDetails
Build and Push Docker Image / build (push) Has been cancelledDetails
- Add GiteaCredentials interface to config-generator
- Update JobConfig to include gitea registry credentials
- Fetch Gitea credentials from settings in provision route
- Pass gitea credentials through to job config
This enables the runner to login to the Gitea registry on target
servers, allowing deployment of private LetsBe images.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 1m26sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
- Remove FlatCompat wrapper that caused circular structure error
- Use typescript-eslint directly with react-hooks plugin
- Add eslint-plugin-react-hooks dependency
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 2m10sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
Major additions:
- Analytics dashboard with charts (line, bar, donut)
- Enterprise client monitoring with container management
- Staff management with 2FA support
- Profile management and settings pages
- Netcup server integration
- DNS verification panel
- Portainer integration
- Container logs and health monitoring
- Automation controls for orders
New API endpoints:
- /api/v1/admin/analytics
- /api/v1/admin/enterprise-clients
- /api/v1/admin/netcup
- /api/v1/admin/settings
- /api/v1/admin/staff
- /api/v1/profile
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m3sDetails
Build and Push Docker Image / build (push) Successful in 2m38sDetails
- 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>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 58sDetails
Build and Push Docker Image / build (push) Successful in 2m40sDetails
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>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m1sDetails
Build and Push Docker Image / build (push) Failing after 2m31sDetails
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>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m1sDetails
Build and Push Docker Image / build (push) Failing after 2m19sDetails
- 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>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 57sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
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>
Build and Push Docker Image / build (push) Blocked by required conditionsDetails
Build and Push Docker Image / lint-and-typecheck (push) Has been cancelledDetails
- 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>
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>
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>
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>
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>