Building for the Block, Not the Feed
How I used v0.dev, AI, and an hour of coding to support safer streets in San Francisco
My neighborhood is currently in the middle of a heated debate. The Oak Street Quick-Build Project — a proposal by SFMTA to add protected bike lanes and safety improvements along the south side of the Panhandle — is heading to the SFMTA Board for approval on April 1st.
As the hearing approaches, public conversation has flared up again. Online threads grew long. Opinions hardened. It became the kind of discourse where people talk past each other — and not much moves forward.
I had thoughts too. I’m a parent who bikes with my kids. I care about how cities prioritize space — not just in theory, but in the lived experience of moving through them. Rather than jump into the fray, I opened v0.dev and started building.
What came out of that hour was parktowiggle.com: a simple site to help people email their local representatives in support of the project. It focuses on the stretch along Oak that currently lacks protection — the last missing link in an otherwise connected bike corridor. Fell Street got its protected lane years ago. This would finally bring parity to the Panhandle.
No sign-up. No friction. Just a clean form and a way to act.
How I built the site
This was classic vibe coding — fast, focused, emotionally attuned.
v0.dev to scaffold the UI with Tailwind and shadcn/ui
Next.js for structure and routing
Vercel for one-click deployment
Mailgun to route emails directly to city officials
ChatGPT to help generate clear, actionable copy for the website and email templates
I built it in about an hour, starting from a single block in v0.dev — fitting, given the project was about reclaiming space at the street level.
Making action feel easy
I wanted the site to be immediately usable, even for someone who didn’t know what to say. So I included a few message templates — all drafted with AI — that reflected different tones: practical, hopeful, direct. The goal was to make it easy to take action without prescribing a single way to do it.
That optionality made a difference. Some folks sent the default message. Others tweaked a few lines. Many wrote something entirely original. It struck the balance I was aiming for: structure without constraint.
What happened next
People started using it. The messages that came through were thoughtful, specific, and rooted in real experiences.
One neighbor wrote about biking the Panhandle with their child, and how a continuous, protected lane would turn a stressful moment into a joyful one. Another described commuting daily from the Sunset and how this connection would finally make the route feel safe. Someone else mentioned how the project would link their home to a park, school, or community space — places they currently avoid biking to because of safety concerns.
The message was clear: public space should serve people. And small design decisions — like whether a bike lane continues for one more block — can shape how we move, connect, and live.
Why I’m sharing this
Because this is the kind of software I love to write — small, purposeful, and public. Not everything needs to scale. Sometimes the most impactful tools are temporary, hyper-local, and shipped in under an hour.
If you’re a developer feeling burnt out by tech at scale, try going small. Pick a corner of your city. Listen for tension. Build something to help move it forward.
No plan required. Just a little urgency and a willingness to ship.