`.hab` has been the stored bundle extension since the `FURNI_BUNDLE_EXT` switch, so the repair path already writes `.hab` (the sources serve `.nitro`), but nothing in the output said so. Print the resolved extension in the run header and correct the header comment: generating the catalog SQL also creates the `catalog_pages` sub-pages it references, so a "generate only" run is not entirely read-only — only the `catalog_items` rows wait for `--apply-sql`.
Scripts Documentation
This directory contains utility scripts for managing the EpicNext-Cms project.
Scripts Overview
| Script | Description |
|---|---|
dashboard.sh |
Main interactive menu to run all other scripts. |
deploy.sh |
Safely redeploys the application by freeing the port first. |
logs.sh |
View logs for cms and mariadb services. |
backup.sh |
Creates a database backup in /backups. |
db-restore.sh |
Restores a database backup. |
db-optimize.sh |
Optimizes database tables. |
docker-prune.sh |
Cleans up unused Docker resources. |
verify-deploy.sh |
Checks if the CMS is reachable after deployment. |
check-env.sh |
Validates .env against .env.example. |
check-security.sh |
Runs pnpm audit and checks for image updates. |
monitor.sh |
Shows system disk/container resource usage. |
perf-report.sh |
Runs performance profiling. |
setup-dev.sh |
Configures development environment. |
check-updates.sh |
Checks for package and image updates. |
sync-readme-versions.mjs |
Syncs the versions in README.md with package.json / .nvmrc. |
maintenance.sh |
Toggles maintenance mode flag. |
doctor.sh |
Runs a system diagnostic report. |
setup-cron.sh |
Configures automated cron jobs. |
alert.sh |
Sends notifications to a configured webhook. |
catalog-sync.sh |
Interactive catalog update against a clone source (see below). |
Usage
Run any script directly, or use the dashboard:
./scripts/dashboard.sh
Keeping the README versions in sync
Bumping a dependency (or the pinned Node.js version) leaves README.md stale.
Rather than editing it by hand, run:
pnpm readme:versions # rewrite README.md to match package.json / .nvmrc
pnpm readme:versions:check # verify only; exits 1 when out of date (used in CI)
It manages the pnpm and Node.js rows of the System Requirements table and
the "Core stack" line. The CI check job runs the --check variant, so a
version change cannot reach main with a stale README — the pipeline fails
until you run pnpm readme:versions.
Updating the catalog (catalog-sync.sh)
Compares this hotel's catalog against a clone source (Habbo and the retros) and
fixes what is broken: missing furniture icons, missing .nitro bundles,
FurnitureData.json drift, orphaned/duplicate catalog rows, and items that
exist in items_base but have no catalog offer.
pnpm catalog:sync # interactive menu
./scripts/catalog-sync.sh --list-sources # which sites can be compared
./scripts/catalog-sync.sh --all --sources=default-habbo-com
./scripts/catalog-sync.sh --all --sql --apply-sql # catalogs changes are written
The menu asks which sources to compare (Habbo (COM) is the preset) and what may be written. With no arguments it needs a terminal; with any flag it skips the menu, so it is usable from cron.
Safety notes:
- An audit writes nothing — no repair flag means read-only.
--apply-sqlis the only flag that changes the catalog, and the generated SQL is always written tostorage/catalog-sync/*.sql(gitignored) so it can be reviewed or replayed by hand.- The engine is the same one the admin Catalog audit page streams
(
runCatalogAudit), so a terminal run and an in-admin run agree. --jsonprints one machine-readable report;--fail-on-errorsexits3when error-severity issues remain, which is what a scheduled check should use.