Skip to content
MrPrinceAliPublic

About

🛡️ Proven-ID — Anyone can claim a skill, Proven-ID lets you prove it. Verified professional identity: W3C Verifiable Credentials signed by issuers & anchored on BNB Smart Chain. Zero PII on-chain, honest AI.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Proven-ID — Anyone can claim a skill. Proven-ID lets you prove it.

Verified professional identity for the on-chain era

Turn claims about your skills, experience, projects and achievements into
W3C Verifiable Credentials signed by a real issuer and anchored on BNB Smart Chain,
which anyone can check, even without our server.

Live demo Sample profile BNB Smart Chain Testnet

CI MIT License Tests Contract coverage Zero PII on-chain PRs welcome

Next.js 14 TypeScript Solidity Foundry viem Fastify Prisma Tailwind CSS Claude W3C VC 2.0

Live demo · Try it · How it works · Architecture · Getting started · Docs

Built for the Indonesia Web3 Hackathon by BNB Chain · track Consumer Apps


✨ Why Proven-ID?

Anyone can write "Expert in Solidity" on a CV. Recruiters, campuses and clients can't tell which claims are real. Proven-ID links every claim to evidence, has a trusted issuer sign it, and anchors a fingerprint on-chain. Verifying a claim takes one click instead of a phone call.

🔏 Verifiable by anyone

Each credential is a W3C VC 2.0 / Open Badges 3.0 document, signed with EIP-712. Its sha256(JCS(vc)) is anchored to CredentialRegistry on BNB Smart Chain. The independent verifier re-computes the hash in the browser and reads the chain directly.

🛡️ Private by design

Zero personal data on-chain: only bytes32 hashes, addresses, numbers and booleans, enforced by tests. Evidence files are encrypted with AES-256-GCM and come with a SHA-256 chain of custody. Names live off-chain only.

🤖 Honest AI

Claude helps you write summaries, tailor your CV and classify evidence, using only your own data. Deterministic guardrails stop invented skills: "Skill detected — evidence not found." AI never grants Verified. Only issuers do.

🚀 Try it in 60 seconds

No wallet needed. Demo mode creates a sandbox account just for you.

  1. Open proven-id.vercel.app.
  2. Click Coba sebagai User. You get a profile (e.g. Salsa Maharani) with claims, an encrypted certificate and a pending verification request.
  3. Click Beralih ke Issuer demo and approve the request as XYZ Community. This sends a real transaction on BSC Testnet.
  4. Switch back to the user. The achievement now shows Terverifikasi with a QR code, a public verification page and an on-chain proof.
  5. Open the verification page and press Periksa ulang to verify independently, straight from the blockchain.

Or browse the sample profile: /p/arya-pratama.

📸 Screenshots

Landing page
How it works — Create
01 Create: claim + encrypted evidence + SHA-256
How it works — Prove
02 Prove: issuer signs, chain records
How it works — Share
03 Share: profile, QR, CV, verifiable anywhere
Public profile
Public profile with verified credentials + QR
Credential verification
Verification page: on-chain status + independent check
Issuer dashboard
Issuer dashboard: review evidence, approve, revoke
Mobile
Mobile first

🧭 How it works

flowchart LR
    A["✍️ CLAIM<br/>skill · experience · project<br/>achievement · community"] --> B["📎 EVIDENCE<br/>PDF/PNG/JPG ≤ 4 MB<br/>SHA-256 + AES-256-GCM"]
    B --> C["🧑‍⚖️ VERIFICATION<br/>registered issuer<br/>reviews the evidence"]
    C --> D["📜 CREDENTIAL<br/>W3C VC 2.0 · Open Badges 3.0<br/>EIP-712 signature"]
    D --> E["⛓️ PROOF<br/>sha256(JCS(vc)) anchored on<br/>BNB Smart Chain"]
    E --> F["✅ PROVEN<br/>profile · QR · CV PDF<br/>verify anywhere"]
Loading
sequenceDiagram
    autonumber
    actor U as User
    participant W as Proven-ID (Next.js + Fastify)
    actor I as Issuer
    participant C as BNB Smart Chain
    U->>W: Sign-In with Ethereum (EIP-4361) or demo mode
    U->>W: Add claim + upload evidence (hash, encrypt, custody log)
    U->>W: Request verification from an issuer
    I->>W: Review claim + evidence (optional AI hint)
    I->>W: Approve
    W->>C: CredentialRegistry.anchor(credentialHash, subjectRef) — bytes32 only
    W-->>U: Signed VC (EIP-712) + tx proof
    Note over U,C: Anyone: /verify/{id} → recompute hash in browser → read chain directly
Loading
Status Meaning
UNVERIFIED · CLAIM_WITHOUT_EVIDENCE Claimed, no proof yet
EVIDENCE_ATTACHED Evidence linked, not yet reviewed by a third party
PENDING_ISSUER Waiting for the issuer
VERIFIED Credential issued by a registered issuer and anchored on-chain
EXPIRED · REVOKED Past validUntil, or revoked on-chain by the issuer

🏗️ Architecture

Everything runs in the cloud on free tiers. No Docker, no servers to babysit.

