A powerful web-based application for batch certificate generation and automated email delivery.
- Upload PDF Templates: Use any PDF as your certificate template
- Visual Field Editor: Drag-and-drop positioning for dynamic text fields
- Customizable Styling: Font family, size, color, weight, and alignment
- Batch Processing: Generate thousands of certificates from CSV files
- Custom Naming: Flexible file naming patterns with placeholders
- Local Storage: Choose where to save generated certificates
- WYSIWYG Email Editor: Rich text editing with HTML support
- Template Management: Save and reuse email templates
- Placeholder Support: Dynamic content like
{{name}},{{event_name}} - Gmail Integration: Built-in SMTP configuration for Gmail
- Rate Limiting: Automatic delays to avoid email provider bans
- Delivery Tracking: Real-time status for each recipient
- Retry Failed: One-click retry for failed emails
- Job Progress: Real-time progress tracking with Socket.IO
- Statistics: Overview of certificates generated and emails sent
- Recipient Management: Filter and paginate through recipients
- Error Reporting: Detailed error messages for troubleshooting
- React 18 with TypeScript
- Vite for fast development
- TailwindCSS for styling
- TipTap for WYSIWYG email editing
- Fabric.js for visual field positioning
- Socket.IO for real-time updates
- Node.js with Express
- TypeScript
- Prisma ORM with SQLite
- pdf-lib for PDF generation
- Nodemailer for email delivery
- Socket.IO for real-time communication
- Node.js 18+ installed
- npm or yarn
-
Clone the repository
git clone https://github.com/yourusername/certiflow.git cd certiflow -
Install dependencies
npm run install:all
-
Set up the database
cd server npm run db:generate npm run db:push npm run db:seed cd ..
-
Start the development servers
npm run dev
-
Open the app
- Frontend: http://localhost:5173
- Backend: http://localhost:4000
CertiFlow/
βββ client/ # React Frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ services/ # API and Socket clients
β βββ ...
βββ server/ # Node.js Backend
β βββ src/
β β βββ routes/ # API endpoints
β β βββ services/ # Business logic
β β βββ lib/ # Utilities
β βββ prisma/ # Database schema
βββ sample-data/ # Test data files
βββ README.md
- Navigate to Certificates page
- Upload your PDF certificate template
- Give it a descriptive name
- Add dynamic fields (e.g.,
name,email,event_name) - Position fields on the template using drag-and-drop
- Customize font, size, color, and alignment
- Save the configuration
- Prepare a CSV with columns matching your field names
- Required columns:
name(orfull_name),email - Upload the CSV file
- Verify the data preview
- Choose output folder path
- Set file naming pattern (e.g.,
{{sn}}_{{name}}.pdf) - Click "Generate Certificates"
- Monitor progress in real-time
- Navigate to Email page
- Create or select an email template
- Select the certificate batch job
- Configure SMTP (Gmail)
- Send test email first
- Start batch sending
- Enable 2-Factor Authentication on your Google Account
- Go to Google App Passwords
- Create a new App Password for "Mail"
- Use these settings in CertiFlow:
- Host:
smtp.gmail.com - Port:
587(TLS) - Username: Your Gmail address
- Password: The 16-character App Password
- Host:
- Free Gmail: 500 emails/day
- Google Workspace: 2,000 emails/day
- Recommended delay: 3000ms (3 seconds) between emails
Check the sample-data/ folder for:
participants.csv- Sample CSV with 10 test participants
POST /api/templates/certificate- Upload certificate templateGET /api/templates/certificate- List templatesPUT /api/templates/certificate/:id- Update templatePOST /api/templates/email- Create email templateGET /api/templates/email- List email templates
POST /api/certificates/preview- Preview certificatePOST /api/certificates/generate- Start batch generationGET /api/certificates/download/:id- Download single certificateGET /api/certificates/download-all/:jobId- Download all as ZIP
POST /api/email/preview- Preview emailPOST /api/email/test-send- Send test emailPOST /api/email/send-batch- Start batch sending
GET /api/jobs- List jobsGET /api/jobs/:id- Get job detailsGET /api/jobs/:id/progress- Get job progressPOST /api/jobs/:id/retry-failed- Retry failed recipients
GET /api/settings- Get app settingsPUT /api/settings- Update settingsPOST /api/settings/smtp- Add SMTP configPOST /api/settings/smtp/test- Test SMTP connection
- SMTP passwords are stored (consider encryption for production)
- File uploads are validated for type and size
- Rate limiting on email sending prevents abuse
npm run buildCreate a .env file in the server directory:
PORT=4000
DATABASE_URL="file:./data/certiflow.db"
NODE_ENV=production- VPS: DigitalOcean, Linode, AWS EC2
- PaaS: Railway, Render
- Docker: Use the provided docker-compose.yml
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.
Built with β€οΈ using React, Node.js, and pdf-lib