← back

drivesro

role
Design, frontend, backend, deployment
project
Independent client project
status
Live
built with
Next.js · React · TypeScript · NestJS · PostgreSQL · Prisma
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.

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.

Drivesro homepage showing driving licence categories B, C, and E
The live homepage. A direct route into category-based learning.

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.

Drivesro sign-in screen with email and Google account options
Account access before starting a learning session.

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.

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.