Building Certeli — What I Learned Making a Certification Platform
How I built a certification exam platform from scratch with 30K+ questions, Stripe billing, and self-hosted infrastructure.
Why I Built It
I noticed a gap in the certification prep space — most platforms either charged a fortune, had low-quality questions, or focused on one exam. I wanted a platform where anyone could prep for any major certification at a fair price, with questions that actually reflected the real exams.
The Numbers So Far
- 49 exams across AWS, Azure, GCP, CompTIA, and more
- 32,000+ questions with explanations
- 133 labs and 10 roadmaps
- Self-hosted on a VPS with PostgreSQL
Stack Choices
Next.js 16
The obvious choice for a content-heavy platform. Server components keep the pages fast, static generation handles the exam listing pages, and dynamic routes handle each exam's question flow.
Self-hosted PostgreSQL
I chose to self-host rather than use a managed service because:
- Full control over query optimisation (some exam queries are complex)
- No per-row pricing (30K questions adds up fast)
- Familiar tooling
Stripe
Live billing with Stripe for subscriptions. The webhook integration handles checkout sessions, subscription lifecycle, and payment events.
Biggest Lessons
Content quality is hard. Generating 30K+ exam-quality questions is an ongoing process — each one needs correct answers, plausible distractors, and clear explanations. I've built content pipelines, validation scripts, and audit tools to keep quality high.
Self-hosting gives you control but costs you time. PM2 management, Caddy config, database backups, Let's Encrypt certs — it's all on you. Worth it for my use case, but I wouldn't recommend it for every project.
What's Next
- AI-powered question generation (for draft creation, not drop-in)
- More exams (still gaps in the catalogue)
- Better analytics for users tracking their progress
It's been a great build. More on specific technical decisions in future posts.