Skip to content

iamomm-hack/StellarID

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

StellarID Logo

StellarID

Verify once. Prove everywhere.

A decentralized identity verification platform where users verify once and prove everywhere using Zero-Knowledge Proofs β€” without revealing personal data.

Live Demo β€’ How It Works β€’ Tech Stack β€’ Features β€’ Architecture β€’ Getting Started


πŸ”₯ The Problem

Every time you sign up for a service, you hand over your name, address, date of birth, income, government ID β€” to a database you don't control.

Problem Reality
Repeated KYC Users verify identity 10+ times across platforms. Same documents. Same friction. Every time.
Data Breaches 4.5 billion records exposed in 2024 alone. Your personal data is sitting in 50+ company databases.
No Ownership You don't own your identity. Platforms do. They sell it, lose it, or revoke it without consent.

The internet has a login system. It doesn't have an identity system.


πŸ’‘ The Solution

StellarID flips the model. Instead of sharing raw data, you generate a zero-knowledge proof β€” a cryptographic guarantee that something is true, without revealing the underlying data.

Before StellarID With StellarID
Share full passport to prove age Prove "I am over 18" β€” nothing else
Upload bank statements for income Prove "Income > $50K" β€” no numbers exposed
Re-verify on every new platform Verify once, prove anywhere, forever
Platform owns your data You own your identity

One verification. Infinite proofs. Zero data exposure.


⚑ Live Demo

Resource Link
🌐 Live App StellarID Live App
πŸŽ₯ Demo Video StellarID Demo Video (Google Drive)
πŸ“Š User Feedback Feedback Spreadsheet (Google Sheets)
πŸ” Testnet Explorer Stellar Expert

πŸ“Έ Screenshots

Landing Page β€” Verify once. Prove everywhere.
StellarID Landing Page

Dashboard β€” Credential management & ZK proof generation
Dashboard

Admin Analytics β€” Real-time platform metrics & activity feed
Admin Dashboard

Verification Page β€” Public proof verification with badge
Verification Page

API Documentation β€” Interactive docs with code examples
API Docs


🧠 How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Connect    │────▢│   Verify     │────▢│   Get NFT       β”‚
β”‚   Wallet     β”‚     β”‚   Identity   β”‚     β”‚   Credential    β”‚
β”‚  (Freighter) β”‚     β”‚  (GitHub/KYC)β”‚     β”‚  (On-chain)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                   β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   Share      │◀────│   Generate       β”‚
                    β”‚   Proof      β”‚     β”‚   ZK Proof       β”‚
                    β”‚  (Link/PDF)  β”‚     β”‚  (Client-side)   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5 steps. Zero personal data transmitted. Fully verifiable on-chain.

  1. Connect β€” User connects their Stellar wallet via Freighter
  2. Verify β€” Complete identity verification through an issuer (e.g., GitHub OAuth)
  3. Receive β€” Get an NFT-based credential minted on Stellar (Soroban)
  4. Prove β€” Generate a ZK proof client-side (never sends raw data anywhere)
  5. Share β€” Share proof via link, PDF with QR code, or embeddable badge

πŸ› οΈ Tech Stack

Layer Technology Purpose
Frontend Next.js 14, React 18, TypeScript App shell, SSR, routing
Styling Tailwind CSS Utility-first responsive design
Backend Node.js, Express, TypeScript REST API, business logic
Database PostgreSQL Users, credentials, proofs, issuers
Cache Redis Session cache, analytics caching
Blockchain Stellar + Soroban Smart contracts, credential NFTs
ZK Proofs Circom + snarkjs ZK-SNARK circuit compilation & proving
Storage IPFS (Pinata) Decentralized credential metadata
Auth JWT + Stellar Wallet Wallet-based authentication
DevOps Docker, GitHub Actions CI/CD Containerization, automated testing

πŸ”₯ Key Features

