Devpost: https://devpost.com/software/soft-submission
RentScope is a map-first assistant that helps students choose neighbourhoods by visualizing rent, commute, safety signals, and amenities; producing ranked, explainable recommendations instead of scattered listings.
Finding student housing is chaotic:
- Rent alone doesn’t tell the full story
- Commute time, safety, and amenities matter differently for everyone
- “Safety” and “livability” are hard to compare objectively
- Most tools force tab-hopping and gut-feel decisions
RentScope turns those tradeoffs into a calm, visual map experience with clear reasoning behind every recommendation.
- Students add the places they care about most (campus, work, etc.)
- RentScope generates:
- A rent heatmap
- Ranked neighbourhood shortlists
- Evidence-backed explanations for each score
- Users can explore neighbourhoods, compare tradeoffs, and understand why one area outranks another
frontend/— Next.js + Tailwind + Leafletorchestrator/— Node.js API + Gemini agent managermcp_server/— Python FastAPI MCP server + toolsdata/— sample datasets + Snowflake SQL scripts
- Frontend -> Orchestrator only
- Orchestrator -> MCP tools only (no Snowflake direct)
- Agents only interpret MCP tool outputs (JSON-only, validated)
- MongoDB stores shortlists, tool cache, and analysis runs
- Toronto Police Service Open Data (Major Crime Indicators / Public Safety Data Portal):
- https://www.tps.ca/data-maps/open-data/
- ArcGIS Feature Service (Major Crime Indicators open data): https://services.arcgis.com/S9th0jAJ7bqgIRjw/arcgis/rest/services/Major_Crime_Indicators_Open_Data/FeatureServer/0
- TTC GTFS (routes/stops/schedules):
- OpenStreetMap / Overpass API (optional for POIs):
- Create an environment variable with your Gemini key (PowerShell):
$env:GEMINI_API_KEY="your_key_here"- Run the stack:
docker compose up --build- Open the app:
http://localhost:3000
cd mcp_server
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
uvicorn app:app --reload --port 7000cd orchestrator
npm install
$env:MCP_URL="http://localhost:7000"
$env:MONGO_URI="mongodb://localhost:27017"
$env:GEMINI_API_KEY="your_key_here"
npm run devcd frontend
npm install
$env:NEXT_PUBLIC_ORCHESTRATOR_URL="http://localhost:4000"
npm run devUse the built-in demo shortlist button in the UI, or call the API directly:
curl -X POST http://localhost:4000/api/analyze \
-H "Content-Type: application/json" \
-d @data/sample/seed_demo.jsonOptional: seed MongoDB with the same demo shortlist:
pip install pymongo
python data/seed_mongo.pycrime_summary(lat, lon, radius_m, window_days)- returns
{counts_by_type, rate_hint, trend_hint, source, updated_at}
- returns
commute_proxy(lat, lon, campus_lat, campus_lon)- returns
{distance_km, est_minutes, near_transit_hint, source}
- returns
nearby_pois(lat, lon, categories, radius_m)- returns
{results:[{name, category, dist_m}], counts_by_category, source}
- returns
SQL scripts live in data/snowflake/:
create_tables.sqlload_sample.sql
Set these env vars for Snowflake access (MCP server):
SNOWFLAKE_ACCOUNT
SNOWFLAKE_USER
SNOWFLAKE_PASSWORD
SNOWFLAKE_WAREHOUSE
SNOWFLAKE_DATABASE
SNOWFLAKE_SCHEMA
SNOWFLAKE_ROLE (optional)
shortlistsanalysis_cacheanalysis_runs
- This MVP reports “higher/lower incident density” based on available open data only.
- Crime locations in the demo data are approximate; treat results as indicative.
- Agent outputs are validated JSON with retries; deterministic fallbacks run if Gemini is unavailable.