Torch: A Turo Clone for Electric Scooters

A short retro on Torch, my 2022 college capstone: a Turo clone for electric scooters, and the three parts that took longest.

Torch was my final year capstone at TU Dublin, in 2022. Turo, but for electric scooters. You list your own scooter, someone else rents it. The README called it RentYourScooter.com, which tells you how much thought went into the name. It got an A, and there's a walkthrough on YouTube if you want to see it running.

Spring Boot on the back, Angular 13 on the front, MySQL underneath, with Hibernate and Spring Data JPA doing the mapping and Lombok saving me from writing getters. Four entities carried most of it: User, Vehicle, Trip, Insurance. A Vehicle held range, cost, speed and a lat/long. A Trip held the owner, the lender and the cost per day, insurance folded in.

The three parts that took longest

Search came first. Someone types a place name; a scooter has coordinates. Nothing joins those two things on its own. So Geoapify turned the text into a longitude and latitude, the Haversine formula found everything within 15km of that point, and Google Maps pinned it. It also meant measuring distance against every vehicle in the table on every search, which was fine at capstone scale and wouldn't have stayed fine. Multi-filter search sat on top, so you could narrow by range, cost, speed, date released.

Then hosting. It ran on Cloud Run, so the container can vanish at any point. User images couldn't live on disk. They went into a Cloud Bucket instead, the container stayed stateless, and Cloud Build handled CI/CD.

Money was last, and I kept mixing up the two halves of it. One is a rental payment. The other is a monthly subscription, basic, advanced or premium, that gives hosts credits and ad days to promote a listing for up to three days. Those are separate flows in Stripe and separate flows in the data model.

The thing I'd keep is the entity model. A listing isn't a product, it's a person plus a Vehicle plus a history, and that history is what riders read: star ratings and written reviews, left for the host and the scooter separately. Four tables named right, and everything I added afterwards was cheap. The thing I'd change is that I built the payment side twice before I understood it once.