πŸͺͺ Identity & Credentials

  • Wallet-based login β€” No passwords. Connect with Freighter wallet
  • NFT credentials β€” Verifiable on-chain credentials minted as Soroban NFTs
  • GitHub OAuth issuer β€” Verify developer identity via GitHub
  • Multi-type credentials β€” Age, income, residency, membership, and more

πŸ” Privacy & Proofs

  • ZK proof generation β€” Client-side proving with Circom/snarkjs (age, income, residency, membership circuits)
  • Selective disclosure β€” Prove specific claims without revealing underlying data
  • Downloadable PDF Certificates β€” Export verification as beautifully rendered PDFs containing embedded Scan-to-Verify QR codes (via pdfkit & qr-image)
  • Shareable verification β€” Public link for anyone to verify a proof's authenticity
  • Verification badge β€” βœ… VERIFIED or ❌ REVOKED status displayed publicly

πŸ›‘οΈ Security & Governance

  • Revocation system β€” On-chain credential revocation by issuers
  • Expiry management β€” Automatic credential expiry with cron enforcement
  • Admin analytics dashboard β€” Real-time platform metrics, 24h activity feed, top issuers
  • Rate limiting β€” API protection against abuse
  • Role-based access β€” Admin/user role separation

πŸ“‘ Integration

  • REST API β€” Full API for third-party verification integration
  • Modern docs β€” Interactive API documentation with code examples
  • Docker-ready β€” One-command deployment with Docker Compose

πŸ“‘ API Reference

Full REST API for programmatic access:

Method Endpoint Description Auth
POST /api/v1/auth/connect Connect wallet & get JWT β€”
GET /api/v1/auth/me Get current user profile πŸ” JWT
POST /api/v1/credentials Issue a new credential πŸ” JWT
GET /api/v1/credentials/my List user's credentials πŸ” JWT
POST /api/v1/verify Submit verification request πŸ” JWT
POST /api/v1/proofs Create shareable proof record πŸ” JWT
GET /api/v1/proofs/:token Public proof verification β€”
GET /api/v1/proofs/:token/pdf Download proof PDF β€”
GET /api/v1/issuers List registered issuers β€”
GET /api/v1/admin/stats Platform analytics πŸ” Admin
GET /api/v1/admin/activity Last 24h activity πŸ” Admin
GET /api/v1/admin/chart-data 30-day trend data πŸ” Admin
GET /api/v1/admin/top-issuers Top issuers by volume πŸ” Admin

Full interactive docs available at /docs route.


⚑ Performance

Metric Value Notes
ZK Proof Generation ~0.87s Client-side, no server round-trip
API Response (cached) <100ms Redis-backed analytics queries
API Response (uncached) <300ms PostgreSQL with indexed queries
Contract Deployment ~5s Soroban testnet via Stellar CLI
Frontend Build ~8s Next.js 14 optimized production build
WASM Contract Size 12–17 KB Optimized with opt-level = "z"
PDF Generation <500ms Server-side with pdfkit + QR code

πŸ“Š Admin Dashboard & Proof System

Analytics Panel

A full SaaS-style admin dashboard showing real-time platform health:

Metric Description
Total Credentials All credentials issued across the platform
Total Proofs ZK proofs generated and verified
Active Users Registered wallet addresses
Success Rate Verification success percentage
30-Day Trend Interactive area chart (Recharts) with proofs + credentials
Last 24h Activity Real-time feed of recent verifications and issuances
Top Issuers Ranked table of most active credential issuers

Proof System

Feature How It Works
Generate Proof Client-side ZK-SNARK computation using snarkjs
Download PDF Generates a branded cryptographic certificate on-the-fly (pdfkit) with dynamic scan-to-verify QR codes (qr-image)
Share Link Public /verify/{token} page β€” anyone can verify the proof
Badge Display Green VERIFIED βœ… or Red REVOKED ❌ with status details

πŸ”— Smart Contracts (Stellar Testnet)

Three Soroban smart contracts deployed on Stellar Testnet:

