Initial commit: 200feet pipeline, docker packaging, and static site

This commit is contained in:
2026-07-02 00:38:32 -04:00
commit df18210492
31 changed files with 7188 additions and 0 deletions
+174
View File
@@ -0,0 +1,174 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>200 Feet — Johnson City's Draft Data Center Setback</title>
<meta name="description" content="Hey Dave, Where can a data center go in Johnson City?" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="hero">
<div class="kicker">Johnson City, TN</div>
<h1>200&nbsp;feet<span class="period">.</span></h1>
<p class="lede">
That's the residential setback in the city's draft data-center ordinance.
It is not enough. Here's what the data shows.
</p>
<div class="stats">
<div class="stat">
<span class="num" id="stat-strict-200"></span>
<span class="lbl">parcels meet the geometric tests today, as currently configured</span>
</div>
<div class="stat">
<span class="num" id="stat-buildable-200"></span>
<span class="lbl">more become geometrically eligible after a one-lot administrative subdivision</span>
</div>
<div class="stat">
<span class="num warn" id="stat-homes-1k"></span>
<span class="lbl">homes would sit within 1,000&nbsp;ft of a possible data center site</span>
</div>
</div>
<p class="disclaimer">
Note: These are <em>zone-compatible</em> parcels — the sites where the geometry
allows a data center under the draft ordinance. Every site still requires
a Board of Zoning Appeals special-exception approval, plus noise,
vibration, environmental, and utility-capacity review before anything
is built.
</p>
</header>
<section class="mapwrap">
<div class="map-controls">
<div class="seg" id="setback-seg">
<button class="seg-btn active" data-ft="200">200 ft</button>
<button class="seg-btn" data-ft="500">500 ft</button>
<button class="seg-btn" data-ft="1000">1000 ft</button>
</div>
<details class="layer-menu">
<summary>Layers</summary>
</details>
</div>
<div class="menu-panel" id="menu-panel" hidden>
<label><input type="checkbox" id="layer-buildable" checked /> Buildable patches</label>
<label><input type="checkbox" id="layer-siteable" checked /> Building envelope (50&nbsp;ft DC yard)</label>
<label><input type="checkbox" id="layer-strict" checked /> Strict-eligible whole parcels</label>
<label><input type="checkbox" id="layer-homes-protected" /> Homes newly protected if setback raised to 500&nbsp;ft</label>
<label><input type="checkbox" id="layer-marginal" /> DC sites lost if setback raised to 500&nbsp;ft</label>
<label><input type="checkbox" id="layer-i2-zones" /> I-2 zoning footprint</label>
<label><input type="checkbox" id="layer-i2-parcels" /> All I-2 parcels (slow)</label>
</div>
<div id="map"></div>
<div class="legend">
<span><span class="sw I2"></span> I-2 zoning</span>
<span><span class="sw BUILDABLE"></span> Buildable patch</span>
<span><span class="sw SITEABLE"></span> Building envelope</span>
<span><span class="sw STRICT"></span> Strict-eligible parcel</span>
<span><span class="sw PROTECTED"></span> Home protected if setback raised to 500&nbsp;ft</span>
<span><span class="sw MARGINAL"></span> DC site lost if setback raised to 500&nbsp;ft</span>
<span><span class="sw YOU"></span> Your address</span>
</div>
</section>
<section class="checker">
<h2>How close could a data center be to your home?</h2>
<div class="addr-row">
<input id="addr-input" autocomplete="off" placeholder="e.g. 123 Main St" />
<button id="addr-go" type="button">Check</button>
</div>
<ul id="addr-suggest" class="suggest" hidden></ul>
<div id="addr-result" class="result" hidden></div>
</section>
<section class="case">
<div class="kicker">The case for 500 feet</div>
<h2>A minimum setback of 500 feet mitigates potential harm to thousands more residents while preserving viable industrial sites.</h2>
<p class="lede">
Raising the setback to <strong>500&nbsp;ft</strong> leaves
<strong id="case-remaining-500"></strong> compliant data-center sites in
Johnson City — concentrated in the city's heavy-industrial corridors.
Raising it to <strong>1,000&nbsp;ft</strong> leaves
<strong id="case-remaining-1000"></strong>. A setback increase protects thousands of residents without eliminating site viability.
</p>
<table class="case-table case-table-3col" id="case-table">
<thead>
<tr>
<th>Homes within…</th>
<th>…of a possible DC at <strong>200&nbsp;ft</strong> (proposed)</th>
<th>…at <strong>500&nbsp;ft</strong></th>
<th>…at <strong>1,000&nbsp;ft</strong></th>
</tr>
</thead>
<tbody></tbody>
</table>
<p class="case-foot">
Numbers in the 500&nbsp;ft and 1,000&nbsp;ft columns show how many homes
would <em>remain</em> within that distance of any possible data-center
site if the city tightened the setback. Lower = better.
</p>
<div class="case-actions">
<label><input type="checkbox" id="layer-homes-protected-2" /> Show the <strong id="protected-count"></strong> homes that would be newly protected at 500&nbsp;ft on the map ↑</label>
</div>
</section>
<footer class="caveats">
<h3>Disclaimer</h3>
<p>
Despite multiple requests, the City of Johnson City has declined to release internal data used to evaluate the draft ordinance or outline its methodology for determining a setback distance.
</p>
<p>
Information was compiled from Parcel, Zoning, Address, and Road Centerline GIS data as of 6/26/2026. While every attempt has been made to ensure accuracy, the data is provided "as is" and may contain errors or omissions.
</p>
<h3>Methodology</h3>
<p>
The 200&nbsp;ft setback comes from Johnson City draft ordinance
Section&nbsp;6.20.3.2.I, which forbids a data center facility within
200&nbsp;feet of any residential use or district. Measurement is
parcel-line to parcel-line.
</p>
<p>
Residential districts include all R-*,
RP-*, RO-*, A-1, and RM-3/4/5; any parcel with a residential land use
designation or containing a dwelling address point is also treated as residential.
Mixed-use districts without resdential land use do not permit single family homes and are therefore treated as non-residential, as per the text of the draft ordinance.
</p>
<p>
A parcel is counted as <em>buildable</em> if it has a contiguous compliant
patch large enough to host a 50×50&nbsp;ft building, with at least
50&nbsp;ft of public road frontage per JC subdivision regulation §4-4.1.
A parcel is <em>strict-eligible</em> if its entire boundary is at least
200&nbsp;ft from any residential line.
</p>
<p>
Every counted parcel still requires Board of Zoning Appeals
special-exception approval, plus noise, vibration, environmental, and
utility-capacity review. The geometric eligibility shown here is
necessary but not sufficient. The draft ordinance is text under
consideration, not enacted law.
</p>
<p>
This analysis is for discussion of the proposed ordinance only. <em>Do not
rely on it for real-estate, legal, or development decisions</em> — verify
any parcel-specific question with Johnson City Planning &amp; Development
Services.
</p>
<p class="footnote">
GIS data: Johnson City Planning &amp; Development Services. Distance
computed in EPSG:2274 (TN State Plane US feet).
</p>
<p class="credit">
Compiled, written, and hosted as a free public service by
<a href="https://daveforjc.com" target="_blank" rel="noopener">Dave&nbsp;Adams</a>.
</p>
</footer>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script src="https://unpkg.com/@turf/turf@7.1.0/turf.min.js"></script>
<script src="app.js"></script>
</body>
</html>