Files
UmbrelApps/Docs/Plannen/Masterplannen/Publicatie-Gate.PLAN.md
T

108 lines
7.1 KiB
Markdown
Raw Normal View History

2026-08-25 16:27:57 +02:00
# Publicatie-Gate - masterplan
> **App: Electrum Gate.** Er is ook een **Publicatie-Relay**; inleveren bij de officiële store is per app
> en de twee plannen delen alleen de eisen, niet het werk. Hernoemd op 25-08-2026, toen Evolu Relay bij
> deze store kwam; daarvoor heette dit plan **Publicatie**.
## 1. Waarom dit een eigen plan is
Op 20-08-2026 zei de gebruiker dat hij de app uiteindelijk als standaard-app voor Umbrel wil publiceren.
Dat verandert wat "af" betekent. Tot nu toe was de maatstaf "hij werkt op deze Umbrel", en de app haalt die
sinds diezelfde dag. De maatstaf van dit plan is een andere: **iemand anders keurt het pakket goed**, tegen
eisen die niet van ons zijn.
Daarom staat dit los van het plan **Appstore**. Dat plan gaat over de app als umbrelOS-app en over de
eigen community store, en die twee doelen zijn haalbaar zonder dat er ooit iemand meekijkt. Twee taken uit
dat plan verhuizen hier inhoudelijk naartoe (de images pinnen, de repo hernoemen); ze blijven daar staan
tot dit plan actief wordt, want een taak op twee plekken loopt uit elkaar.
## 2. Wat er af is
Niet alles hoeft nog te gebeuren. Bij het uitzoeken op 20-08-2026 bleek een deel al goed, en dat is geen
toeval: de eisen zijn dezelfde als die van de spec die dit project vanaf 18-08 als naslag bijhoudt.
- `app_proxy` met alleen omgevingsvariabelen, geen eigen poorten;
- de umbrelOS-inlog staat aan en er is geen `PROXY_AUTH_WHITELIST`, dus ook het API-pad zit erachter;
- `gallery: []`, wat voor een nieuw pakket precies goed is;
- alle gebruikersstaat onder `${APP_DATA_DIR}/data/...`, met een `.gitkeep` per map (sinds 0.0.9);
- de manifestvelden in de voorgeschreven volgorde, met een toets erop, en `icon` als laatste regel zodat
dat de enige is die bij inlevering weg hoeft (20-08-2026);
- niets wordt buiten `${APP_DATA_DIR}` geschreven;
- geen Docker-socket, geen privileged container, geen host-netwerk.
## 3. Wat er nog moet, in volgorde van moeilijkheid
1. **De images pinnen.** `python:3-alpine` en `nginx:alpine` staan kaal in de compose. Het moet
`repo:versie@sha256:<digest>` worden, met `linux/amd64` én `linux/arm64` in de manifest-lijst. Dit kan
alleen op de Umbrel en het is de grootste openstaande eis. Bijkomend voordeel dat losstaat van
publicatie: een gepinde image maakt de app reproduceerbaar, en dat was al een doel van het plan
**Appstore**, fase 4.
**Niet nu doen.** Besloten met de gebruiker op 20-08-2026: zolang er nog gedraaid, verbeterd en getest
wordt, kost een pin alleen werk. Elke keer dat je een nieuwere basisimage wilt, moet je opnieuw pinnen,
en tot de inlevering levert het niets op wat er nu ontbreekt.
De commando's staan in [Images-pinnen.md](../../Referenties/Images-pinnen.md), met de drie dingen die
erbij stil mis kunnen gaan: een tag die meebeweegt, de digest van één architectuur in plaats van die van
de index, en de aanname dat pinnen een eenmalige handeling is. Werkwijze: de gebruiker draait het
commando op de Umbrel en plakt de uitvoer, waarna de pin in `docker-compose.yml` gaat. Dat is een commit
met een versieverhoging, want de compose wordt daadwerkelijk uitgerold.
2. **Het app-id kaal maken.** `whatsnext-electrum-gate` wordt `electrum-gate`, en de mapnaam mee. Het
voorvoegsel is een eis van een community store, niet van de officiële. Let op: een id-wijziging is voor
umbrelOS een andere app, dus dat is opnieuw installeren. De gebruiker heeft daar op 20-08-2026 geen
bezwaar tegen.
3. **`icon` weghalen**, en dat kan pas op het moment van inleveren: zolang dit een eigen store is moet het
icoon er juist in. De volgorde zelf is op 20-08-2026 al goed gezet, en het icoon staat als laatste regel
zodat dit één verwijdering is. Wat er dan ook nog moet: `submission` naar de PR-URL laten wijzen.
4. **Drie tot vijf schermafbeeldingen aanleveren.** Niet zelf opmaken: het store-team maakt de
promo-afbeeldingen (achtergrond met het plaatje erop) en daarom zien ze er allemaal hetzelfde uit. Wie
het wél zelf wil, levert 1440 bij 900 in PNG. Details en de vorm voor een eigen store staan in
[Umbrel-appstore-spec.md](../../Referenties/Umbrel-appstore-spec.md).
Wat er op moet: het dashboard met echte gegevens, de certificaatkeuze open met meerdere kandidaten, en
de verbindingsregels per wallet. Dat laatste is waar iemand voor komt en het eerste is het bewijs dat het
werkt. **Met plaatsvervangende hostnamen**, want een echte schermafbeelding van deze machine zet veertien
subdomeinen van de gebruiker op een publieke winkelpagina.
5. **De repo verhuizen naar een publieke plek** met de URL-velden mee. Staat nu als taak in **Appstore**
fase 7, en is hier een voorwaarde: `repo`, `website`, `support` en `submission` moeten naar iets wijzen
dat een reviewer kan openen.
6. **De herstart-controle afronden.** Geen formele eis, maar wel de enige controle die dit project nooit
heeft kunnen doen, en het is een slecht idee om iets in te leveren waarvan je dat niet weet. Zie
**Appstore**, open punt 7.
## 3b. Bestaat dit al, en wat zeggen we in de PR
Uitgezocht op 20-08-2026, want dat is de eerste vraag die een reviewer stelt. Antwoord: **nee**, en de
onderbouwing is scherper dan "ik heb niets gevonden". De reverse proxies die al in de store staan, Nginx
Proxy Manager op kop, kunnen een certificaat wel op HTTP zetten maar niet op een gewone TCP-poort; daar
staat bij NPM een openstaand verzoek voor. Een Electrum-wallet praat geen HTTP, dus die apps lossen dit
niet op. Met bronnen in
[Vergelijkbare-apps.md](../../Referenties/Vergelijkbare-apps.md).
Die ene zin is de kern van de PR-tekst. Reken er daarnaast op dat er gevraagd wordt waarom dit geen VPN of
tunnel is. Het antwoord staat in datzelfde document en is **geen** afweging maar een verschil in soort: een
tunneldienst zit in het pad en termineert het verkeer daar, een mesh-VPN vraagt een account, een
coördinatieserver en een client op elk apparaat, en deze app vraagt geen van beide. De Engelse formulering
staat er ook, en sinds 0.0.11 in de `description` van het manifest.
## 4. Het risico dat niet in een checklist staat
De app leest de certificaatmap van een ándere app: `${UMBREL_ROOT}/app-data/zoraxy/...` staat alleen-lezen
gemount. Dat is toegestaan (de regel gaat over schrijven), maar het is het meest ongebruikelijke aan dit
pakket en het is precies het soort ding waar een review over valt.
Wat het antwoord daarop wordt, is nog niet beslist. Denkrichtingen, niet in volgorde:
- laten staan en uitleggen. Het is alleen-lezen, het is de kern van wat de app doet, en het alternatief is
dat iedere gebruiker zijn certificaat met de hand kopieert;
- het uploadpad uit 0.0.7 is er al en werkt zonder die mount. De app is dus bruikbaar zonder Zoraxy, en dat
maakt de mount een gemak in plaats van een voorwaarde;
- vragen vóór het inleveren in plaats van erna. Een issue in `umbrel-apps` kost minder dan een afgewezen PR.
## 5. Onderbouwing
De eisen staan niet in de README van `umbrel-apps` maar in de skill-documentatie waar die naar verwijst.
Met bron per regel, plus wat deze app er nu van doet, in
[Umbrel-appstore-spec.md](../../Referenties/Umbrel-appstore-spec.md).