Marcs Vorschlag, und er ist der bessere: "+ kategorie" setzt eine Ueberschriftenzeile, und was darunter steht, gehoert dazu, bis die naechste kommt. Die Ueberschrift hat dieselben Pfeile wie eine App, laesst sich umbenennen und mit x aufloesen. Damit faellt die Sonderregel von gestern weg -- "am Rand der Gruppe kategorisiert der Pfeil um, statt zu tauschen". Sie war die Beschreibung eines Modells; jetzt ist es das Modell: Schiebt man eine App ueber eine Ueberschrift, ist sie in der anderen Gruppe, und schiebt man eine Ueberschrift, wandert die Grenze. Nichts davon braucht Code. Vor allem loest es den echten Mangel der ersten Fassung: Eine Kategorie umbenennen war ein Feld je App, jetzt ist es eine Zeile. Gespeichert wird weiter als Feld an der App. Waere die Ueberschrift ein Eintrag in der App-Liste, enthielte diese Zeilen ohne ID und ohne Adresse, und jeder Leser muesste das wissen -- Kacheln, Schublade, Pruefung auf Erreichbarkeit und vor allem die HoneyBar in fremden Apps. Der Preis: Eine Ueberschrift ohne Apps darunter ueberlebt das Speichern nicht. Eine Kategorie besteht durch ihre Apps. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
745 lines
38 KiB
Markdown
745 lines
38 KiB
Markdown
# Ideen und Reihenfolge
|
||
|
||
Was noch kommen könnte, in der Reihenfolge, in der es aufeinander aufbaut.
|
||
Nichts davon ist beschlossen — beschlossen ist, was im [README](README.md) steht.
|
||
|
||
Grundsatz für alles hier: **Fundament zuerst, dann ein Widget, dann ausbauen.**
|
||
Nicht zehn Fenster auf einmal planen, sondern eines bauen und sehen, ob man
|
||
wirklich hinschaut.
|
||
|
||
---
|
||
|
||
## 1 · Fundament
|
||
|
||
Ohne diese Stücke ist alles danach nicht möglich. Reihenfolge nach dem
|
||
Verhältnis von Aufwand zu spürbarer Wirkung.
|
||
|
||
### 1.1 Die HoneyBar trägt deine Röhre — ✅ erledigt (24.08.2026)
|
||
|
||
Die HoneyBar liest ihre Farben nicht mehr fest, sondern aus derselben Antwort, mit
|
||
der sie die App-Liste holt. Röhre in HoneyOS auf grün → die HoneyBar in Aether ist
|
||
grün, ohne dass Aether angefasst wird. `glow` und `scanlines` gelten dort ebenso.
|
||
|
||
**Ging entgegen der ersten Einschätzung auch über Site-Grenzen hinweg.** Ich
|
||
hatte notiert, das scheitere daran, dass der Browser die Sitzung nicht mitschickt
|
||
— stimmt, aber der Schlüssel für die App-Liste löst es: dieselbe Anfrage bringt
|
||
das Aussehen gleich mit. Deshalb liefert `/api/apps` jetzt `{apps, settings}`
|
||
statt nur einer Liste.
|
||
|
||
Offen war: Bei mehreren Nutzern trägt die HoneyBar die Farbe des
|
||
Standardnutzers, weil ihr über die Site-Grenze niemand sagen kann, wer da
|
||
gerade schaut. **Für Apps unter derselben Site erledigt seit dem 29.08.2026** —
|
||
`/api/apps` sieht jetzt erst nach der Sitzung und erst dann nach dem Schlüssel.
|
||
Über eine echte Site-Grenze bleibt es, wie es war.
|
||
|
||
### 1.2 Systemmenü im Logo — ✅ gebaut (29.08.2026)
|
||
|
||
**Steht**, in beiden Leisten mit denselben Punkten (siehe [README](README.md)).
|
||
Der Abmeldeknopf in der Menüleiste des Schreibtischs ist dafür weggefallen — er
|
||
stand sonst zweimal da, und die HoneyBar hat ihn nie gehabt.
|
||
|
||
Eine Annahme von damals hat sich nicht gehalten: „ohne sie zu verlassen"
|
||
**geht nicht**, jedenfalls nicht für Einstellungen und Abmelden. Beides
|
||
schreibt, und die HoneyBar darf in einer fremden App nicht schreiben — die
|
||
Sitzung kommt über die Site-Grenze nicht mit, und selbst unter einer Domain
|
||
liegt das CSRF-Prüfwort in einem Cookie, das nur HoneyOS' eigene Seiten lesen.
|
||
Die HoneyBar hat die Frage deshalb als `?einstellungen=1` an den Schreibtisch
|
||
weitergereicht. **Auch das ist seit dem 01.09.2026 weg** (Marcs Einwand): Wenn
|
||
der Punkt ohnehin nur weiterleitet, ist er neben „Schreibtisch" keine zweite
|
||
Möglichkeit, sondern dieselbe mit einem Zwischenschritt weniger. Das Bar-Menü
|
||
trägt jetzt Schreibtisch und Einklappen, sonst nichts.
|
||
|
||
**Abmelden ist ganz aus den Leisten verschwunden** und steht unten in den
|
||
Einstellungen (Marcs Entscheidung, 29.08.2026). Aus fremden Apps war es ohnehin
|
||
nur ein Link auf den Schreibtisch gewesen; als einzige Schaltfläche, die eine
|
||
Sitzung beendet, gehört es an eine Stelle statt an drei. Im selben Zug ist das
|
||
Zahnrad aus der Menüleiste des Schreibtischs gefallen und durch den Pfeil mit
|
||
der App-Liste ersetzt worden — damit tragen beide Leisten wirklich dieselben
|
||
vier Dinge: Logo, Apps, Wetter/Uhr, Aufklappmenü.
|
||
|
||
**Was ohne Seitenwechsel ginge, wenn es je stört:** die reinen Aussehensschalter
|
||
(Röhre, Leuchten, Scanlines) direkt im Menü. Sie kämen ohne Prüfwort aus, wenn
|
||
der Server stattdessen den `Origin` der Anfrage gegen die eingetragenen Apps
|
||
hält — dieselbe Liste, die heute schon die CORS-Freigabe steuert. Das ist eine
|
||
Sicherheitsentscheidung und keine Kleinigkeit; erst bauen, wenn der Umweg über
|
||
den Schreibtisch wirklich nervt.
|
||
|
||
### 1.3 App-Schublade mit Symbolen — ✅ gebaut (29.08.2026)
|
||
|
||
**Gebaut: die geteilte Symbolquelle.** Die Raster liegen in `web/glyphs.json`,
|
||
der Schreibtisch lädt sie, die HoneyBar bekommt sie mit der App-Liste mit
|
||
(siehe [README](README.md)). Damit tragen beide Leisten dieselben Symbole neben
|
||
den App-Namen, und die doppelt abgetippten Wettersymbole sind weg.
|
||
|
||
Dazu ein Schalter *Einstellungen → HoneyBar*: Symbole im App-Streifen an oder
|
||
aus, für beide Leisten zugleich. In den Aufklappmenüs und auf den Kacheln
|
||
stehen sie immer — dort ist Platz, und dort sucht man eine App, statt sie im
|
||
Vorbeigehen wiederzuerkennen.
|
||
|
||
**Ebenfalls gebaut: die Schublade.** Der Pfeil rechts klappt in beiden Leisten
|
||
ein Raster auf — Symbol groß, Name, Untertitel als dritte Zeile. Drei Spalten,
|
||
am Handy dieselben drei.
|
||
|
||
Entschieden (29.08.2026): **Symbol und Name, nie nur Symbol.** Der Grund ist
|
||
nicht Geschmack, sondern der geteilte Satz von acht generischen Glyphen — zwei
|
||
Apps können dieselbe Wolke tragen, und bei Homelab-Diensten ist das der
|
||
Normalfall. Ein Symbol identifiziert erst, wenn es einzigartig ist. Dazu: Den
|
||
Streifen sieht man im Vorbeigehen, die Schublade macht man auf, *weil man
|
||
sucht* — Suchen heißt Lesen, und Platz ist dort genug. Namen wegzunehmen ist
|
||
später eine CSS-Zeile; ohne sie anzufangen kostet die Zeit, in der man rät.
|
||
|
||
Der Untertitel bekommt damit endlich einen Ort: Er stand bisher nur auf den
|
||
Kacheln und beantwortet genau die Frage, die ein generisches Symbol offenlässt.
|
||
|
||
**Was aus 1.3 offen bleibt, steht jetzt weiter unten:** eigene Logos zum
|
||
Hochladen (siehe „Eigene App-Logos" in Teil 2). Sie hängen an derselben Ablage
|
||
wie das Bild-Widget und gehören deshalb dorthin, nicht mehr ins Fundament.
|
||
|
||
### 1.3b Reihenfolge der Apps — ✅ gebaut (29.08.2026)
|
||
|
||
Heute stehen die Apps so, wie sie eingetragen wurden. Ab vier, fünf Stück ist
|
||
das eine Frage — in der HoneyBar zuerst, weil dort der Platz am knappsten ist
|
||
und die Reihenfolge entscheidet, was man am Handy ohne Wischen sieht.
|
||
|
||
**Die halbe Arbeit ist schon getan:** Die App-Liste ist ein Array, und dessen
|
||
Reihenfolge *ist* die Reihenfolge — Streifen, Schublade, Kacheln,
|
||
Schreibtischsymbole und Startmenü zeichnen alle daraus. Es fehlt nur eine
|
||
Möglichkeit, das Array umzustellen. Kein neues Feld, kein neuer Endpunkt.
|
||
|
||
**Pfeile statt Ziehen**, im Programm-Editor je Zeile ein ▲▼:
|
||
|
||
| | Aufwand | am Handy | Tastatur/Vorlesen |
|
||
|---|---|---|---|
|
||
| **Pfeile** | ~40 Zeilen | sofort | ja |
|
||
| HTML5-Ziehen | ~30 Zeilen | **löst bei Berührung nicht aus** | nein |
|
||
| Ziehen über Zeigerereignisse | ~120 Zeilen | ja | nur mit Zusatzarbeit |
|
||
|
||
Man sortiert vier bis sechs Apps einmal, in einer Liste aus aufklappbaren
|
||
Zeilen — `<details>` und Ziehen vertragen sich ohnehin schlecht. Die
|
||
Zeigerereignis-Variante lohnt erst, wenn sie mehrfach gebraucht wird, und genau
|
||
das kommt: „Widgets verschieben" braucht sie zwingend. Wird sie dort gebaut,
|
||
kann die App-Liste sie später erben.
|
||
|
||
**Kein A–Z-Knopf** (Marc, 29.08.2026): erstmal zu viel. Bei einer Handvoll Apps
|
||
sortiert man einmal von Hand und rührt es nie wieder an — ein zweiter Weg
|
||
dorthin ist Zierat. Kommt zurück, wenn er fehlt.
|
||
|
||
**Die Zifferntasten sind bei der Gelegenheit ganz weggefallen.** Sie waren ein
|
||
Pflichtfeld je App, das man beim Anlegen ausfüllen musste, und sie hätten beim
|
||
Sortieren dieselbe Frage aufgeworfen: mitwandern oder stehenbleiben? Beides
|
||
falsch. Neue Apps hängen sich jetzt einfach hinten an, die Reihenfolge macht man
|
||
mit den Pfeilen.
|
||
|
||
Beim Bauen aufgetreten:
|
||
|
||
- Der Klick auf einen Pfeil sitzt in einem `<summary>` — ohne `preventDefault`
|
||
klappt jeder Sortierklick die Zeile auf.
|
||
- Beim Neuzeichnen müssen offene Zeilen offen bleiben.
|
||
- Gespeichert wird wie bisher die ganze Liste auf einmal: Man kann probieren,
|
||
ohne dass sofort alles umspringt.
|
||
|
||
#### Und eine eigene Reihenfolge je Nutzer? — später, aber der Weg bleibt offen
|
||
|
||
Marcs Frage vom 29.08.2026. **Das ist kein Entweder-oder:** Eine persönliche
|
||
Reihenfolge braucht die gemeinsame als Rückfall. Sie sähe so aus —
|
||
|
||
```
|
||
apps: [aether, inknote, status, pdf] ← die Liste, für alle
|
||
users[marc].appOrder: "pdf,aether,inknote" ← nur IDs, nur seine Sicht
|
||
```
|
||
|
||
— unbekannte IDs ignorieren, fehlende hinten anhängen. Das passt **ohne
|
||
Datenmodell-Änderung** in die bestehenden Einstellungen (`map[string]string`).
|
||
Was jetzt gebaut wird, wird davon also nicht falsch.
|
||
|
||
Zwei Gründe, trotzdem mit der gemeinsamen anzufangen:
|
||
|
||
1. **Es gibt einen Nutzer.** „Meine Reihenfolge" und „die Reihenfolge" sind
|
||
heute dasselbe — der Unterschied wäre nicht erlebbar, der Code müsste ihn
|
||
für immer tragen.
|
||
2. **Die HoneyBar in fremden Apps erkennt den Nutzer nicht.** Sie weist sich mit
|
||
dem Schlüssel aus, nicht mit einer Sitzung, und bekäme die Reihenfolge des
|
||
Standardnutzers, während der Schreibtisch die eigene zeigt — derselbe Bruch
|
||
wie heute bei den Farben.
|
||
|
||
→ **Zusammen mit „Persönliche Apps je Nutzer" zu bauen.** Die Bedingung dafür
|
||
ist am 29.08.2026 weggefallen: Aether und InkNote liegen längst unter
|
||
`*.honeyos.duckdns.org`, also unter derselben Site, und `/api/apps` sieht seither
|
||
erst nach der Sitzung. **Die HoneyBar weiß dort jetzt, wer schaut.** Was bleibt,
|
||
ist die Frage, ob es sich bei einem Nutzer lohnt.
|
||
|
||
### 1.4 Widget-Rahmen — ✅ gebaut (30.08.2026)
|
||
|
||
Ein Widget ist jetzt eine **Beschreibung**, kein Stück HTML im Dokument:
|
||
|
||
```js
|
||
widgetAnmelden({
|
||
id, titel,
|
||
wo: ["terminal", "desktop"], // wo es erscheinen darf
|
||
sichtbar: () => …, // Schalter aus → gar nicht erst da
|
||
laden: async () => false|void, // false = es gibt nichts zu zeigen
|
||
leer: "verbergen" | "Text", // was dann passiert
|
||
inhalt: () => "<html>",
|
||
takt: 600000, // Nachladen, optional
|
||
})
|
||
```
|
||
|
||
Der Rahmen (`web/js/widgets/rahmen.js`) macht daraus im Terminal-Modus ein
|
||
Fenster in der Widgetspalte und im Desktop-Modus ein Schild, kennt die vier
|
||
Zustände (lädt · fertig · nichts da · Fehler) und hält den Nachladetakt. Ein
|
||
Widget, das seinen Server nicht erreicht, sagt das **in seinem eigenen Rahmen**
|
||
und reißt weder den Schreibtisch noch die anderen Widgets mit.
|
||
|
||
Umgestellt sind Benutzer, Wetter und der Systemzustand. Aus der `index.html`
|
||
sind damit vier fest verdrahtete Kästen verschwunden, und aus dem Raster die
|
||
Einzelplätze — vorher hätte das dritte Widget beides wieder angefasst.
|
||
|
||
**Was dabei offen gelassen wurde:** die dritte Form. Widgets sollen später auch
|
||
als Aufklappfeld in der HoneyBar leben können, deshalb erzeugt `inhalt()` nur
|
||
den Kern; die Verpackung entsteht im Rahmen. Und die Reihenfolge ist eine
|
||
Liste — genau das, was „Widgets verschieben" braucht.
|
||
|
||
## 2 · Erste Widgets
|
||
|
||
Eines bauen, benutzen, dann entscheiden.
|
||
|
||
Widgets, die Daten aus den eigenen Apps holen, sind gestrichen (siehe „Bewusst
|
||
nicht geplant"). Was bleibt, ist alles, was für sich allein steht: Wetter
|
||
(gebaut), ein Bild, später vielleicht Uhr, Notizzettel, Systemzustand.
|
||
|
||
### Wetter in der HoneyBar, neben der Uhr — ✅ gebaut (25.08.2026)
|
||
|
||
**Steht.** Zwei Orte, unabhängig voneinander: auf dem Schreibtisch, in der
|
||
HoneyBar, beides oder keins. Seit dem 31.08.2026 an zwei Stellen — auf dem
|
||
Schreibtisch ist das Wetter ein Widget wie jedes andere und steht in der
|
||
Widget-Liste, für die Leiste gibt es den eigenen Schalter. Die Stadt wird einmal gesucht
|
||
und mit ihren Koordinaten gespeichert; der Server holt das Wetter und legt es
|
||
zehn Minuten beiseite, die Oberflächen zeigen nur, was er hergibt.
|
||
|
||
Offen geblieben ist eines mit Absicht: **Die Stadt lässt sich nur auf dem
|
||
Schreibtisch ändern, nicht aus der HoneyBar heraus.** Ein Klick auf das Symbol
|
||
führt dorthin. Der Grund ist derselbe wie bei allem anderen in der HoneyBar: Sie
|
||
liest über den Schlüssel und darf nichts schreiben — und über eine Site-Grenze
|
||
wüsste sie nicht, für wen sie es täte. Liegt alles unter einer Domain, wäre es
|
||
nachrüstbar.
|
||
|
||
Die ursprüngliche Notiz, zur Nachvollziehbarkeit:
|
||
|
||
#### Wie es geplant war
|
||
|
||
Ein Pixelsymbol neben der Uhrzeit, dazu die Temperatur. Ein Klick öffnet ein
|
||
kleines Feld, in dem die Stadt eingestellt wird. Alles im Röhren-Look: Sonne,
|
||
Wolke, Regen, Schnee als 12×12-Raster wie die App-Symbole, keine bunten
|
||
Fremdbilder.
|
||
|
||
**Das ist der beste Kandidat für das erste Widget überhaupt**, vor „letzte
|
||
Dateien" — und zwar aus einem Grund, der von aussen nicht sichtbar ist: Wetter
|
||
braucht **keine** der Voraussetzungen, an denen die anderen Widgets hängen. Kein
|
||
CORS in Aether, keine Sitzung von InkNote, keine App-API. Es hängt an nichts,
|
||
was sich noch ändern kann, und lässt sich an einem Abend fertig bauen. Damit
|
||
beantwortet es die eigentliche Frage — schaut man überhaupt hin? — ohne dass
|
||
vorher das halbe Fundament stehen muss.
|
||
|
||
Und es ist das erste Widget, das **in der HoneyBar** lebt statt auf dem
|
||
Schreibtisch. Es ist damit zugleich der Probelauf für den Rahmen weiter unten.
|
||
|
||
**Die Abfrage gehört auf den Server, nicht in den Browser.** Open-Meteo braucht
|
||
keinen Schlüssel und kostet nichts, aber wenn jede App-Seite selbst dort
|
||
anfragt, geht bei jedem Seitenaufruf aus jeder App eine Anfrage samt IP an einen
|
||
Fremden hinaus — und die CSP jeder App müsste den Wetterdienst erlauben. Holt
|
||
HoneyOS es selbst und gibt es über `/api/apps` mit heraus (oder über einen
|
||
eigenen kleinen Endpunkt), sieht der Dienst genau einen Server, die Apps bleiben
|
||
unberührt, und ein Zwischenspeicher von zehn bis fünfzehn Minuten reicht
|
||
vollkommen: Das Wetter ändert sich langsamer als eine Seite neu geladen wird.
|
||
|
||
Zu klären, wenn es soweit ist:
|
||
|
||
- **Stadt → Koordinaten.** Open-Meteo hat eine Suche dafür; das Ergebnis
|
||
einmal speichern statt bei jeder Abfrage neu suchen.
|
||
- **Wo die Stadt liegt.** Zu den Einstellungen im Server, wie Röhre und
|
||
Effekte — dann gilt sie auf jedem Gerät.
|
||
- **Am Handy wird es eng.** Uhr und Wetter nebeneinander in 32 px: Wahrscheinlich
|
||
nur das Symbol, Temperatur erst ab einer gewissen Breite.
|
||
- **Kein Netz, kein Wetter.** Dann verschwindet das Symbol, statt eine Zahl von
|
||
gestern als heutige auszugeben.
|
||
|
||
### Zwei Leisten, zwei Stilsätze
|
||
|
||
Die HoneyBar in fremden Apps (`honeybar.js`, eigenes CSS im Shadow DOM) und die
|
||
Menüleiste des Schreibtischs (`.menubar` in `style.css`) sehen gleich aus, sind
|
||
aber getrennter Code — rund 19 Regeln hier, 30 dort, alle von Hand
|
||
gleichgehalten.
|
||
|
||
**Das ist bereits einmal auseinandergelaufen:** Das Wetter stand zuerst nur in
|
||
`honeybar.js`, und der Schalter „in der honeybar" schien auf dem Schreibtisch
|
||
wirkungslos (25.08.2026). Es wird wieder passieren.
|
||
|
||
Zwei Auswege:
|
||
|
||
- **Die Schreibtisch-Menüleiste durch `honeybar.js` ersetzen.** Ein Stilsatz,
|
||
eine Anatomie, und was die HoneyBar kann, kann der Schreibtisch automatisch
|
||
auch. Kostet: Die Menüleiste hat Dinge, die die HoneyBar nicht hat
|
||
(Einstellungsknopf, Abmelden, Avatar) — die müssten hinein, und die HoneyBar
|
||
ist bewusst schlank.
|
||
- **Die Farb- und Maßangaben in eine gemeinsame Datei ziehen**, die beide
|
||
einbinden. Kleiner Eingriff, löst aber nur die Hälfte: Aufbau und Verhalten
|
||
bleiben doppelt.
|
||
|
||
→ Ersteres ist das Richtige, sobald die HoneyBar mehr kann als heute (Widgets,
|
||
Systemmenü). Vorher lohnt der Umbau nicht.
|
||
|
||
### Die HoneyBar ohne `unsafe-inline` — ✅ gebaut (11.09.2026)
|
||
|
||
Fremde Apps mussten für die HoneyBar `style-src 'unsafe-inline'` erlauben, weil
|
||
sie ihre Stile im Shadow DOM als `<style>` mitbrachte — ohne das erschien sie
|
||
schwarz auf schwarz (gemessen am 28.08.2026).
|
||
|
||
**Anders gelöst als hier geplant.** Der Plan war, die Stile als eigene Datei
|
||
auszuliefern und per `<link>` einzubinden. Das hätte `'unsafe-inline'` gegen
|
||
`style-src … https://honeyos…` getauscht — eine CSP-Änderung gegen eine andere,
|
||
plus eine zweite Anfrage. Stattdessen hängt die HoneyBar ihre Stile jetzt als
|
||
konstruiertes Stylesheet (`adoptedStyleSheets`) ein: Die CSP greift nur auf
|
||
Markup, nicht auf die CSSOM. Damit braucht die Gastgeber-App **gar keine
|
||
`style-src`-Erlaubnis** mehr, und es bleibt bei einer Datei ohne zweite Anfrage.
|
||
|
||
Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und wäre sonst
|
||
das einzige Stück ohne Farbe geblieben — er geht denselben Weg.
|
||
|
||
Zwei Fallen dabei: Der Rückfall für alte Browser hängt ein `<style>` in den
|
||
Root, also muss er **nach** `innerHTML` laufen, sonst räumt das Markup ihn
|
||
gleich wieder weg. Und `el.style.…` war nie das Problem — das ist schon CSSOM.
|
||
|
||
### Bild-Widget — ✅ gebaut (30.08.2026)
|
||
|
||
Ein Widget, das ein Bild zeigt: hochgeladen oder als Adresse eingetragen. Genau
|
||
**eines je Nutzer**; ein neues ersetzt das alte, ohne Verwaltung und ohne Liste.
|
||
|
||
Reizvoll daran ist, dass es das erste Widget wäre, das nichts abfragt, sondern
|
||
etwas *ist* — der Schreibtisch bekommt damit einen persönlichen Zug, den keine
|
||
Datenanzeige liefert.
|
||
|
||
Zu klären, wenn es soweit ist:
|
||
|
||
- **Ablegen.** HoneyOS speichert bisher nur eine JSON-Datei. Ein Bild heisst:
|
||
Ordner unter `/data`, Grössengrenze, erlaubte Typen. SVG ist heikel — es kann
|
||
Skripte enthalten und darf nicht einfach durchgereicht werden.
|
||
- **Ausliefern** mit Versionsanteil in der Adresse, sonst bleibt beim Austausch
|
||
das alte im Zwischenspeicher hängen.
|
||
- **Adresse statt Upload** ist billiger zu bauen, holt aber eine fremde Anfrage
|
||
auf jede Seite mit HoneyBar. Für den Schreibtisch unkritisch; sollte das Bild
|
||
je in die HoneyBar wandern, wäre es eine Anfrage aus jeder App.
|
||
- **Zuschneiden?** Ein Bild in einem festen Rahmen ist entweder verzerrt oder
|
||
beschnitten. `object-fit: cover` und gut — Zuschneiden von Hand ist ein
|
||
eigenes Stück Arbeit.
|
||
- Passt zum Aufnehmen eigener App-Logos (1.3): dieselbe Ablage, dasselbe
|
||
Ausliefern. Zusammen bauen spart die Hälfte.
|
||
|
||
**Nachtrag 31.08.2026.** Hochladen, Verlinken und Entfernen standen erst im
|
||
Widget selbst und sind in die Einstellungen gewandert (Marcs Einwand): Das
|
||
Widget zeigt, die Einstellungen stellen ein — wie beim Wetter. Damit gilt für
|
||
alle Widgets dieselbe Regel, und der Schreibtisch bleibt eine Anzeige statt
|
||
einer Bedienoberfläche.
|
||
|
||
### Notiz-Widget — ✅ gebaut (30.08.2026), Sofort-Ansicht (31.08.2026)
|
||
|
||
Ein Zettel auf dem Schreibtisch: hineintippen, fertig. Serverseitig je Nutzer,
|
||
also auf jedem Gerät derselbe Text.
|
||
|
||
**Nachtrag 31.08.2026 — was daraus wurde.** Aus dem „Zettel" ist die *Notiz*
|
||
geworden, mit kleinem Markdown, einer Werkzeugleiste und **Sofort-Ansicht**: Der
|
||
Text ist immer gesetzt zu sehen, roh ist nur die Zeile, in der die Schreibmarke
|
||
steht. Der Weg über `contenteditable` wurde verworfen — man müsste aus dem HTML,
|
||
das der Browser beim Tippen erzeugt, den Quelltext zurückraten, und ein Fehler
|
||
dabei kostet Text. Die Grenze zu InkNote steht trotz Formatierung: ein Text,
|
||
keine Liste von Notizen, keine Ordner, keine Suche.
|
||
|
||
**Die Abgrenzung ist hier wichtiger als die Technik:** InkNote gibt es schon.
|
||
Der Zettel darf **keine zweite Notiz-App** werden — kein Titel, keine Liste,
|
||
keine Ordner, keine Suche, keine Formatierung. Genau *ein* Textfeld, das man
|
||
im Vorbeigehen benutzt: Einkaufszettel, eine Nummer, ein Gedanke. Alles, was
|
||
länger lebt als ein Tag, gehört nach InkNote — ein Knopf „nach InkNote"
|
||
(einfach ein Link) wäre die ehrlichere Antwort als ein zweites Feld.
|
||
|
||
Reizvoll ist es aus demselben Grund wie das Bild-Widget: Es *ist* etwas, statt
|
||
etwas anzuzeigen. Und es braucht keine der Voraussetzungen, an denen die
|
||
anderen Widgets hingen.
|
||
|
||
Zu klären, wenn es soweit ist:
|
||
|
||
- **Wann wird gespeichert?** Nicht bei jedem Tastendruck — verzögert wie die
|
||
Einstellungen, plus beim Verlassen des Feldes. Sonst schreibt jede Taste die
|
||
JSON-Datei neu.
|
||
- **Länge begrenzen.** Ein Zettel, kein Dokument; ein paar tausend Zeichen
|
||
reichen, und der Server muss die Grenze durchsetzen, nicht das Formular.
|
||
- **Zwei offene Geräte überschreiben einander.** Ohne Konfliktbehandlung
|
||
gewinnt das zuletzt gespeicherte. Für einen Zettel ist das vertretbar — man
|
||
sollte es nur wissen und nicht später „Datenverlust" nennen.
|
||
- **In der HoneyBar?** Nur lesend, und auch das erst, wenn alles unter einer
|
||
Domain liegt — schreiben kann sie von einer fremden Site aus nicht.
|
||
|
||
### Das Wappen — ✅ gebaut (02.09.2026)
|
||
|
||
Aus dem `■` ist eine Pixelbiene geworden (Marcs Idee, 01.09.2026). Vier Anläufe:
|
||
einfarbig 12 × 12 (wirkte durch den angedeuteten Streifen wie ein Grinsen),
|
||
farbig 16 × 16 von vorn, als Kasten mit geraden Kanten, und schließlich die
|
||
**Seitenansicht** nach einem gedruckten Vorbild — braune Streifen, schwarze
|
||
Beine, Flügel mit Kerbe.
|
||
|
||
Was dabei hängen blieb, steht im [README](README.md): SVG statt PNG wegen der
|
||
fremden CSPs, gelb statt mitgefärbt, und die Zeichenfassung fürs System-Fenster.
|
||
Eine 3/4-Ansicht (gerechneter Würfel, 2:1) liegt in der Schublade — sie ist
|
||
unter 64 px unbrauchbar, taugt aber für ein großes Startbild.
|
||
|
||
### Kategorien für Apps — ✅ gebaut (12.09.2026)
|
||
|
||
Überschriften über den Apps, damit aus einer Liste eine Ordnung wird.
|
||
|
||
**In zwei Anläufen gebaut, und der zweite kam von Marc.** Zuerst war die Kategorie
|
||
ein Feld im App-Formular, und die Pfeile bekamen eine Sonderregel: Am Rand einer
|
||
Gruppe kategorisieren statt tauschen. Das funktionierte, war aber die Beschreibung
|
||
eines Modells und nicht das Modell selbst. Seine Frage — warum nicht einfach eine
|
||
Überschriftenzeile in der Liste, und was darunter steht, gehört dazu? — ist die
|
||
bessere Bedienung: Man sieht, was man sortiert, das Umhängen ergibt sich von
|
||
selbst, und **Umbenennen ist eine Zeile statt eines Feldes je App**. Genau das war
|
||
der Mangel der ersten Fassung.
|
||
|
||
**Gespeichert wird trotzdem als Feld an der App.** Die Überschrift gibt es nur im
|
||
Editor. Wäre sie ein Eintrag in der App-Liste, enthielte diese Zeilen ohne ID und
|
||
ohne Adresse, und jeder Leser müsste das wissen — Kacheln, Schublade,
|
||
Erreichbarkeitsprüfung, und vor allem die HoneyBar in fremden Apps, die gerade
|
||
erst auf das Nötigste getrimmt wurde. Der Preis: Eine Überschrift ohne Apps
|
||
darunter überlebt das Speichern nicht. Das ist vertretbar — eine Kategorie besteht
|
||
durch ihre Apps.
|
||
|
||
Eingesammelt wird **im Server**, beim Schreiben wie beim Lesen. Auch das war nicht
|
||
der erste Entwurf: Zuerst sortierte die Oberfläche und die HoneyBar setzte ihre
|
||
Überschriften beim Durchlaufen — prompt stand eine App ohne Kategorie in der
|
||
HoneyBar unter der letzten Überschrift und auf dem Schreibtisch ganz oben. Bei
|
||
zwei Lesern derselben Liste gehört die Reihenfolge dorthin, wo die Liste liegt.
|
||
|
||
Offen gelassen: Schreibtischsymbole bleiben flach (Ordner wären ein eigenes
|
||
Thema), und der App-Streifen der Leiste bekommt keine Überschriften — dort ist
|
||
kein Platz.
|
||
|
||
**Falls eine leere Kategorie doch bleiben soll**, ist das das Argument für eine
|
||
echte Kategorienliste im Server — dann aber als eigenes Feld neben `apps`, nicht
|
||
als Eintrag in ihr.
|
||
|
||
### Eigene App-Logos — verschoben aus 1.3 (29.08.2026)
|
||
|
||
**Beschlossen als Planung (25.08.2026), aber nicht als Nächstes.** Je App ein
|
||
Bild in HoneyOS hinterlegen, statt nur aus den eingebauten Glyphen zu wählen —
|
||
die Pixelglyphe bleibt der Rückfall, wenn keins da ist.
|
||
|
||
Das Logo gehört ausdrücklich **auch in die HoneyBar**, nicht nur auf den
|
||
Schreibtisch: Dort ist die Unterscheidung am nötigsten, weil die Knöpfe klein
|
||
sind und nebeneinanderstehen. Die Voraussetzung dafür — eine geteilte
|
||
Symbolquelle für beide Leisten — steht seit dem 29.08.2026 (1.3), es müsste nur
|
||
ein Bild an die Stelle des Rasters treten können.
|
||
|
||
**Warum es warten kann:** Mit acht Glyphen und vier Apps ist noch keine
|
||
Verwechslung in Sicht. Die Frage stellt sich, wenn zwei Dienste dieselbe Wolke
|
||
tragen; bis dahin erledigt der Untertitel in der Schublade die Unterscheidung.
|
||
|
||
**Warum es zusammen mit dem Bild-Widget zu bauen ist:** dieselbe Ablage,
|
||
dasselbe Ausliefern, dieselben Fallen — zusammen kostet es die Hälfte.
|
||
|
||
1. **Hochladen und ablegen** — HoneyOS speichert heute nur eine JSON-Datei.
|
||
Bilder heißt: ein Ordner unter `/data`, eine Größenbegrenzung, erlaubte
|
||
Typen (PNG, SVG, WebP), und SVG ist heikel — es kann Skripte enthalten und
|
||
darf deshalb nicht einfach durchgereicht werden.
|
||
2. **Ausliefern** — unter einer Adresse je App, mit einem Versionsanteil, damit
|
||
ein Austausch nicht im Cache hängen bleibt (Aether macht das beim Logo
|
||
schon so).
|
||
3. **In der HoneyBar anzeigen** — über die Site-Grenze hinweg ein `<img>` von
|
||
HoneyOS. Das geht ohne Sitzung, Bilder unterliegen der CORS-Regel nicht.
|
||
|
||
**Vorher zu klären:** Sollen Bilder in den Retro-Look eingepasst werden (auf
|
||
wenige Farben reduziert, hart gerastert) oder bunt bleiben? Ein Original-Logo
|
||
mit Farbverlauf neben Pixelglyphen sieht schnell nach Fremdkörper aus. Ein
|
||
Filter in der HoneyBar wäre billig zu haben und ließe sich abschalten.
|
||
|
||
### Widgets verschieben, Reihenfolge im Server — ✅ gebaut (31.08.2026)
|
||
|
||
Widgets per Ziehen umsortieren, die Reihenfolge liegt beim Nutzer auf dem
|
||
Server — also auf jedem Gerät gleich.
|
||
|
||
**Der Haken ist nicht das Ziehen, sondern die zwei Betriebsarten.** Im
|
||
Terminal-Modus stehen die Widgets in einer Spalte (eine Reihenfolge), im
|
||
Desktop-Modus als Schilder auf der Fläche (dort wären Koordinaten das
|
||
Natürliche). Eine gemeinsame Liste für beides ist die einfachere Zusage: eine
|
||
Reihenfolge, in beiden Ansichten dieselbe. Freie Plätze auf dem Schreibtisch
|
||
wären das schönere Ziel, aber dann liegen zwei Anordnungen im Server, und beim
|
||
Wechsel muss man sich entscheiden, welche gilt.
|
||
|
||
→ **Vorschlag: eine Liste, beide Ansichten folgen ihr.** Freie Plätze später,
|
||
falls sie je fehlen.
|
||
|
||
Am Handy: **Ziehen ist dort kein Standard** — HTML5-Drag löst per Berührung
|
||
nicht aus. Entweder Zeigerereignisse selbst behandeln (wie beim Fensterziehen
|
||
schon gebaut) oder am Handy Pfeiltasten statt Ziehen anbieten. Nicht vergessen:
|
||
Ohne das ist die Funktion am Handy schlicht nicht da.
|
||
|
||
Voraussetzung ist ein Widget-Verzeichnis — heute stehen Benutzer und Wetter
|
||
fest im HTML. Sinnvoll zusammen mit dem Widget-Rahmen (1.4) zu bauen, nicht
|
||
davor.
|
||
|
||
**Gebaut (31.08.2026), wie vorgeschlagen: eine Liste, beide Ansichten folgen
|
||
ihr.** Dazu ein Schalter je Widget — wer den Systemzustand nicht sehen will,
|
||
soll ihn abschalten können, ohne ihn nach unten zu schieben.
|
||
|
||
Beides steht in **einer** Einstellung: `widgets = "benutzer,notiz,-system,…"`,
|
||
das Minus heißt aus. Ein Feld statt zwei, weil beides zusammengehört: Ein
|
||
ausgeschaltetes Widget behält seinen Platz. Damit brauchte es weder einen neuen
|
||
Endpunkt noch eine neue Tabelle — die Einstellungen liegen ohnehin je Nutzer auf
|
||
dem Server.
|
||
|
||
Ziehen ist es nicht geworden, sondern **Pfeile** — aus demselben Grund wie bei
|
||
den Apps (1.3b): Am Handy löst HTML5-Drag per Berührung nicht aus, und die Liste
|
||
ist kurz. Freie Plätze auf dem Schreibtisch bleiben offen, falls sie je fehlen.
|
||
|
||
### Widgets in der HoneyBar selbst
|
||
|
||
Bisher sind Widgets als Fenster auf dem Schreibtisch gedacht. Der Schreibtisch
|
||
ist aber die Seite, die man am seltensten offen hat — die HoneyBar dagegen ist
|
||
überall. Naheliegend also: ein Knopf in der HoneyBar klappt dasselbe Widget als
|
||
kleines Feld auf, ohne die App zu verlassen.
|
||
|
||
Technisch ist das dieselbe Sache wie 1.4, nur ein zweites Zuhause für denselben
|
||
Inhalt: Der Rahmen muss dann drei Formen können — Fenster, Kachel, Aufklappfeld.
|
||
Das ist beim **Bauen** von 1.4 zu bedenken, hinterher wird es teuer.
|
||
|
||
Für Widgets, die nur sich selbst brauchen (Wetter, Bild, Uhr), ist das
|
||
geschenkt — sie fragen HoneyOS, nicht die App.
|
||
|
||
---
|
||
|
||
## 3 · Ausbau
|
||
|
||
### 3.x HoneyOS selbst als PWA — zurückgestellt (30.08.2026)
|
||
|
||
Heute ist HoneyOS eine Website: Es hat `theme-color`, aber kein Manifest, kein
|
||
Symbol und keinen Service Worker — installierbar ist es damit nicht. Am Handy
|
||
landet man also im Browser mit Adressleiste, während Aether und InkNote als
|
||
eigene Apps danebenliegen. Das ist genau der Bruch, den das Ganze eigentlich
|
||
verhindern soll: Der Schreibtisch sollte sich am wenigsten nach Website
|
||
anfühlen.
|
||
|
||
Was dazugehört, klein bis groß:
|
||
|
||
1. **Manifest** — Name, Startadresse, `display: standalone`, Hintergrund- und
|
||
Themenfarbe. Die Farben sollten der eingestellten Röhre folgen; sie liegen
|
||
im Server, das Manifest kann also erzeugt statt fest hinterlegt werden
|
||
(Aether macht das beim Symbol schon so).
|
||
2. **Symbol** — ein Pixelglyph in 192 und 512 px, im Amber-Look. Passt zum
|
||
Rest und ist ohne fremde Werkzeuge zu machen.
|
||
3. **Service Worker** — nötig für die Installierbarkeit. Hier ist zu
|
||
entscheiden, was er überhaupt soll (siehe unten).
|
||
|
||
**Die eigentliche Frage ist der Offline-Fall.** HoneyOS zeigt fremde Apps und
|
||
später deren Daten — ohne Netz gibt es davon nichts. Ein Schreibtisch, der
|
||
offline mit leeren Kacheln dasteht, ist schlimmer als ein ehrlicher Hinweis.
|
||
Sinnvoll wäre: Oberfläche und App-Liste im Cache, damit man die Symbole sieht
|
||
und antippen kann, und ein deutlicher Vermerk „ohne Verbindung". Widgets
|
||
bleiben leer, statt Altes von gestern als aktuell auszugeben.
|
||
|
||
**Aus dem Aether-Debakel gelernt und hier von Anfang an zu beachten:** Ein
|
||
Eintrag im Cache ist eine ganze Antwort **samt Kopfzeilen**. Wird die Startseite
|
||
vorab abgelegt, friert damit auch ihre CSP ein — und eine Änderung an der
|
||
Konfiguration erreicht den Browser nie wieder. Also Navigationen Netz zuerst,
|
||
Cache nur als Rückfall.
|
||
|
||
**Zurückgestellt (Marc, 30.08.2026): erst die Hauptfunktionen, dann das
|
||
Gehäuse.** Die PWA ist mehr Gefühl als Funktion — sie macht nichts möglich, was
|
||
heute nicht ginge, während der Widget-Rahmen darunter alles Weitere trägt.
|
||
|
||
**Reihenfolge:** Erst umziehen (siehe unten), dann installierbar machen. Ein
|
||
Ursprungswechsel macht aus einer installierten PWA eine fremde App — wer
|
||
vorher installiert, installiert zweimal.
|
||
|
||
|
||
- Welche Widgets wo liegen, **pro Nutzer im Server** merken — die Einstellungen
|
||
liegen ohnehin schon dort, das ist eine Erweiterung, kein Neubau
|
||
- Widgets im Terminal-Modus
|
||
- Suche über alle Apps hinweg (erst sinnvoll, wenn mehrere APIs angebunden sind)
|
||
- Symbole frei auf dem Schreibtisch ablegen statt in einer Spalte
|
||
- Fensterpositionen überleben den Moduswechsel
|
||
|
||
---
|
||
|
||
## Offene Entscheidungen
|
||
|
||
### Wie sichtbar darf die HoneyBar sein?
|
||
|
||
**Teilweise beantwortet:** „ausblenden" heißt seit dem 24.08. „einklappen" — es
|
||
bleibt ein 3 px hoher Strich am oberen Rand stehen, ein Klick holt die HoneyBar
|
||
zurück. Vorher war das eine Einbahnstraße: wer einmal ausgeblendet hatte, kam
|
||
nur über die Entwicklerkonsole wieder heran. `?honeybar=1` an der Adresse
|
||
funktioniert als Notausgang.
|
||
|
||
Damit ist der schmale Streifen technisch schon da. Offen bleibt, ob er am Handy
|
||
der **Standard** sein soll.
|
||
|
||
|
||
**Der Zwiespalt:** Die App lädt die HoneyBar bei *jedem* Aufruf nach, also ist sie
|
||
immer da — auch wenn man die Cloud einfach direkt öffnet und mit
|
||
HoneyOS gerade nichts zu tun hat. 32 px, dauerhaft, in einer App, die man auch
|
||
für sich allein benutzt. Am Handy in einer installierten PWA wiegt das schwerer
|
||
als am großen Schirm.
|
||
|
||
Möglichkeiten, von viel nach wenig Platz:
|
||
|
||
| | Platz | Gefühl |
|
||
|---|---|---|
|
||
| volle HoneyBar | 32 px immer | am ehesten „OS" |
|
||
| schmaler Streifen, klappt bei Berührung auf | 4 px | immer erreichbar, nie im Weg |
|
||
| nur ein Eckknopf | ~0 | praktisch, aber keine HoneyBar mehr |
|
||
| `data-push="none"` (liegt darüber) | 0 im Layout | verdeckt die Kopfzeile der App |
|
||
| ganz aus | 0 | schon eingebaut („honeybar ausblenden") |
|
||
|
||
→ **Vorschlag: am Rechner die volle HoneyBar, am Handy der schmale Streifen.**
|
||
Als Einstellung, nicht fest verdrahtet — dann lässt sich die Meinung ändern,
|
||
ohne etwas neu zu bauen.
|
||
|
||
**Wichtig für die Entscheidung:** Das ist keine Einbahnstraße. In den Apps steht
|
||
nur ein Ursprung in der `.env`; das Verhalten der HoneyBar liegt zentral in HoneyOS. Aussehen,
|
||
Höhe, Auto-Verstecken, Abschaffen — alles eine Änderung an einer Stelle, ohne
|
||
Aether oder InkNote neu zu bauen.
|
||
|
||
→ **Erst in einer App einbauen, eine Woche benutzen, dann entscheiden.** Nicht
|
||
in beide gleichzeitig.
|
||
|
||
### Token-Schlüssel behalten oder löschen? — ✅ gelöscht (29.08.2026)
|
||
|
||
Mitsamt dem Feld „Wer-bin-ich". Die Begründung von damals hat sich gehalten: Es
|
||
brachte allein den Anzeigenamen, wirkte an zwei Stellen unterschiedlich, und ein
|
||
Token an eine fremde Adresse zu schicken war eine Falle, die niemand braucht.
|
||
|
||
Den Namen zeigt jetzt das Benutzer-Widget auf dem Schreibtisch, aus der
|
||
HoneyOS-Anmeldung — dort, wo er hingehört, und ohne dass eine App etwas dafür
|
||
tun muss.
|
||
|
||
|
||
### Persönliche Apps je Nutzer?
|
||
|
||
Heute gilt die App-Liste für alle — bewusst so, siehe „Bewusst nicht geplant".
|
||
Denkbar wäre daneben eine kleine eigene Liste je Konto.
|
||
|
||
**Was dagegen spricht, ist nicht der Aufwand, sondern eine harte Grenze:** Auf
|
||
dem Schreibtisch ginge es sofort (dort ist man angemeldet). In der HoneyBar einer
|
||
fremden App ginge es **nicht**, solange HoneyOS auf einer anderen Site liegt als
|
||
die App — der Browser schickt die HoneyOS-Sitzung dann nicht mit, und der
|
||
Schlüssel für die App-Liste weiß nicht, wer schaut. Die HoneyBar zeigte also die
|
||
gemeinsamen Apps, der Schreibtisch zusätzlich die eigenen. Zwei verschiedene
|
||
Listen an zwei Stellen ist schlechter als eine.
|
||
|
||
**Liegt alles unter derselben Domain**, fällt die Grenze weg: die Sitzung wird
|
||
mitgeschickt, die HoneyBar weiß, wer da ist. **Das ist seit dem 29.08.2026 der
|
||
Fall** — Aether liegt unter `cloud.honeyos.duckdns.org`, HoneyOS unter
|
||
`honeyos.duckdns.org`, und `/api/apps` sieht erst nach der Sitzung und dann
|
||
erst nach dem Schlüssel. Persönliche Apps sind damit machbar geworden.
|
||
|
||
→ **Vorschlag: zurückstellen, bis es mehr als ein Konto gibt.** Bei einer
|
||
Person ist „persönlich" und „für alle" dasselbe. Der Weg ist aber offen und
|
||
sollte es bleiben: nichts einbauen, was von einer einzigen gemeinsamen Liste
|
||
ausgeht.
|
||
|
||
### Wie weit soll das Aussehen der HoneyBar einstellbar sein?
|
||
|
||
Röhre, Leuchten und Scanlines kommen schon aus HoneyOS (1.1). Offen ist, was
|
||
darüber hinaus in die Einstellungen gehört: Höhe, Schriftgröße, Position (oben
|
||
oder unten), ob der Name der App danebensteht.
|
||
|
||
**Die Versuchung ist, alles einstellbar zu machen.** Jede Einstellung ist aber
|
||
eine Verzweigung, die für immer funktionieren muss. Sinnvoll wäre der Schnitt:
|
||
Farbe und Verhalten ja (das ändert man wirklich), Maße nein (die stellt man
|
||
einmal ein und nie wieder — dann kann es auch gleich richtig fest stehen).
|
||
|
||
### Alle Apps unter eine Domain ziehen?
|
||
|
||
`honeyos.duckdns.org` als Dach, die Apps darunter (`cloud.honeyos.duckdns.org`
|
||
und so fort). Am 25.08.2026 gemessen: Dann schickt der Browser die
|
||
HoneyOS-Sitzung an die HoneyBar mit, über eine fremde Site hinweg nicht.
|
||
|
||
Damit möglich, was heute nicht geht: **mehrere Nutzer mit eigenem Aussehen**,
|
||
persönliche Apps, der Name in der HoneyBar. Und `HONEYBAR_KEY` samt CORS-Ausnahme
|
||
wird überflüssig — der Umzug räumt Komplexität weg, statt welche zu schaffen.
|
||
|
||
Kosten sind einmalig, aber real: Redirect-URIs in PocketID, `PUBLIC_URL` und
|
||
die Office-Adressen in Aether, InkNotes Token liegt pro Domain im localStorage
|
||
(alle werden abgemeldet), Pangolin-Ressourcen, Zertifikate, PWAs einmal neu
|
||
installieren, alte Freigabelinks per Weiterleitung am Leben halten.
|
||
|
||
→ **Lohnt sich, sobald mehr als eine Person zugreift.** Vorher ist es
|
||
Geschmackssache, danach ist es die einzige Möglichkeit.
|
||
|
||
### Aether und InkNote auch über den HoneyBar-Proxy? — ❌ nein (29.08.2026)
|
||
|
||
Verlockend war: **ein** Mechanismus statt zwei, und Aether verlöre den kleinen
|
||
Rest HoneyBar-Code (`honeybar.ts`, zwei Felder in der öffentlichen
|
||
Konfiguration, ein CSP-Eintrag, zwei `.env`-Zeilen).
|
||
|
||
**Nicht der Aufwand spricht dagegen, sondern zwei andere Dinge:**
|
||
|
||
- **Ein Ausfallpunkt vor der Cloud.** Fällt der Proxy vor BentoPDF aus, dreht
|
||
man eine Stunde keine PDFs. Fällt er vor Aether aus, kommt man an die
|
||
Rechnungen nicht heran. Derselbe Ausfall, ein anderer Preis.
|
||
- **Der Umweg trägt alles mit:** Uploads, WebDAV, Collabora, WebSockets. Und
|
||
`Accept-Encoding ""` — nötig, weil im gzip-Strom nichts zu ersetzen ist —
|
||
schaltet die Kompression für die ganze `location` ab. Ohne `gzip on;` im
|
||
Proxy kämen Aethers Bundles unkomprimiert am Handy an.
|
||
|
||
**Und der Teil, der ohnehin bliebe:** `--honeybar-h` steht an acht Stellen in
|
||
Aether (Sidebar, SharePage, FilePreview, OfficeEditor). Das Einhängen kann weg,
|
||
die Layout-Rechnung nicht. In HoneyOS ginge sie nur, indem dort Aethers interne
|
||
Klassennamen stünden — ein Umbau in Aether zerlegte das Layout dann still. In
|
||
Aether kostet sie nichts: Ohne HoneyBar steht die Variable auf `0px`.
|
||
|
||
→ **Eigene Apps bauen die HoneyBar ein, fremde bekommen den Proxy.** Der Proxy
|
||
ist nicht der bessere Weg, sondern der für den Fall, dass der bessere verwehrt
|
||
ist.
|
||
|
||
### Ideen hier oder als Gitea-Issues?
|
||
|
||
Vorerst hier. Issues erst, wenn etwas konkret als Nächstes drankommt und der
|
||
Fortschritt verfolgt werden soll — dann eines pro Punkt, mit Verweis hierher.
|
||
|
||
---
|
||
|
||
## Bewusst nicht geplant
|
||
|
||
Damit es nicht alle paar Monate neu diskutiert wird:
|
||
|
||
- **Apps in iframes einbetten.** Aether (`X-Frame-Options: DENY`) und InkNote
|
||
(`helmet()`) verbieten es beide von sich aus, und das aus gutem Grund. Es
|
||
würde Clickjacking-Schutz, PWA-Installierbarkeit und InkNotes Offline-Betrieb
|
||
kosten. Widgets zeigen **Daten**, die Apps bleiben in ihrem eigenen Tab.
|
||
- **Nichts über die HoneyBar wird beim Bauen der Apps eingebacken.** Die Adresse
|
||
stand einmal fest in Aethers `index.html`. Das war aus zwei Gründen falsch:
|
||
Ein fertiges Abbild lässt sich dann nicht über die `.env` umziehen, und der
|
||
Service Worker der PWA hält die alte `index.html` im Cache, so dass eine
|
||
Änderung selbst nach dem Neubau noch nicht ankommt. Ursprung und Schlüssel
|
||
holt sich die App deshalb zur Laufzeit vom eigenen Server und hängt das
|
||
Skript selbst ein.
|
||
- **Das Skript wird mit `defer` eingebunden.** Ohne wartet der Seitenaufbau der
|
||
App darauf. Ist HoneyOS langsam oder aus, dürfte eine Zierleiste den Start von
|
||
Aether nicht verzögern.
|
||
- **Der Weg aufs Handy bleibt ein normaler Link.** Android öffnet die
|
||
installierte PWA, wenn die Adresse in ihren Bereich fällt — das funktioniert
|
||
heute und darf nicht durch JavaScript-Navigation oder Rahmen kaputtgemacht
|
||
werden.
|
||
- **Keine Widgets, die Daten aus Aether oder InkNote holen** (gestrichen
|
||
29.08.2026). Dafür standen einmal zwei Punkte im Fundament: CORS in Aether
|
||
und eine Cookie-Sitzung für InkNote. Beides ist nicht mehr gewollt — der Weg
|
||
über den HoneyBar-Proxy zeigt HoneyOS in den Apps, statt die Apps in HoneyOS
|
||
nachzubauen.
|
||
- **HoneyOS speichert nichts aus den Apps.** Keine Dateien, keine Notizen,
|
||
keine Kopien — es zeigt, was die Apps hergeben, und hört da auf. **Was der
|
||
Schreibtisch selbst hervorbringt, ist etwas anderes** (präzisiert 29.08.2026,
|
||
als Bild- und Zettel-Widget dazukamen): ein hochgeladenes Bild, ein Zettel,
|
||
ein App-Logo. Die Grenze verläuft nicht bei „Inhalt", sondern bei
|
||
**Zweitkopie**: Nichts, was in einer App lebt, darf hier ein zweites Zuhause
|
||
bekommen.
|
||
- **Keine Rechteverwaltung.** Die App-Liste gilt für alle Angemeldeten. Für eine
|
||
Handvoll eigene Konten gewollt; wäre es je mehr, müsste das neu gedacht werden.
|