Case study — civic technology
I kept missing zoning cases. So I built something that wouldn't.
Zoning Watch turns Richardson's zoning filings into something a resident can actually follow: searchable, archived, and delivered by email while the decision is still being made.
Role
Product strategy, IA, UX, automation
Timeline
Personal project · Launched July 22, 2026
Built with
ArcGIS REST API, Python, GitHub Actions, JSON
Outcome
Zoning Case e-mail alert and a searchable archive of closed cases.
The information was public. It just wasn't usable.
I kept reading about a Richardson zoning case in the news, or hearing about one from a friend, only after it was well underway.
The information wasn't secret. The City published it. So I tried to become more proactive and check the zoning site every week, which was not sustainable.
Manual Checks
Sometimes I forgot. Sometimes nothing had changed. Neither outcome was worth the habit.
A map-first interface
The ArcGIS map is difficult to use on a phone and slow to load data.
Cases that disappear
Once a case closed it would disappear from the website, the only records buried in archived PDFs of Agenda Packets.
Version one had exactly one user: me.
My first thought wasn't a public website. It was much smaller: could I make something check the site for me and send an email when a new case appeared?
I am not a high-level programmer. Rather than let the technical implementation become the reason the project never happened, I wrote a detailed creative brief and product plan, and used AI-assisted development tools to build the system.
Almost immediately the idea got bigger. Richardson's forward thinking on open-data and infrastructure made the case information available through its ArcGIS REST API. Once I could work with the data directly, I could rethink how I actually wanted to use the information.
A card catalog instead of a map
Maps are useful for understanding where a zoning case is, but I felt a map isn't the best place to start when looking at proposed changes. exists.
A map answers one question
Where is it?
- Useful once you already know a case exists
- Slow to scan for what changed this week
- Awkward on the device most people check from
A card answers four
- What's being proposed?
- Where is it?
- What stage is it in?
- When is the hearing?
Browsing became closer to a card catalog than a map tool.
From notification tool to civic archive
Once a case is finished, it can disappear from the active interface. That makes sense operationally — the City's immediate task is processing current applications. But residents arrive with different questions.
- What happened to the apartment project down the street?
- What was approved on that property three years ago?
- Has this parcel come before the City before?
So Zoning Watch doesn't remove a case when the process ends. It keeps it. I imported years of City Plan Commission and City Council records and made the archive searchable — turning a notification tool into a growing record of local land-use decisions.
Designed to keep up with changes
The system checks authoritative City data on a schedule. There's no conventional application server running behind it, and that simplicity is intentional: the point is to make public information easier to use, not to build unnecessary technical complexity.
- 01City data ArcGIS REST API, plus hearing notices
- 02Scheduled checks Actions on a cron
- 03Processing Python normalizes and diffs
- 04Case archive Lightweight JSON, versioned
- 05Site and digest Static pages, email to subscribers
AI as a capability multiplier
A working proof of concept came together surprisingly quickly. The real work happened over the following months. Testing against real cases revealed missing cases, so I kept adapting the system.
I didn't become a software engineer. What I had was a clear understanding of the problem, the experience I wanted, the data I needed, and how the system should behave.
I didn't know how to build every part of the system. I knew what the system needed to do.
Information without an editorial agenda
Zoning can get contentious. Zoning Watch intentionally doesn't tell residents whether a proposal is good or bad. Its purpose is accessiblity: make it easier to know that something is happening, make the source material easier to find, make the history easier to search, and make it easier for someone who cares to participate in the process.
Public information isn't necessarily accessible simply because it's technically available.
What came next
From one project to Fair Richardson
I built Zoning Watch for myself. Sharing it made clear the problem wasn't mine alone, and as I shared it with the community people natrually asked for more tools. That became Fair Richardson, is a nonpartisan civic project that creates tools, research, and makes information more accessible to help residents and leaders better understand their community and make more informed decisions.
No client asked for it. There was no assignment. I saw something that repeatedly frustrated me, decided there had to be a better approach, and figured out how to build one.