Project Details
Red Tape — Municipal Permitting, Mapped 2026

Project Overview
A food truck in Portland is 8 steps, $1,745, and 5 weeks. In Houston it's 6 steps, $1,601, and same day. Red Tape maps municipal permitting processes — every step, fee, form, and waiting period for getting a project approved in a city, with a citation to the official document behind every number.
Pick a project, answer a short form, and get the whole process as a dependency graph with live running totals — then put two cities side by side and watch the difference write its own headline. Styled like a government form that developed a sense of humor.
Rules Are Data, Never Code
The core invariant: there is no if (city === 'portland') anywhere in the codebase. Jurisdictions own versioned process templates per project type, and everything downstream is generated from that data.
- Schema: Steps form a dependency DAG, fees are typed rules (flat, per-unit, percent-of-valuation, tiered) in integer cents, and conditionals are a small JSON expression language over the project's parameters. Every step and fee carries a source-URL citation as a column, not a comment.
- Rule engine: Pure functions with no database or GraphQL imports — it evaluates conditions strictly, splices removed steps out of the DAG, computes fees in integer cents, and reports durations as the critical path through the graph, so parallel steps don't sum.
- The proof: Cities #2 and #3 (Houston and Denver — including Denver's three-agency flow and Houston's mid-2026 switch to statewide licensing) shipped as pure seed data with zero changes to application code.
- Data freshness: A weekly job re-fetches every cited URL, fingerprints the content, and flags affected processes for human review — it never edits data itself.
Features & Rigor
- Generated UI: The intake form is generated from each project type's parameter schema, the stepper renders whatever DAG the engine returns, and the two-city comparison headline is arithmetic over the totals.
- Contribution flow: Adding a city is writing a seed file from official documents — the seed types make invalid data unrepresentable, and a contributor UI with admin approval runs the same server-side validator.
- Honest limitations: Every process page says "not legal advice" and means it; data carries an as-of date, and known gaps (unpublished fees and processing times) are documented in open-questions files instead of papered over.
- Tested: 109 API tests, with the rule engine covered by table-driven JSON fixtures that double as documentation of the expression language, plus a seed validator checking DAGs, conditions, cents, and citations.
Project Information
Solo Developer
Civic Tech / Full-Stack Web
RedwoodJS, TypeScript, React, GraphQL, Prisma
Postgres, Render, background jobs for source freshness
Official municipal documents for Portland, Houston, and Denver — primary sources only, cited per fact
Three cities, extensible to any jurisdiction via seed data