Skip to content
Back to Projects
NovaDrive admin dashboard showing five vehicles with live battery, speed and temperature data

Project

NovaDrive

About the Project

NovaDrive is the backend for a fictional autonomous robotaxi company. Passengers book and pay for rides, administrators manage the fleet, and every vehicle continuously reports its position, battery level and sensor data to the cloud. I designed and built the whole system on my own as the final project for the Back-End Development course.

Core Features

  • Three APIs, each used where it fits best: REST for everyday operations, GraphQL for the dashboard's nested data and gRPC for high-frequency vehicle telemetry.
  • Two databases: PostgreSQL for relational data such as passengers, rides and payments, and MongoDB for the large stream of telemetry and sensor diagnostics.
  • Security: JWT authentication with admin and passenger roles, ASP.NET Core Identity, API keys for vehicles and rate limiting on login and registration.
  • Dynamic pricing engine: distance and time, vehicle type, night rate, loyalty points, discount codes and VAT, with a minimum fare.
  • PDF invoices generated on the server and sent to the passenger.
  • A Next.js dashboard with a live map and charts for administrators, and a passenger app to book rides and view invoices.

How I Built This

I structured the API in layers: endpoints, services with the business logic, and repositories for data access, with validation and DTO mapping in between. A separate simulator application acts as a fleet of driving vehicles and streams telemetry to the API over gRPC, so the dashboard shows realistic live data.

Result

The whole platform starts with a single Docker Compose command. 37 automated tests cover the pricing engine, the ride logic and the main endpoints, with integration tests running against real PostgreSQL and MongoDB containers. A GitHub Actions pipeline builds, tests and publishes a Docker image on every push.

What I Learned

Choosing the right protocol and database for each kind of data, securing an API with roles and API keys, and writing tests that give real confidence before deploying.