Symptoms are grouped by where you notice them. Server messages are quoted as they appear in the logs (Winston, plain text on stdout).
| Message | Cause | Fix |
|---|
Provide a valid asset updater | ASSET_UPDATER is not dropbox or onedrive. | Set it. There is no “no sync” mode; a driver is mandatory. |
Failed to read mailconfig.json then exit | MAILCONFIG is unset and server/mailconfig.json is missing or unreadable from the process working directory’s parent of dist/ (the server reads ../mailconfig.json relative to the compiled env.js). | Set MAILCONFIG to the base64 of your JSON, or keep mailconfig.json next to package.json. |
failed to start asset updater then exit | The driver’s initialize() failed: for Dropbox, the refresh token could not be exchanged (Failed to refresh Dropbox token). | Check DROPBOX_APP_KEY, DROPBOX_APP_SECRET, DROPBOX_REFRESH_TOKEN. See Dropbox. |
| Connection refused on Postgres | DATABASE_URL unset and nothing listens on localhost:5432, or wrong credentials. | Start docker-compose up -d in server/, or set DATABASE_URL. |
TypeError: Invalid URL at first S3 use | MAIN_S3_URL or ASSETS_S3_URL missing or not a URL. | Use the http://key:secret@host:port/bucket form. |
| Migration error at boot | Migrations run automatically and one failed, usually because the database was created by hand without the uuid-ossp extension or with a different schema. | Start from an empty database owned by the DATABASE_URL user. See Upgrading. |
| Symptom | Cause | Fix |
|---|
Log says Dropbox listing is empty, skipping sync to avoid deleting all assets | The app sees an empty root: wrong permission type (app folder vs full Dropbox), wrong account, or the files live in the team space while DROPBOX_USE_TEAM_ROOT is false. | Re-check the app’s access type and set DROPBOX_USE_TEAM_ROOT=true for Dropbox Business team folders. |
Folders appear but files stay in status creating with no thumbnail | The worker is not running, so asset/update-content jobs pile up. | Run one process with ENABLE_WORKER=true. See Worker and scaling. |
| Files appear but have no preview | A system package is missing: ffmpeg (video), ghostscript (PDF, EPS, AI), libreoffice (office documents), imagemagick. | Install them; the server/Dockerfile does. Then run npm run cli -- check-integrity to re-queue the files. |
| A file changed in Dropbox but Damvia still serves the old version | The sync does not compare checksums, so changed content is only caught by the daily integrity check, and only when the size differs. | Run the integrity check by hand. If the new file has exactly the same size, set the row to outdated in SQL: UPDATE asset_files SET status = 'outdated' WHERE name = '...'; and the worker re-fetches it. |
| OneDrive: nothing is listed, no error | ONEDRIVE_DRIVE does not point to an existing path, or the app registration lacks Files.Read.All application permission with admin consent. | See OneDrive. |
| Symptom | Cause | Fix |
|---|
| After sign-up the screen says the account must be approved | approved is false: the email domain is not in the authorized domains list. | An admin or a manager of the user’s region approves them under /admin/users, or add the domain under /admin/authorized-domains for future sign-ups. The very first admin is promoted in SQL: see First admin. |
| The verification or login email never arrives | SMTP settings are wrong, or the worker is off (all emails are queued jobs). | Check SMTP_*, check the worker is enabled, look at the mailer/* queues in pgboss.job. In development, open MailHog at http://localhost:8025. |
| The approval request reaches nobody | email/request-approval only mails admins and managers of the requester’s region. If that region has none, the job sends nothing. | Give each region at least one manager or admin. |
| Everyone was logged out at once | APP_SECRET changed. | Expected: tokens are signed with it. |
| A guest’s invitation link says the link expired or shows the login page | The invitation’s expiresAt has passed, or the token in ?dam_token= was issued before an APP_SECRET change. | Re-invite the guest. |
| Symptom | Cause | Fix |
|---|
“Email” downloads stay in preparing | Worker off, or download/create-archive failing (check the job log). | Enable the worker; check disk space in the server’s temp directory, the archive is built there before upload. |
Download link opens /link-expired | The download is older than 7 days, or the id is unknown. | Create a new download. |
| The browser cannot reach the presigned URL | The S3 endpoint in ASSETS_S3_URL is only resolvable from the server. | Expose the S3 endpoint publicly (HTTPS) and use that hostname in the URL. See Object storage. |
You cannot download more than 10GB. | The selection’s total original size is at or above 10 GB. | Split the download. |
| Symptom | Cause | Fix |
|---|
| Every request fails with a network error | VITE_API_ENDPOINT points to the wrong host, or was changed without rebuilding. | Fix client/.env and rebuild; the value is baked in at build time. |
Deep links (for example /collections/abc) return 404 from the web server | The static host lacks the SPA history fallback. | See Client build. |
| The brand colour did not change | Tailwind reads client/.env at build time. | Restart npm run dev or rebuild. |