← Projects

Melbourne Property Research Agent

Personal Project · 2025 – Present

A full-stack agentic AI application that researches Melbourne suburbs for property investment decisions, built on a LangGraph ReAct reasoning loop with a FastAPI streaming backend and React frontend.

The problem

Property research in Melbourne is fragmented — median prices, demographic profiles, rental yields, and price trend data live across multiple government and commercial sources. There was no single conversational tool that could autonomously pull these signals together, reason across them, and return a coherent suburb-level analysis. Existing tools either required manual cross-referencing or sat behind financial product sign-up flows.

Architecture

Melbourne Property Research Agent — system architectureFull-stack agentic architecture showing React frontend on Vercel, FastAPI backend on Railway, LangGraph ReAct agent with four tools, Claude API, and data sources including VGV and ABS Census.Frontend — VercelReact + Vite frontendmelbourne-property-tool.vercel.appSSE streamBackend — RailwayFastAPI backendStreaming SSE + Haiku guardrailAgent layerLangGraph ReAct agentState graph + conditional edgesClaude APIReasoning LLMTool layerSuburb statsMedians, yieldsDemographicsABS Census dataPrice trends5-year chartAmenitiesIn progressData sourcesVGV sales dataProperty prices, trends — SQLiteABS 2021 CensusDemographics, income — SQLiteOutputStreamed reasoningTool calls visible in UIInline Recharts chartPrice trend on trend queries

Approach

Built a full-stack agentic system from scratch. The agent is a LangGraph ReAct reasoning loop powered by the Claude API — it decides which tools to call, in what order, based on the user's query. Four tools cover the core research dimensions: suburb market stats, demographics (ABS 2021 Census), 5-year price trends (Victorian Valuer General data), and amenities (in progress). All data is preprocessed into SQLite for fast local retrieval. The FastAPI backend streams responses to the React frontend via Server-Sent Events, exposing the agent's tool-call reasoning chain step-by-step in the UI. A lightweight Claude Haiku-based guardrail classifies and short-circuits out-of-scope queries before they hit the agent loop. Price trend queries render an inline Recharts chart directly in the chat UI. Frontend is deployed on Vercel; backend on Railway with automated CI/CD on every git push.

Key decisions and trade-offs

LangGraph ReAct over a single-prompt approach

A single LLM call with all suburb data stuffed into context would have been simpler to build but wouldn't demonstrate agentic reasoning. The LangGraph state graph with conditional edges means the agent dynamically decides which tools to call based on query intent — a much stronger portfolio signal and a more honest representation of how production agentic systems work.

VGV and ABS data over live commercial APIs

Victorian Valuer General sales data and ABS 2021 Census DataPacks are authoritative government sources — more credible than scraped or estimated figures. Preprocessing both into SQLite keeps retrieval fast and keeps the app free to run. The trade-off is data recency, which is the primary thing to address in future iterations.

Haiku guardrail before the agent loop

Running a full ReAct loop on every query — including irrelevant or malformed ones — wastes tokens and degrades response time. A cheap Haiku-based classifier up front short-circuits out-of-scope queries before they reach the agent. This is a production pattern that most portfolio projects skip, and it signals cost-awareness and systems thinking.

Challenges

Streaming SSE lifecycle

Streaming Server-Sent Events through a FastAPI backend to a React frontend required careful handling of connection lifecycle, especially keeping the reasoning chain visible without blocking the final response.

Data pipeline preprocessing

Preprocessing VGV and ABS data into a clean, queryable format required significant pipeline work before any agent logic could be written.

Outcome

A fully deployed, publicly accessible agentic research tool at melbourne-property-tool.vercel.app. Demonstrates end-to-end ownership of a production-pattern agentic system — from data pipeline through agent design, streaming API, and React frontend — built and shipped as a solo project.

My role

Sole developer across the full stack — data preprocessing, agent design, FastAPI backend, React frontend, and deployment infrastructure. Conceived independently; discussed the product idea with a collaborator who may be involved in a future expanded version of the tool.

What I would do differently

I would source more recent property data — VGV and ABS are authoritative but not current. Live data integration (e.g. Domain.com.au API or CoreLogic) would meaningfully improve the tool's usefulness, though these are paid sources. I would also add persistent user accounts so research sessions can be saved, an interactive map tool for spatial suburb comparison, suburb comparison mode (side-by-side analysis), and investment scoring to surface the highest-potential suburbs based on user-defined criteria.

Agentic AIFull-StackLangGraphRAGPropertyStreaming
PythonFastAPILangGraphClaude APIReactViteTailwind CSSRechartsSQLiteRailwayVercel