Domain: streeteasyandme.com
A web application for tracking and managing your NYC apartment rental search. Browse scraped StreetEasy listings, favorite apartments, and maintain a timestamped history of your rental search activities.
This repository contains three components:
- Scraper (
scraper/) - Automated StreetEasy listing scraper with Telegram notifications - Backend (
backend/) - FastAPI REST API for managing favorites and events - Frontend (
frontend/) - React web application for browsing and tracking listings
See PROJECT_SPEC.md for complete technical specification.
- Python 3.11+
- Node.js 18+
- PostgreSQL (local or Railway.com)
uv(Python package manager):pip install uv
1. Set up local PostgreSQL database
# Create database (if doesn't exist)
createdb streeteasy
# Import data from Railway (optional)
# First, install postgres 17 client tools for pg_dump compatibility
brew install postgresql@17
# Dump from Railway
export RAILWAY_DATABASE_URL="your_railway_url_here"
/opt/homebrew/opt/postgresql@17/bin/pg_dump $RAILWAY_DATABASE_URL > railway_dump.sql
# Import to local
psql streeteasy < railway_dump.sql2. Backend Setup
cd backend
# Install dependencies
uv pip install -e .
# Create .env file (copy from .env.example)
cp .env.example .env
# Edit .env with your local database URL:
# DATABASE_URL=postgresql://YOUR_USERNAME@localhost:5432/streeteasy
# Run migrations to create tables
.venv/bin/alembic upgrade head
# Start backend server
./start_server.sh
# Or manually: uvicorn src.main:app --reload --port 8000Backend will be available at:
- API: http://localhost:8000
- API Docs: http://localhost:8000/docs
3. Frontend Setup (in a new terminal)
cd frontend
# Install dependencies
npm install
# Create .env file
echo "VITE_API_URL=http://localhost:8000" > .env
# Start dev server
npm run devFrontend will be available at: http://localhost:5173
- Go to http://localhost:5173
- First time: Sign up (only first user can register)
- Login and start browsing rentals from Greenpoint, Brooklyn
The scraper runs independently and populates the PostgreSQL database with StreetEasy listings.
See scraper/README.md for setup and usage.
Quick Start:
cd scraper
pip install -r requirements.txt
# Set environment variables
export DATABASE_URL="postgresql://username@localhost:5432/streeteasy"
export TELEGRAM_BOT_TOKEN="your_token"
export TELEGRAM_CHAT_IDS="your_chat_ids"
python main.pySee backend/README.md for API documentation.
Development:
cd backend
pip install -r requirements.txt
uvicorn src.main:app --reload --port 8000See frontend/README.md for component documentation.
Development:
cd frontend
npm install
npm run devBackend Service (Web Service):
- Environment: Python 3
- Build Command:
cd backend && pip install uv && uv pip install -e . - Start Command:
cd backend && uvicorn src.main:app --host 0.0.0.0 --port $PORT - Environment Variables:
DATABASE_URL,SECRET_KEY
Frontend Service (Static Site):
- Build Command:
cd frontend && npm install && npm run build - Publish Directory:
frontend/dist - Environment Variables:
VITE_API_URL
Database:
- Hosted on Railway.com (existing setup)
Post-Deployment:
- Run migrations on backend:
cd backend && .venv/bin/alembic upgrade head
See PROJECT_SPEC.md for detailed deployment instructions.
- Browse all scraped StreetEasy listings with filters (price, bedrooms)
- Mark listings as favorites with state tracking
- Soft delete favorites with restore capability
- Add timestamped events (reach outs, viewings, applications)
- Add notes to events
- Schedule showing datetime for favorites
- Responsive web design
- Listing images (requires scraper update)
- Advanced filtering and search
- Email/SMS reminders
- Data export
- Analytics dashboard
streeteasilyandme/
├── scraper/ # StreetEasy scraper (independent)
├── backend/ # FastAPI backend
│ ├── src/
│ ├── alembic/ # Database migrations
│ └── pyproject.toml
├── frontend/ # React frontend
│ ├── src/
│ └── package.json
├── PROJECT_SPEC.md # Technical specification
└── README.md # This file
This is a personal project, but if you have suggestions or find bugs, feel free to open an issue.
MIT