A permit alert is only as good as its source, so the first real work was a survey of what counties publish.
The survey
Twenty-two North Carolina counties were checked for a machine-readable permit feed: an open-data portal, an API, a downloadable export, or a public-records process that yields one.
| Result | Counties |
|---|---|
| Machine-readable feed exists | 8 of 22 |
| Clearly usable at launch | 4 |
| Uncertain | 1 |
The four usable ones cover Wake County and its municipalities as one bundle, Durham, Asheville, and Greensboro. Mecklenburg has data but its terms and format need a conversation before it can be relied on.
The sourcing rule
Official feeds and public-records requests only. No scraping of permit portals, even where it would be easy. The reasoning is partly legal and partly practical: a scraped source breaks silently when a portal changes, and a service that promises a daily digest cannot afford silent breaks. The legal side was reviewed in detail and stays in the project’s private notes.
The launch order
Wake first, because the bundle covers the most contractors. Then Greensboro. Then Mecklenburg, once permission is in hand.
Stack and providers
The same day settled the stack: Next.js with Supabase, chosen over a Django or a Cloudflare D1 build for the speed of getting a passwordless flow and a database up. Telnyx for SMS over the alternative considered. The whole thing costs a few dollars a month at zero subscribers.