{
 "repo": "hannah/citylens",
 "branch": "main",
 "commit": "251531a",
 "verified_live": "2026-10-10",
 "default_pages_config": "examples/san-francisco.toml",
 "configs": {
  "san-francisco": {
   "adapter": "socrata",
   "status": "all 5 layers ok",
   "layers": {
    "street-cleaning (311, 30d)": 28396,
    "graffiti (311, 60d)": 13189,
    "sewer/flooding/leaks (311, 60d)": 1876,
    "police-calls (priority A, welfare/crisis/missing excluded, 60d)": 8374,
    "injury-crashes (365d, lagged to 2026-08-31)": 2854
   }
  },
  "washington-dc": {
   "adapter": "arcgis",
   "status": "all 3 layers ok",
   "runtime": "~5 min (1000-row pages)",
   "layers": {
    "crime (MPD MapServer 41+7, 90d)": 6281,
    "sanitation 311 (rodents/dumping/graffiti, 60d)": 12907,
    "crashes (180d)": 8877
   }
  },
  "san-diego": {
   "adapters": [
    "csv_url",
    "ccrs",
    "geojson_url"
   ],
   "status": "all 4 layers ok",
   "layers": {
    "crime NIBRS csv (120d)": 25622,
    "CCRS crashes (365d)": 4883,
    "CCRS crashes without coordinates (unmapped)": 3513,
    "USGS earthquakes in city bbox (30d)": 10,
    "open Get It Done street problems csv (365d, encampments removed)": 14714
   }
  }
 },
 "source_issues": [
  "SFPD Incident Reports wg3w-h783 currently has 0 rows with latitude/point (58,035 rows total); replaced by dispatched priority-A police calls in the SF example.",
  "SANDAG geo.sandag.org downloads (Library/Parks GeoJSON) return 403 from this host; not used.",
  "data.sfgov.org now redirects to data.sf.gov; configs use data.sf.gov."
 ],
 "checks": {
  "scripts/check.py": "19 tests pass",
  "scripts/check.mjs": "pass",
  "browser": "SF/DC/SD desktop + SF 390px mobile, 0 console errors, 0 horizontal overflow"
 },
 "unverified": [
  "GitHub Actions Pages workflow has not run (repo not yet on GitHub)",
  "Live demo URL is a placeholder"
 ],
 "policy": "Layers map places (environment, sanitation, traffic, incidents), never people: encampment reports, welfare/mental-health/suicide/missing-person calls removed; SD vagrancy offenses weight 0; check.py enforces on examples."
}