Contract Purpose Contract ID
Credential NFT Mint, transfer, validate credential NFTs CBIO5S7UB6JVO337KTMHZPTRSXQLNPQPDAMCH57MBI6N2NDC4WWO3RYX
Revocation Registry On-chain credential revocation by issuers CDRPLFWJLBFX7O552DK4P5QUYXP2ZCUVLNEICLHWVTPVSL7WWXU5PRL3
Disclosure Contract Selective disclosure verification records CDRUH5UI7HSKRXWB3BOOT5CL5V7GWRYQ25AAOA3OLTYZYWRNA7JLZ4U2
# Verify on Stellar Explorer
https://stellar.expert/explorer/testnet/contract/CBIO5S7UB6JVO337KTMHZPTRSXQLNPQPDAMCH57MBI6N2NDC4WWO3RYX
https://stellar.expert/explorer/testnet/contract/CDRPLFWJLBFX7O552DK4P5QUYXP2ZCUVLNEICLHWVTPVSL7WWXU5PRL3
https://stellar.expert/explorer/testnet/contract/CDRUH5UI7HSKRXWB3BOOT5CL5V7GWRYQ25AAOA3OLTYZYWRNA7JLZ4U2

Contract Functions:

Credential NFT Revocation Registry Disclosure Contract
initialize initialize initialize
mint_credential revoke verify_and_record
get_credential is_revoked get_verification
is_valid get_revocation_record get_verification_history
revoke get_revocation_list
transfer
register_issuer
is_registered_issuer
get_owner_credentials

πŸ§ͺ Testnet Wallets

The following testnet wallets were used during development and testing:

Role Stellar Address
Admin GBMQJ3G5LDWODZKUUQWGGT6NIKMM7KL5NLHVIG53WLNLWB27Z4AKH3F4
Test User 1 (Satish) GDZWLHG6WBRYIGWE2JXJRI4LTXLWQSTBCSXK3XB6HLB2QOTS4DNXDSKP
Test User 2 (Mufti) GA5RKOAUAVEA5POB4HKI2HCIZ3K67SZYLUW5SOACOAKCNDSM4XLC5BPR
Test User 3 (Amit) GCUOCLOPD3I7ECINEXFOJVGFQFNJILYW26BERBCCQBQ7WHJMICHR2WPM
Test User 4 (Rajdeep) GB2CC6D3E3SXRJUPNJ43WGMFFYEN5CNP6NRY5L2S7NUDLEAZW5IMRVLK
Test User 5 (Manjeet) GDLQU6LOKWYX2EUNU7PNOK3IT27MEQD7FDR7EDWTWYVZ66HXSNKGAMO6

All wallets funded via Stellar Friendbot


πŸ—οΈ Architecture

graph TB
    subgraph Client["πŸ–₯️ Client Layer"]
        User["User (Browser)"]
        Wallet["Freighter Wallet"]
    end

    subgraph Frontend["⚑ Frontend (Next.js 14)"]
        UI["React UI + Tailwind"]
        ZK["ZK Prover (snarkjs)"]
        Store["Zustand State"]
    end

    subgraph Backend["πŸ”§ Backend (Express API)"]
        API["REST API"]
        Auth["JWT Auth"]
        AdminAPI["Admin Analytics"]
        ProofAPI["Proof Service"]
        PDF["PDF Generator"]
    end

    subgraph Data["πŸ’Ύ Data Layer"]
        PG["PostgreSQL"]
        Redis["Redis Cache"]
        IPFS["IPFS (Pinata)"]
    end

    subgraph Blockchain["⛓️ Stellar Blockchain"]
        Soroban["Soroban Runtime"]
        NFT["Credential NFT"]
        Revoke["Revocation Registry"]
        Disclose["Disclosure Contract"]
    end

    User -->|Connect| Wallet
    User -->|Interact| UI
    UI -->|API Calls| API
    UI -->|Generate Proof| ZK
    Wallet -->|Sign TX| Soroban

    API -->|Authenticate| Auth
    API -->|Query| PG
    API -->|Cache| Redis
    API -->|Store Metadata| IPFS
    API -->|Invoke| Soroban

    AdminAPI -->|Aggregate| PG
    AdminAPI -->|Cache| Redis
    ProofAPI -->|Store| PG
    ProofAPI -->|Generate| PDF

    Soroban --> NFT
    Soroban --> Revoke
    Soroban --> Disclose

    style Client fill:#1a1a2e,stroke:#7c3aed,color:#fff
    style Frontend fill:#0d0030,stroke:#00e676,color:#fff
    style Backend fill:#12003a,stroke:#7c3aed,color:#fff
    style Data fill:#0a0020,stroke:#00e676,color:#fff
    style Blockchain fill:#08001a,stroke:#a855f7,color:#fff
