Entrypoint now auto-discovers binary locations in various paths.
Host port changed to 3002 due to stale iptables rule on port 3001.
Co-Authored-By: Kilo <kilo@kilo.ai>
The cp destination /app/gateway conflicts with the source code
directory apps/tools/backend/gateway/ which is copied to /app/gateway/.
Use /app/tools-gateway-bin to avoid name collision.
Co-Authored-By: Kilo <kilo@kilo.ai>
Shared services are in separate compose files. Tools depends on them
at runtime but Docker compose doesn't need to manage their lifecycle.
Co-Authored-By: Kilo <kilo@kilo.ai>
The builder stage uses --mount=type=cache for /app/target, so binaries
are in the cache which isn't available to the runtime stage COPY.
Fix by copying from /app/gateway and /app/workers which were cp'd
to the builder's regular filesystem.
Co-Authored-By: Kilo <kilo@kilo.ai>
Replace cargo install cargo-chef with pre-built image
lukemathwalker/cargo-chef:latest-rust-1.85.0 and add build
cache mounts for faster rebuilds.
Co-Authored-By: Kilo <kilo@kilo.ai>
The bun.lock doesn't exist yet - use bun install without frozen-lockfile.
This will be optimized once a lockfile is generated.
Co-Authored-By: Kilo <kilo@kilo.ai>
Move tools code to its own repo (asepharyana/asepharyana-hub-tools)
and add as git submodule following the existing app pattern.
Fix Dockerfile paths to use apps/tools/ prefix since build context
is the repo root.
Co-Authored-By: Kilo <kilo@kilo.ai>
Routing is handled by container labels (traefik.enable + router labels),
so file-level routes for lidm are no longer needed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cloudflare Origin CA wildcard cert covers *.asepharyana.my.id,
so websecure entrypoint with tls works correctly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add routers and services for lidm.asepharyana.my.id (→ lidm-frontend:3000)
and lidm-api.asepharyana.my.id (→ lidm-backend:3001) behind Traefik.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Remove dashboard container from observability.yml
- Remove infra/docker/dashboard.Dockerfile
- Remove dashboard route from Traefik apps.yaml
- Mount Docker socket on hub container for /api/dashboard
- Remove dashboard build from CI/CD (docker-build-push.yml)
- Update submodule pointer to hub with Next.js dashboard rewrite
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Replace fixed grid-column spans with auto-fill grid
- Charts auto-hide when no data available (no gaps)
- System Resources row spans full width only when data exists
- Responsive breakpoints for mobile, tablet, desktop
- SVG charts scale with container width
- Add node-exporter container for host metrics (CPU, RAM, Disk)
- SVG gauge charts rendered server-side from Prometheus data
- Auto-detect compose project name from Docker labels
- Auto-detect web services via traefik.* labels for quick links
- Remove all hardcoded service name filters
- Dynamic system name based on compose project
- Replace nginx+Chart.js client-side dashboard with Go server
- Server-side rendered SVG charts (donut, line charts)
- Direct Docker socket integration via Go stdlib
- Embedded HTML template via //go:embed
- Minimal scratch image (~9MB total)
- Remove nginx.conf and client-side Chart.js
- Add Prometheus server scraping OTel collector
- Add Chart.js donut chart for service health distribution
- Add line charts for RPS, latency, error rate, trace volume
- Add Prometheus API proxy to nginx whitelist
- Restructure dashboard layout with 12-column responsive grid