Inspiration

Some parking poles carry four stacked signs: hours, days, a street cleaning season, a permit exception, a rule that only applies to RVs. You stand on the curb doing mental math, and one wrong guess is a ticket or a tow. Nikki Sylianteng's "To Park or Not to Park" redesigned parking signs as a simple week grid. I wanted that grid for any pole, from one photo.

What it does

Take a photo of the pole, or try one of the sample poles. The app reads every sign and shows each one as a plain card, top of the pole first, so you can see exactly what it read. Switch off any card that looks wrong, or tap a sign's arrow to fix its direction. Then you get one big answer: YES, NO, or NOT SURE, for right now and for how long you're staying (15 minutes up to overnight).

Under the answer is your week at this pole, Monday to Sunday, colored free, time limit, no parking, or not sure. Drag the line to any time of the week and the answer changes as you drag. Tap any block to see which sign caused it. If a sign has an arrow, it asks which side of the pole your car is on. Answers are for a regular car, so rules that only cover oversized vehicles stay on their card but don't block you. Printed season dates, like street cleaning April 1 to Oct 31, are applied on the real dates.

When it isn't sure, it says so. It never guesses YES.

Why not paste the photo into a chatbot? You'd get a paragraph and a confident guess. Here the AI only reads the signs, and plain code decides the answer from what it read, the same way every time. You can see and fix what it read, and when the rules don't settle it, you get Not sure instead of a guess.

How we built it

Planning followed the Devpost Learn Skill Pack. The scope, PRD and spec are in the repo under devpost/.

It's one Cloudflare Worker. The phone shrinks the photo and sends it to the Worker, which asks a Workers AI vision model (Llama 4 Scout, with Mistral Small 3.1 as a fallback) to copy each sign into structured rules as strict JSON.

The AI only reads. A plain rules engine decides. A validator checks every field, and anything unclear or conditional (snow, game nights, sunrise to sunset) becomes Not sure instead of being trusted or dropped. The engine turns the signs into 672 quarter-hour blocks for the week and checks every block of your stay: a clear no wins, anything uncertain beats an allowed rule, and only a stay that's clearly allowed from start to end gets YES. The same engine runs in the browser, which is why dragging through the week is instant. Photos aren't stored. 78 automated tests cover the validator, the rules engine and the wording.

How accurate is it?

I tested it on 26 real sign photos from Wikimedia Commons, each checked at 4 fixed times of the week with a 60 minute stay: 104 answers. 81 right, 19 Not sure, 4 wrong NO, 0 wrong YES. Every photo's expected answer and reading is in test/accuracy/report.md, including what changed between runs.

To be upfront: these photos were picked and labeled during development, and I tightened the rules between runs, so this is a development test set, not an independent benchmark.

So I also froze a holdout on Oct 24: 10 new stacked-sign photos never used during development, labeled before the first reading, with no prompt or code changes and no reruns. Of 40 checks, the 33 with a definite answer came out 26 right, 4 Not sure, 3 wrong NO, 0 wrong YES; the other 7 were correctly Not sure. Where YES was correct (14 checks) it said YES 7 times, and it never said YES wrongly. The 3 wrong NO came from one park lot where a general park rules panel was read as no parking at all hours. The 4 Not sure came from one pole where a down arrow was read as pointing right. Details are in test/holdout/report.md.

Challenges we ran into

Arrows. Vision models misread which way a small arrow points, and an arrow decides whether a sign applies to your car at all. So a sign whose arrow points away from your side is Not sure until you check it, and you fix the arrow by tapping it on the sign's card.

Sunset. After a round of changes (season dates, oversize vehicle rules), a full rerun had 3 wrong YES answers on one photo, a lot that was open "5:00 PM to sunset". I made the rules stricter: sunrise and sunset times are Not sure, and a sign that only says when parking is allowed is Not sure at every other time. The report says exactly what changed.

Cut-off signs. If the top sign is cut off by the photo edge, the reader can skip it. The check step now asks you to retake the photo with the whole pole in frame.

What we learned

Reading the sign turned out to be the easy part. Knowing when not to answer was harder. A wrong NO costs you a parking spot. A wrong YES costs you a ticket. So the whole design leans toward Not sure.

What's next

Better arrow reading, more cities in the test set, and saving a pole you park at often.

Built With

Share this project:

Updates

Submission history