A comprehensive, secure, and user-friendly platform for creating, managing, and distributing certificates in bulk. CertiNova enables organizations to generate personalized certificates efficiently while maintaining data security through advanced encryption.
- Overview
- Key Features
- Dashboard
- Certificate Design Studio
- Bulk Certificate Generation
- Certificate Verification
- Security & Privacy
- Technology Stack
- Architecture
- API Reference
- Installation Guide
CertiNova is a full-stack web application designed to streamline the certificate generation process for educational institutions, organizations, and event coordinators. The platform combines intuitive design with robust security features to handle bulk certificate creation while protecting sensitive recipient data.
Traditional certificate generation involves:
- Manual creation of individual certificates
- Time-consuming personalization processes
- Security concerns with recipient data storage
- Limited customization options
- Difficulty in managing large recipient lists
CertiNova addresses these challenges by providing:
- Automated Bulk Generation: Generate hundreds of personalized certificates simultaneously
- Advanced Security: End-to-end AES-256 encryption for all recipient data
- Visual Editor: Drag-and-drop interface for certificate design
- Smart Field Positioning: Precise placement of dynamic content with live preview
- URL-based Verification: Public-facing verifiable certificate links
- Modern UI/UX: Intuitive, premium interface built with modern design principles
- Visual Drag-and-Drop Editor for precise placement of certificate fields
- Custom Template Upload — bring your own certificate background via image upload
- Dynamic Field Types: Recipient Name, Organisation Name, Rank/Position, Certificate Link, QR Code
- Typography Controls: Custom font family, weight, style, color per field
- Live Preview Mode: See your certificate rendered exactly as it will be generated
- Edit Existing Templates: Modify previously saved certificate configurations
- Grid View: Card-based certificate overview with thumbnail previews
- Table View: Compact list view with quick action buttons per row
- Preview Pane: Windows File Explorer-style detail panel — click any event in table view to see the certificate preview and all actions on the right
- Statistics Cards: Quick summary of total certificates, recipients, success rate, active events
- One-click Actions: Edit, Download Sample, and Delete directly from both views
- Manual Recipient Entry: Add recipients one by one with name, email, and rank
- CSV/Excel Import: Bulk-import recipient lists via spreadsheets
- QR Code Embedding: Auto-generates personalized QR codes linking to the certificate's verification URL
- Certificate Link Field: Embeds the unique verification URL directly on the certificate image
- ZIP Download: Download all generated certificates as a single
.zipfile - Individual Downloads: Download specific recipient certificates directly
- Confetti Celebration: Visual feedback on successful bulk generation
- Password-Protected Generation: All recipient data encrypted before storage
- Public Shareable Links: Every certificate has a unique URL in the format
{BASEURL}/verify/{UUID} - No Login Required: Fully public-facing, anyone can verify a certificate
- Animated Verification Progress: Step-by-step visual verification with real-time progress indicators
- Split-pane Layout: Verification details on the left; rendered certificate preview on the right
- Sample Certificate Rendering: Renders a visual sample certificate using the original template and field configuration (with placeholder identity to protect recipient privacy)
- QR Code Support: QR codes on generated certificates link directly to this verification URL
- Certificate Preview Download: Download the sample certificate image from the verification page
- UUID Input Modal: Enter a certificate's UUID manually in 5 segmented input boxes
- Paste Support: Paste a full UUID (
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) into any box and it auto-populates all segments - Auto-focus Progression: Automatically advances to the next input segment on completion
- Auto-population from URL: Opening the modal with a pre-loaded UUID pre-fills the fields
- Animated Step Progress: Circular progress indicators for UUID Lookup, Certificate Validation, and Issuer Verification steps
- Issuer & Event Details: Displays organisation, issuer name, event name, and event date on success
- View History: Browse an archive of all previously generated certificate batches
- Search & Filter: Find certificates by event name, date, or recipient count
- Encrypted Recipient Access: Decrypt recipient data with the original password to view names and emails
- Metadata Display: Shows total recipients, generation date, and batch details
CertiNova is built with a Privacy-by-Design philosophy:
- AES-256-CBC Encryption: All recipient personal data encrypted before database storage
- PBKDF2 Key Derivation: Password-based encryption with SHA-256 (10,000 iterations) and unique salts
- IV Generation: Unique initialization vectors for each encryption operation
- Zero Plain-text Storage: Recipient names, emails, and ranks are never stored in plain text
Since recipient data is encrypted and not accessible without the password, the public verification page renders the certificate layout using a placeholder Indian identity (e.g., "Aarav Sharma", "1st"). This demonstrates the certificate format and authenticity without exposing any private recipient information.
- bcrypt Password Hashing: All user passwords hashed with salt rounds
- Organisation-based Isolation: Each organisation sees only their own events and certificates
- Protected Routes: Dashboard and sensitive pages require authentication
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 22+ | Runtime environment |
| Express.js | 5.1.0 | REST API framework |
| MongoDB | — | Document database |
| Mongoose | 8.17.1 | ODM / schema management |
| bcrypt | 6.0.0 | Password hashing |
| Multer | 2.0.2 | File upload handling |
| Cloudinary | — | Certificate image hosting |
| crypto (built-in) | — | AES-256 encryption |
| dotenv | — | Environment configuration |
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15+ | React framework (App Router) |
| React | 19+ | UI library |
| TypeScript | 5 | Type-safe development |
| Tailwind CSS | 4 | Utility-first styling |
| Framer Motion | 11 | Animations & transitions |
| Radix UI | — | Accessible UI primitives |
| CryptoJS | 4.2.0 | Client-side encryption |
| qrcode | — | QR code generation |
| JSZip | — | Bulk ZIP file download |
| XLSX | — | Excel/CSV parsing |
| uuid | — | UUID generation per recipient |
| canvas-confetti | — | Celebration effect on generation |
| Lucide React | — | Icon library |
Users
├── organisation (String)
├── email (String, unique)
├── password (bcrypt hash)
└── timestamps
Events
├── organisation (String)
├── organisationID (ref: User)
├── eventName (String)
├── issuerName (String)
├── date (Date)
└── timestamps
CertificateConfig
├── eventId (ref: Event)
├── imagePath (String — Cloudinary URL)
├── validFields (Object — field positions & styles)
└── timestamps
GeneratedCertificate
├── certificateId (ref: CertificateConfig)
├── noOfRecipient (Number)
├── rank (Boolean)
├── encryptedRecipients
│ ├── encryptedData (AES-256-CBC ciphertext)
│ ├── salt (PBKDF2 salt)
│ └── iv (initialization vector)
├── generatedBy (ref: User)
└── timestamps
VerifyUUID
├── uuid (String, unique)
├── certificateId (ref: GeneratedCertificate)
├── isValid (Boolean)
└── timestamps
POST /api/auth/signup # Register a new organisation
POST /api/auth/login # Login and receive session tokenPOST /api/events/addEvent # Create a new event
GET /api/events/:organisationId # List events for an organisation
DELETE /api/events/:eventId # Delete an event and its configPOST /api/certificates/addCertificateConfig # Save field layout
GET /api/certificates/config/:eventId # Fetch event's layout
PUT /api/certificates/config/:configId # Update layout
POST /api/certificates/upload-template # Upload background imagePOST /api/certificates/storeGenerated # Store encrypted batch
GET /api/certificates/generated # List all batches (encrypted)
POST /api/certificates/generated/decrypt # Decrypt with password
PATCH /api/certificates/update-recipient-count # Update countGET /api/certificates/verify/:uuid # Simple UUID check
GET /api/certificates/verify-full/:uuid # Full data for rendering sample cert- Node.js 22.x or higher
- npm
- MongoDB 5.x or higher
cd certinova-backend
npm install
# Configure environment
# Create a .env file with:
# PORT=5000
# MONGODB_URI=mongodb://localhost:27017/certinova
# NODE_ENV=development
# CLOUDINARY_CLOUD_NAME=...
# CLOUDINARY_API_KEY=...
# CLOUDINARY_API_SECRET=...
npm run devcd certinova-frontend
npm install
# Configure environment
# Create a .env.local file with:
# NEXT_PUBLIC_API_URL=http://localhost:5000/api
npm run dev- Sign Up: Create an organisation account with your name and email
- Log In: Access your secure dashboard
- Click + New Certificate in the navbar
- Enter your Event Name and Issuer Name
- Upload a custom background template image
- Use the drag-and-drop editor to position dynamic fields:
Recipient Name— personalized per certificateOrganisation Name— your organisation nameRank— optional rank/position fieldCertificate Link— prints the verification URLQR Code— a scannable QR linking to the public verification page
- Customize fonts, colours, and styles per field
- Save the template
- Click Send Certificates in the navbar
- Select the certificate template (event)
- Add recipients via manual entry or CSV/Excel import
- Fields: Name (required), Email (optional), Rank (optional)
- Set a strong encryption password — this protects all recipient data
- Click Generate — all certificates are rendered and a ZIP is downloaded
- Each certificate gets a unique UUID stored in the verification database
- Via URL: Visit
{BASEURL}/verify/{UUID}directly — a fully public page showing the verified certificate sample - Via Modal: Open the verification modal from the navbar, enter the UUID manually or paste it in full
- The verification page shows organisation, issuer, event, date, and a rendered sample certificate image
- Use Grid View for visual card-based browsing
- Use Table View for a compact list — click any row to see the Preview Pane on the right
- Access View History to browse past generation batches
- Download Sample to get a preview certificate image for any template
This project is licensed under the MIT License.
Built with ❤️ for efficient and secure certificate management
