portal

Landing page for your homelab
git clone https://git.woozle.org/neale/portal.git

Neale Pickett  ·  2025-11-10

README.md

 1# Homelab Portal
 2
 3This repository provide some simple scaffolding to build a landing page for your homelab.
 4You can link to all your stuff,
 5including pretty icons,
 6and your apps will show up under the same top URL,
 7like they all work together somehow.
 8
 9![Screen Shot](docs/screenshot.png)
10
11```sh
12$ docker run \
13  -v $(pwd)/portal.json:/web/portal.json:ro \
14  -p 8080:8080 \
15  ghcr.io/nealey/portal:latest
16```
17
18# portal.json
19
20You define all your services in `/web/portal.json`.
21It works like this:
22
23```json
24[
25    {
26        "name": "My Thing",
27        "href": "https://myhost.example.org/path/to/my/thing/",
28        "icon": "https://myhost.example.org/path/to/my/thing/icons.png"
29    },
30    {
31        "name": "Another thing",
32        "href": "https://example.net/",
33        "target": "_blank"
34    },
35    {
36        "name": "Stat",
37        "href": "/stat.html",
38        "app": "stat"
39    }
40]
41```
42
43Some notes:
44
45* `"target": "_blank"` will cause clicks to open in a new tab
46* `"app": "stat"` makes the icon be the built-in CPU stats pie chart
47
48
49# Other uses for this
50
51Since the portal stuff is all static files,
52you could just not use any of that,
53and instead use this as a service to provide CPU stats.
54Just open `/stats.html` instead of `/`.
55Or write your own ECMAScript code that imports `stat.mjs`.
56
57
58# Alternatives
59
60There are lots of other things like this around.
61Probably the shiniest is called "Heimdall".
62
63I made this one because I didn't want to run yet another database
64or a PHP server
65when I am perfectly happy editing a JSON file
66and having my browser do all the work.
67
68Because this runs so much in the browser,
69no resources are used when no users are active,
70and when there are users,
71it's still very light:
72less than 1% CPU on my Raspberry Pi.