- apricot-blossom: cherry-blossom mark (OpenMoji), matches the name
- docspace: ONLYOFFICE logo (dashboard-icons)
- mcp-manager: Model Context Protocol logo (dashboard-icons)
- md2html: official Markdown mark on white
- mergedrop: clapperboard mark (OpenMoji) for the video merger
- scalar: replace broken 2.9MB BMP (mislabeled .jpg) with Scalar's logo
sap-mcp-bridge intentionally skipped (being uninstalled).
Runtipi 'app update' validates required form_fields against its own
DB-tracked form state, not against app.env. Adding new required fields
to a pre-installed app blocks every update with 'Variable X is required'.
The manager binary already gracefully no-ops basic auth if either env
var is empty (logs a WARN). Drop required:true so updates pass; values
that exist in app.env keep working at runtime.
- README.md explains the image is built from the separate fork repo at
git.alexzaw.dev/alexz/cloudflare-ddns, lists what's in the image, and
documents how to rebuild + redeploy.
- build.sh clones (or refreshes) /tmp/cfddns-build from the fork via SSH,
runs docker build, and pushes to git.alexzaw.dev/alexz/cloudflare-ddns:latest.
Supports IMAGE_NAME/IMAGE_TAG/SOURCE_REPO overrides and passes positional
args through to docker build (e.g. --no-cache).
- .gitignore for build artifacts.
The previous 'password' type required a manual value during app
update, which blocked Runtipi from regenerating the compose file
(error: 'Variable Web UI Password is required'). Switch to the
'random' field type with min=24 hex chars so a strong password is
auto-generated on install and persisted in app.env, viewable in
the dashboard.
- Swap image from favonia/cloudflare-ddns:latest to
git.alexzaw.dev/alexz/cloudflare-ddns:latest (private fork with
cmd/manager binary that wraps the original ddns updater)
- Expose web UI on internal port 8080, traefik-routable
- Add CFDDNS_WEB_USER/CFDDNS_WEB_PASSWORD basic-auth form fields
- Repurpose existing DOMAINS/PROXIED/UPDATE_CRON/TZ as first-run seed
for the YAML config that the UI manages thereafter
- Mount ${APP_DATA_DIR}/data:/config for persistent cfddns.yaml
- Healthcheck on /healthz via 127.0.0.1 (alpine wget)
- Bump tipi_version 7 -> 8 to trigger app update
- Each user gets a Linux + Samba account and home dir at /nas/home/<username>/
- Web UI file browsing scoped to per-user directories
- Creating/deleting users from web UI also manages system + Samba accounts
- Replaced hardcoded [data] SMB share with [homes] (per-user automatic shares)
- Removed hardcoded alexz user from entrypoint — server.js handles all user management
- Removed storage quotas from backend and frontend
- Existing users get home directories auto-created on startup (migration)
- Add health check (curl /api/health) so Traefik can verify container health
- Set container hostname to nas.alexzaw.dev
- Remove hardcoded demo credentials from login page
- Remove admin123 fallback password — require SMB_PASSWORD env var
- Fail fast if no admin password is configured