A trusted platform for students, interns, and early-career professionals to find housing and compatible roommates.
The mission of Padly is to eliminate the stress and fragmentation of finding housing during pivotal career and life transitions. We are building a centralized, secure, and user-centric platform that connects a community of peers, landlords, and subletters, enabling them to transact with confidence and ease.
- Secure sign-up and login with Supabase Auth (JWT-based)
- User profiles with professional context (company, school, role)
- Email verification system for trust building
- Account management with editable profile information
- Create and manage roommate groups
- Request to join existing groups
- Group owner approval system for join requests
- Dynamic group sizing (1-N members)
- Solo groups for individual users
- Group recommendations based on compatibility scoring
- Automatic ownership transfer when creators leave
- Browse and search housing listings
- Intelligent matching using Gale-Shapley Stable Matching algorithm
- Large Neighborhood Search (LNS) optimization for improved match quality
- Hard constraints filtering (city, budget, date, bedrooms)
- Soft preferences scoring (bathrooms, furnished, utilities, deposit, house rules)
- Real-time match updates when preferences change
- Hard constraints (non-negotiable requirements)
- Soft preferences (nice-to-haves with scoring)
- Lifestyle compatibility matching
- Automatic stable matching trigger on preference updates
- Gale-Shapley Deferred Acceptance: Guarantees stable matches with no blocking pairs
- Large Neighborhood Search (LNS): Optimizes match quality through iterative destroy-repair cycles
- Greedy Heuristics: Regret-greedy and randomized greedy for repair operations
- Compatibility scoring (0-100 points) based on budget, date, company/school, verification, and lifestyle
- Next.js 15 - React framework with server-side rendering
- React 19 - UI library
- Mantine - Component library and UI framework
- TanStack React Query - Data fetching and caching
- TypeScript - Type safety
- FastAPI - High-performance Python web framework
- Uvicorn - ASGI server
- Pydantic - Data validation using Python type hints
- Supabase - Backend-as-a-Service (Auth, Database, Storage)
- PostgreSQL - Relational database (via Supabase)
- PostgREST - Auto-generated REST API from database schema
- Supabase Auth - JWT-based authentication with refresh tokens
- OpenAPI/Swagger - Auto-generated interactive API docs at
/docs
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher) and npm
- Python (v3.9 or higher)
- Supabase Account - Create one here
- Git
git clone <repository-url>
cd Padly- Create a new project at supabase.com
- Go to Project Settings → API
- Copy your
SUPABASE_URLandSUPABASE_ANON_KEY - Copy your
SUPABASE_SERVICE_ROLE_KEY(keep this secret!)
cd backend
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
# On Windows:
.\venv\Scripts\activate
# On Mac/Linux:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Create .env file in backend/app/ directory
# Add the following variables:
# SUPABASE_URL=your_supabase_url
# SUPABASE_ANON_KEY=your_anon_key
# SUPABASE_SERVICE_ROLE_KEY=your_service_role_keycd frontend
# Install dependencies
npm install
# Create .env.local file (optional, if using Supabase client directly)
# NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
# NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key# From project root
chmod +x run-dev.sh # On Mac/Linux
./run-dev.sh
# On Windows, use Git Bash or WSLThis script will:
- Start the FastAPI backend on
http://localhost:8000 - Start the Next.js frontend on
http://localhost:3000 - Auto-install dependencies if needed
Backend:
cd backend
source venv/bin/activate # or .\venv\Scripts\activate on Windows
uvicorn app.main:app --reloadFrontend:
cd frontend
npm run dev- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
Padly/
├── backend/ # FastAPI backend
│ ├── app/
│ │ ├── main.py # FastAPI application entry point
│ │ ├── routes/ # API route handlers
│ │ │ ├── auth.py # Authentication endpoints
│ │ │ ├── users.py # User management
│ │ │ ├── groups.py # Roommate groups
│ │ │ ├── listings.py # Housing listings
│ │ │ ├── preferences.py # User preferences
│ │ │ └── stable_matching.py # Matching algorithm
│ │ ├── services/ # Business logic
│ │ │ ├── stable_matching/ # Matching algorithm modules
│ │ │ ├── lns_optimizer.py # LNS optimization
│ │ │ └── user_group_matching.py # User-group compatibility
│ │ ├── models.py # Pydantic models
│ │ ├── db.py # Database configuration
│ │ └── schemas/ # Database schema SQL files
│ ├── requirements.txt # Python dependencies
│ └── migrations/ # Database migrations
│
├── frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # Next.js app directory
│ │ │ ├── account/ # Account management page
│ │ │ ├── groups/ # Groups pages
│ │ │ ├── listings/ # Listings pages
│ │ │ ├── matches/ # Matches page
│ │ │ ├── preferences/ # Preferences page
│ │ │ └── components/ # React components
│ │ ├── contexts/ # React contexts (Auth)
│ │ └── lib/ # Utility functions
│ └── package.json # Node dependencies
│
└── run-dev.sh # Development server launcher
POST /api/auth/signup- Register new userPOST /api/auth/signin- Login userGET /api/auth/me- Get current userPOST /api/auth/signout- Sign out
GET /api/users- List usersGET /api/users/{user_id}- Get user profilePUT /api/users/{user_id}- Update user profile
GET /api/roommate-groups- List groups (with filters)GET /api/roommate-groups/{group_id}- Get group detailsPOST /api/roommate-groups- Create groupPUT /api/roommate-groups/{group_id}- Update groupPOST /api/roommate-groups/{group_id}/request-join- Request to joinPOST /api/roommate-groups/{group_id}/accept-request/{user_id}- Accept join requestDELETE /api/roommate-groups/{group_id}/leave- Leave group
GET /api/matches/groups- Get compatible groups for userPOST /api/stable-matches/run- Run stable matching algorithmGET /api/stable-matches/active- Get active matches
GET /api/preferences/{user_id}- Get user preferencesPUT /api/preferences/{user_id}- Update preferences
- Ensure virtual environment is activated
- Check that
.envfile exists with correct Supabase credentials - Verify Python version (3.9+)
- Ensure Node.js version is 18+
- Delete
node_modulesand runnpm installagain - Check for port conflicts (3000, 8000)
- Verify Supabase credentials in
.env - Check Supabase project is active
- Ensure database schema is applied