Look at the Nuxt 3 documentation to learn more.
Make sure to install the dependencies:
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun installStart the development server on http://localhost:3000:
# npm
npm run dev
# pnpm
pnpm run dev
# yarn
yarn dev
# bun
bun run devBuild the application for production:
# npm
npm run build
# pnpm
pnpm run build
# yarn
yarn build
# bun
bun run buildLocally preview production build:
# npm
npm run preview
# pnpm
pnpm run preview
# yarn
yarn preview
# bun
bun run previewCheck out the deployment documentation for more information.
Firmware releases, bootloaders, tools, the unlocker, the eeprom default
binaries and the eeprom schema are served straight from a directory on the
server — no object store involved. FILES_ROOT points at it (default
./storage/files, /data/files inside the container), and the server only
ever reads from it:
$FILES_ROOT/
releases/<tag>/<asset> # /api/files?filter=releases
kiss-ultra-releases/<tag>/<asset> # /api/files?filter=kiss-ultra-releases
bootloaders/<tag>/<asset> # /api/files?filter=bootloader
am32-tools/<asset> # /api/files?filter=tools
unlocker/<tag>/<asset> # /api/files?filter=unlocker
binaries/<esc-name>/v<layout>.bin # /api/eeprom/<esc-name>?version=<layout>
schemas/eeprom.json # /eeprom
A tag directory ending in -rc is treated as a prerelease and hidden unless
the request carries ?prereleases. Files are downloaded through
/api/file/<section>/<path>; paths are stable, so browsers and the client
side cache keep what they already fetched. Anything resolving outside
FILES_ROOT (.. segments, symlinks leaving the mount) is refused.
Mount the host directory into the container by setting FILES_HOST_PATH
before docker compose up; docker-compose.yml binds it read-only at
/data/files.
To mirror the GitHub release assets into that directory, run the sync script on the host that owns the mount:
FILES_ROOT=/srv/am32/files tsx run.tsThe files were previously served through an S3 API in front of the same data:
a Versity Gateway (versitygw) running with a POSIX backend, so each "bucket"
was already a directory on the server. Migrating was a folder-to-folder copy,
not an object-store export — bucket names and directory names match one for
one, which is why the layout above needs no translation.
If a deployment still has an S3-compatible endpoint holding these files, any mirroring tool will do; nothing in the app talks to S3 any more.