Loading

βš™οΈ Environment Setup

Backend .env (Already Configured)

The backend is configured to run on port 5555. Key settings:

# Server
PORT=5555
NODE_ENV=development
FRONTEND_URL=http://localhost:3000

# Database
DATABASE_URL=postgresql://stellarid_user:stellarid_pass@localhost:5432/stellarid_db

# Cache
REDIS_URL=redis://localhost:6379

# Authentication
JWT_SECRET=stellarid_local_dev_secret
JWT_EXPIRES_IN=7d

# Stellar
STELLAR_NETWORK=testnet
STELLAR_HORIZON_URL=https://horizon-testnet.stellar.org
STELLAR_PASSPHRASE=Test SDF Network ; September 2015

# Smart Contracts
CREDENTIAL_NFT_CONTRACT_ID=CBIO5S7UB6JVO337KTMHZPTRSXQLNPQPDAMCH57MBI6N2NDC4WWO3RYX
REVOCATION_CONTRACT_ID=CDRPLFWJLBFX7O552DK4P5QUYXP2ZCUVLNEICLHWVTPVSL7WWXU5PRL3
DISCLOSURE_CONTRACT_ID=CDRUH5UI7HSKRXWB3BOOT5CL5V7GWRYQ25AAOA3OLTYZYWRNA7JLZ4U2

# IPFS (Pinata)
IPFS_API_URL=https://api.pinata.cloud
IPFS_PROJECT_ID=<your_pinata_project_id>
IPFS_PROJECT_SECRET=<your_pinata_secret>

# GitHub OAuth
GITHUB_CLIENT_ID=Ov23limO4e1dWIJmQf4c
GITHUB_CLIENT_SECRET=<configured>
GITHUB_CALLBACK_URL=http://localhost:5555/api/v1/github-issuer/callback

Frontend .env (Already Configured)

NEXT_PUBLIC_API_URL=http://localhost:5555/api/v1

βœ… Development environment is already configured. Both .env files contain the correct settings.


πŸš€ Getting Started

Prerequisites

  • Node.js β‰₯ 18
  • PostgreSQL β‰₯ 14 (running on port 5432)
  • Redis β‰₯ 7 (running on port 6379)
  • Freighter Wallet (Chrome Extension)

Note: Database and Redis are typically already running in the development environment.

Quick Start

# Clone the repository
git clone https://github.com/iamomm-hack/StellarID.git
cd StellarID

# Backend setup
cd backend
npm install
npm run dev                   # Starts on http://localhost:5555

# Frontend setup (new terminal)
cd frontend
npm install
npm run dev                   # Starts on http://localhost:3000

Using the App

  1. Open Frontend: http://localhost:3000
  2. Connect Wallet: Click "Connect Wallet" β†’ Approve in Freighter
  3. Link GitHub: Click "Get GitHub Credential" β†’ Authorize with GitHub
  4. Request Credentials: Click "Request Credential" β†’ Select issuer & type
  5. Generate Proof: Click "Generate ZK Proof" on any credential
  6. Logout: Click "Logout" in the GitHub greeting banner

Architecture


πŸ‘₯ User Validation & Onboarding

As part of our MVP phase, we conducted live testing with 5 real testnet users to validate our ZK-identity flow.

User Feedback Summary

πŸ“Š Live Feedback Spreadsheet (Google Sheets)

