Skip to content

Troubleshooting

Common issues and where to look first.

App

SymptomLikely cause / fix
Blank page / lazy route won't loadA bad import in a lazy-loaded page. Check the browser console; verify the import path in AppRoutesConfig.jsx.
Component test fails on mountA bad react-icons/ri import — the L3 mount test is designed to catch exactly this. Fix the icon name.
Theme looks wrong in light modeA conditional class not guarded by isLight, or a hardcoded color. Audit with cn() + isLight.
supabase.from is not a function in a testArchitecture violation — something called from(). Move the read to an RPC hook.
Stale data after a writeThe read hook's cache TTL hasn't expired; call refetch() after the mutation, or lower the TTL.

Edge functions

SymptomLikely cause / fix
401 from an EFJWT missing/expired; requireAuth rejected it. Re-auth on the client.
403 from an EFOwnership/role check failed — the row isn't the caller's.
Generic 500An unhandled error was caught by err(); check the structured logs (search the event field).
Webhook processed twiceIdempotency missing — ensure the UNIQUE event-id upsert is in place.
Webhook 401Signature/timestamp invalid — check the secret and the replay window.

Database / migrations

SymptomLikely cause / fix
RLS blocks a legitimate readPolicy too strict, or the read should go through a SECURITY DEFINER RPC.
Migration won't applyDon't edit an existing migration — add a new one. Check naming YYYYMMDD_NNN_….
RPC returns no new columnIf not using row_to_json(table.*), update the RPC's projection.

Docs portal

SymptomLikely cause / fix
docs:dev fails to startRun npm --prefix documentations/portal install first.
Reference page out of dateRe-run npm run docs:gen.
Dead-link warnings on buildFix the link or rely on ignoreDeadLinks in .vitepress/config.mjs (set for WIP stubs).