The real estate intelligence platform that turns neighborhood guesswork into data-driven decisions โ and transforms apartment parking chaos into a frictionless digital experience.
- Problem Statement
- Our Solution
- Features
- Tech Stack
- System Architecture
- Folder Structure
- Installation Guide
- Usage Guide
- Screenshots
- API Documentation
- Database Schema
- Future Improvements
- Challenges Faced
- Contributing
- License
- Authors
Real estate is one of the most significant financial decisions a family will ever make โ often involving multi-crore investments, multi-year EMIs, and permanent lifestyle shifts. Yet, the tools available to homebuyers are alarmingly primitive.
When Rahul and his family decided to buy a 3BHK in the outskirts of Pune, they visited six properties, liked two, and chose one based on the price and the builder's brochure. Six months after moving in, they discovered:
- The nearest school had a D-rated infrastructure
- A chemical processing unit 2km away consistently pushed the AQI above 180
- The area had 4โ6 hour power cuts every summer
- The proposed metro line that the broker promised was still a decade away
- The local water supply was tanker-dependent for 5 months a year
This is not an edge case. This is the norm.
Homebuyers today rely on:
- Broker word-of-mouth โ biased by commission
- Google Maps reviews โ unstructured, incomplete
- Social media groups โ anecdotal, often outdated
- Government PDFs โ buried in bureaucratic portals, unreadable
There is no single, structured, reliable platform that aggregates:
| Data Category | Current Availability | NexHood Approach |
|---|---|---|
| School Quality Index | Scattered across state portals | Aggregated + scored |
| Air Quality Index | CPCB portal, raw numbers | Visualization from static/mock data |
| Water Availability | Utility boards, inconsistent | Crowd-sourced + verified |
| Future Infrastructure | Master plans in 200-page PDFs | Extracted + mapped |
In any gated society with 200+ apartments, parking is a daily battlefield.
Scenario: Mrs. Mehta's daughter is visiting for the weekend. She parks in what seems like a guest slot. Fifteen minutes later, a resident returns and finds their paid spot occupied. The security guard has no record of the visitor. The RWA (Resident Welfare Association) gets a complaint. The visitor is embarrassed. The resident is furious. The guard is helpless.
This happens every single day in apartments across India.
The root causes:
- No digital visitor registration โ paper logbooks are ineffective
- No parking slot mapping โ residents don't know which slots are available
- No time-bound permissions โ visitors stay beyond acceptable hours
- No accountability chain โ when a slot is misused, there's no audit trail
- Gatekeeping is manual โ security guards work with outdated printouts
The result: conflicts, security risks, and a degraded living experience for everyone.
NexHood is a full-stack real estate intelligence platform built around two core engines:
A data aggregation, scoring, and visualization system that gives homebuyers a 360ยฐ profile of any neighborhood before they commit. The platform uses structured static and mock data to present neighborhood metrics across education, safety, environment, water & utilities, infrastructure, and growth potential.
Every neighborhood receives a NexScoreโข โ a composite score out of 100 โ broken into six sub-scores that buyers can review to compare localities.
A QR-code-based, role-aware parking management system that brings digital accountability to apartment visitor access.
The flow is simple:
- Resident invites a visitor via the app โ system generates a time-bound QR pass
- Visitor shows QR at gate โ security guard scans โ system validates and logs entry
- System allocates a guest parking slot โ visitor navigates to it
- On expiry or exit, slot is freed and audit log updated
No paper. No confusion. Full traceability.
- Interactive map view with color-coded NexScore overlays
- Comparison mode: Compare neighborhoods side-by-side across all metrics
- Drill-down cards: Click any metric to see data and last-updated timestamp
- Neighborhood data served from static/mock JSON datasets
- Composite score (0โ100) computed from structured neighborhood data
- Weighted average of 6 sub-scores:
- ๐ซ Education Index: School density, board affiliation, infrastructure rating
- ๐ Safety Index: Crime incident frequency, type distribution
- ๐ฌ๏ธ Environment Index: AQI data, green cover percentage
- ๐ง Water & Utilities Index: Water availability, power outage frequency
- ๐๏ธ Infrastructure Index: Road quality, metro/highway proximity
- ๐ฎ Growth Potential Index: Upcoming projects, price appreciation history
- Resident Portal: Generate time-bound visitor passes (2 hours / 4 hours / full day / custom)
- Pass carries: Visitor name, vehicle number, arrival window, host apartment
- QR code generation: Server-side QR generated via
qrcodelibrary - Parking slot dashboard: Visual map of all guest slots and availability
- Automatic expiry: System flags overstay
- Audit logs: Every scan event stored with timestamp, guard ID, outcome
Admin Dashboard:
- Society overview: Total units, active residents, parking capacity
- Daily visitor traffic analytics
- Incident reports management
Resident Dashboard:
- Generate and manage visitor passes
- View parking slot map
- Neighborhood score for their locality
- Fully responsive design with Tailwind CSS breakpoints
- Touch-optimized map interactions
- QR scanner uses native camera API
Three distinct roles with granular permissions:
| Role | Capabilities |
|---|---|
| Society Admin | Manage residents, configure parking, view all logs |
| Resident | Generate passes, view dashboards |
| Security Guard | Scan QR codes, log manual entries |
JWT-based authentication with middleware protection on all private routes.
| Technology | Purpose |
|---|---|
| React.js 18 | Component-based UI framework |
| React Router | Client-side routing |
| Tailwind CSS 3 | Utility-first responsive styling |
| Recharts | Responsive chart components (line, bar, radar) |
| Axios | HTTP client with interceptors for auth headers |
| Context API | Global auth state management |
| Technology | Purpose |
|---|---|
| Node.js 18 | Runtime environment |
| Express.js | REST API framework |
| JWT | Stateless authentication |
| qrcode | Server-side QR code generation as PNG/SVG |
| Joi | Request payload validation |
| Technology | Purpose |
|---|---|
| MongoDB 6 | Primary database (neighborhoods, users, visitor passes) |
| Mongoose | ODM with schema validation and middleware |
| Technology | Purpose |
|---|---|
| ESLint + Prettier | Code style enforcement |
| dotenv | Environment variable management |
NexHood follows a clean MVC architecture โ with a React frontend (View), Express controllers (Controller), and Mongoose models (Model).
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CLIENT LAYER โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ React Web App (Vite + React Router) โ โ
โ โ Home ยท Login ยท Dashboard ยท Neighborhood ยท Parking โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTPS (REST API calls via Axios)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Express.js API Server โ
โ Auth Middleware ยท CORS ยท Request Logging โ
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโ
โ Neighborhood โ โ Parking & Visitor โ โ User & Auth โ
โ Controller โ โ Controller โ โ Controller โ
โ โ โ โ โ โ
โ - Fetch data โ โ - Generate QR โ โ - Register / Login โ
โ - Score calc โ โ - Verify QR โ โ - Role assignment โ
โ - Reports โ โ - Slot tracking โ โ - Profile mgmt โ
โโโโโโโโโฌโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโ
โ MongoDB โ
โ โ
โ - Users โ
โ - Neighborhoods โ
โ - Visitor Passes โ
โโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโ
โ Static Mock Data โ
โ (neighborhoods.json โ
โ neighborhoods.js) โ
โโโโโโโโโโโโโโโโโโโโโโโโ
User clicks "View Neighborhood"
โ
โผ
React frontend calls GET /api/neighborhood-data/:locality_id
โ
โผ
Express API validates JWT via authMiddleware, routes to neighborhoodController
โ
โโโโบ MongoDB: fetch neighborhood document
โ
โโโโบ Static mock data: fill missing fields from neighborhoods.js
โ
โผ
Controller composes full neighborhood object
โ
โผ
Response returned to frontend as JSON
โ
โผ
React renders dashboard with Recharts + map visualization
nexhood/
โโโ client/ # React frontend (View)
โ โโโ public/
โ โโโ src/
โ โ โโโ assets/ # images, icons
โ โ โโโ components/ # reusable UI
โ โ โ โโโ ui/
โ โ โ โโโ layout/
โ โ โ โโโ charts/
โ โ โ โโโ map/
โ โ โ
โ โ โโโ pages/ # main pages (View layer)
โ โ โ โโโ Home.jsx
โ โ โ โโโ Login.jsx
โ โ โ โโโ Dashboard.jsx
โ โ โ โโโ Neighborhood.jsx
โ โ โ โโโ Parking.jsx
โ โ โ
โ โ โโโ hooks/ # Controller logic (React hooks)
โ โ โ โโโ useAuth.js
โ โ โ โโโ useNeighborhood.js
โ โ โ โโโ useParking.js
โ โ โ
โ โ โโโ services/ # API calls (Controller)
โ โ โ โโโ api.js
โ โ โ โโโ authService.js
โ โ โ โโโ neighborhoodService.js
โ โ โ โโโ parkingService.js
โ โ โ
โ โ โโโ context/ # global state (optional)
โ โ โ โโโ AuthContext.jsx
โ โ โ
โ โ โโโ utils/ # helpers
โ โ โ โโโ constants.js
โ โ โ โโโ helpers.js
โ โ โ
โ โ โโโ data/ # static/mock data (IMPORTANT)
โ โ โ โโโ neighborhoods.json
โ โ โ
โ โ โโโ App.jsx
โ โ โโโ main.jsx
โ โ
โ โโโ package.json
โ โโโ tailwind.config.js
โ
โโโ server/ # Backend (Model + Controller)
โ โโโ config/
โ โ โโโ db.js
โ โ
โ โโโ models/ # Model layer
โ โ โโโ User.js
โ โ โโโ Neighborhood.js
โ โ โโโ Visitor.js
โ โ
โ โโโ controllers/ # Controller logic
โ โ โโโ authController.js
โ โ โโโ neighborhoodController.js
โ โ โโโ parkingController.js
โ โ
โ โโโ routes/ # Routes
โ โ โโโ authRoutes.js
โ โ โโโ neighborhoodRoutes.js
โ โ โโโ parkingRoutes.js
โ โ
โ โโโ middleware/
โ โ โโโ authMiddleware.js
โ โ
โ โโโ utils/
โ โ โโโ generateQR.js
โ โ
โ โโโ data/ # mock data (VERY USEFUL)
โ โ โโโ neighborhoods.js
โ โ
โ โโโ app.js
โ โโโ package.json
โ
โโโ README.md
โโโ package.json
Ensure you have the following installed:
- Node.js >= 18.0.0
- MongoDB 6.x (local or Atlas)
- Git
git clone https://github.com/your-org/nexhood.git
cd nexhood# Install root dependencies
npm install
# Install client dependencies
cd client && npm install
# Install server dependencies
cd ../server && npm install# App
NODE_ENV=development
PORT=4000
# MongoDB
MONGODB_URI=mongodb://localhost:27017/nexhood
# JWT
JWT_SECRET=your-very-long-random-secret-key-here
JWT_EXPIRES_IN=7d
# QR Code
QR_BASE_URL=http://localhost:3000/verifyVITE_API_URL=http://localhost:4000/api# If running locally
mongodcd server
npm run seed
# Populates: sample neighborhoods, demo society, admin user# Terminal 1 โ Backend API
cd server && npm run dev
# Terminal 2 โ Frontend
cd client && npm run devVisit the following URLs to confirm everything is running:
- Frontend:
http://localhost:5173 - API Health:
http://localhost:4000/api/health
Default credentials after seeding:
- Admin:
admin@nexhood.in/Admin@123 - Resident:
demo.resident@nexhood.in/Resident@123
- Register as a new user at
/register - Navigate to Neighborhood Explorer from the sidebar
- Search for a locality by name or pin code (e.g., "Baner, Pune")
- View the NexScoreโข overview card โ overall score + 6 sub-scores
- Click "View Full Analysis" to expand the dashboard:
- Explore the AQI trend chart
- View the infrastructure timeline (upcoming projects)
- Click "Compare" to add a second neighborhood side-by-side
Step 1 โ Resident generates a pass:
- Resident logs in โ goes to Parking section
- Clicks "Invite Visitor"
- Fills form: Visitor Name, Vehicle Number, Expected Arrival, Duration
- Clicks "Generate Pass"
- System creates a time-bound QR code
Step 2 โ Visitor arrives:
- Visitor shows QR code on phone to security guard
- Guard opens the Guard App (
/guard) and taps "Scan QR" - Camera opens โ scans QR
- System validates: checks token signature and expiry
- If valid: โ Green screen with slot assignment (e.g., "G-07")
- If expired/invalid: โ Red screen with reason
Step 3 โ Slot update:
- Resident's dashboard shows parking slot as "Occupied"
- On visitor exit, guard marks exit โ slot freed โ dashboard updates
The UI/UX of NexHood is designed with a focus on clarity, data-driven insights, and seamless user experience for both homebuyers and residential societies.
The design system emphasizes:
- Clean and intuitive dashboards for complex data visualization
- Map-first interface for neighborhood exploration
- Mobile-friendly flows for visitor parking and QR scanning
- Role-based UI tailored for Admins, Residents, and Security Guards
Key Screens Designed:
- Neighborhood Explorer
- NexScore Dashboard
- Infrastructure Timeline
- Visitor Pass Generation
- QR Scanner (Guard App)
Note: The screenshots below are exported directly from the Figma designs.
๐ Screenshots are from the live staging environment at
staging.nexhood.in
| Screen | Preview |
|---|---|
| Neighborhood Explorer | ![]() |
| NexScoreโข Dashboard | ![]() |
| Infrastructure Timeline | ![]() |
| Neighborhood Comparison | ![]() |
Base URL: http://localhost:4000/api
All authenticated endpoints require:
Authorization: Bearer <access_token>
Content-Type: application/json
Register a new user.
Request:
{
"name": "Rahul Sharma",
"email": "rahul@example.com",
"password": "SecurePass@123",
"role": "resident",
"society_id": "soc_abc123"
}Response 201:
{
"success": true,
"user": { "id": "usr_xyz", "name": "Rahul Sharma", "role": "resident" },
"accessToken": "eyJhbGci..."
}Authenticate and receive token.
Fetch full neighborhood data object.
Response 200:
{
"locality": {
"id": "loc_pune_baner",
"name": "Baner",
"city": "Pune",
"coordinates": { "lat": 18.5590, "lng": 73.7868 },
"nexscore": 71,
"sub_scores": {
"education": 78,
"safety": 65,
"environment": 58,
"water_utilities": 72,
"infrastructure": 80,
"growth_potential": 74
},
"data_confidence": "high"
}
}Compare multiple localities.
Request:
{
"locality_ids": ["loc_pune_baner", "loc_pune_wakad", "loc_pune_kothrud"]
}Response 200: Array of scored locality objects.
Generate a new time-bound QR visitor pass. Requires resident role.
Request:
{
"visitor_name": "Priya Kapoor",
"vehicle_number": "MH12AB1234",
"arrival_window_start": "2025-04-15T14:00:00Z",
"duration_hours": 4,
"host_apartment": "B-402"
}Response 201:
{
"pass_id": "vp_7f9c2a",
"qr_code_url": "http://localhost:4000/qr/vp_7f9c2a.png",
"valid_until": "2025-04-15T18:00:00Z",
"slot_pre_assigned": "G-07",
"status": "active"
}Validate a scanned QR pass. Requires guard or admin role.
Request:
{
"token": "vp_7f9c2a_signed_payload_here",
"guard_id": "grd_001",
"scan_type": "entry"
}Response 200 (valid):
{
"valid": true,
"visitor_name": "Priya Kapoor",
"vehicle_number": "MH12AB1234",
"host_apartment": "B-402",
"slot_assigned": "G-07",
"valid_until": "2025-04-15T18:00:00Z",
"message": "Access granted. Direct visitor to slot G-07."
}Response 403 (expired):
{
"valid": false,
"reason": "pass_expired",
"expired_at": "2025-04-15T18:00:00Z",
"message": "This pass has expired. Please ask the resident to generate a new pass."
}Mark a visitor as exited and free the parking slot.
Response 200:
{
"success": true,
"slot_freed": "G-07",
"duration_parked": "3h 22m",
"exit_time": "2025-04-15T17:22:00Z"
}Get parking slot map for a society.
Response 200:
{
"total_guest_slots": 20,
"available": 13,
"occupied": 7,
"slots": [
{ "slot_id": "G-01", "status": "available" },
{ "slot_id": "G-07", "status": "occupied", "pass_id": "vp_7f9c2a", "visitor": "Priya Kapoor" }
]
}{
_id: ObjectId,
locality_id: String, // Unique slug: "pune_baner"
name: String,
city: String,
state: String,
coordinates: { lat: Number, lng: Number },
nexscore: Number, // Composite score
sub_scores: {
education: Number,
safety: Number,
environment: Number,
water_utilities: Number,
infrastructure: Number,
growth_potential: Number
},
raw_data: {
aqi: { current: Number, trend: Array },
schools: Array,
upcoming_projects: Array
},
last_synced: Date,
created_at: Date
}{
_id: ObjectId,
pass_id: String, // "vp_7f9c2a"
resident_id: ObjectId,
society_id: ObjectId,
visitor_name: String,
vehicle_number: String,
host_apartment: String,
slot_assigned: String,
qr_token: String, // Signed token embedded in QR
valid_from: Date,
valid_until: Date,
status: Enum['active', 'used', 'expired', 'revoked'],
scan_logs: [{
guard_id: ObjectId,
scan_type: Enum['entry', 'exit'],
timestamp: Date,
result: Enum['success', 'failed']
}],
created_at: Date
}{
_id: ObjectId,
name: String,
email: String, // Unique
password_hash: String, // bcrypt
role: Enum['admin', 'resident', 'guard'],
society_id: ObjectId,
apartment: String, // e.g., "B-402"
is_active: Boolean,
created_at: Date
}- Price appreciation forecast: ML model trained on historical price data + infrastructure developments to predict 2โ5 year property value growth
- Personalized matching: Input your lifestyle profile and get ranked neighborhood recommendations
- iOS + Android apps built with React Native
- Offline-first architecture with local caching for low-connectivity areas
- Biometric authentication for guard app
- Push notifications for QR expiry, slot availability
- Ultrasonic sensors in parking slots transmit live occupancy via MQTT
- Automatic slot status updates without manual guard intervention
- Dashboard shows sensor battery levels and health
- Direct API integrations with:
- NCRB (National Crime Records Bureau)
- UDISE+ (Unified District Information System for Education)
- Smart Cities Mission portal
- MoHUA (Ministry of Housing and Urban Affairs)
- Auto-sync scheduled tasks replace manual data upload
- Public API for PropTech companies to embed NexScore widgets
- White-label neighborhood intelligence for real estate portals
- Tiered pricing with rate limiting via API keys
- UI localization: Hindi, Marathi, Tamil, Telugu, Kannada
- Voice-based neighborhood search for low-literacy users
- Regional government portal scraping for state-specific data
Challenge: Government data exists in 50+ formats โ some as PDFs, some as Excel sheets, some as poorly structured HTML tables.
Approach: Used structured static JSON datasets (neighborhoods.json / neighborhoods.js) as a reliable fallback, with mock data representing verified neighborhood metrics. Coverage can be extended as real data sources become available.
Challenge: A malicious user could screenshot a valid QR and share it, or attempt to reuse expired tokens.
Approach:
- QR tokens are signed with HMAC using a server-side secret
- Token validity is checked against expiry on every scan
- Guard app displays registered vehicle number for manual cross-check
- 5-minute post-expiry grace window to handle clock drift
Challenge: Visitor pass data contains PII. QR token security must be airtight.
Approach:
- Visitor PII encrypted at rest
- QR tokens are time-bound with expiry validation
- Role-based access ensures only authorized guards can verify passes
We welcome contributions from developers, designers, data engineers, and domain experts in real estate and urban planning.
- Fork the repository
- Create a feature branch:
git checkout -b feat/your-feature-name - Follow the coding standards:
npm run lint && npm run format - Write tests for new features:
npm run test - Submit a pull request with a clear description
- ๐๏ธ Data: Help source and clean neighborhood datasets for new cities
- ๐จ Design: UI/UX improvements, accessibility
- ๐ง Backend: New API endpoints, performance optimization
- ๐ Docs: Improve documentation and add usage examples
- All code must pass ESLint + Prettier checks
- New API endpoints must include Joi validation
- React components must follow hook-based patterns
- Commits follow Conventional Commits format
Use the GitHub Issues tab. Please include:
- Environment (OS, Node version, browser)
- Steps to reproduce
- Expected vs actual behaviour
- Relevant logs (redact sensitive data)
This project is licensed under the MIT License.
MIT License
Copyright (c) 2025 NexHood Technologies Pvt. Ltd.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
See LICENSE for full text.
|
Hanuman Singh Full-Stack Engineer & Product Lead @Github ยท LinkedIn |
๐ For business inquiries, partnerships, or pilot programs: hanumanrajpurohit.vercel.app
Built with โค๏ธ for homebuyers who deserve better data.
NexHood โ Know Your Neighborhood. Own Your Space.
โญ If this project helped you, consider giving it a star!



