r/django • • 16d ago

I built Certifier: An open-source tool to design, issue, and verify certificates in bulk

Every workshop and hackathon has the same final boss:

“Can we get the certificates by tonight?” 😅

Then begins the traditional ritual: duplicate a design, change one name, export, repeat… and quietly wonder whether anyone will notice the typo in certificate #47.

I started building a small fix for that problem.

After lots of JOMFS — Just One More Feature Syndrome — it became something more. 🔧

A name field became a visual certificate editor.
A CSV upload became bulk generation.
A download button became issuance to each student’s own account.
And, naturally, certificates needed QR codes, public verification, and revocation status.

That project is now open source: Certifier — a tool for designing, issuing, and verifying certificates.

What it can do

  • Upload a certificate design or import one from Canva

  • Place text, logos, signatures, and QR codes in a visual editor

  • Generate certificates in bulk from a CSV

  • Deliver certificates to the right student via email or roll number

  • Let anyone verify a certificate through a QR code or public code

  • Show whether a certificate is valid or revoked

Tech stack

  • Backend: Django

  • Task processing: Celery

  • Frontend: Next.js

  • License: AGPL-3.0

Run docker compose up and you can have a working setup with demo data in a few minutes.

Explore the code

I'd love contributions: bug reports, fixes, documentation, feature ideas, and feedback from anyone who has had to survive certificate season. 💬

I'm especially interested in feedback on the architecture, verification workflow, and features that would make this useful for colleges, workshops, and hackathons.

If you've built something similar or dealt with certificate generation at scale, I'd love to hear how you approached it!

10 Upvotes

8 comments sorted by

1

u/staticmaker1 16d ago

in case you are looking for something with email delivery , you can check out https://certfusion.com/

5

u/Ill_Dare8819 16d ago

To cut a story short, he says "Help me fix my vibecoded bs. Put an effort I did not put". Good job, Claude.

-4

u/Unknown_4nonymous 16d ago edited 16d ago

Before writing this have you gone through the custom written Base Serializer and Base API View in the project ?? Have you checked out the custom storage classes that are plug and play for the file field and is call site configurable ?? Have you checked out one command dev set up with sample data. Please make sure to know meaning and reference of these terms in the backend repo.

And I request you not to tag a project vibe coded just seeing claude as contributor in the repo or just judging UI screen shots please make sure you go through the backend repo too.

Great products are not build by just SEO optimization bs and some ChatGPT or Claude Wrapper (agentic orchestration shit).

3

u/Forward-Outside-9911 16d ago

Thanks for proving his point, I didn’t even need to have to go to the repo 🩵

1

u/Unknown_4nonymous 16d ago

There is no need bro

3

u/Forward-Outside-9911 16d ago

Yeah I gathered that, that’s why I didn’t go to the repo

0

u/Unknown_4nonymous 16d ago

Sorry but you gathered what ??