The Tinder for apartment hunting - Turn apartment hunting with roommates into a fun, collaborative experience using AI-powered curation and real-time voting.
SuiteSync is a collaborative apartment hunting platform that solves the nightmare of finding an apartment with roommates. Instead of endless debates and compromised decisions, friends can now swipe through apartment comparisons together in real-time sessions.
- AI-Powered Curation: Uses Google Gemini AI to intelligently filter apartments based on combined user preferences
- Real-Time Collaboration: Socket.io enables instant voting and updates across all participants
- Tournament-Style Voting: Sophisticated ranking algorithm ensures optimal group decisions
- Comprehensive Preferences: Handles budget, location, accessibility, amenities, and lifestyle factors
- Real-Time Updates: Live synchronization of votes and apartment rankings
- Smart Filtering: Automatically filters apartments by bedroom count and user requirements
- Node.js 18+ and npm
- Supabase account and project
- Google Gemini API key
- Python 3.11+ (for data analysis features)
git clone https://github.com/Stunned1/SuiteSync.git
cd SuiteSync
npm installCreate a .env.local file in the root directory with the following variables:
### Required Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `NEXT_PUBLIC_SUPABASE_URL` | Your Supabase project URL |
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase anonymous key (public) |
| `SUPABASE_SERVICE_ROLE_KEY` | Supabase service role key (private) |
| `GEMINI_API_KEY` | Google Gemini AI API key |
### Optional Variables
| Variable | Description | Default | Example |
|----------|-------------|---------|---------|
| `NEXT_PUBLIC_APP_URL` | Application URL for API calls | `http://localhost:3000` | `https://yourdomain.com` |
| `NODE_ENV` | Environment mode | `development` | `production` |
| `PORT` | Server port | `3000` | `8080` |# Install Supabase CLI
npm install -g supabase
# Start local Supabase
supabase start
# Run database migrations
supabase db reset- Create a new Supabase project at supabase.com
- Run the SQL scripts in your Supabase SQL editor:
-- Run these in order:
\i supabase/sql/setup_user_profiles_with_preferences.sql
\i supabase/sql/setup_rooms_table.sql
\i supabase/sql/setup_complex_public_id.sql
\i supabase/sql/setup_comparisons_table.sqlnpm run devVisit http://localhost:3000 to see the application.
- Go to your Supabase Dashboard
- Select your project
- Go to Settings → API
- Copy the Project URL and API keys
- Visit Google AI Studio
- Create a new API key
- Copy the key to your
.env.local
SuiteSync/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API routes
│ │ ├── page.tsx # Home page
│ │ ├── profile/ # User profile pages
│ │ └── room/[code]/ # Room session pages
│ ├── components/ # React components
│ │ ├── ui/ # Reusable UI components
│ │ ├── apartment-comparison.tsx
│ │ ├── hunt-session.tsx
│ │ └── ...
│ ├── lib/ # Utility libraries
│ │ ├── supabase.ts # Supabase client
│ │ ├── socket-server.js # Socket.IO server
│ │ ├── gemini-apartment-agent.ts
│ │ └── ...
│ ├── hooks/ # Custom React hooks
│ ├── types/ # TypeScript type definitions
│ └── data/ # Static data
├── supabase/ # Supabase configuration
│ ├── sql/ # Database migrations
│ ├── functions/ # Edge functions
│ └── config.toml # Local development config
├── analysis/ # Data analysis scripts
├── public/ # Static assets
└── server.js # Custom server with Socket.IO
- Users create an account and set their individual preferences
- Preferences include: budget, location, amenities, accessibility needs, commute preferences
- Users can save favorite apartments and ideal apartment descriptions
- Host creates a room with a 6-character code
- Configures session parameters (rounds, anonymous mode)
- Room is ready for friends to join
- Friends join using the room code
- System automatically uses their saved preferences
- System validates all requirements are met
- Google Gemini AI analyzes all user preferences
- Filters apartments by minimum bedroom count
- Includes user favorite apartments
- Generates optimized apartment list
- Users swipe through apartment comparisons
- Real-time vote synchronization
- Sophisticated ranking algorithm determines winners
- Live updates show current standings
- Final apartment rankings
- Midpoint insights and analytics
- Export results for further discussion
# Development
npm run dev - Frontend: Next.js 15, React 19, TypeScript
- Styling: Tailwind CSS, Radix UI
- Backend: Next.js API Routes, Socket.IO
- Database: Supabase (PostgreSQL)
- AI: Google Gemini 2.0 Flash
- Real-time: Socket.IO
- Deployment: Vercel (recommended)
NEXT_PUBLIC_SUPABASE_URL=your_production_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_production_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_production_service_key
GEMINI_API_KEY=your_gemini_api_key
NEXT_PUBLIC_APP_URL=https://yourdomain.com
NODE_ENV=productionThe project includes Python-based data analysis tools:
# Set up Python environment
cd analysis
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run clustering analysis
python clustering.py- Verify room code exists in database
- Check that
playerscolumn has data - Ensure room was created successfully
- Verify
GEMINI_API_KEYis valid - Check API quotas and limits
- Ensure internet connectivity
- Verify
NEXT_PUBLIC_APP_URLis correct - Check firewall settings
- Ensure port 3000 is available
- Verify Supabase credentials
- Check database is running (if local)
- Ensure tables exist and are properly set up
- Review the GEMINI_AI_AGENT_README.md for AI-specific issues
- Check Supabase logs in the dashboard
Built for better apartment hunting experiences