Skip to content

feat(ui): Streamlit polish — joint H+V, PPHPD, console, GeoJSON import#15

Merged
harsh-pandhe merged 1 commit into
mainfrom
feat/streamlit-polish
May 19, 2026
Merged

feat(ui): Streamlit polish — joint H+V, PPHPD, console, GeoJSON import#15
harsh-pandhe merged 1 commit into
mainfrom
feat/streamlit-polish

Conversation

@harsh-pandhe
Copy link
Copy Markdown
Owner

Summary

Brings the optimizer UI up to the operator-facing feature set the Phase 2 MVP lacked, following the requested UI blueprint (sidebar inputs · viewport tabs · bottom console).

  • Joint H+V control — a "Corridor half-width" sidebar slider wires Phase 12c into the UI. Above 0 (GA mode) the run builds a surface_fn from the DEM swath and passes it to optimize(), so the GA may shift towers laterally to route around terrain; the console reports how many towers ended up offset. NSGA-II mode shows an info note (GA-only feature).
  • PPHPD capacity metric — a line-speed slider plus a "Capacity" headline metric: persons per hour per direction, derived from cabin spacing and line speed.
  • Bottom run console — a persistent expander logging each run: terrain extent, optimizer config, feasibility, and violation detail.
  • GeoJSON import — upload a previously-exported alignment.geojson in the Projects tab; the tower schedule is parsed, displayed, and re-evaluated against the current terrain run (feasible / violations).

Test plan

  • python -m py_compile app/streamlit_app.py — syntax clean
  • App boots headless (streamlit run --server.headless true) and serves / without exception
  • Pure helpers (_pphpd, _log) exercised in isolation
  • UI-only change — app/streamlit_app.py + CHANGELOG; no effect on the optimizer/test suite (157/157 unchanged)

Note: this UI is not covered by the automated suite; the run-path logic delegates to optimize(surface_fn=…) which is covered by tests/test_joint_hv.py.

🤖 Generated with Claude Code

…ON import

Brings the optimizer UI up to the operator-facing feature set the
Phase 2 MVP lacked:

- Joint H+V control: a "Corridor half-width" sidebar slider wires
  Phase 12c into the UI. Above 0 (GA mode) the run builds a surface_fn
  from the DEM swath and passes it to optimize(), so the GA may shift
  towers laterally; the console reports how many ended up offset.
  NSGA-II mode shows an info note (GA-only feature).
- PPHPD capacity metric: a line-speed slider plus a "Capacity" headline
  metric — persons per hour per direction from cabin spacing and speed.
- Bottom run console: a persistent expander logging each run (terrain
  extent, optimizer config, feasibility, violation detail).
- GeoJSON import: upload a previously-exported alignment.geojson in the
  Projects tab; the tower schedule is parsed, displayed, and
  re-evaluated against the current terrain run.

CHANGELOG: also records the CI Node.js 24 action bump merged in #14.

App smoke-tested headless (boots and serves cleanly).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@harsh-pandhe harsh-pandhe merged commit 59e1692 into main May 19, 2026
2 checks passed
@harsh-pandhe harsh-pandhe deleted the feat/streamlit-polish branch May 19, 2026 18:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant