- Nieuw core/categories.py: zeventien categorieen, elk met naam (nl/en), kleur
en pictogram. Kleuren zijn middentonen die in licht en donker leesbaar zijn;
de interface gebruikt ze als tekstkleur op een doorzichtige variant.
- Alle 96 apps ingedeeld via metadata.categories. Een app mag in meerdere
categorieen zitten; 39 apps doen dat (Frigate onder domotica en media,
Immich onder fotos en opslag, Kavita onder media en documenten).
- Apps uit externe repos geven geen categorieen op; die worden afgeleid uit
tags en omschrijving, zodat ook zij een kleur en een plek in het filter
krijgen.
- App store: gekleurde categoriebalk met aantallen, klikbare badges per app,
werkt naast het bestaande zoekveld en de tagfilters.
- Stackslijst: dezelfde balk met alleen de categorieen die je draait, gekleurde
rand per kaart en klikbare badges.
- Nieuw /api/categories geeft de definities met kleur, zodat interface en
backend dezelfde kleur voor dezelfde categorie gebruiken. /api/stacks geeft
de categorieen mee; een stack van voor deze versie valt terug op "overig"
in plaats van kleurloos te blijven.
- Tests: elke app heeft geldige categorieen, kleuren zijn uniek, en er staat
geen categorie in het filter zonder apps.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
Apps onderling verbinden:
- Elke stack draaide als eigen compose-project met een eigen netwerk, waardoor
stacks elkaar niet op naam konden bereiken. Bij installeren staat nu
"Verbinden met andere apps" aan: de stack komt op een gedeeld bridge-netwerk
(SHARED_NETWORK, standaard "serverup") dat op aanvraag wordt aangemaakt.
- compose_transform.add_shared_network() hangt elke service eraan en laat
bestaande netwerken staan, dus het werkt samen met een macvlan-adres.
- Nieuw /api/apps/connectable geeft de geinstalleerde apps met hun
containernamen, zodat de installatiemodal kan laten kiezen.
Kiezen in plaats van typen:
- Een veld met "connect": {"app": "mosquitto", "scheme": "mqtt", "port": 1883}
toont een keuzelijst met wat er al draait, met handmatig invullen als
terugval. Toegepast op zigbee2mqtt -> mosquitto en open-webui -> ollama.
- Is de doel-app nog niet geinstalleerd, dan zegt het veld dat.
Uitleg per instelling:
- Info-icoon per veld opent een blok met de volledige uitleg plus de
standaardwaarde. Uitgeschreven voor de instellingen die de meeste vragen
oproepen (downloadmap vs mediamap, shm_size bij frigate, poort 80 bij caddy,
PUID bij de arr-stack, GPU bij ollama, publiek adres bij wg-easy).
Geavanceerde opties:
- advanced: true op een veld of groep zet het achter een uitklapblok met
teller. Toegepast op wachtwoorden, PUID/PGID, USB-paden en bewaartermijnen
van 28 apps.
- Test bewaakt dat elke app zichtbare velden overhoudt en dat koppelvelden naar
een bestaande app verwijzen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
De ARR-stack installeerde altijd dezelfde zeven containers. Nu kies je per
onderdeel uit twintig:
- Media: sonarr, radarr, lidarr, readarr, whisparr
- Indexers: prowlarr, jackett, flaresolverr, bazarr
- Downloaden: qbittorrent, sabnzbd, nzbget, gluetun (VPN)
- Aanvullend: jellyseerr, recyclarr, unpackerr, tdarr, autobrr, maintainerr,
huntarr
Standaard aan: sonarr, radarr, prowlarr, bazarr, qbittorrent, jellyseerr.
Gluetun:
- Staat die aan, dan draaien de downloadclients in diens netwerknamespace
zonder eigen poortmapping; anders lekt hun verkeer om de VPN heen. Hun
webinterfaces komen op de poorten van de Gluetun-container.
- qBittorrent en SABnzbd luisteren allebei standaard op 8080 en botsten
daardoor achter een gedeelde namespace. qBittorrent draait nu intern op 8090.
Groepsschakelaars werkten niet:
- Een `toggle` op een groep in template.json was zelf geen variabele en kreeg
dus nooit een startwaarde, waardoor elk schakelbaar onderdeel standaard uit
stond en een stack met schakelaars leeg binnenkwam. fields() geeft de
schakelaar nu mee als synthetisch bool-veld met een instelbare
standaardstand (toggle_default), en de UI toont hem alleen in de kop van de
groep in plaats van er ook nog eens onder.
Tests: elk onderdeel levert precies een service op als het aan staat en geen
spoor als het uit staat, de downloadclients zitten achter de VPN zonder eigen
poorten, en de interne poorten achter Gluetun botsen niet. Poortbotsingen met
bestaande apps rechtgezet (8090 -> 8097, 8095 -> 8098); 6881 en 5055 blijven
gedeeld met de losse variant van dezelfde app.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb