vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
보행자 안전 대시보드, 필라델피아 교차로 사고 순위와 보고타 ZAT 구역 프로필 제공
Interactive pedestrian safety dashboard. Philadelphia intersection crash rankings from PennDOT data, and Bogotá ZAT zone profiles from a published Street View built-environment extraction.
데이터Python · TypeScriptGitHub @aquistbe온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Public pedestrian safety dashboard: empirical Bayes crash risk for Philadelphia intersections, segments, and tracts, plus Bogota ZAT and segment layers
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Interactive public dashboard for exploring pedestrian safety data and
supporting community decision-making about pedestrian infrastructure. Part of
the WalkSafe-AI project. The current phase is crash-based: empirical Bayes
risk estimates built from police-reported crash data, plus a completed
imagery measurement-validation study. SPMI model outputs, optimization, and
PedAudit integration are planned and not yet built — see the Roadmap.README 전문 보기 ↗Live: https://walksafe-ai-dashboard.daq26.workers.dev/
Interactive public dashboard for exploring pedestrian safety data and supporting community decision-making about pedestrian infrastructure. Part of the WalkSafe-AI project. The current phase is crash-based: empirical Bayes risk estimates built from police-reported crash data, plus a completed imagery measurement-validation study. SPMI model outputs, optimization, and PedAudit integration are planned and not yet built — see the Roadmap.
Philadelphia (Phase 0, crash-based prototype)
Bogotá (published built-environment extraction)
ZAT associations are area-level (ecological), and risk estimates are not numerically comparable across cities or layers — each uses its own crash definition, exposure measure, and model. The dashboard labels both caveats where the results appear.
Salt Lake City — planned; shown as a disabled chip in the city switcher.
walksafe-ai-dashboard/
├── data/ # Committed GeoJSON outputs + build scripts
│ ├── source/ # Build inputs. Small CSVs committed; large raw
│ │ │ # geometry is not — provenance and checksums
│ │ │ # in data/source/README.md
│ ├── build_geojson.py # Philadelphia intersections + summary.json
│ ├── build_segments_geojson.py # Philadelphia segment layer
│ ├── build_segment_scoring_geojson.py # mid-block imagery scoring frame
│ ├── build_tracts_geojson.py # Philadelphia tract layer
│ ├── build_bogota_geojson.py # Bogotá ZAT choropleth
│ ├── build_bogota_segments_geojson.py # Bogotá segment layer (R2-hosted)
│ ├── intersections.geojson # 9.8 MB segments.geojson # 20 MB
│ ├── tracts.geojson # 1 MB bogota_zats.geojson # 4.3 MB
│ ├── segments_scoring.geojson, imagery_scores.json, summary.json
│ └── bogota_segments.geojson # 61 MB — NOT committed; published to R2
├── pipeline/ # Analysis pipeline (Python), steps 01–16:
│ │ # crashes → snapping → exposure → SPF/EB →
│ │ # deliverables; segments 12–14; Bogotá 15;
│ │ # tracts 16
├── scoring/ # Gemini Street View scoring pipeline
│ │ # (versioned prompts; no imagery stored)
├── api/ # FastAPI backend — optional, the frontend
│ │ # works standalone from static files
├── frontend/ # Next.js 14 (App Router) + TypeScript +
│ ├── src/ # Tailwind + MapLibre GL JS
│ └── public/data/ # gitignored — populated from data/ by
│ # `npm run copy-data` (runs before dev/build)
├── Makefile # Entry point for all data builds (`make help`)
├── docker-compose.yml # Local development full stack
├── CLAUDE.md # Working conventions for the repo
├── BOGOTA_DASHBOARD_INTEGRATION.md # Design records
├── BOGOTA_SEGMENTS.md, SEGMENTS_EXTENSION.md
└── README.md
frontend/wrangler.jsonc,
serving the Next.js export in frontend/out/), with Cloudflare R2 for
GeoJSON too large to ship as a site asset. Docker Compose is for local
development only.The frontend works standalone — no API needed. npm run dev copies the
committed data into public/data/ automatically.
cd frontend
npm install
npm run dev
Open http://localhost:3000.
Adds per-intersection imagery detail and filtered queries. Run through uv rather than a venv (this tree may live on a synced drive, and a venv would sync thousands of files):
cd api
uv run --with-requirements requirements.txt uvicorn main:app --reload --port 8000
API docs at http://localhost:8000/docs.
docker-compose up --build
The site deploys to Cloudflare Workers as a static export. Every push or
merge to main deploys automatically: Cloudflare Workers Builds
(Cloudflare's Git integration) builds the commit and publishes it to the live
site within a few minutes. The build settings live in the Cloudflare
dashboard; frontend/wrangler.jsonc records what they should be.
Other branches are built as a check but not served — preview URLs are turned
off in wrangler.jsonc, so the preview links Cloudflare posts on a pull
request return 404.
Check the export locally with make preview (from the repo root) before
merging to main.
A manual deploy from a local checkout is still possible:
cd frontend
npm run build:static
npx wrangler deploy
The Bogotá segment layer exceeds the 25 MiB per-asset limit for Workers
static assets, so it is published to an R2 bucket instead
(make upload-bogota-segments); the browser fetches it from
NEXT_PUBLIC_R2_BASE_URL (set in frontend/.env.production) only when that
layer is selected.
To publish new imagery scores: rerun
python scoring/join_scores.py --write-geojson, commit data/, and merge to
main; the deploy follows automatically.
The Makefile is the entry point — run make help for the full target list.
Python dependencies resolve through uv; no venv setup is needed.
make check # verify source files are present, checksum the geometry
make philly # data/intersections.geojson + imagery-score join
make bogota # data/bogota_zats.geojson
make data # both of the above
make segments # mid-block crashes → segment SPF → data/segments.geojson
make tracts # tract SPF + ACS equity → data/tracts.geojson
make bogota-segments # Bogotá segment SPF → data/bogota_segments.geojson
make philly-pipeline # full Philadelphia analysis pipeline, steps 01–11
make verify # type-check the frontend
Three prerequisites, documented in pipeline/README.md and
data/source/README.md:
WALKSAFE_DATA_ROOT at it.data/source/ is gitignored by design.
make check verifies what is present and checksums the Bogotá ZAT
boundaries so a different vintage cannot silently change the join.make tracts needs a free Census API
key (CENSUS_API_KEY in
the environment or the gitignored repo-root .env) for the ACS pull;
TIGER/Line tract boundaries are fetched and cached automatically.| Source | Description | Status |
|---|---|---|
| PennDOT PCDS | Crash data 2015–2024 (CRASH, PERSON tables) | Integrated |
| DVRPC / PennDOT traffic | AADT volumes (PaTraffic2024_03) | Integrated |
| Philadelphia GIS | HIN, street nodes, intersection controls, centerlines | Integrated |
| Census 2020 DHC | Block-group age/race demographics for the 15 narrowed candidate sites (100 m and 400 m catchments) with citywide comparison | Integrated (site catchments) |
| ACS 2020–2024 | Tract-level poverty for the equity overlay | Integrated (tract layer) |
| Bogotá open data | ZAT boundaries, 2015–2019 crashes, 27 built-environment features from a published ~312k-point extraction; processed by Universidad de los Andes | Integrated |
| Google Street View | Imagery input to VLM scoring; only pano_id and capture date are stored — imagery is never committed | Integrated (50 intersections) |
| Gemini scoring pipeline | Blind imagery safety scores (scoring/, versioned prompts) | Validation study complete |
| DVRPC Pedestrian Portal | Regional sidewalk inventory, crosswalks, curb ramps | To integrate |
| SPMI model outputs | GNN-produced Safety/Walkability/Accessibility scores | Pending (not built) |
| Participatory weights | Community/stakeholder preference weights | Pending (not built) |
| PedAudit results | Site-level safety audits and intervention simulations | Pending (not built) |
All figures are generated into data/summary.json by the build and are the
numbers the dashboard serves.
| Page | Status | Description |
|---|---|---|
| Map Explorer | Built | Multi-city map: five data layers, risk/crash/imagery modes, filters, info panels |
| Research | Built | Methods: crash data, SPF/EB, segment and tract models, imagery scoring, limitations |
| About | Built | Project overview, methods notes, data credits (Universidad de los Andes subcontract), team, contact |
| Data Downloads | Partial | Source attribution is live; download links are still "coming soon" |
| City Reports | Coming soon | Stub page |
| Equity Dashboard | Coming soon | Stub page |
# API (read by api/main.py; docker-compose sets these)
API_HOST=0.0.0.0
API_PORT=8000
DATA_DIR=../data
# Frontend — all optional
NEXT_PUBLIC_API_URL= # unset = fully static, no API calls
NEXT_PUBLIC_MAPLIBRE_STYLE= # defaults to CARTO Positron
NEXT_PUBLIC_R2_BASE_URL= # R2 public base URL for the large layers
# (set for production in frontend/.env.production)
NEXT_PUBLIC_BASE_PATH= # only for serving under a subpath
pipeline/ was ported fromThis dashboard and the Bogotá built-environment work are supported in part by the Built Environment, Pedestrian Injuries and Deep Learning (BEPIDL) Study, NIH Fogarty International Center award K01 TW011782. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.
Much of this repository was built with Claude Code (Anthropic's coding
agent): the analysis pipeline, the dashboard, the build scripts, and most of
the documentation were drafted by Claude and reviewed before merging.
Commits record this with Co-Authored-By trailers and session links. Study
design, model specification, and interpretation of results are the
investigators'; every derived number is reproducible from the committed
build scripts and the provenance notes in data/source/README.md.
MIT — see LICENSE.