Netlify builds from GitHub origin/main (or whichever branch the site is pinned to). Changes that only exist on your laptop never reach production until they are committed and pushed.
Use this checklist every time you finish a meaningful change.
git status
npm run lint
npm run buildFix any errors. Ensure git status shows only what you intend to ship (review diffs).
git add .
git commit -m "describe what changed"
git push origin mainUse a branch + PR workflow if your team prefers; the important part is that Netlify’s build branch matches the commit you expect.
In Netlify → Deploys: the latest deploy should show the same commit as GitHub (main). If it doesn’t match, check branch settings or trigger a deploy.
Expect HTTP/2 200 (or HTTP/2 307/302 to /login for protected routes when checking without cookies—not a silent 404):
curl -I https://deennotesai.netlify.app/app/onboarding
curl -I https://deennotesai.netlify.app/app
curl -I https://deennotesai.netlify.app/app/new
curl -I https://deennotesai.netlify.app/app/notes
curl -I https://deennotesai.netlify.app/app/settings
curl -I https://deennotesai.netlify.app/app/faq
curl -I https://deennotesai.netlify.app/app/quran
curl -I https://deennotesai.netlify.app/app/quran/2
# Quran service health — JSON has **no** secrets (issue list is code + severity only)
curl -sS -o /dev/null -w "quran-health HTTP %{http_code}\n" https://deennotesai.netlify.app/api/quran/healthSee docs/QURAN_NETLIFY_ENV.md for exact vars: QURAN_CLIENT_ID / QURAN_CLIENT_SECRET (or ClientID / Client_Secret), MOCK_QURAN_API, QURAN_GRACEFUL_MOCK_FALLBACK, and optional defaults. Configure Netlify (Build, Functions, Runtime) as appropriate.
After enabling the Qur’an reader, set those OAuth variables plus optional QURAN_DEFAULT_TRANSLATION_IDS, QURAN_DEFAULT_TAFSIR_IDS, QURAN_DEFAULT_RECITER_ID. Run Supabase migration 004_deen_notes_quran_refs.sql so new notes can store quran_refs.
Open Production onboarding signed in.
If the UI feels stale after a deploy:
- Netlify → Deploys → Clear cache and deploy site
- Hard refresh Chrome (Shift+reload) or disable cache in DevTools
A common failure mode is Phase 1 (or any feature) implemented locally but left untracked or uncommitted. The route table looks fine on npm run build, but production still 404s because Netlify never received those files.