- Go 57.1%
- JavaScript 30.3%
- CSS 9.7%
- HTML 1.6%
- Dockerfile 1%
- Other 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The router scheduler repull-tick checks the git.exithub.net images every minute, so CI no longer needs SSH access to the router. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
| .forgejo/workflows | ||
| cmd/portal | ||
| internal | ||
| .dockerignore | ||
| .gitignore | ||
| CLAUDE.md | ||
| Dockerfile | ||
| go.mod | ||
| go.sh | ||
| go.sum | ||
| README.md | ||
Portal
A small dashboard for one homelab: a bar of apps that open in iframes (or in a
new tab), grouped into drop-down menus, edited in the browser and stored in
one YAML file. It replaces a fork of Muximux
and reads Muximux's config.yaml as it is.
- Username and password sign-in; sessions are signed cookies that survive restarts.
- Apps stay loaded in the background, can be pinned, get keys 1–9 and an
address of their own (
/<name>). - Apps in frames can show badges on the bar and the browser tab.
- Icons from dashboard-icons, Lucide, a URL or an upload.
- Everything is edited in the browser, including drag-and-drop order.
- Optional meters for Claude Code session and weekly usage, for several Claude accounts, with a switch for the one Claude Code uses.
Quick start
docker run -d -p 8080:8080 -v portal-data:/data git.exithub.net/ivan.pavlina/portal:latest
Open http://localhost:8080; with no users yet, the login page creates the
account. /data holds config.yaml (plus config.yaml.bak), session.key
and the icon cache. PORTAL_DATA and PORTAL_ADDR (default :8080) override
the data directory and the listen address.
From source, without a Go install on the host:
bash go.sh test ./...
Build and deploy
A push to main runs the Forgejo workflow: checks (vet, race tests, gofmt,
govulncheck, staticcheck), then a multi-arch image (amd64 and arm64) pushed to
git.exithub.net/ivan.pavlina/portal, then the router running it (a MikroTik
RB5009) repulls it by itself (scheduler repull-tick).
More
Configuration, the badge protocol, design decisions, testing and gotchas are in CLAUDE.md.