An AI-assisted platform to create, manage, and validate certificates, without the headache.
Ever had to make a certificate by hand, then chase people down to send it, then have no real way to prove it's legit? That's the exact headache Certificadazo is here to solve.
It's a platform where a department can design a certificate template once, plug in the data, and generate polished, official-looking certificates in bulk, then let anyone check if a certificate is real with a simple public validation link. No more "is this PDF actually official?" moments.
The platform is built around four kinds of people:
| Who | What they can do |
|---|---|
| 🛠️ Admin | Manages users, manages departments, configures API keys |
| 🏢 Department Manager | Manages their department, manages their users, creates certificate templates |
| 🙋 User | Manages their own profile, downloads their certificates |
| 🔎 Guest | Validates a certificate (no account needed) |
Create certificates, send them out, and let anyone validate them publicly. That's the heart of it.
- Create users
- Create departments
- Create certificate templates
- Generate certificates as PDF
- Public certificate validation
Here's the general idea of how everything connects behind the scenes:
%%{init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#1A1A2E",
"primaryTextColor": "#F5F5F5",
"primaryBorderColor": "#00D4FF",
"lineColor": "#00D4FF",
"secondaryColor": "#16213E",
"tertiaryColor": "#0F3460",
"fontSize": "14px"
}
}}%%
erDiagram
USER ||--o{ CERTIFICATE : owns
USER ||--o{ INFORMATION : provides
TEMPLATE ||--o{ INFORMATION : uses
TEMPLATE ||--o{ CERTIFICATE : generates
DEPARTMENT ||--o{ POSITION : has
DEPARTMENT ||--o{ TEMPLATE : owns
USER }o--o{ ROLE : has
USER }o--o{ POSITION : holds
USER }o--o{ DEPARTMENT : belongs_to
In plain terms:
- A User can belong to one or more Departments, hold different Positions, and have different Roles.
- A Department owns its own Templates and Positions.
- A Template is the "blueprint" used to generate Certificates, and can also hold extra Information tied to a specific user.
- A Certificate always points back to the user it belongs to and the template it was generated from.
A closer look at each entity and the fields it holds. Click any card to expand it.
👤 User
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
name |
varchar(255) |
|
document |
varchar(25) |
🔒 Unique |
password |
varchar(255) |
🎭 Role
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
name |
varchar(25) |
🏢 Department
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
name |
varchar(255) |
💼 Position
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
name |
varchar(255) |
|
department_id |
binary(16) |
🔗 Foreign Key → Department |
📄 Template
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
name |
varchar(255) |
🔒 Unique |
design |
varchar(255) |
|
department_id |
binary(16) |
🔗 Foreign Key → Department |
preview_src |
varchar(255) |
🔒 Unique |
fields |
JSON |
|
images_src |
JSON |
🧾 Information
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
data |
JSON |
|
template_id |
binary(16) |
🔗 Foreign Key → Template |
user_id |
binary(16) |
🔗 Foreign Key → User |
🎓 Certificate
| Field | Type | Notes |
|---|---|---|
id |
binary(16) |
🔑 Primary Key |
code |
varchar(20) |
🔒 Unique |
resource |
varchar(255) |
🔒 Unique |
issue_date |
datetime |
|
expiration_date |
datetime |
|
user_id |
binary(16) |
🔗 Foreign Key → User |
template_id |
binary(16) |
🔗 Foreign Key → Template |
🔗 Relationship tables
User ↔ Position
| Field | Type | Notes |
|---|---|---|
user_id |
binary(16) |
🔑 Composite Primary Key |
position_id |
binary(16) |
🔑 Composite Primary Key |
User ↔ Role
| Field | Type | Notes |
|---|---|---|
user_id |
binary(16) |
🔑 Composite Primary Key |
role_id |
binary(16) |
🔑 Composite Primary Key |
User ↔ Department
| Field | Type | Notes |
|---|---|---|
user_id |
binary(16) |
🔑 Composite Primary Key |
department_id |
binary(16) |
🔑 Composite Primary Key |
- Java 25 + Spring Boot 4.1.0 - the backbone of the backend
- Spring AI 2.0.0 - helping automate and smooth out certificate generation
- MySQL 9 - where all the data lives
- Keycloak 25 - handling authentication and access control
- Apache Kafka - keeping things async and event-driven between services
- Docker - so it runs the same everywhere
Still cooking! This project is actively being built out: the core design, database structure, and user flows are already mapped out, and features are being added step by step. Screenshots and a proper walkthrough are coming soon once the UI takes shape.
JuDa Dev - Full Stack Developer
Interested in collaborating or have questions? Don't hesitate to contact me via email or LinkedIn.
