Hackathon Project β A privacy-preserving digital identity platform that enables India's 150M+ gig workers to access financial services without traditional credit history.
GigID gives gig workers a self-sovereign, verifiable digital identity by aggregating their income from multiple platforms (Uber, Swiggy, Upwork, etc.), hashing each credential with SHA-256, and allowing selective, consent-based sharing with banks and NBFCs.
GigID/
βββ backend/ # Node.js + Express API
β βββ src/
β β βββ routes/ # auth, profile, credentials, sharing, verification
β β βββ utils/ # crypto (DID + SHA-256 + ZKP), scoring (ML rules)
β β βββ server.js
β βββ .env
β βββ supabase_schema.sql
βββ frontend/ # React + Vite + Tailwind CSS
βββ src/
βββ pages/ # Landing, Auth, Worker, Bank, SharedProfile
βββ components/
βββ context/ # AuthContext
βββ lib/ # api.js, storage.js (offline cache)
- Node.js 18+
- A Supabase project (free tier works)
cd GigID- Create a project at supabase.com
- Go to SQL Editor and run
backend/supabase_schema.sql - Copy your Project URL and service_role key from Settings β API
cd backend
cp .env.example .env
# Edit .env with your Supabase credentials
npm install
npm run devBackend runs on: http://localhost:5000
cd frontend
npm install
npm run devFrontend runs on: http://localhost:5173
- Create a Twilio account and open the WhatsApp Sandbox.
- In Sandbox settings, set the webhook URL to:
https://<your-public-domain>/whatsapp/webhook- For local development, expose backend with ngrok or Cloudflare Tunnel.
- Create a Google Cloud service account with Cloud Translation API access.
- Set
GOOGLE_APPLICATION_CREDENTIALSinbackend/.envto the JSON key path. - Restart backend and message the Twilio sandbox number.
PORT=5000
JWT_SECRET=your_secret_here
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your_service_role_key
FRONTEND_URL=http://localhost:5173
# Twilio WhatsApp
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_WHATSAPP_NUMBER=whatsapp:+14155238886
TWILIO_VALIDATE_SIGNATURE=false
TWILIO_WEBHOOK_URL=https://your-public-url/whatsapp/webhook
# Google Cloud Translation
GOOGLE_TRANSLATE_ENABLED=true
GOOGLE_CLOUD_PROJECT_ID=your_google_cloud_project_id
GOOGLE_APPLICATION_CREDENTIALS=C:/path/to/google-service-account.json
# PDF Authentication (LangChain + Gemini + optional pyHanko)
GOOGLE_API_KEY=your_google_ai_studio_api_key
GOOGLE_GENAI_MODEL=gemini-1.5-flash
PDF_LANGCHAIN_ENABLED=true
PYHANKO_ENABLED=false
PYHANKO_BIN=pyhanko
QPDF_BIN=qpdf
PDFINFO_BIN=pdfinfo
TESSERACT_BIN=tesseract
TESSERACT_LANG=eng
DOCTR_OCR_SCRIPT=
LAYOUTLMV3_ENABLED=true
LAYOUTLMV3_SCRIPT=scripts/layoutlmv3_extract.py
ISOFOREST_PYTHON_ENABLED=false
PYTHON_BIN=python
Optional Python packages for full LayoutLMv3 path:
pip install transformers torch pdf2image pytesseract- Install Poppler for
pdf2imageand Tesseract OCR on system PATH.
| Feature | Implementation |
|---|---|
| Decentralized ID | UUID + SHA-256 β did:gigid:... format |
| Credential Hashing | SHA-256 per credential, stored + verifiable |
| Selective Sharing | Toggle income/ratings/skills/platforms per share link |
| ZKP Simulation | Prove "income > βΉ20K" without revealing actual amount |
| Risk Scoring | Rule-based: income stability + amount + rating + platforms |
| Federated Learning | Score computed locally, only score sent to server |
| Offline Support | localStorage cache β profile loads without internet |
| WhatsApp Sharing | One-click share link via WhatsApp |
| Multilingual WhatsApp Bot | Twilio webhook + Google Translate auto language detection/reply |
| Bank Dashboard | Search workers, verify DIDs, view credit profiles, loan decisions |
POST /auth/signup β Create account (worker or bank)
POST /auth/login β Login, get JWT
GET /profile β Get worker profile
POST /profile β Create/update profile
PUT /profile β Partial update
POST /credentials β Add income credential (auto-hashed)
GET /credentials β List all credentials (with hash verification)
DELETE /credentials/:id β Revoke credential
POST /credentials/parse-statement β Parse bank statement (mock)
POST /sharing/settings β Update sharing toggles
GET /sharing/settings β Get current settings
POST /sharing/generate-link β Generate 7-day share token
GET /sharing/:token β Public: view shared profile
GET /verify/verify/:did β Verify a DID + all credentials
GET /verify/risk-score-me β Get your own risk score
GET /verify/risk-score/:userId β Bank: get user risk score
POST /verify/zkp-proof β Generate ZKP boolean proof
GET /verify/credit-profile/:did β Bank: full credit profile
GET /verify/search-workers β Bank: search worker database
POST /verify/pdf-authenticate β Worker: layered PDF authentication pipeline
curl -X POST http://localhost:5000/verify/pdf-authenticate \
-H "Authorization: Bearer <JWT_TOKEN>" \
-F "statement=@demo/bank-statement-clean.pdf" \
-F "smsMatchRatio=0.8"Pipeline order returned by POST /verify/pdf-authenticate:
- Signature Check (pyHanko)
- Metadata + Structure (qpdf/pdfinfo)
- Text Extraction (DocTR/Tesseract + LayoutLMv3 assist)
- LangChain Extraction (LLM fallback -> JSON)
- Rule Engine + IsolationForest
- Decision (ACCEPT / REVIEW / REJECT)
POST /whatsapp/webhook β Twilio WhatsApp webhook (multilingual auto-reply)
GET /whatsapp/health β Bot health check
/β Landing page with features + CTA/signupβ Create GigID (worker or bank)/dashboardβ Overview: score, credentials, share link/credentialsβ Add/manage income credentials/sharingβ Toggle data fields + generate shareable link/risk-scoreβ Full credit score + ZKP panel + income chart/profileβ Edit personal profile
/bankβ Dashboard with worker analytics/bank/searchβ Search by name or verify DID/bank/worker/:didβ Full credit profile + loan decision panel
/share/:tokenβ Public shared profile (consent-gated data)
- SHA-256 hashing β Every credential is hashed; tampering is detectable
- Selective disclosure β Workers control which fields are shared
- ZKP simulation β Boolean proofs without revealing raw data
- JWT auth β 7-day tokens, role-based access control
- Revocation β Any credential can be revoked; new version created
- Offline-first β LocalStorage cache for low-connectivity areas
| Criterion | How GigID Excels |
|---|---|
| Innovation | DID + ZKP simulation + federated scoring |
| Impact | 150M gig workers β financial inclusion |
| Feasibility | Bank statements + manual input β works today |
| Privacy | SHA-256 + selective sharing + ZKP proofs |
| Technical | Clean REST APIs + modular architecture |
| UX | Mobile-first, inclusive, step-by-step flows |
After running the schema and starting the backend, register via the UI:
- Worker: Sign up at
/signupwith role "Gig Worker" - Bank: Sign up at
/signupwith role "Bank / NBFC"
Built with β€οΈ for India's gig economy