/ 01 — Competitive strategy
Different axis from bengaluru.rent. On purpose.
They own real rent data and zero friction. We own reasoning and memory. The strategy is to differentiate hard as the decision-support layer, not to clone a map we'd lose at.
/ 02 — Competitor
bengaluru.rent, verified live
Anonymous crowdsourced rent map. No login. Google Maps JS API. AdSense-funded. Stats captured 2026-06-09.
Their gaps: no AQI, no school data, no commute math, no reasoning, no accounts, no API. Data quality leans on the crowd; long-tail coverage is sparse.
/ 03 — Gap analysis
Comparison matrix
Where they lead, where we lead, and the priority of closing each gap.
| Category | bengaluru.rent | Ooru (current) | Opportunity | Priority |
|---|---|---|---|---|
| Discovery | Map + pin drop + 2.5km match | Landmark → LangGraph → LLM report | Add spatial view of ranked localities | High |
| Rent data | 4,764 real rents + 114 owner flats | None (Apify broken) | Lightweight price signal; be honest on confidence | Critical |
| Transport | Namma Metro overlay + "Near Metro" filter | Foursquare metro, discarded | Wire into state + report + ranking | High |
| Schools | None | ICSE via Foursquare, fabricated in report | Real data → core ranking signal (their blind spot) | Critical |
| Environmental | Green cover (Sentinel-2, qualitative) | AQI via Open-Meteo (real numbers) | Fuse AQI + green into a livability score | Medium |
| Intelligence | None (raw data + filters) | Kimi LLM advisory (unique) | Protect & enhance — the core moat | Critical |
| Personalization | Anonymous; email watchlist only | Auth + HouseRental history | Personal house-hunting memory + compare | Medium |
| Visualization | Rich Google Maps UX (core) | Text / JSON / CLI | Mapbox GL view (reuse existing token) | High |
| Matching | Seeker↔lister email match (2,285) | None | Out of scope for an analysis tool | Low |
| Trust | Real pins + crowd fact-check | Fabricated claims in report | Fix data wiring — non-negotiable | Critical |
| Friction | Zero (no login), quick tour | Registration; sync blocking /chat | Anonymous demo + non-blocking /chat | Medium |
Their strength is data volume. Ours is intelligence and trust. Racing them on the map is the one strategy that loses.
/ 04 — Sequencing
Roadmap — three horizons
Restore honesty, then reach parity on visualization, then build the moat they can't. Horizon 0 was scoped as an in-place v1 repair; the chosen path is the v2 PocketBase rewrite (see Architecture §04 / MIGRATION.md), which resolves 0.1 and 0.2 by construction — read these as "what's broken + what to build," delivered via v2.
Horizon 0 Trust & hygiene
Do first. Nothing new ships before these.
| # | Item | Effort | Risk |
|---|---|---|---|
| 0.1 | Wire schools + metro into state, prompt & persistence — the honesty fix. main.py · workflow.py · services.py · chatbot.py | M | low |
| 0.2 | JWT secret from env, no hardcoded default; rotate. services.py:22 | S | low |
| 0.3 | .gitignore + untrack .env / __pycache__ / skill dirs; rotate leaked keys | S | low |
| 0.4 | Delete dead code — schemas.py, get_travel_times, unused context var | S | low |
| 0.5 | Request timeouts on all six requests.get() calls. main.py | S | low |
| 0.6 | Pin requirements.txt versions for reproducible builds | S | low |
| 0.7 | Non-blocking /chat or progress (LangGraph streaming / async) | M | med |
Horizon 1 Parity + differentiation
2–4 weeks. Catch up on visualization, pull ahead on reasoning.
| # | Item | Effort | Impact |
|---|---|---|---|
| 1.1 | Fix / replace rentals path — dynamic Apify URL or public price ranges | M | high |
| 1.2 | Map view of ranked localities via Mapbox GL (reuse existing token) | M | high |
| 1.3 | Enrich LLM prompt with real structured data — school count/dist, metro, per-locality AQI, rent range | S | high |
| 1.4 | Comparison endpoint for 2+ saved searches | S | med |
Horizon 2 The moat
What an anonymous map structurally can't do.
| # | Item | Effort | Impact |
|---|---|---|---|
| 2.1 | Multi-signal livability score — AQI + school dist + metro time + green-cover proxy | M | high |
| 2.2 | "What-if" commute modeling — revive dead get_travel_times as a real node | M | high |
| 2.3 | Personal knowledge base — notes per locality, saved reports | M | med |
| 2.4 | Opt-in crowdsourced rent signals (authenticated) — only after trust restored | L | med |
Single highest-leverage step: 0.1. It kills the fabrication problem and turns schools + metro into honest differentiators in one move.
/ 05 — Read next