LawnOlu connects customers with lawn-care providers. Customers book a service, track the provider live on a map, pay, and get updates. Providers manage their job queue, navigate to customers, and get paid.
I built both the customer and provider experiences in one Flutter codebase, with role-based navigation and state so each user only sees what applies to them. Live tracking uses Google Maps with location updates, markers, and route polylines. Stripe handles payments, Firebase sends job notifications, and REST APIs manage bookings and profiles.
The challenge was one job seen from two sides. A single booking moves through several stages from request to completion, and both apps have to show the right state and actions at every step. I kept payment logic separate from booking logic, so changes to one couldn't break the other.
Stack
Flutter, Google Maps, Stripe, Firebase, REST APIs


