Skip to content

hauju/infrapage

Repository files navigation

infrapage

infrapage

Self-hosted, widget-based infrastructure dashboard.
Linktree for your project infrastructure.

CI License


A single page that brings together GitHub repos, uptime monitors, analytics, CI/CD pipelines, and more into a shareable dashboard. Built with Rust, compiled to a single binary that serves both the API and the WASM client.

Features

  • 17 widget types — GitHub repos, pipelines, commit graphs, uptime monitors, Polar revenue, Umami analytics, Sentry errors, Discord servers, Beszel stats, and more
  • Drag & drop editor — Arrange widgets on a visual grid. Resize, reorder, and delete with intuitive controls
  • SSR + independent hydration — Pages load instantly with server-side rendering. Each widget hydrates independently so slow APIs never block the page
  • Custom domains — Map any domain to a dashboard page
  • Dark & light themes — Respects system preferences, switchable per page
  • Self-hosted — Single Docker image, MongoDB for storage, optional Valkey/Redis for caching
  • Authentication — Optional FerrisKey OIDC integration with custom login UI (passkey/password/email-OTP). Runs in open mode without it

Quick Start

Prerequisites

  • Docker and Docker Compose
  • A MongoDB 5.0+ instance

Run with Docker Compose

# Clone the repo
git clone https://github.com/hauju/infrapage.git
cd infrapage

# Copy the example env and edit it
cp .env.example .env

# Start MongoDB and Valkey
docker compose up -d

# Run infrapage (replace with your actual image or build it)
docker run -d \
  --env-file .env \
  --network infrapage_infrapage-net \
  -p 8080:8080 \
  ghcr.io/hauju/infrapage:latest

Open http://localhost:8080.

Build from Source

Requires Rust nightly and the Dioxus CLI.

# Install Dioxus CLI
curl -sSL http://dioxus.dev/install.sh | sh

# Dev server with hot reload
dx serve --platform web

# Production build
dx build --release --platform web

Configuration

All configuration is done through environment variables. Copy .env.example for a full reference.

Variable Required Purpose
MONGODB_URI Yes MongoDB connection string
MONGODB_DATABASE No Database name (default: infrapage)
ENCRYPTION_KEY Recommended Base64-encoded 32-byte key for encrypting API tokens at rest
VALKEY_URI No Redis/Valkey for session storage + widget caching
FERRISKEY_URL For auth FerrisKey base API URL
FERRISKEY_ISSUER_URL No FerrisKey public OIDC issuer base URL when different from FERRISKEY_URL
FERRISKEY_REALM For auth FerrisKey realm name
FERRISKEY_CLIENT_ID For auth FerrisKey OIDC client ID
FERRISKEY_CLIENT_SECRET For auth FerrisKey confidential client secret
GITHUB_TOKEN No GitHub API token for repo/pipeline widgets
POLAR_TOKEN No Polar API token for revenue widgets

See Configuration docs for the full list.

Architecture

infrapage is a Dioxus 0.7 fullstack app. The same source compiles into both a server binary and a WASM client:

src/
├── main.rs              # Routes, app entry, server setup
├── models/              # Shared types (client + server)
├── server/              # Server-only: DB, auth, API handlers, fetchers
└── components/          # Dioxus UI: layouts, pages, widgets, admin

Key design decisions:

  • Two-phase page loading — SSR renders the page shell immediately, then each widget independently fetches its data on the client
  • Embedded widgets — Widget configs are stored as an array inside each page document (no joins)
  • Feature-gated compilationweb feature for WASM client, server feature for the backend. No server code ships to the browser

Widget Types

Widget Integration What it shows
GitHub Repo GitHub API Stars, forks, language, description
GitHub Pipeline GitHub API Latest workflow run status
GitHub Commit Graph GitHub API Contribution-style commit heatmap
Uptime Monitor HTTP HEAD Response time and up/down status
Uptime Kuma Uptime Kuma API Monitor status from your Uptime Kuma instance
Polar Overview Polar API MRR, subscribers, revenue stats
Umami Stats Umami API Page views, visitors, bounce rate
Sentry Overview Sentry API Error counts and project health
Discord Server Discord API Member count and server info
Beszel Beszel API Server resource stats
Zitadel Users Zitadel API User count from your identity provider
Google Search Console GSC API Search impressions and clicks
Custom Link Link card with title, description, and icon
Status Badge Simple colored status indicator

Documentation

Full documentation is available at /docs when running infrapage, or browse the source in the docs/ directory.

Contributing

Contributions are welcome! Please:

  1. Fork the repo and create a feature branch
  2. Make sure cargo check and cargo clippy pass
  3. Open a pull request against main

License

See LICENSE for details.

About

Self-hosted, widget-based infrastructure dashboard. Linktree for your project infrastructure.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

 
 
 

Contributors