The design studio
The part that removes the third-party dependency is that the certificate is designed inside the platform. A drag-and-drop canvas editor built on react-konva handles text, shapes, images, QR codes, and background images, with placeholders such as {{recipient.name}} and {{issued_date}} resolved at issuance.
That is what makes batch issuance possible at all: a design with placeholders is a template, and a template can be rendered a thousand times.
Issuance
Credentials are issued to individual recipients or to entire groups in a single operation, with PDF and PNG rendered automatically — Apache PDFBox for the document, ZXing for the QR code — and delivered over SMTP using customisable email templates. Recipients are managed individually, imported by CSV, and organised into groups.
Verification, and why it is signed
Every credential is signed with Ed25519 via Google Tink and has a public verification page carrying a QR code, a status badge, and a Verifiable Credential JSON-LD payload. A certificate that cannot be checked is a picture; the signature and the public page are what make it a credential.
Tracking the LinkedIn post
A one-click "Add to LinkedIn" action auto-fills the certification details — name, organisation, dates, credential URL. Beyond convenience for the recipient, it is the mechanism that lets the community see whether an issued certificate was actually published.
Platform
Multi-workspace with Owner, Admin, and Member roles; an analytics dashboard; a timestamped audit log with user attribution; and scoped API keys plus event webhooks for programmatic use.
Stack
Spring Boot with Spring Security and Spring Data JPA over PostgreSQL, Flyway for migrations, Redis for caching and sessions, and MinIO for S3-compatible object storage of the rendered files. Frontend on React and TypeScript with Vite, Tailwind CSS, Zustand, TanStack Query, and Framer Motion. Authentication is JWT access plus refresh with BCrypt hashing, alongside Firebase-based Google OAuth.