LandWatch is a full-stack dashboard for distressed property discovery across New York, New Jersey, and Pennsylvania. It uses FastAPI with in-memory cache storage and a React + TypeScript + Tailwind frontend.
- DistressedPropertySearch.md: complete architecture, data sources, API reference, frontend structure, limitations, and setup notes.
- RUNBOOK.md: day-to-day operating guide, startup and shutdown, smoke tests, scraper triage, cache handling, and troubleshooting.
- Backend: Python + FastAPI
- Scraping:
httpx, BeautifulSoup, Playwright dependency available for JS-heavy expansion - Storage: in-memory
CacheStore; no database, ORM, or migrations - Frontend: React 18 + TypeScript + Tailwind CSS
- Maps: Leaflet and OpenStreetMap tiles
Recommended local ports:
- Backend:
http://localhost:8000 - Frontend:
http://localhost:5173
Unix or Git Bash:
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
./start.shWindows PowerShell:
Copy-Item backend/.env.example backend/.env
Copy-Item frontend/.env.example frontend/.env
python -m venv .venv
.\.venv\Scripts\python -m pip install -r backend\requirements.txt
npm --prefix frontend install
Start-Process -FilePath .\.venv\Scripts\python.exe -ArgumentList @('-m','uvicorn','backend.main:app','--reload','--port','8000') -WorkingDirectory .
npm --prefix frontend run devWindows double-click launcher:
.\start.batManual startup, backend on Windows Git Bash:
python -m venv .venv
source .venv/Scripts/activate
python -m pip install -r backend/requirements.txt
python -m uvicorn backend.main:app --reload --port 8000Manual startup, backend on macOS, Linux, or WSL:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r backend/requirements.txt
python -m uvicorn backend.main:app --reload --port 8000Manual startup, frontend:
npm --prefix frontend install
npm --prefix frontend run devOpen http://localhost:5173.
- Search never runs on filter change.
SEARCHchecks the in-memory cache first and only scrapes on cache miss.FETCH LATESTalways bypasses cache and overwrites the current filter key.- Regrid enrichment runs only per-property when requested.
- Cache entries expire based on
CACHE_TTL_HOURS.
source .venv/Scripts/activate
python -m compileall backend
npm --prefix frontend run buildHealth check:
curl http://localhost:8000/api/healthFor operational details, use RUNBOOK.md.