flowchart TB
    subgraph Browser
      UI["Next.js 14 UI<br/>user · issuer · verifier"]
      IV["Independent verifier<br/>(viem, in-browser)"]
    end
    subgraph Vercel["Vercel (sin1)"]
      WEB["apps/web<br/>App Router"]
      API["apps/api<br/>Fastify, mounted at /api/*"]
    end
    DB[("Neon Postgres<br/>Prisma")]
    BSC[["BNB Smart Chain Testnet<br/>IssuerRegistry · CredentialRegistry · CredentialSBT"]]
    LLM["Claude (optional)<br/>or deterministic mock"]
    UI --> WEB --> API
    API --> DB
    API --> BSC
    API --> LLM
    IV -- "public RPC, no Proven-ID server" --> BSC
    GH["GitHub Actions<br/>CI · E2E · ops (deploy, register, seed)"] -.-> Vercel
Loading
Package What's inside
apps/web Next.js 14 App Router: landing, user dashboard, issuer dashboard, public profiles, verifier
apps/api Fastify 4: SIWE auth, profiles, evidence vault, issuer flow, verification, AI, chain adapter
packages/contracts Foundry: IssuerRegistry, CredentialRegistry, CredentialSBT + typed ABIs
packages/vc Isomorphic VC toolkit: schema, JCS + SHA-256, EIP-712, verifyVC
packages/ai LLM client (Claude / mock), versioned prompts, guardrails, eval set
packages/db Prisma schema + migrations (Postgres 16)
packages/ui "Ledger & Seal" design system: green theme, status badges, icons

Deployed contracts (BSC Testnet · chainId 97)

Contract Address
IssuerRegistry 0x69d3961b65dcfff10bf7a71d93375cAe4bE70dC3
CredentialRegistry 0xcCbC054C107405F0BB8d7adCE3f780914e9Bf0d4
CredentialSBT 0x5AaD146A14357a1ad91bBFEecB065e173cFc2811

🔐 Golden rules

  1. No PII on-chain. Only bytes32, address, uint, bool. A system-level E2E test scans every registry log.
  2. AI never invents. No skill or experience may appear that isn't in the user's own data.
  3. The issuer is the authority. Verified only comes from an issuer-signed credential.
  4. Private keys stay on the server. Never in the browser or in NEXT_PUBLIC_*.
  5. Deterministic hashes. credentialHash = sha256(JCS(vc without proof)), with golden test vectors.
  6. Human in the loop. AI output is never saved without the user's confirmation.

🧪 Quality

Suite Tests Notes
Smart contracts (Foundry) 46 100% coverage, fuzz tests on CredentialRegistry
API (Vitest + Postgres + Anvil) 129 ~96% coverage of services, real chain in CI
VC toolkit + AI guardrails 36 Golden vectors, prompt-injection and negative datasets
Web unit 13 CV model, explorer helpers, avatar route
End-to-end (Playwright) 15 Full core loop via UI, independent verify with the API down, tampering, revoke, privacy, demo mode

Every pull request runs lint, typecheck, unit + integration tests (Postgres + Anvil), Foundry and Playwright on GitHub Actions.

🛠️ Getting started

You don't have to run anything locally. CI and the Vercel preview check every change. To hack on it:

# Node 22, pnpm 9 (corepack enable), Foundry, Postgres 16
pnpm install
cp .env.example .env            # fill in values (never commit .env)
pnpm db:migrate && pnpm db:seed # local database + demo data
pnpm dev                        # web on :3000, API under /api/*

pnpm lint && pnpm typecheck && pnpm test
pnpm test:contracts             # Foundry
anvil & pnpm contracts:deploy:local
pnpm e2e                        # Playwright (needs Postgres + Anvil)

Deploying your own instance on BSC Testnet: see docs/DEPLOY-BSC-TESTNET.md.

📚 Documentation

Doc
PROVEN-WAVES.md Product spec (§S1–§S17) and delivery plan in waves W0–W8
DECISIONS.md Architecture decision log (D-001 …)
PROGRESS.md What shipped, wave by wave
DEPLOY-BSC-TESTNET.md Wallets, secrets, contracts, Vercel, seed
DEMO-SCRIPT.md 3-minute pitch demo script

Docs are written in Bahasa Indonesia; code and comments are in English.

🗺️ Roadmap

  • SIWE login · encrypted evidence vault · issuer flow · on-chain anchoring · revocation
  • Independent in-browser verification · public profiles · QR · verified CV PDF
  • Honest AI assistant with guardrails · demo mode for judges
  • Soulbound credential mint (CredentialSBT) from the UI
  • Multi-issuer onboarding and issuer reputation
  • Profile photo upload · recruiter-only visibility
  • BNB Smart Chain mainnet / opBNB

🤝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md. For security issues, see SECURITY.md.

🙏 Credits

Avatars: DiceBear "Notionists" by Zoish (CC0 1.0) · Standard logos: Simple Icons (CC0 1.0) · Fonts: Plus Jakarta Sans (Tokotype, OFL), Instrument Serif (OFL). All people shown in the demo (Arya Pratama, Salsa Maharani, …) are fictional.

📄 License

MIT © 2026 MrPrinceAli and Proven-ID contributors.

Made with 💚 in Indonesia · proven-id.vercel.app

About

🛡️ Proven-ID — Anyone can claim a skill, Proven-ID lets you prove it. Verified professional identity: W3C Verifiable Credentials signed by issuers & anchored on BNB Smart Chain. Zero PII on-chain, honest AI.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages