All engineering work

Engineering case study

Bend Neighborhood Development Agent

A map-centered research agent that connects public permit, planning, property, and geographic data to make neighborhood development progress easier to understand.

Role

Software engineer

Selected technologies
  • React
  • Next.js
  • Claude Sonnet
  • City of Bend Open Data

Problem

I began this project as a prospective homebuyer trying to understand Bend's rapidly changing neighborhoods. New developments were appearing throughout the city, but it was difficult to determine where each neighborhood was in the building process or how much progress had already been made.

The underlying information was publicly available, but only if you knew which government datasets to search. Permit, planning, property, and geographic data were separated across sources and were not presented together on a map. That made it difficult to build a coherent picture of where development was occurring and how far it had progressed.

Approach

I built the Bend Neighborhood Development Agent to connect those public datasets into a single research experience. Rather than treating the work primarily as a data-collection problem, I focused on the relationships between the existing government APIs: connecting neighborhood boundaries, permit activity, planning records, and property data so that information from one source added context to the others.

Users can ask questions about development trends or begin with suggested research topics such as development pressure, short-term rental hotspots, affordable housing, permit status, and pending planning applications. The agent uses Anthropic's Claude Sonnet 4.6 API to synthesize information from the connected sources and provide conversational answers about Bend neighborhoods.

Product and Interaction Design

I deliberately made the interactive map the center of the experience. Development data is inherently spatial, and a text-only interface would still require users to mentally connect neighborhood names, permits, and planning activity to physical locations. The map makes it possible to see where permits are in progress, where neighborhoods are developing, and how individual records relate to the surrounding area.

Property data provides an additional signal of development progress, helping users move beyond whether a project exists to understand how much of a neighborhood has actually been built.

Agent Architecture

The chat and map operate as one system rather than two separate interfaces. Each request includes the user's current view: the selected neighborhood, active permit filters, the number of visible permits, and any permit detail card currently open. That allows the agent to answer questions about what the user is actually seeing instead of relying only on the text of the conversation.

I route questions into profile, factual, or hybrid paths. Descriptive questions can use neighborhood summaries, while permit counts, comparisons, and record-specific questions are grounded in the currently loaded data. The system also detects permit numbers and addresses in a query and performs targeted lookups before asking the model to answer.

Context is enriched only when the question requires it. Questions about short-term rentals, planning activity, or construction progress trigger the corresponding ArcGIS queries for license, planning, or inspection records. For regulations and zoning questions, the agent can search official City of Bend resources and municipal code, fetch the relevant source text, and continue through a bounded tool-use loop of up to five rounds.

The interaction works in both directions. Selecting a neighborhood or permit changes the context available to the agent; when an answer mentions neighborhoods, the interface highlights them on the map. A successfully resolved permit lookup can automatically move the map to the permit location and display the relevant record.

Reliability and Observability

The system prompt explicitly separates descriptive context from factual data, instructs the model to look up regulations rather than guess, and requires it to acknowledge when precise data is unavailable. Public-data requests use bounded result sets and cache policies appropriate to how frequently each source changes.

I instrumented conversations with Langfuse traces covering permit, planning, short-term-rental, inspection, and agent-tool activity. The traces capture the active map context, tool inputs and outputs, model rounds, and token usage so failures can be diagnosed across the complete interaction rather than from the final answer alone. Users can also cancel an in-progress request through an AbortController-backed stop action.

Features

  • Interactive Map: Explore Bend's neighborhoods through a map interface with detailed neighborhood profiles
  • AI-Powered Q&A: Ask natural language questions about development trends, housing patterns, and planning data
  • Suggested Topics: Quick access to common research areas including development pressure, STR hotspots, affordable housing, and pending planning applications
  • Neighborhood Classification: Automated analysis and classification of Bend's neighborhoods based on development patterns

Data Boundaries

The application uses public APIs from the City of Bend Open Data Portal to analyze permit data, short-term rental patterns, housing affordability, property records, and zoning applications. The experience is bounded by the coverage and update frequency of those public sources, and AI responses should be verified against the underlying records before being used for a purchasing decision.