Credenza is a Next.js certificate generator for uploading a template, positioning names, generating PNG or PDF downloads, and emailing certificates through Gmail SMTP.
- Upload a certificate template image.
- Preview and position names with live canvas guides.
- Style names with font, size, color, weight, and italic controls.
- Manage recipients manually or by CSV/TXT import.
- Generate ZIP downloads of PNG or PDF certificates.
- Send certificates by email with live progress updates.
- Require first-run acceptance of terms before the app can be used.
- Next.js 15
- React 19
- TypeScript
- Tailwind CSS
- Radix UI primitives
- Nodemailer for Gmail SMTP
- Supabase Storage for certificate files
- jsPDF and JSZip for downloads
npm installCreate a .env.local file with the values below:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-gmail-app-password
SMTP_FROM=your-email@gmail.com
SMTP_SECURE=false
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-keynpm run devOpen http://localhost:3000 in your browser.
- Push the repository to GitHub.
- Import the project into Vercel.
- Add the same environment variables in the Vercel project settings.
- Deploy the app.
No local storage, Prisma database, or Google Drive setup is required.
- The app shows a mandatory terms modal on first load.
- Users must accept the Terms and Conditions and the fraud disclaimer before continuing.
- Generated certificate files are stored in Supabase and shared through expiring signed links.
- The project is intended for lawful certificate workflows only.
/main app/docsdocumentation/privacyprivacy policy/termsterms of service
npm run dev
npm run build
npm start
npm run lint