drivesro
- role
- Design, frontend, backend, deployment
- project
- Independent client project
- status
- Live
- built with
- Next.js · React · TypeScript · NestJS · PostgreSQL · Prisma
- visit
- drivesro.com ↗
- my part
- I was the sole developer. I connected the learning experience to the APIs and data model, built the administration tools behind the content, and delivered the live website to the client.
overview
Preparing for a driving licence is difficult enough without a language barrier. Drivesro brings Romanian driving exam preparation into a platform that supports Nepali and English, with learning organised around vehicle categories and chapters.
I built the website independently for a client, taking responsibility for the interface, application backend, database, and deployment. It is a complete product, from choosing a course to practising questions and reviewing progress.
the experience
learn by category
Category-based learning for light vehicles, heavy vehicles, and trailers, with chapters that give the question bank a clear structure.
practise and review
Question options, chapter attempts, full exam attempts, and saved progress connect practice sessions to a learner’s account.
manage the content
The administration side supports questions, image assets, imports, and subscriptions, keeping the learning content connected to the product.
under the hood
interface
Next.js and React provide the learning screens. TypeScript keeps the interface and API integrations explicit, while React Query manages server data.
application
A NestJS backend handles application workflows, account sessions, learning content, exam attempts, and subscriptions.
data
PostgreSQL and Prisma model categories, chapters, questions, answers, attempts, and progress as related records.
engineering decisions
keep grading on the server
The quiz interface receives questions and options, while the backend validates answers. Correct answers stay out of the public question payload. The interface can give feedback without becoming the authority on a learner’s result.
handle repeated payment events
Stripe Checkout and the billing portal connect subscriptions to account access. Webhook handling uses idempotency so a repeated delivery can be recognised instead of applying the same payment event again.