Work
UniversityUniversity · Mobility

GoUni

A university carpooling platform: rides, bookings, maps and real-time chat.

View live site

Screenshot of GoUni
SYSTEM.md

The problem

University mobility in Lima needs to coordinate trips, trust and communication between drivers and passengers.

What I built

A Spring Boot backend with DDD and JWT organized by contexts (IAM, carpooling and chat), a WebSocket chat service and an Angular frontend with Mapbox and STOMP.

Outcome

A university project covering the full journey of booking, simulated payment and communication between users.

Decisions that mattered

  1. 01

    One context per responsibility

    IAM, carpooling and chat are modeled with DDD, each with its own services, domain and repositories.

  2. 02

    Real-time coordination

    STOMP over WebSocket carries the conversation between participants; Mapbox adds geographic context to trips.

  3. 03

    Continuous delivery

    CI/CD on Azure Pipelines with Docker and Kubernetes, and tests with JUnit, Mockito and Selenium under TDD.

Technologies

  • Spring Boot
  • Angular
  • MySQL
  • WebSocket
  • Mapbox
  • JWT

C4 model. The pulsing line is the main path of a request.

Level 1 · who uses the system and what it connects to

HTTPS1Mapbox GLSMTPStudentBooks and shares ridesGoUniUniversity carpoolingMapbox[Mapbox GL]Routes and mapsGmail SMTP[Gmail SMTP]Verification emails

Level 2 · the applications and data stores it is made of

HTTPS1Mapbox GLREST · JWT2WebSocket · STOMP3JDBCSMTPMapbox[Mapbox GL]Routes and mapsStudentBooks and shares ridesWeb app[Angular 18 · Material · PrimeNG]Routes, bookings and chatChat service[Spring WebSocket · STOMP]Real-time conversationGoUni API[Spring Boot · Java 17]IAM, rides and bookingsDatabase[MySQL]Users, rides and bookingsGmail SMTP[Gmail SMTP]Verification emails

Level 3 · the components inside the API

calls1rulesport2JDBC3portSMTPportWebSocket· STOMPREST controllers[REST controllers]One resource per contextApplicationservices[Application services]IAM, carpooling and chatAggregates[Aggregates]Users, rides and messagesJPA repositories[JPA repositories]Persist to MySQLDatabase[MySQL]Users, rides and bookingsMail sender[Mail sender]Account verificationGmail SMTP[Gmail SMTP]Verification emailsWebSocket config[WebSocket config]Chat STOMP channelsBrowser clients[Browser · STOMP]Receive the messages
  • Person
  • System
  • Container
  • Database
  • External
  • Main path
  1. 01Passenger
  2. 02Booking
  3. 03Driver
  4. 04Chat
  5. 05Trip

CV

Get my CV

Leave your email and I will send the CV there. First I check the address is yours with a code.