podzooka

podzooka-boom

One UI + one public URL (www.podzooka.com)

Required env (all clients)

Variable Purpose
EXPO_PUBLIC_API_URL iOS / Android: set to your public site origin (e.g. https://www.podzooka.com) so /api/* hits production. Web: optional — the app uses the page origin when unset (Vercel previews work without it).
EXPO_PUBLIC_SUPABASE_URL or NEXT_PUBLIC_SUPABASE_URL Same Supabase URL (set both on Vercel to be safe)
EXPO_PUBLIC_SUPABASE_ANON_KEY or NEXT_PUBLIC_SUPABASE_ANON_KEY Same anon key
SUPABASE_SERVICE_ROLE_KEY Next /api/* + cron (Vercel production only)

The Expo web bundle is built on Vercel; app.config.js copies NEXT_PUBLIC_* into the client if EXPO_PUBLIC_* is missing, so the browser gets a Supabase URL even when only Next-style env names were configured.

In Vercel → Project → Domains: add www.podzooka.com (and redirect apex podzooka.comwww if you use both).

ERR_CONNECTION_REFUSED to localhost:3000

On deployed web, this usually means the bundle was still calling localhostgetApiBase() in apps/mobile/lib/api.ts now defaults to window.location.origin on web when EXPO_PUBLIC_API_URL is unset, so production hits /api/* on the same host.

For local dev, nothing listens on 3000 until the API runs. Either:

  1. npm run api:dev and EXPO_PUBLIC_API_URL=http://localhost:3000, or
  2. npm run dev:mobile-web — shared build + API stub + Expo web together.

Scripts

Script Purpose
npm run dev:mobile-web Shared + dev API :3000 + Expo web
npm run prepare:web Expo export → public/ (needed before next dev if you want the SPA locally)
npm run dev:web Shared + Next dev (API routes + static files in public/)
npm run api:dev API stub only
npm run build Production: shared → Expo web → sync to public/Next build
npm run build:expo-web Expo web only → apps/mobile/dist-web/

Git author: use a GitHub-verified email or Vercel may block deployments.

See apps/mobile/.env.example, docs/MOBILE_SUPABASE_CONNECT.md (empty feed / auth), docs/SUPABASE_RECOVER.md (schema CLI).