๐ Web3 certificate minting and verification on Stellar.
Live Production: https://cert-mint.vercel.app
Youtube Demo Video : https://youtu.be/m4fN9fJSC18
CertMint is a certificate minting platform built on the Stellar network. It lets organizations mint, verify, and manage NFT-backed certificates with public proof, transaction history, and a clean reviewer-friendly audit trail.
The project is focused on real certificate workflows, not generic task farming. The value is in proof, transparency, and verification.
- ๐งพ Certificates are verifiable from IDs or transaction hashes.
- ๐ฐ๏ธ Stellar testnet transaction history provides public proof.
- ๐ก๏ธ Verification pages reduce fake credential risk.
- ๐ Admin views help track minting, logs, wallets, and system status.
- ๐ฑ The app is responsive for desktop and mobile review.
| Layer | Technology |
|---|---|
| Frontend | Next.js, React, TypeScript |
| Styling | Tailwind CSS |
| Wallet | Freighter |
| Blockchain | Stellar Testnet |
| Smart Contracts | Soroban (Rust) |
| Database / Auth | Supabase |
| E2E Testing | Playwright |
| Contract Testing | cargo test |
| Deployment | Vercel |
| Contract | Contract ID | Verify Link | Status |
|---|---|---|---|
| NFT Certificate Contract | CCBM2ZDOU3LUDVWNX6TV55YDLRH2EO6LXYL7SRXYI3HXT422MNSWJSUY | Stellar Expert | Verified on testnet |
| Verifier Contract | CBUVPMCNQ33YITCLGQGPRXAMS3C3BYCBLREEXRIFVRJ5LUYJXJTM4NGA | Stellar Expert | Verified on testnet |
| Item | Value |
|---|---|
| Network | Stellar Testnet |
| RPC | https://soroban-testnet.stellar.org |
| Horizon | https://horizon-testnet.stellar.org |
| Env Key | NEXT_PUBLIC_NFT_CONTRACT_ID |
| Env Key | NEXT_PUBLIC_VERIFIER_CONTRACT_ID |
| Env Key | NEXT_PUBLIC_SOROBAN_RPC_URL |
The repository does not currently automate on-chain deployment in CI. Use the Soroban CLI and a funded deploy account to publish contracts after building artifacts.
npm run build:contracts
pwsh ./scripts/deploy-contracts.ps1 -Network testnet -DeployIf you do not want to deploy immediately, build artifacts only with:
npm run build:contracts- โ On-chain issuer reputation tracking for every issued certificate.
- โ Endorsement support: certificates can receive on-chain endorsements and endorsement history can be queried.
- โ Verifier contract performs cross-contract validation by querying the NFT contract directly.
- โ
npm run build - โ
npm run test:e2e - โ
cargo test
E2E Test :
Contract Test:
CertMint is designed around public proof and controlled access.
- ๐ Wallet-based identity for signed actions.
- ๐ฎ Admin approval flow for sensitive access.
- โ Certificate verification by ID or transaction hash.
- ๐งพ On-chain records for minting proof.
- ๐งช Repeatable test evidence for reviewers.
| Area | Feature | Status |
|---|---|---|
| Landing | Public product overview | Implemented |
| Auth | Sign in / Sign up flow | Implemented |
| Minting | Certificate mint wizard | Implemented |
| Approvals | Multi-Level Workflows (Standard: Faculty/Issuer โ Admin โ Mint; Academic: Faculty โ HOD โ Registrar โ Mint) | Implemented |
| Endorsements | On-chain endorsements for issued certificates | Implemented |
| Reputation | Issuer Reputation System (Total Issued, Revoked Count, Reputation Score tracked on-chain) | Implemented |
| Hooks | Shared wallet and mint integration logic | Added |
| Verification | Search by certificate ID or TX hash | Implemented |
| Admin | Logs, wallets, certs, tx pages | Implemented |
| Campaigns | Manage Campaign nav item | Added |
| Contract | Capability | Purpose |
|---|---|---|
| nft_certificate | mint | Create certificate NFTs & increments issuer reputation score |
| nft_certificate | transfer | Move ownership |
| nft_certificate | burn / revoke path | Invalidate issued credentials & decrements issuer reputation score |
| nft_certificate | get_issuer | Query issuer reputation data (total issued, revoked, reputation score) |
| nft_certificate | endorse_certificate | Add on-chain endorsements to a certificate |
| nft_certificate | get_endorsements | Query certificate endorsement history |
| verifier | verify by token | Validate a certificate record |
| verifier | verify by wallet | Check ownership-related proof |
| Error Type | Where It Appears | User Response |
|---|---|---|
| Invalid reference | Verify page | "Certificate not found" message |
| Missing contract config | Mint flow | Clear configuration error |
| Role / access mismatch | Protected routes | Redirect or block |
| Contract call failure | Blockchain actions | Retry-friendly feedback |
app/
(minter)/
dashboard/
manage-campaign/
manage-minted/
mint/
profile-settings/
admin/
auth/
certificate/[id]/
collection/[wallet]/
hooks/
use-integration.ts
verify/
components/
admin/
landing/
minter/
contracts/
nft_certificate/
verifier/
lib/
auth/
supabase/
public/
assets/
tests/
e2e/
flowchart TD
A[Open CertMint] --> B[Connect Wallet]
B --> C[Sign In or Sign Up]
C --> D[Create Certificate Proposal]
D --> E{Select Workflow}
E -->|Standard| F[Pending Admin Approval]
F --> G[Admin Approves]
E -->|Academic| H[Pending HOD Approval]
H --> I[HOD Approves]
I --> J[Pending Registrar Approval]
J --> K[Registrar Approves]
G --> L[Mint Certificate NFT via Freighter]
K --> L
L --> M[Update Issuer Reputation on Stellar]
M --> N[Verify by ID or TX Hash]
N --> O[View Public Result & On-Chain Reputation]
flowchart LR
UI[Next.js UI] --> SA[Server Actions]
UI --> W[Freighter Wallet]
UI --> HK[Shared Hooks]
SA --> DB[Supabase: approval state, roles & audit logs]
SA --> SC[Soroban Contracts: NFT Certificate & Verifier]
SC --> ST[Stellar Testnet: on-chain proof & issuer reputation]
DB --> AD[Admin / Approvals Queue Dashboard]
HK --> W
HK --> SA
npm installCopy .env.example to .env.local and fill the values.
npm run devnpm run lint
npm run build
npm run test:e2e
cd contracts
cargo test --all
cargo build --release --target wasm32v1-noneEnsure you have Docker and Docker Compose installed, then follow these steps:
- Configure environment variables inside your
.envfile (copied from.env.example). - Build and start the container using Docker Compose:
Note: Next.js public environment variables (
docker compose up --build -d
NEXT_PUBLIC_*) are read from.envand baked in at build time. - Access the application at
http://localhost:3000. - Stop the container:
docker compose down
- ๐ฆ IPFS-backed image certificate storage
- ๐ฉโ๐ Student dashboard for certificate history
- ๐ซ Institution onboarding and issuer collaboration
- ๐ชช Stronger identity verification integration
- ๐ Better analytics for certificate usage and trust
- ๐ Email / webhook verification notifications
Love doing this amazing project on stellar ecosystem! โค๏ธ Built for verifiable credentials, public trust, and a cleaner certificate workflow on Stellar.













