server-up/CHANGELOG.md
bes-r eebbbc1534
All checks were successful
Deploy server-up (prod) / deploy (push) Successful in 3s
v0.4.0 - nieuw UI-ontwerp + SU_VERSION via build-arg/env (fix vdev)
2026-06-06 14:05:40 +02:00

6.7 KiB

v0.4.0 — Volledig nieuw UI-ontwerp (Modern SaaS)

Nieuw in v0.4.0

🎨 Compleet herontworpen interface

Volledig nieuw, licht en ruim "Modern SaaS"-ontwerp (Inter-font, indigo accent, zachte schaduwen, ronde 2xl-kaarten). Nieuwe app-shell: verticale sidebar met merk-header, gegroepeerde navigatie met actieve indicator en live status-footer; slanke sticky topbar met dynamische paginatitel en status-chips. Dashboard, stacks, app store, images-/audittabellen, instellingen, modals, wizard, toasts en het log-paneel zijn allemaal opnieuw vormgegeven. Inklapbaar menu en grote touch-targets blijven behouden; volledig mobielvriendelijk.

🌗 Thema volgt systeemvoorkeur

Standaard volgt het thema de OS-voorkeur (licht/donker) en reageert live op wijzigingen. Handmatige override via Auto / Light / Dark in Instellingen.


v0.3.1 — UI-restyle + taalmodule (add-on)

Nieuw in v0.3.1

🎨 Grondige UI-restyle

Grotere, touch-vriendelijke knoppen (min. 44px), ruimere spacing, grotere typografie en kaarten. Layout gecentreerd met max-breedte voor meer lucht op grote schermen. Volledig mobielvriendelijk.

📐 Inklapbaar menu (ook op desktop)

De hamburger klapt de sidebar nu ook op desktop in/uit; voorkeur wordt onthouden (localStorage), hoofdinhoud en log-paneel schuiven mee. Op mobiel een tap-to-close overlay.

🌐 Taalmodule als add-on

Nieuwe sectie in Instellingen → "Taalmodule": talen toevoegen, bewerken, verwijderen en ingebouwde talen (NL/EN) dupliceren als startpunt. Editor toont per sleutel de Engelse referentie met zoekfilter. Backend-endpoints: POST/DELETE /api/i18n, GET /api/i18n/keys, GET /api/i18n/<code>/raw. Toegevoegde talen komen als JSON in translations/ en zijn direct beschikbaar.


v0.3.01 — Boilerplates fixes + git-driven versioning

Fixes bovenop v0.3.0

🔁 Auto-migratie van default-repos voor upgraders

Bestaande installaties (vanaf v0.2.x) hadden de Boilerplates-repo niet zichtbaar in de App Store omdat hun config.json in de su-data volume al bestond en de nieuwe DEFAULTS["APP_REPOS"] daardoor werd overschreven.

core/__init__.py load() doet nu een eenmalige migratie: ontbrekende default-repos worden bij opstart aangevuld op basis van id, en gemarkeerd in MIGRATIONS_DONE: ["v0.3.0_default_repos"]. Wordt direct gepersisteerd. Verwijdert een gebruiker de Boilerplates-repo expliciet, dan komt-ie niet automatisch terug.

🧹 YAML-poetsstap na boilerplate-render

Bij stacks waar de meeste optionele groepen uit staan (Authentik, Nextcloud, etc.) liet de Jinja-render verlaten mapping-sleutels achter (volumes:, networks:, etc. zonder kinderen). Docker-compose faalt daarop met "block sequence entries are not allowed in this context".

core/boilerplates.py _tidy() heeft nu een _drop_empty_mappings() substep die in meerdere passes mapping-sleutels verwijdert die alleen worden gevolgd door whitespace/commentaar of een sibling op gelijke/lagere indent. Werkt in cascade.

🏷️ Versie komt nu uit git

Dockerfile accepteert ARG SU_VERSION=dev en bakt die in ENV SU_VERSION + OCI image-label. Met docker build --build-arg SU_VERSION=$(git describe ...) weet het image zijn eigen versie. De Server Up UI toont automatisch de juiste waarde, ongeacht wat de productie-compose meegeeft.

Forgejo Actions kan een tag-push automatisch verwerken — zie server-up-deploy/README.md.

Migratie vanaf v0.3.0

docker compose build --no-cache
docker compose up -d

v0.3.0 — UI rebuild + Boilerplates support

Hoogtepunten

🎨 Nieuwe UI (Tailwind + Alpine + HTMX)

  • templates/index.html is volledig herschreven. De handgeschreven CSS (--bg/--s1/... variabelen, ad-hoc grid-classes) is vervangen door Tailwind utility-classes met een gematchte donker/licht-palette.
  • Statebeheer via Alpine.js: één app() component bovenop het hele document, geen $=document.getElementById-spaghetti meer.
  • HTMX is geladen voor toekomstige server-rendered partials. Het bestaande fetch-RPC patroon blijft werken; HTMX kan progressief worden ingezet.
  • Modals, toasts, terminal-overlay en first-run wizard zitten allemaal in één Alpine-state — geen losse globale variabelen meer.
  • Mobiele sidebar gedraagt zich nu correct (slide-in i.p.v. layout-flip).

🧩 ChristianLempa Boilerplates ondersteund

Server Up herkent nu twee stack-formaten naast elkaar:

Formaat Detectie Bron
Compose (origineel) compose.yml / docker-compose.yml (+ optioneel stack.json) bes-r/server-up
Boilerplate (nieuw) template.json + files/ ChristianLempa/boilerplates-library

Nieuw bestand app/core/boilerplates.py:

  • is_boilerplate(d) — detectie
  • metadata(d) — converteert template.json["metadata"] (incl. selfhst-icons) naar Server-Up formaat
  • fields(d) — flattened variable-schema voor de install-modal
  • render_to_dir(src, dest, values) — rendert files/*.yaml met de Jinja-achtige << var >> + <%- if expr %> syntax die de boilerplates gebruiken (Jinja2 met custom delimiters). Niet-tekst bestanden worden verbatim gekopieerd.

app/core/git.py_scan_compose_dirs herkent beide formaten en zet format: "boilerplate" in de stack-entry zodat de UI er een badge bij kan tonen.

app/app.py:

  • _find_stack_src accepteert ook boilerplate-mappen.
  • POST /api/store/preview retourneert voor boilerplates het variabelen-schema (fields) plus een gerenderde preview met defaults.
  • POST /api/store/install met body {values: {...}} rendert de templates voor je voordat de stack gestart wordt.

⚙️ Default-repos

Een nieuwe Server Up komt nu uit de doos met twee app-repositories:

  1. bes-r/server-up — eigen stacks, submap apps
  2. ChristianLempa/boilerplates-library — community templates, submap compose

📦 Versie / Dockerfile

  • SU_VERSION = 0.3.0 in Dockerfile en docker-compose.yml
  • requirements.txt: Jinja2 expliciet toegevoegd (was al een Flask-dep)

Migratie vanaf v0.2.29

  • Build opnieuw: docker compose up -d --build --no-cache
  • Bestaande stacks blijven werken (legacy formaat is intact).
  • De Boilerplates-repo wordt automatisch toegevoegd voor verse installs. Bestaande gebruikers kunnen de repo handmatig toevoegen via Instellingen → Git Repositories met submap compose.

Bekende beperkingen

  • Boilerplate-templates met onbekende custom-filters of complexe Ansible-style conditionals kunnen falen — de fout verschijnt in het terminal-paneel.
  • volumes: blokken die conditioneel zijn (<%- if volume_mode == 'local' %>) werken; complexere render-logica (loops over services) is nog niet getest.
  • HTMX is geladen maar de meeste interacties draaien nog op fetch-RPC. Verdere migratie naar server-rendered partials kan stapsgewijs in volgende releases.