5e9963f51b
Adds a self-contained web interface that wraps the MCP tools so end users
don't need to issue MCP commands. Single Docker container serves:
/ → React SPA (RTL Hebrew, Heebo font, shadcn/ui components)
/api/* → FastAPI REST endpoints used by the SPA
/api/docs → OpenAPI / Swagger
/mcp → existing FastMCP streamable-http endpoint
/health → liveness probe
REST endpoints (in nadlan_mcp/web_app.py):
GET /api/search/address?q=... — autocomplete + best-effort gush/חלקה
via Govmap PARCEL_ALL layer
POST /api/search/deals — Govmap deals around an address
POST /api/search/appraisals — Decisive-appraiser search (gov.il)
GET /api/appraisals/pdf?url=.. — Stream PDFs through this server,
carrying the upstream x-client-id
header (a normal browser fetch fails)
UI flow:
- Address search → resolves gush/חלקה → shows BOTH deals (Govmap) AND
appraiser decisions (gov.il) for the same parcel side-by-side in tabs.
- Block+plot search → goes straight to appraisals.
- Appraiser-name search → all decisions by that appraiser.
Stack chosen for RTL-first usability and longevity: React 19, Vite 6,
TypeScript, Tailwind, shadcn/ui (Radix primitives), TanStack Query,
Lucide icons. ~295KB gzipped JS, no SSR overhead.
Multi-stage Dockerfile: Node 22 builds web/ in stage 1, Python 3.13
runtime serves the dist + the FastAPI app in stage 2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
99 lines
1.1 KiB
Plaintext
99 lines
1.1 KiB
Plaintext
# Git files
|
|
.git/
|
|
.gitignore
|
|
.github/
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.so
|
|
.Python
|
|
build/
|
|
develop-eggs/
|
|
dist/
|
|
downloads/
|
|
eggs/
|
|
.eggs/
|
|
lib/
|
|
lib64/
|
|
parts/
|
|
sdist/
|
|
var/
|
|
wheels/
|
|
*.egg-info/
|
|
.installed.cfg
|
|
*.egg
|
|
MANIFEST
|
|
|
|
# Virtual environments
|
|
venv/
|
|
env/
|
|
ENV/
|
|
.venv/
|
|
|
|
# IDEs and editors
|
|
.vscode/
|
|
.cursor/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.DS_Store
|
|
|
|
# Testing
|
|
.pytest_cache/
|
|
.coverage
|
|
.coverage.*
|
|
htmlcov/
|
|
.tox/
|
|
.nox/
|
|
coverage.xml
|
|
*.cover
|
|
.hypothesis/
|
|
|
|
# Documentation (not needed in container)
|
|
*.md
|
|
!README.md
|
|
docs/
|
|
|
|
# Environment files
|
|
.env
|
|
.env.*
|
|
*.env
|
|
|
|
# CI/CD
|
|
.github/
|
|
.gitlab-ci.yml
|
|
.travis.yml
|
|
|
|
# Test files (not needed in production)
|
|
tests/
|
|
test_*.py
|
|
*_test.py
|
|
|
|
# Development files
|
|
requirements-dev.txt
|
|
# pyproject.toml # NEEDED for pip install - do not exclude!
|
|
# setup.py # NEEDED for pip install - do not exclude!
|
|
# setup.cfg # NEEDED for pip install - do not exclude!
|
|
|
|
# Logs and temp files
|
|
*.log
|
|
*.tmp
|
|
tmp/
|
|
temp/
|
|
|
|
# Web build outputs (rebuilt fresh in Docker stage 1)
|
|
web/node_modules/
|
|
web/dist/
|
|
web/.vite/
|
|
web/.tsbuildinfo
|
|
web/.tsbuildinfo-node
|
|
web/dist-node/
|
|
|
|
# Docker files (avoid recursive copies)
|
|
Dockerfile*
|
|
docker-compose*.yml
|
|
.dockerignore
|