Docs

Troubleshooting

Problems that show up often when running MeetCast locally.

Database connection failed

  • Confirm DATABASE_URL in .env.local (Neon: use the pooled string).
  • Check the database is up and IP allowlisting (if any) allows you.
  • Run pnpm db:migrate so required tables exist.
  • Hit GET /api/health — degraded usually means DB.

LiveKit connection failed

  • LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET must match the LiveKit server.
  • Local server actually listening (often port 7880).
  • Browser can reach that URL (localhost vs remote machine; mixed content if the app is HTTPS and LiveKit is ws://).
  • Token route returns an error — check server logs for auth, schedule, visibility, or capacity failures.

Camera or microphone does not work

  • Browser permission prompt denied or blocked for the origin
  • Some browsers require a secure context (HTTPS or localhost) for media
  • Another app holding the device exclusively

Cannot join a private room

  • You must be logged in (guests are blocked).
  • Session email must match an allowlist entry (normalized). Host is always allowed.
  • Meeting must still be inside its schedule window.

Auth email never arrives

Set RESEND_API_KEY (and preferably RESEND_FROM_EMAIL on a verified domain). Without the key, MeetCast skips sending on purpose. Outside production, look for the fallback action link in the UI when mail was not delivered.

Payment does not work

  • Zero-price plans should fulfill without a gateway — check order status on /billing.
  • Non-zero amounts need ZARINPAL_MERCHANT_ID (or mock in non-production).
  • PAYMENT_PROVIDER force modes: auto, zarinpal, mock.
  • Callback alone is not enough — server verify must succeed before fulfill.

Admin panel forbidden

Your user needs role = admin. Put your email in ADMIN_EMAILS and open the admin panel once so bootstrap can promote you (tight allowlist in production).