Mobile-first civic accountability PWA frontend for jantrack.ajaynxt.com.
- Report issue flow with client-side photo re-encoding (EXIF/GPS removed before upload)
- Personalized local feed
- Community issue tracker + support/share actions
- Community Pulse with opinion separated from factual evidence
- Representative transparency shell
- Claim-check readiness flow
- Evidence/source taxonomy
- Open-data/free-stack catalog UI
- Keep JANTRACK Alive funding UI placeholder
- PWA manifest + restricted static-only service worker
- Restrictive meta Content Security Policy
- Trusted API/image URL allowlists
- GitHub Pages workflow with least-privilege jobs and full-SHA-pinned actions
- Public-only
dist/build so tests/docs/repository internals are not deployed
- Upload the repository files and push to
main. - In GitHub → Repository Settings → Pages, select GitHub Actions as the publishing source.
- In Settings → Pages → Custom domain, enter
jantrack.ajaynxt.comand save it. With a custom Actions workflow, GitHub ignores the repositoryCNAMEfile for domain configuration, so this Settings step is required. - At your DNS provider, create a CNAME for
jantrackpointing directly to your GitHub Pages default hostname, e.g.YOUR-GITHUB-USERNAME.github.io(no repository path). - Verify the domain in GitHub before relying on the DNS record, and avoid wildcard DNS records for Pages.
- After GitHub provisions the certificate, enable Enforce HTTPS in Pages settings.
Official GitHub references:
- https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site
- https://docs.github.com/en/pages/getting-started-with-github-pages/securing-your-github-pages-site-with-https
- On
jantrack.ajaynxt.com, the frontend expects the future production API athttps://api.jantrack.ajaynxt.com. - In local development, same-origin APIs and loopback (
localhost/127.0.0.1) are allowed. - Arbitrary API origins stored in
localStorageare intentionally not supported. - Until the backend exists, the UI remains in offline/prototype mode. Offline reports persist metadata only; selected photo bytes are not persisted in the offline queue.
npm test
npm run buildGitHub Pages deploys only dist/, generated by scripts/build-pages.mjs.
The static frontend alone is not the full public service. Real shared reports, moderation, official-data connectors, user/admin authentication, payment verification, uploads and escalation require the self-controlled backend. Backend validation must never trust client-side checks.