Architecture drawings, before and after
Same hand-drawn style and size class. Each box now says what it does, the arrows say what travels on them, and the boundaries show what runs where. Every label comes from the code excerpts or the public repo.
GFG RKGIT platform Now (live) Public site (React) Admin portal (React) Team portal (React) Worker API · api.gfg.rkgit.in Firestore + rules KV · keys, rate limits R2 · photos cron: graduates archived every 1 June
Proposed: more detail Public site gfg.rkgit.in · forms Admin portal events, members Team portal own profile Firebase Auth sign-in → ID token Worker API checks token + role Cron triggers daily · 1 June Firestore events, members, forms KV token keys, rate limits R2 event photos sign in forms, team Bearer ID token role, data keys, limits photos one door: every app goes through the Worker Nivaran Now (live) React web app Supabase Postgres + triggers Edge Function · send-push Firebase Cloud Messaging photo + GPS in, push out
Proposed: more detail Supabase Postgres React web app report: photo + GPS, vote Supabase Auth who is voting issues trigger: score → priority cast_verification_vote jury: reporter + affected notifications a row per status change Firebase Cloud Messaging FCM v1 API Edge Function · send-push looks up the citizen’s FCM token sign in new report vote: fixed? status changed webhook push an officer marks it Resolved → the jury votes: fixed or not? Prometheus Now (live) git tag v* GitHub Actions docker build GHCR image FastAPI app PostgreSQL /metrics Sentry every tag is a deployable image
Proposed: more detail render.yaml: Render builds this git push to main CI ruff · pytest · Postgres tests CodeQL security scan git tag v* release docker build uv, non-root smoke test GET /health GHCR :v1.x + :latest FastAPI app auth · transactions PostgreSQL async SQLAlchemy /metrics Prometheus format Sentry when a DSN is set Budget check Actions cron · daily 09:00 same Dockerfile runs the app over limit? alert every tag is a deployable image