Spaces:
Running on CPU Upgrade
sidebar_position: 13
React + FastAPI Databricks App Refactoring
Executive Summary
The Oral Health Policy Pulse has been completely refactored from a CLI-based multi-agent system into a modern full-stack web application that deploys as a Databricks App.
What Changed
| Before (v1.0) | After (v2.0) |
|---|---|
| β CLI-only interface | β Modern React web UI |
| β Manual command execution | β Interactive dashboard |
| β Text-based outputs | β Visual charts & maps |
| β Local deployment only | β Cloud-native Databricks Apps |
| β Static HTML heatmap | β Interactive Leaflet map |
| β No user settings | β Configurable UI settings |
New Architecture
Frontend (React + TypeScript)
Technology Stack:
- React 18.2 with TypeScript
- Vite for build tooling
- Tailwind CSS for styling
- React Router for navigation
- TanStack Query for data fetching
- Recharts for data visualization
- Leaflet for interactive maps
Pages Created:
Dashboard (
frontend/src/pages/Dashboard.tsx)- Real-time statistics cards
- Topic distribution bar/pie charts
- Recent opportunities table
Interactive Heatmap (
frontend/src/pages/Heatmap.tsx)- Geographic visualization using Leaflet
- State and topic filters
- Color-coded urgency markers
- Popup details for each opportunity
Documents Browser (
frontend/src/pages/Documents.tsx)- Full-text search
- Pagination
- Topic tags
- Direct links to source documents
Opportunities Manager (
frontend/src/pages/Opportunities.tsx)- Filterable list view
- Urgency-based sorting
- One-click email generation
- Talking points display
- Confidence score visualization
Settings Panel (
frontend/src/pages/Settings.tsx)- Target state configuration
- Policy topic selection
- Confidence threshold slider
- Email notification preferences
- Agent status monitoring
Components:
- Layout (
frontend/src/components/Layout.tsx)- Sidebar navigation
- Header with breadcrumbs
- Responsive design
Backend (FastAPI Refactored)
New File: api/app.py
Completely rewritten FastAPI application optimized for:
- β Serving React static files (SPA routing)
- β REST API endpoints for all frontend interactions
- β Databricks Apps compatibility
- β Delta Lake integration
- β Background task processing
- β CORS support for local development
Key Endpoints:
GET /api/health # Health check
GET /api/dashboard # Dashboard stats
GET /api/opportunities # List opportunities
GET /api/documents # Browse documents
POST /api/workflow/start # Start analysis
POST /api/advocacy/email/{id} # Generate email
GET /api/settings # Get settings
PUT /api/settings # Update settings
GET /api/agents/status # Agent status
Static File Serving:
- React build output served from
api/static/ - SPA routing with catchall route
- Automatic index.html fallback
Database Layer
New File: pipeline/delta_lake_queries.py
Added async query methods to support web app:
async def get_dashboard_stats() # Dashboard statistics
async def query_opportunities() # Filtered opportunity queries
async def query_documents() # Document search/pagination
async def count_documents() # Total count for pagination
async def get_opportunity() # Single opportunity details
Databricks Apps Integration
Configuration Files
1. app.yaml (Databricks Apps manifest)
command:
- "uvicorn"
- "api.app:app"
- "--host"
- "0.0.0.0"
- "--port"
- "8000"
env:
- name: DATABRICKS_HOST
valueFrom:
databricksSecret:
key: host
scope: oral-health-app
- name: OPENAI_API_KEY
valueFrom:
databricksSecret:
key: openai_key
scope: oral-health-app
resources:
- name: policy-classifier-endpoint
modelServing:
endpoint: policy-classifier-prod
port: 8000
2. Dockerfile.app (Container image for Databricks Apps)
- Multi-stage build
- Node.js for frontend build
- Python 3.11 for backend
- Optimized for CPU-only deployment
Deployment Scripts
1. scripts/deploy-databricks-app.sh
# Automated deployment script:
# 1. Build React frontend
# 2. Create Databricks secrets
# 3. Deploy to Databricks Apps
# 4. Provide access URL
2. scripts/setup-local.sh
# Local development setup:
# - Install Python deps
# - Install npm packages
# - Create .env file
3. scripts/test-app.py
# Test production build locally
# Simulates Databricks Apps environment
Project Structure
oral-health-policy-pulse/
βββ frontend/ # NEW: React application
β βββ src/
β β βββ components/
β β β βββ Layout.tsx # Main layout component
β β βββ pages/
β β β βββ Dashboard.tsx # Dashboard page
β β β βββ Heatmap.tsx # Interactive map
β β β βββ Documents.tsx # Document browser
β β β βββ Opportunities.tsx # Opportunity manager
β β β βββ Settings.tsx # Settings panel
β β βββ App.tsx # Root component
β β βββ main.tsx # Entry point
β β βββ index.css # Tailwind styles
β βββ package.json # npm dependencies
β βββ vite.config.ts # Vite configuration
β βββ tsconfig.json # TypeScript config
β βββ tailwind.config.js # Tailwind config
β βββ index.html # HTML template
β
βββ api/
β βββ app.py # NEW: Refactored FastAPI app
β βββ main.py # LEGACY: Original API
β βββ static/ # Built React files (generated)
β
βββ pipeline/
β βββ delta_lake.py # Original Delta Lake pipeline
β βββ delta_lake_queries.py # NEW: Query methods for web app
β
βββ scripts/ # NEW: Deployment scripts
β βββ deploy-databricks-app.sh # Deploy to Databricks
β βββ setup-local.sh # Local development setup
β βββ test-app.py # Test production build
β
βββ app.yaml # NEW: Databricks Apps config
βββ Dockerfile.app # NEW: Production Docker image
βββ DATABRICKS_APP_GUIDE.md # NEW: Deployment documentation
βββ README.md # UPDATED: Added React info
Features by Page
1. Dashboard
Statistics Cards:
- Total documents analyzed
- Advocacy opportunities found
- States monitored
Charts:
- Topic distribution (bar chart)
- Topic distribution (pie chart)
Recent Activity:
- Latest opportunities table
- Sortable and filterable
2. Interactive Heatmap
Map Features:
- OpenStreetMap tiles
- Circle markers for opportunities
- Color-coded by urgency:
- π΄ Critical
- π High
- π‘ Medium
- π’ Low
Interactivity:
- Click markers for details
- Filter by state dropdown
- Filter by topic dropdown
- Real-time updates
3. Document Browser
Features:
- Full-text search across all documents
- Pagination (20 per page)
- Topic tags for each document
- Direct links to source
- Meeting date display
- State/municipality info
4. Opportunities Manager
Display:
- Card-based layout
- Urgency badge
- Key talking points
- Confidence score bar
Actions:
- Generate advocacy email
- Contact via email
- Add to calendar
- Copy talking points
Filters:
- Critical only
- High priority
- Medium priority
- Low priority
5. Settings Panel
Configuration Options:
- Target states (multi-select)
- Policy topics (checkboxes)
- Confidence threshold (slider)
- Email notifications (toggle)
System Status:
- Agent health indicators
- Uptime display
- Real-time status
Development Workflow
Local Development
1. Backend (Hot Reload)
source venv/bin/activate
uvicorn api.app:app --reload
# Runs on http://localhost:8000
2. Frontend (Hot Reload)
cd frontend
npm run dev
# Runs on http://localhost:3000
# Proxies API calls to :8000
Production Build
1. Build Frontend
cd frontend
npm run build
# Outputs to api/static/
2. Test Locally
python scripts/test-app.py
# Serves at http://localhost:8000
3. Deploy to Databricks
./scripts/deploy-databricks-app.sh
# One-command deployment
Benefits of Refactoring
User Experience
| Before | After |
|---|---|
| Command-line only | Beautiful web interface |
| Manual file management | Automatic workflows |
| Static visualizations | Interactive maps & charts |
| No configuration UI | Full settings panel |
| Email via CLI | One-click generation |
Developer Experience
| Before | After |
|---|---|
| Python-only | Full-stack (Python + TypeScript) |
| Local deployment | Cloud-native (Databricks Apps) |
| Manual setup | One-command deployment |
| Limited monitoring | Built-in observability |
| No UI testing | Component testing with Vitest |
Operations
| Before | After |
|---|---|
| Single-user CLI | Multi-user web app |
| Local storage | Cloud Delta Lake |
| Manual scaling | Auto-scaling |
| No authentication | Databricks SSO |
| Basic logging | Enterprise monitoring |
Technology Choices
Why React?
- β Industry-standard UI framework
- β Rich ecosystem of libraries
- β TypeScript support for type safety
- β Excellent developer experience
- β Easy to maintain and extend
Why Vite?
- β Lightning-fast dev server
- β Instant hot module replacement
- β Optimized production builds
- β Native ES modules support
- β Built-in TypeScript support
Why Tailwind CSS?
- β Utility-first approach
- β Rapid prototyping
- β Consistent design system
- β Small production bundle
- β Highly customizable
Why Databricks Apps?
- β Integrated with workspace
- β Automatic authentication
- β Unity Catalog integration
- β Seamless data access
- β Enterprise-ready
Migration Path
For Existing Users
v1.0 (CLI) β v2.0 (Web App)
- Keep using CLI - Original functionality preserved in
api/main.py - Gradually adopt web UI - Run both simultaneously
- Full migration - Switch to web-only when ready
Backward Compatibility:
- All CLI commands still work
- Original API endpoints unchanged
- Can run standalone or web mode
For New Users
Start with Web UI:
- Deploy to Databricks Apps
- Access via browser
- No CLI needed!
Performance Optimizations
Frontend
- β Code splitting with React lazy loading
- β Query caching with TanStack Query
- β Optimized bundle size (~300KB gzipped)
- β Lazy-loaded charts and maps
- β Debounced search inputs
Backend
- β Async endpoints with FastAPI
- β Background task processing
- β Delta Lake query optimization
- β Static file caching
- β CORS preflight caching
Deployment
- β Scale-to-zero when idle
- β Auto-scaling under load
- β CDN for static assets
- β Connection pooling
- β Gzip compression
Next Steps
Planned Features
Phase 1: Enhanced Analytics
- Historical trend charts
- Predictive analytics
- Custom report builder
Phase 2: Collaboration
- User comments/notes
- Shared dashboards
- Team workspaces
Phase 3: Automation
- Scheduled reports
- Email alerts
- Slack integration
Phase 4: Advanced AI
- Document Q&A chatbot
- Meeting video analysis
- Speech-to-text integration
Deployment Examples
Example 1: Local Testing
# Setup
./scripts/setup-local.sh
source venv/bin/activate
# Run backend
uvicorn api.app:app --reload &
# Run frontend
cd frontend && npm run dev
Example 2: Production Deployment
# Configure
export DATABRICKS_HOST=https://your-workspace.cloud.databricks.com
export DATABRICKS_TOKEN=dapi...
export OPENAI_API_KEY=sk-...
# Deploy
./scripts/deploy-databricks-app.sh
# Monitor
databricks apps logs oral-health-policy-pulse --follow
Example 3: Docker Deployment
# Build
docker build -f Dockerfile.app -t oral-health-app .
# Run
docker run -p 8000:8000 \
-e DATABRICKS_HOST=$DATABRICKS_HOST \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
oral-health-app
Conclusion
The React + FastAPI refactoring transforms Oral Health Policy Pulse from a developer-focused CLI tool into an enterprise-ready web application that can be:
β
Deployed instantly to Databricks Apps
β
Used by non-technical users via web browser
β
Scaled automatically for any load
β
Monitored comprehensively with built-in observability
β
Secured enterprise-grade with Databricks SSO
The future of oral health advocacy is here! π¦·β¨