Date Name Wallet Address Email UX Rating Favorite Feature Bugs/Errors Future Improvement
Mar 22, 2026 Satish jalan GDZWLHG6WBRYIGWE2JXJRI4LTXLWQSTBCSXK3XB6HLB2QOTS4DNXDSKP satishjalan9163@gmail.com 5/5 ZK Proof PDF None On-chain ZK-proof verification via Soroban smart contracts
Mar 22, 2026 Mufti Armaan GA5RKOAUAVEA5POB4HKI2HCIZ3K67SZYLUW5SOACOAKCNDSM4XLC5BPR flamecyborg5@gmail.com 5/5 PDF with QR Code None A small guide or tooltip for Freighter wallet connection
Mar 23, 2026 Amit Shah GCUOCLOPD3I7ECINEXFOJVGFQFNJILYW26BERBCCQBQ7WHJMICHR2WPM as3131257@gmail.com 5/5 Speed of proof generation None None
Mar 23, 2026 Rajdeep Dutta GB2CC6D3E3SXRJUPNJ43WGMFFYEN5CNP6NRY5L2S7NUDLEAZW5IMRVLK rajdeepdutta393@gmail.com 5/5 PDF report with QR code β€” practical and satisfying Dashboard loading lag β€” thought page stopped working Smoother dashboard loading with animation
Mar 24, 2026 Manjeet s. GDLQU6LOKWYX2EUNU7PNOK3IT27MEQD7FDR7EDWTWYVZ66HXSNKGAMO6 manjeetsharma0796@gmail.com 4/5 ZK Concept None More credentials to store

βœ… Completed Iteration (Post-Feedback)

Issue Identified: User Rajdeep Dutta noted that the "Dashboard takes a bit of time while loading credentials. At first I thought the page had stopped working."

Improvement Applied: We immediately implemented a modern Skeleton Loading System across the Dashboard. Instead of a blank screen or a single spinner, users now see structured placeholders that indicate data is being fetched, significantly improving the perceived performance.

πŸ”— Improvement Commit: feat: add skeleton loaders to improve dashboard UX


πŸ“ˆ Future Roadmap & Evolution

Based on the collected user feedback and our long-term vision, we have outlined the following evolution for StellarID:

Phase 1: Performance & UX Polish

  • Web Worker Proving: Move ZK-SNARK computation to a dedicated web worker to ensure the main UI thread remains 100% responsive.
  • Granular Progress Tracking: Implement a step-by-step progress indicator for the 3-stage verification (Querying β†’ Proving β†’ Uploading).

Phase 2: Ecosystem Expansion

  • Social Connectors: Expand identity issuers beyond GitHub to include LinkedIn, Twitter (X), and Discord.
  • Custom Claims: Allow platforms to request custom ZK-circuits (e.g., "Prove balance > 1000 XLM" without showing the amount).

Phase 3: Mobile & Enterprise

  • StellarID Mobile: A dedicated mobile app with biometric security (FaceID/Fingerprint) for instant on-the-go ZK verification.
  • Enterprise SDK: A plug-and-play SDK for corporate platforms to integrate StellarID verification with two lines of code.

🀝 Contributing

We welcome contributions from the community!

# Fork the repo
# Create your feature branch
git checkout -b feature/amazing-feature

# Commit your changes
git commit -m "feat: add amazing feature"

# Push to the branch
git push origin feature/amazing-feature

# Open a Pull Request

Please read our Contributing Guide for details on our code of conduct and development process.


πŸ“œ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


πŸ“¬ Contact

Channel Link
GitHub @iamomm-hack
Twitter/X @omdotcmd
Email iamkumarom.edu@gmail.com

Built with ❀️ on Stellar
StellarID β€” Verify once. Prove everywhere.

About

StellarID is a privacy-first, decentralized identity platform built on Stellar & Soroban. It solves the privacy problem by allowing users to 'Verify Once, Prove Everywhere' using Zero-Knowledge (ZK) Proofs. Generate verifiable offline proofs and shareable PDF certificates without ever exposing your real personal data to third parties! πŸ›‘οΈ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors