Faxas Hub
GPU-first self-hosted ops dashboard aggregating upstream APIs from Beszel, Uptime Kuma, and Glances into a unified mobile-first interface. Ships as a single Docker image.
About This Project
Faxas Hub is a self-hosted operations dashboard designed for homelabs and GPU-heavy environments. It aggregates telemetry from multiple upstream APIs — Beszel for system metrics, Uptime Kuma for service monitoring, and Glances for per-device breakdowns — through a BFF (Backend-for-Frontend) architecture.
The dashboard surfaces GPU utilization, VRAM, temperature, and power draw as first-class metrics — not buried in generic system charts. Docker auto-discovery with custom faxas.* labels enables automatic service categorization across 80+ known services.
The codebase follows a contract-based adapter pattern: each upstream service has an adapter that normalizes data into stable v1 contracts. The UI depends only on internal contracts, so upstream API changes are isolated to adapter code with zero impact on the frontend.
The project ships as a single ~100 MB Alpine-based Docker container with 630+ passing tests, SSRF protection, HMAC security gates, and a first-run setup wizard — no manual .env configuration required.
Key Features
What makes this project stand out
GPU-First Monitoring
Utilization, VRAM, temperature, and power draw surfaced as first-class metrics — not buried in generic system charts.
Docker Auto-Discovery
Custom faxas.* labels enable automatic service categorization. Over 80 known services recognized and grouped out of the box.
BFF Architecture
Backend-for-Frontend layer aggregates Beszel, Uptime Kuma, and Glances APIs into one unified, sanitized surface.
Contract-Based Adapters
Each integration follows strict TypeScript contracts with Zod validation. Upstream API changes stay isolated in adapter code.
Mobile-First Design
iPhone-baseline (390px) responsive layout with glassmorphic UI, 44px touch targets, and safe-area support.
Security Hardened
SSRF protection with RFC 1918 blocklist, HMAC-SHA256 enablement gates, rate limiting, and encrypted session cookies.
Architecture
A four-layer BFF pattern that keeps the frontend thin and the backend adaptable. Upstream credentials never reach the browser.
Browser
Glassmorphic React UI with mobile-first responsive layout and three service view modes.
Next.js API Routes
BFF layer that aggregates, caches, and normalizes data from upstream APIs. All credentials stay server-side.
Integration Adapters
Contract-based adapters with consistent interfaces. Each adapter normalizes upstream data into stable v1 contracts.
External Services
Upstream monitoring and infrastructure services providing raw telemetry, health data, and container info.
Integrations
Six adapter-based integrations powering the dashboard
Beszel
System MetricsPrimary telemetry source for CPU, RAM, GPU, and storage metrics across hosts and containers.
Uptime Kuma
Health MonitoringService health checks, uptime percentages, and latency monitoring with alerting support.
Glances
Device TelemetryPer-device breakdowns of CPU, memory, disk, and network. Optional GPU fallback when Beszel lacks support.
Docker
Container DiscoveryContainer auto-discovery via socket proxy, status tracking, and label-based service categorization.
Nginx Proxy Manager
Proxy ResolutionReverse proxy URL resolution for exposed services. Matches container names to proxy hosts.
Tailscale
Network OverlayVPN mesh network integration for LAN discovery and Tailscale-based link generation.
Tech Stack
Frontend
Backend
Testing
DevOps
Key Achievements
- GPU-first monitoring with utilization, VRAM, temp, and power draw as primary metrics
- Docker auto-discovery with faxas.* labels and 80+ known services auto-categorized
- BFF architecture — browser never talks directly to upstream APIs
- Contract-based adapter pattern isolating upstream API changes from the UI
- 630+ passing tests across 55 test files with comprehensive coverage
- Single Docker image deployment (~100 MB Alpine-based)
- SSRF protection, HMAC security gates, and rate-limited auth endpoints
- First-run setup wizard — no manual .env configuration required