Common Technical Error Fragments
Many messages below end in ": [dyn]" — the app appends the raw
error.message from Supabase/the network, which isn't translated and isn't
in the app's control. These are the fragments that actually show up there most often,
and what they mean.
| Fragment (appears in error.message) | What it means | What to do |
|---|---|---|
| JWT expired | Your login session token expired (Supabase sessions normally auto-refresh, but this can fail after long inactivity, a sleeping laptop, or a wrong system clock). | Log out and log back in. If it keeps happening, check that your device's date/time is correct. |
| JWT malformed / invalid JWT | The stored session is corrupted (e.g. cleared cookies, switched browsers mid-session). | Log out and log back in. |
| Invalid login credentials | Wrong email or password. | Double-check email/password, or use "Forgot password". |
| Failed to fetch / NetworkError | The browser couldn't reach Supabase or the Netlify function — no internet, VPN/firewall, or an ad-blocker blocking the request. | Check your connection; try disabling VPN/ad-blocker; retry. |
| duplicate key value violates unique constraint | You're saving something (SQ number, quote/report number, customer code…) that already exists. | Use a different number/code, or load the existing record instead of creating a new one. |
| violates foreign key constraint | The record links to something (e.g. a customer) that no longer exists — probably deleted by someone else. | Re-select the customer/reference and save again. |
| new row violates row-level security policy / permission denied for table … | Your account's role doesn't have database permission for this action. | Contact an admin to check your assigned role (Admin/Sales/Service). |
| JSON object requested, multiple (or no) rows returned | A lookup expected exactly one matching record but found zero or several — usually the record was deleted, or a filter (e.g. SQ number) matched nothing. | Refresh and reload the record; if it's gone, it may have been deleted. |
| Failed to fetch dynamically imported module | The browser has an old cached version of the app after a new deployment. | Hard-refresh the page (Ctrl/Cmd+Shift+R). |
Programmed Error & Validation Messages
Every alert() popup and inline status/toast error message in the app, grouped by page/module.
Messages built from a variable (e.g. "Failed to save: " + error.message) show the fixed part only —
the rest depends on what actually went wrong (see "Common Technical Error Fragments" above).
Source = file:line in public/.
| Type | Message (EN) | Message (DE) | Possible Cause | Source |
|---|