Eén app store, twee apps

umbrelOS leest per store één repo, dus twee apps in twee repo's kan niet. Deze
repo is de store en bevat vanaf nu Electrum Gate en het werk aan Evolu Relay.
Opgezet als verse repo op verzoek van de gebruiker: de historie van ElectrumTLS
en van EvoluRelay komt niet mee.

Dat heeft één gevolg dat verder gaat dan opruimen. In de historie van
ElectrumTLS staat het domein van de gebruiker en het certificaatpad, van vóór de
opschoning van 19-08. Die komt hier niet in. Zolang die repo op de Git-server
blijft staan verandert dat niets, dus het weghalen ervan is het laatste stuk van
open punt 3 van het plan Appstore, en geen bijzaak.

De store zelf hoefde niet te veranderen: store-id whatsnext, en dus blijft het
app-id whatsnext-electrum-gate. Dat hangt aan het store-id en niet aan de URL,
dus voor umbrelOS is dit dezelfde app in een andere store. Dat de store op 19-08
naar de maker genoemd werd in plaats van naar deze ene app, betaalt zich hier
uit.

Wat de documentatie betreft is dit één wortel voor beide apps, en dat was de
reden om samen te voegen en niet de prijs ervan: de appstore-spec, het pinnen
van images en de werkwijze golden al voor allebei en stonden in twee repo's naast
elkaar. De kruisverwijzing die daarvoor nodig was (Referenties/Umbrel-appstore.md
in de oude EvoluRelay-repo) is verdwenen; wat daarin stond over de plekken waar
de relay een ander geval is, staat nu als ontwerp in het masterplan Umbrelapp §4.

Botsende namen kregen een achtervoegsel met de app, en alleen die: Publicatie
werd Publicatie-Gate en Publicatie-Relay, CHANGELOG.md werd
CHANGELOG-electrum-gate.md. Proefopstelling kreeg 007, tussen de twee bestaande
nummers, zodat de bovenkant van de reeks op tier-orde blijft staan.
CONTINUE_HERE.md heeft een kolom App, maar de tiers lopen over beide apps heen:
er is één volgorde van werken.

Electrum Gate gaat naar 0.0.15, want website, repo, support, submission en icon
wijzen nu naar UmbrelApps en zonder versieverhoging rolt dat niet uit. De release
notes leggen aan de gebruiker uit dat hij de store opnieuw moet toevoegen. Of een
geïnstalleerde app een wisseling van store-URL overleeft is nog steeds niet
uitgezocht; dat blijkt bij het omzetten.

Twee dingen in de plannen van Electrum Gate waren door deze verhuizing niet meer
waar en zijn bijgewerkt: de taak "de repo hernoemen" in fase 7 is afgevinkt, en
de repo-vorm in PLAN.md §4a toonde nog de store-id electrumtls, die al sinds
fase 7 achterhaald was.

