Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m42sDetails
Build and Push Docker Image / build (push) Successful in 4m34sDetails
The login page checks database for setup status, which fails during
static page generation at build time. Force dynamic rendering to
defer the check to runtime.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m48sDetails
Build and Push Docker Image / build (push) Failing after 3m54sDetails
- Add /setup page that appears when no staff exist
- Create first OWNER account with name, email, password
- Login page redirects to /setup if setup required
- Setup page redirects to /login after completion
- API guards prevent setup after first account exists
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 1m9sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
- Move prisma.config.ts to prisma.config.mjs at project root
- Use dynamic dotenv import (works in Docker without dotenv)
- Add dotenv to devDependencies for local development
- Install dotenv globally in Docker for migration support
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m42sDetails
Build and Push Docker Image / build (push) Successful in 4m32sDetails
Instead of copying partial node_modules which misses WASM files,
install prisma@7 globally in the production image.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m44sDetails
Build and Push Docker Image / build (push) Successful in 4m9sDetails
Copy prisma CLI and its node_modules folder to allow running
migrations in the container with ./node_modules/.bin/prisma
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Successful in 1m37sDetails
Build and Push Docker Image / build (push) Successful in 3m54sDetails
The lint-and-typecheck job was using npm ci which requires
package-lock.json to be in sync. Changed to npm install for
Prisma 7 upgrade compatibility.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 22sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
package-lock.json is out of sync with package.json after Prisma 7
upgrade. Using npm install allows build to succeed and regenerate
the lock file.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Push Docker Image / lint-and-typecheck (push) Failing after 26sDetails
Build and Push Docker Image / build (push) Has been skippedDetails
- Update prisma and @prisma/client to ^7.0.0
- Add @prisma/adapter-pg for PostgreSQL connections
- Create prisma.config.ts for datasource configuration
- Remove url from schema.prisma datasource block
- Update prisma.ts to use PrismaPg adapter pattern
Breaking change in Prisma 7: datasource url now configured
via prisma.config.ts instead of schema.prisma
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>