Rental Truth-Teller — project story

Inspiration

Bengaluru’s rental market is noisy and uneven: brokers and informal norms dominate what renters hear, while newcomers rarely have a clear baseline for rent or deposits. The idea behind Rental Truth-Teller is to offer a calmer, more impartial lens—a data-grounded second opinion—so people can sanity-check quotes and comparisons instead of relying only on sales pressure or anecdotes.

What it does

The app is a conversational assistant tuned for Bengaluru renters: users ask whether a rent or deposit sounds fair, compare neighbourhoods, or describe what they want in plain language. Answers are driven by tools wired to Elasticsearch—semantic search over listings plus ES|QL-style aggregates for medians, percentiles, and deposit statistics—so factual claims are meant to trace back to indexed data with numbered citations and an explicit Sources section. The system prompt also bakes in deposit-awareness, including calling out demands well above typical norms and referencing Karnataka’s Model Tenancy Act framing around deposits where relevant.

How we built it

Public listing aggregates flow through an ingest pipeline into a baseline blr-rentals index, with mappings that support both semantic retrieval and analytics. AWS Bedrock (Claude) runs a tool-use loop (converse + defined tools); Python executes each tool call against Elasticsearch and feeds structured JSON back until the model returns a final answer. A Streamlit UI wraps the chat experience on top of that loop.

Challenges we ran into

Keeping answers honestly bounded was harder than making them fluent—the assistant must use tools before asserting facts and admit when locality or configuration isn’t represented well enough in the data. Operational friction showed up around Bedrock access (API key vs IAM) and environment quirks where mixed credential shapes could break authentication. Holding the model to strict citation and deposit rules without sounding robotic took iteration on prompts and tool design.

Accomplishments that we're proud of

We’re pleased with the separation of responsibilities: Claude orchestrates reasoning, while Elasticsearch owns grounded retrieval and aggregations, which keeps the mental model simple for renters and maintainers alike. The small set of purpose-built tools makes routing clearer than a grab bag of generic queries. The renter-first behaviour rules in the system prompt—no cheerleading for brokers, explicit deposit framing, honest comparisons—encode values directly into how the product answers.

What we learned

Semantic search and aggregate analytics complement each other: similarity answers “what matches my description,” while structured stats answer “what does this neighbourhood typically charge.” With Bedrock, a narrow tool surface with crisp descriptions beats sprawling endpoints for reliable multi-step reasoning. Finally, explicit contracts in the prompt (grounding, citations, refusals) materially improve how trustworthy answers feel.

What's next for Joy

Looking ahead, the biggest uplift would come from fresher or broader data so benchmarks aren’t frozen on a single aggregate snapshot. A tighter multi-turn memory path into the agent would make follow-up questions feel natural without repeating context. We’d also like quality signals—sparse listings, naming ambiguity—and lightweight evaluations so regressions in tool choice or citations get caught early.

Built With

Share this project:

Updates