Tests: 39 goed 0 fout en 54 goed 0 fout, niets overgeslagen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-25 16:27:57 +02:00
co-authored by Claude Opus 5
commit 67ed9b603b
45 changed files with 8652 additions and 0 deletions
@@ -0,0 +1,62 @@
# Plan: Trezor Suite Sync als Umbrel App
## Status quo (onderzocht 25 aug 2026)
- Trezor's custom-sync-server heet **Evolu Relay**, onderdeel van de repo `trezor/trezor-suite-sync`.
- De repo bevat twee services: **evolu-relay** (poort 4000, de eigenlijke sync-relay) en **quota-manager** (poort 4001, betaal/quota-server) plus een **Postgres**-database.
- Er bestaat een `Dockerfile` en `docker-compose.yaml` in de repo — dus containeriseren is al gedeeltelijk gedaan door Trezor zelf.
- **Geen bestaande Umbrel-app**: niet in de officiële store (`getumbrel/umbrel-apps`), en ik heb geen relevante custom store gevonden die 'm aanbiedt.
- Conclusie: je zou de eerste zijn. Dat is haalbaar, want Umbrel-apps zijn in de kern "een `umbrel-app.yml` manifest + een `docker-compose.yml`" bovenop een al bestaande Docker-gebaseerde app.
## Doel
Een installeerbare Umbrel-app die de Evolu Relay (en evt. quota-manager) draait, zodat je in Trezor Suite bij "Custom server" een lokale/eigen URL kunt invullen die naar je Umbrel wijst.
## Belangrijke open vraag eerst
De quota-manager lijkt bedoeld voor **Trezor's eigen betaalde/quota-gebaseerde hosting** (het noemt een "Payment Server" en Notion API-spec). Voor puur privégebruik op je eigen Umbrel heb je waarschijnlijk **alleen de evolu-relay** nodig, zonder quota-manager. Dit moet je bevestigen door de `.env.sample` en broncode door te nemen — mogelijk verwacht de relay wél een werkende quota-manager-verbinding om te draaien. Zet dit als eerste stap in je proof-of-concept.
## Stap 1 — Proof of concept (lokaal, buiten Umbrel om)
1. Clone `trezor/trezor-suite-sync`.
2. Draai `docker compose up` zoals in de README, met alleen Postgres + evolu-relay (probeer quota-manager eerst weg te laten).
3. Test of Trezor Suite (desktop) succesvol labels kan syncen naar `http://<jouw-ip>:4000`.
4. Documenteer welke environment variables daadwerkelijk nodig zijn (uit `.env.sample`).
5. **Blocker-check:** als de relay hard afhankelijk blijkt van de quota-manager, moet die ook mee gepakketteerd worden.
## Stap 2 — Umbrel App Framework structuur opzetten
Volgens `getumbrel/umbrel-apps` heeft elke app een vaste structuur:
```
trezor-suite-sync/
├── umbrel-app.yml # manifest: naam, versie, poort, categorie, beschrijving
├── docker-compose.yml # services, aangepast voor Umbrel's netwerkconventies
└── exports.sh (optioneel) # env vars die andere apps kunnen gebruiken
```
Aandachtspunten bij het omzetten van Trezor's eigen `docker-compose.yaml`:
- Alle services moeten achter Umbrel's **`app_proxy`** draaien (voor routing/auth), tenzij je zelf auth afhandelt (zoals bv. Gitea/Budibase doen met `PROXY_AUTH_ADD: "false"`).
- Poorten mogen niet botsen met andere geïnstalleerde apps — kies een vast, uniek poortnummer.
- Data (Postgres-volumes) moet in Umbrel's `${APP_DATA_DIR}`-conventie staan zodat backups/updates werken.
- Vervang eventuele Kubernetes-specifieke config (`.k8s/` map) — die is niet relevant voor Umbrel, puur Docker Compose telt.
## Stap 3 — HTTPS / bereikbaarheid van buitenaf
Trezor Suite (desktop/mobiel, ook onderweg) moet de relay kunnen bereiken:
- **Alleen thuisnetwerk:** lokaal IP + poort volstaat, geen HTTPS nodig als je Suite ook alleen thuis gebruikt.
- **Ook buitenshuis:** dan heb je een manier nodig om je Umbrel veilig van buitenaf te bereiken — bijvoorbeeld via **Tailscale** (Umbrel heeft hier al een officiële app voor, zoals ook bij hun Nostr-relay-app wordt geadviseerd) of via een reverse proxy met een eigen domein + TLS-certificaat.
- Aanbevolen aanpak: begin met Tailscale, dat is de weg van de minste weerstand en vermijdt dat je zelf poorten moet open zetten op je router.
## Stap 4 — Testen
- Test op echte hardware: Raspberry Pi 5, x86-systeem, of Umbrel Home (zoals Umbrel's eigen testrichtlijnen voorschrijven).
- Test het volledige label-sync-scenario: label toevoegen op device A, checken of het verschijnt op device B na sync.
- Test update-/herstart-gedrag: overleeft de Postgres-data een app-herstart of Umbrel-OS-update?
## Stap 5 — Distributie: officieel vs. eigen store
| Optie | Voor | Nadeel |
|---|---|---|
| **PR naar `getumbrel/umbrel-apps`** | Bereikt alle Umbrel-gebruikers, officieel gereviewd | Moet aan Umbrel's kwaliteitseisen voldoen, review kan lang duren, mogelijk willen ze afstemming met Trezor zelf |
| **Eigen custom app store** (zoals `dentropy/dentropys-umbrel-appstore`) | Snel live, volledige controle | Alleen bereikbaar via handmatige CLI-toevoeging (`sudo ~/umbrel/scripts/repo add <url>`), kleiner bereik |
**Advies:** begin met een eigen custom store/repo voor je eigen gebruik en testen. Als het stabiel werkt, overweeg een PR naar de officiële store — lees eerst `AGENTS.md` in `getumbrel/umbrel-apps` voor de exacte richtlijnen.
## Risico's / dingen om in de gaten te houden
- Trezor kan de relay-architectuur wijzigen (het is een vrij nieuw, actief project — laatste release v0.1.8, april 2026).
- Quota-manager suggereert mogelijk een businessmodel rond gehoste sync; zelf-hosten omzeilt dat, maar controleer of er geen impliciete afhankelijkheden zijn (bv. licenties, rate-limits ingebakken in de relay-code).
- Data is end-to-end versleuteld volgens Trezor (client-side), dus zelf-hosten van de relay verandert niets aan de privacy-garanties — het haalt alleen Trezor's eigen server uit de vergelijking.
## Volgende concrete actie
Begin met **Stap 1**: lokaal draaien zonder Umbrel, en uitzoeken of quota-manager verplicht is. Dat bepaalt of dit een simpel 1-service-pakket wordt of een 3-service-stack (relay + quota-manager + postgres).