DigiCertificate is a multi-tenant SaaS platform built for event organizers, academic institutions, and online course providers to issue, deliver, and verify tamper-proof digital certificates.
The platform provides a visual certificate canvas editor, bulk Excel processing, dynamic QR code verification, transactional email distribution via Resend, 1-click LinkedIn profile credential sharing, and Paddle subscription billing.
- Upload custom certificate background templates (PNG, SVG).
- Dynamic drag-and-drop placeholder positioning for recipient names and multi-line descriptions.
- Customizable font families, font sizes, text alignment, and colors using Konva canvas rendering.
- Participant Claiming: Public event pages where attendees input verified details to self-serve claim and download their credentials.
- Bulk Excel Import: Batch upload
.xlsxspreadsheets to generate hundreds of certificates concurrently. - Client-side rendering and ZIP archive generation for offline downloads.
- Tamper-Proof IDs: Unique, unforgeable NanoID assigned to every issued certificate.
- Dynamic QR Codes: Automated QR code generation embedded on certificates leading directly to the public verification endpoint (
/verify/:certId). - Zero-Storage Live Re-rendering: Certificates are rendered live on-demand from the event template and verified database record, eliminating storage costs for rendered image blobs while ensuring authenticity.
- Revocation Control: Real-time credential revocation management from the organization admin panel.
- Integrated LinkedIn Add to Profile deep-link modal.
- Automatically pre-populates certification title, issuing organization name, issue date, credential ID, and verification link.
- One-click credential link copying and media image download helper.
- Transactional email dispatch powered by the Resend API.
- Delivers unique claim and verification links directly to recipient inboxes.
- Real-time delivery progress monitoring (sent, pending, failed) with a "Resend Failed Only" retry mechanism.
- Workspace organization model with role-based access control (
owner,admin). - Tiered subscription plans (Free, Starter, Growth, Enterprise) with monthly quotas for certificates, events, and emails.
- Paddle checkout integration with automated webhook synchronization for instant upgrades.
- Frontend: React 19, Vite, Tailwind CSS, React Router v7
- Canvas & Export: Konva (
react-konva), jsPDF, html2canvas, SVG2PDF, JSZip, SheetJS (xlsx), QRCode - Backend & Database: Vercel Serverless Functions, Node.js, Firebase Admin SDK, Cloud Firestore
- Authentication: Firebase Authentication
- Integrations: Resend API (Transactional Email), Paddle (Subscription Billing)
┌───────────────────────────┐
│ Client Web App │
│ (React 19 + Vite + Canvas)│
└─────────────┬─────────────┘
│
┌──────────────────────┴──────────────────────┐
▼ ▼
┌───────────────────────┐ ┌───────────────────────┐
│ Vercel API Endpoints │ │ Firebase Auth & Client│
│ (Node.js Serverless) │ │ Firestore SDK │
└───────────┬───────────┘ └───────────────────────┘
│
┌──────────────────┼──────────────────┬──────────────────┐
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Cloud │ │ Firebase │ │ Resend API │ │ Paddle │
│ Firestore │ │ Admin SDK │ │ (Email API) │ │ Webhooks │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
DigiCertificate/
├── api/ # Vercel Serverless entry points & route wrappers
│ ├── index.js # Serverless route router
│ └── billing/ # Paddle webhook & checkout handlers
├── server/ # Backend domain handlers
│ ├── lib/ # Auth verification, Firebase Admin, plan limits
│ └── routes/ # API endpoints (certificates, events, email, billing)
├── src/ # React frontend application
│ ├── components/ # Reusable UI components & modals (LinkedInAddModal, etc.)
│ ├── context/ # AuthContext & global state providers
│ ├── pages/ # Admin, Verification, Claiming, and Editor pages
│ └── utils/ # Certificate canvas rendering & export helpers
├── firestore.rules # Security rules for Cloud Firestore
├── vercel.json # Vercel serverless build & rewrite rules
├── vite.config.js # Vite configuration & plugin pipeline
└── package.json # Node.js dependencies and scripts
- Node.js (v18 or higher recommended)
- npm or yarn
- Firebase Project with Firestore and Authentication enabled
- Resend Account (for email delivery)
- Paddle Vendor Account (for subscription billing)
-
Clone the repository:
git clone https://github.com/umarfarooq3488/DigiCertificate.git cd DigiCertificate -
Install dependencies:
npm install
-
Configure Environment Variables: Create a
.env.localfile in the root directory:# Firebase Client SDK Configuration VITE_FIREBASE_API_KEY=your_api_key VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com VITE_FIREBASE_PROJECT_ID=your_project_id VITE_FIREBASE_STORAGE_BUCKET=your_project.firebasestorage.app VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id VITE_FIREBASE_APP_ID=your_app_id # Firebase Admin Service Account (JSON stringified) FIREBASE_SERVICE_ACCOUNT='{"type":"service_account",...}' # Resend Transactional Email API RESEND_API_KEY=re_123456789 # Paddle Subscription Billing Configuration VITE_PADDLE_CLIENT_TOKEN=test_abcdef123456 VITE_PADDLE_ENV=sandbox # or 'production' PADDLE_API_KEY=pdl_123456789 PADDLE_WEBHOOK_SECRET_KEY=pdl_whsec_123456789
-
Start Development Server:
npm run dev
-
Build for Production:
npm run build
| Endpoint | Method | Description |
|---|---|---|
/api/certificates/verify |
POST |
Fetches verified certificate metadata & event details for public verification. |
/api/certificates/claim |
POST |
Handles self-service certificate claiming for event attendees. |
/api/certificates/register-bulk |
POST |
Bulk registers recipient certificates to Firestore. |
/api/email/send-bulk |
POST |
Processes batch transactional email sends via Resend. |
/api/events/create |
POST |
Creates a new event under the organization account. |
/api/events/public |
POST |
Fetches public event data for claim pages. |
/api/organizations/create |
POST |
Initializes a new organization account workspace. |
/api/billing/create-checkout |
POST |
Generates Paddle checkout transaction parameters. |
/api/billing/sync-checkout |
POST |
Immediately verifies completed checkout transactions with Paddle. |
/api/billing/webhook |
POST |
Processes incoming Paddle subscription status events. |
- Server-Side Trust Boundary: Sensitive operations (certificate creation, bulk email dispatch, subscription management, revocation) are executed strictly via Serverless API endpoints using the Firebase Admin SDK.
- Firestore Security Rules: Direct client-side database access is restricted by
firestore.rulesto prevent unauthorized document manipulation or unverified certificate generation.
This project is licensed under the MIT License.