Route Planner with Toll Estimates and Live Group Drives
An individual project: a map-first route planner for the Philippines. It compares routes, detects the expressways each one uses, estimates tolls and fuel cost, and gives turn-by-turn navigation. Group Drive lets friends join a trip by invitation and see each other's live position, route and arrival time.
The problem
General-purpose map apps show the fastest route but not what each route costs in tolls, and friends driving to the same place in separate cars lose track of each other. Mappy answers which route is fastest, which uses expressways, what each costs, and where everyone in the group is.
What it does
Philippine place search, current location and map-pin selection, with real routes and alternatives ranked fastest first.
Toll-free and avoid-expressway options; every returned route is re-checked and flagged if it still uses one.
Expressway detection from real road data, with entry and exit plazas and a toll breakdown per route.
Fuel and total trip cost, one way or round trip.
Turn-by-turn navigation with spoken directions, off-route detection and a screen that stays awake.
Group Drive: trips joined by link or code, live location sharing, car markers, each member's route and ETA, and regroup alerts.
Community road reports that expire automatically.
Accounts with email verification, password reset and optional Google sign-in, plus saved vehicles, places, routes and trip history.
Installable as an app.
Engineering decisions
Invitations are checked in the database
Joining a trip goes through a database function that checks the invitation hasn't expired or been revoked, applies its usage limit under a row lock, and rate-limits failed attempts. Invite links use 256-bit random tokens.
Live location is kept to a minimum
A position can be written only by its owner, only while sharing is on, and only for a trip that hasn't ended. Only the latest position is stored, and stopping, leaving or ending the trip deletes it.
Tolls are never hard-coded
Fares come from imported rate matrices with an effective date and a source on every row. If the real entry or exit plaza isn't in the data, the stretch is reported as unpriced rather than charged from the wrong interchange, and rates from third-party sources are labelled unverified.
Money is counted in centavos
Amounts are stored as fixed-precision decimals and computed in integer centavos, so totals don't drift from floating-point rounding.