Project
LootRoute
A work-in-progress mobile app for yard, garage and estate sale fans. It maps the sales near you, filters them by category, date and distance, and plans a route to hit them all. Hosts can post their own sales right from their phone.
- My role
- Solo build
- Status
- Work in progress
- Stack
- react native
- expo
- typescript
- express
- postgres
- drizzle
- supabase
- google maps

Why I'm building it
My BFF Kathy is a garage-sale person. We spend a lot of the weekends in the spring/summer either fishing or yard sale-ing. What's annoying about finding sales now is that there are so many platforms (facebook, kijiji, instagram) where there are listings.
Kathy would spend her evenings during the week manually listing out all the sales with a pen and paper and then building out a driving route on google maps. Problem was, one mis-click and your driving route is gone. So now you’re stuck in a Tim Hortons parking lot, trying to figure out which sale to go to next!
The idea behind the app was to get the general public to use one additional source to list their sales for free. The person “shopping” would then review the yard sales, pick which ones met their needs, and your LootRoute would be ready to follow.
What works so far
For buyers:
- A map of sales near you, filterable by category, date and distance.
- Tap sales to add them to your route, then order the stops yourself, nearest first, farthest first, or "optimized". Your route is saved on the device.
For hosts:
- Post a sale with the address typed in or found from "use my location", a description, categories, and one or more dates and times.
- A My sales list to edit, delete, or boost a sale (it gets a gold pin on the map).
Under the hood:
- A React Native app built with Expo, talking to a small Express API backed by Postgres (on Supabase, via the Drizzle ORM).
- The app and the API share one set of TypeScript types, so a "Sale" means the same thing on both sides.
The interesting bits
Planning a route without a routing service
"Optimized" ordering is a greedy nearest-neighbour route: start at home, drive to the closest sale, then the closest one to that, and so on. Distances are straight-line (the haversine formula), not driving distance. It's quick and honest about being an estimate, and good enough until a real routing API is plugged in.
Accounts without a sign-up screen
Each phone gets an anonymous ID the first time the app opens. It's both your buyer and your host identity, so you can save routes and post sales before any login exists. This is currently just a stopgap for testing that will eventually be swapped out for real accounts (see What’s Next).
Keeping the map key off the phone
Turning an address into map coordinates (geocoding) happens on the server, not in the app, so that API key never ships inside the app.
A design system with checked contrast
A Memphis-inspired palette (electric blue, turquoise, hot pink, canary yellow), with every pairing checked against WCAG contrast numbers instead of eyeballed.
What's next
- Real driving routes and distances.
- Real sign-in to replace the anonymous device ID.
- Polishing the host dashboard (boost is an on/off switch for now, with no payment).
- A real app icon and splash screen.
- Testing on iOS (so far it's only been run on Android).




