Project / 02
GridWise
Turning scattered city signals into explainable planning decisions.
GridWise scores each area on five normalized readiness dimensions — market, mobility, infrastructure, policy, and strategic — using a deterministic weighted formula. City and Developer lenses apply different weight profiles to those same metrics, so priorities differ without changing the underlying data. Relevant planning evidence is retrieved and kept linked to the result, and a planning copilot narrates that score and evidence — it cannot generate or alter the score.
- Next.js
- React
- TypeScript
- Leaflet
- Tailwind CSS
- OpenAI API
Deterministic Scoring
Weighted normalized metrics.
No LLM scoring.
City / Developer Lenses
Same normalized metrics.
Different stakeholder priorities.
Evidence-Backed Outputs
Relevant evidence stays linked to each result.
AI Explains, Doesn’t Score
Copilot narrates; it cannot change the score.
System architecture

Engineering decisions
| Decision | Why | Tradeoff |
|---|---|---|
| Deterministic weighted scoring, not LLM scoring. | Every score stays traceable to explicit inputs and weights. | Weight profiles must be designed and maintained by hand. |
| Shared metrics, lens-specific weights. | City and Developer views stay comparable, not identical. | Both weighting paths must stay normalized to the same model. |
| Scoring, evidence, and generation stay separate. | Decision logic, context, and language generation keep clear boundaries. | Requires explicit state handoffs between layers. |
Under the hood
Map / data
- Next.js + React + Leaflet
- Sample planning-area polygons
- Structured evidence linked to areas
Scoring / evidence
- score = Σ(weight × metric)
- Normalized stakeholder weight profiles
- Policy snippets ranked by type + keyword overlap
Planning Copilot
- /api/assistant reads score + weights + evidence, read-only
- gpt-4.1-mini generates the explanation
- Deterministic fallback with no API key
Technical deep dives


System checks
- Metrics normalized before weighting.
- Score bounded 0–100.
- Evidence remains linked to the resulting explanation.
- Copilot cannot mutate the computed score.
Next test
Weight-sensitivity analysis to test ranking stability as individual lens weights change.