Project 02 · Personal project
Free Park Vancouver
A crowdsourced map of free parking in Vancouver. It runs as an iPhone web app and combines City open data with reports from the people using it.
A note before you read on
I'm not a software engineer, and I used AI to do most of the coding for this app. I don't want to misrepresent my software skills. What this project does show is how I solve problems: I recognised a real problem and solved it with the tools I had. I had never made an app before, and I wasn't put off by that. I can solve problems creatively and work hard in very different environments, and this is one example.
- Blocks mapped
- ~9,400tappable
- Tickets analysed
- 2.4MCity records
- Running cost
- $0friends beta
The problem
Parking in Vancouver is expensive and confusing. There's plenty of free parking, like neighbourhood streets and "2 hr" blocks, but no app shows it. The rules are spread across thousands of signs, permit zones and meter schedules, and many of them change with the time of day.
I wanted one map that answers a simple question: where can I park for free right now, and for how long?
What I built
- Feels like an iPhone app. It installs from Safari with no App Store, and has an Apple Maps–style sheet, dark mode and offline support.
- "Find free parking near me." It lists the closest options and labels each one as a 2-hour sign, a neighbourhood street, a meter that's free tonight, and so on. It can plan one Google Maps route past several spots, so if the first one is full you just keep driving. A small filter narrows the map and the list to one kind of parking or a minimum stay.
- Crowdsourced. People add spots, confirm or correct blocks, and report how many spaces are free right now. Reports expire after an hour, and only people within 500 m can confirm a block.
- Time-aware. A "No parking 8am–10pm" block shows as closed during the day and counts down to when it opens. Meters turn green while they're free overnight. Free evening spots say when the free period ends.
- Every block is its own piece. You can tap any block, choose which side of the street has parking, and drag the ends of the line to match the signs.
- The extras drivers asked for: parkades with operators, rates and estimated sizes, permit zones, SkyTrain, accessible spots, an Evo car-share mode, and UBC and University Endowment Lands parking.
How I approached it
I treated the AI like a fast engineer on my team. I decided what to build and in what order, described how it should behave, and judged every result on a real phone. Most of my time went into product decisions and testing, not typing code.
- Start with real data. The City of Vancouver publishes meters, streets and years of parking tickets. A block with many "parked longer than the sign allows" tickets but no meters almost certainly has free time-limited parking. That became the first layer of suggestions.
- Find better sources when the obvious ones fall short. Permit zones weren't in the open-data catalogue, but the City's public map server had them. UBC's parking site had official rates and pay-zone numbers behind its map.
- Ship small, test on the phone, adjust. I used the app after every change and kept a list of what felt wrong. Each note became the next round of work.
- Keep it cheap and simple. A static web app on free hosting, a free database tier, and no app store fees.
Problems I solved
The map was too busy
Thousands of "probably free" streets cluttered the screen. Unconfirmed streets are now faint and only light up within 500 m of you or your search. Zoomed out, each street is one simple line; zoomed in, it splits into each side of the street.
City data didn't match real blocks
Some City street records covered several blocks, and some blocks had house numbers that jump partway along (like "3600–3700 W 21st Ave") with no cross street in between. That left stacked or split lines on the map. I checked every block in the city for overlaps and splits, then merged or divided them so each real block is drawn exactly once.
Lines that match the street
Hand-drawn lines rarely lined up with the road. New lines now follow the street itself, curves included, sit on the correct curb, and stop at intersections. Each side of the street has its own drag handles, so one side can be shorter than the other, and you can drag past a corner to cover the next block too.
Trusting what people add
Anyone can add information, so the app counts votes, lets people change their answer, and only accepts confirmations from people who are actually nearby. Each report also has an anonymous device ID, ready for a future points system that rewards good contributions.
What I learned
You don't need to be an expert in every tool to build something useful. You need to understand the problem well, ask good questions, test honestly, and keep going when the first version isn't good enough. I'm proud of the problem solving, persistence and judgement in this project, and I bring the same approach to any team I work with.
Data: City of Vancouver Open Data, OpenStreetMap contributors, UBC Parking and the University Endowment Lands. Built with AI coding tools (Claude).