The JSON metadata had type "addon" and script path
"/tools/addon/garmin-grafana.sh", but the actual script has always
lived at ct/garmin-grafana.sh. This caused the website to generate an
installer URL that returns 404.
Changes:
- type: "addon" -> "ct"
- script: "/tools/addon/garmin-grafana.sh" -> "ct/garmin-grafana.sh"
- Move config_path to top level (matching ct JSON convention)
- Fill in resource values from ct/garmin-grafana.sh (cpu: 2, ram: 2048,
hdd: 8, os: Debian, version: 13)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ct/etherpad.sh + install/etherpad-install.sh: use ether/etherpad
(canonical name; ether/etherpad-lite still redirects but the new
name is preferred)
- install/etherpad-install.sh: switch dbType from dev-only "dirty"
to sqlite at /var/lib/etherpad/etherpad.db on first config seed;
matches the same default we land on across the snap, .deb, and
Home Assistant add-on packagings
- json/etherpad.json: refresh note to reflect the sqlite default
and document postgres/mysql as alternatives via dbType/dbSettings
Use 'npm ci --ignore-scripts' + explicit 'npx prisma generate' instead
of 'npm install' (which triggered postinstall and ran with NODE_ENV=production
from a sourced .env, skipping devDependencies like autoprefixer).
Migrations are run explicitly after build, matching the Dockerfile's
container-entrypoint.sh.
Spliit imports deepmerge in src/i18n/request.ts but does not declare it
in package.json; Next.js 16 Turbopack rejects phantom dependencies, so
the build fails with 'Module not found: deepmerge'.
Add container templates (ct/) and install scripts (install/) plus metadata JSON entries for BunkerM, Colanode, Edit-Mind, and ExcaliDash. Each app includes an LXC template script with update routines, a corresponding installer that provisions dependencies, builds the app, configures services (systemd/nginx/supervisor), and example default environment/config. JSON metadata files register interface ports, recommended resources, documentation/website links, and notes for each app.