feat(honeybar): the HoneyOS bar, loaded at runtime

A strip along the top that leads to the other apps of the same system. It is
served by HoneyOS; InkNote only says where to find it, through
INKNOTE_HONEYBAR_ORIGIN. Empty means no bar and no change at all.

The origin is served by the API rather than built into the page, because an
image is pulled ready-made and a service worker keeps whole responses: anything
frozen into index.html would outlive the setting.

Layout follows the bar through --honeybar-h. The body has overflow:hidden, so
the surplus height would not have scrolled but been cut off at the bottom; and
#root padded itself around the notch that the bar now covers, which would have
counted that gap twice.

Unit 263/263, all fourteen browser suites green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-08-25 11:07:43 +02:00
1 parent 2ea448f091
commit 00b1d4469f
12 files changed
+144 -5

No files matched your search

+20
View File
@@ -169,6 +169,26 @@ The web UI listens on port `3000`, the API only inside the compose network. If a
reverse proxy sits in front, bind the port to localhost (`"127.0.0.1:3000:80"`),
otherwise the app is reachable on the host's address without TLS.
#### The HoneyOS bar
`INKNOTE_HONEYBAR_ORIGIN` puts a strip along the top of every page that leads to
the other apps of the same system — it is served by HoneyOS, so what it looks
like and which apps it lists are settled there, not here. Empty means no bar at
all, and nothing about the app changes.
The value takes effect on restart: the page asks the server for it
(`GET /api/public/config`) and loads the script itself. It is deliberately not
built into the image — an image is pulled ready-made, and a service worker keeps
whole responses, so anything frozen into `index.html` would outlive the setting.
`INKNOTE_HONEYBAR_KEY` is only needed when HoneyOS sits on a *different site*
than InkNote (`honeyos.example.com` vs `notes.example.org`). The browser then
withholds the HoneyOS session, and the bar has no other way to ask for the list
of apps. Under a shared domain it can stay empty.
Offline there is no bar — it comes from another server. The app itself is
unaffected, which is the right way round for one that is built to work offline.
---
## API Reference