open-navigator / website /docs /architecture.md
jcbowyer's picture
Clean HuggingFace deployment without binary files
61d29fc
metadata
sidebar_position: 2
displayed_sidebar: developersSidebar

πŸ—οΈ Architecture Overview

Three Separate Services

Open Navigator consists of three distinct services that work together:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 Open Navigator Platform                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                           β”‚
β”‚  πŸ“š Documentation Site (Docusaurus)                      β”‚
β”‚  └─> http://localhost:3000                              β”‚
β”‚      β€’ Project overview and marketing                    β”‚
β”‚      β€’ API documentation and guides                      β”‚
β”‚      β€’ Installation instructions                         β”‚
β”‚      β€’ Links to dashboard                                β”‚
β”‚                                                           β”‚
β”‚  βš›οΈ  Interactive Dashboard (React + Vite)               β”‚
β”‚  └─> http://localhost:5173                              β”‚
β”‚      β€’ Real-time data visualization                      β”‚
β”‚      β€’ Search and filter capabilities                    β”‚
β”‚      β€’ Interactive heatmap                               β”‚
β”‚      β€’ Document explorer                                 β”‚
β”‚      β€’ Nonprofit search                                  β”‚
β”‚      β€’ Opportunity tracker                               β”‚
β”‚                                                           β”‚
β”‚  πŸ”₯ API Backend (FastAPI + Python)                       β”‚
β”‚  └─> http://localhost:8000                              β”‚
β”‚      β€’ Data ingestion and processing                     β”‚
β”‚      β€’ Multi-agent AI system                             β”‚
β”‚      β€’ Database connections                              β”‚
β”‚      β€’ API endpoints for dashboard                       β”‚
β”‚                                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Why Three Services?

πŸ“š Documentation Site (website/)

  • Purpose: Documentation, guides, and project information
  • Technology: Docusaurus (static site generator)
  • Port: 3000
  • Use Case: First-time visitors, documentation, API reference

βš›οΈ Dashboard (frontend/)

  • Purpose: Interactive data exploration and analysis
  • Technology: React 18 + TypeScript + Vite
  • Port: 5173
  • Use Case: Daily users exploring data, creating reports, searching

πŸ”₯ API Backend (api/)

  • Purpose: Data processing and AI agents
  • Technology: FastAPI + Python
  • Port: 8000
  • Use Case: Powers the dashboard, runs background jobs

Integration Points

Documentation β†’ Dashboard

  • Navbar has "πŸš€ Dashboard" link pointing to http://localhost:5173
  • Homepage has "Launch Dashboard" button
  • /dashboard page auto-redirects to React app

Dashboard β†’ API

  • All data requests go to http://localhost:8000/api/*
  • Real-time updates via API polling
  • Authentication handled via API

API β†’ Dashboard

  • Serves static built dashboard in production
  • Provides REST endpoints for all data

Development Workflow

Option 1: Start All Services (Recommended)

./start-all.sh

This launches all three services in tmux:

  • Window 0: API Backend
  • Window 1: React Dashboard
  • Window 2: Documentation Site
  • Window 3: Shell

Option 2: Start Individually

# Terminal 1: API
source .venv/bin/activate
python main.py serve

# Terminal 2: Dashboard
cd frontend
npm run dev

# Terminal 3: Documentation
cd website
npm start

Access Points

Service Development URL Purpose
Documentation http://localhost:3000 Read guides and API docs
Dashboard http://localhost:5173 Main application interface
API http://localhost:8000 Backend services
API Docs http://localhost:8000/docs Interactive API reference

User Journey

  1. Discovery: User visits documentation site (port 3000)
  2. Getting Started: Reads installation guides
  3. Launch: Clicks "Dashboard" β†’ Opens React app (port 5173)
  4. Usage: Interacts with dashboard, which calls API (port 8000)

Production Deployment

In production, the architecture changes:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Production Deployment                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                           β”‚
β”‚  🌐 Reverse Proxy (nginx/Databricks Apps)               β”‚
β”‚  └─> https://opennavigator.org                          β”‚
β”‚                                                           β”‚
β”‚      β”œβ”€ /              β†’ Docusaurus static build         β”‚
β”‚      β”œβ”€ /docs          β†’ Docusaurus static build         β”‚
β”‚      β”œβ”€ /dashboard     β†’ React static build              β”‚
β”‚      └─ /api/*         β†’ FastAPI backend                 β”‚
β”‚                                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Build Commands

# Build documentation
cd website && npm run build
# Output: website/build/

# Build dashboard
cd frontend && npm run build
# Output: frontend/dist/

# Deploy backend
# FastAPI serves both static builds

Key Files

Documentation Site

  • website/docusaurus.config.ts - Configuration
  • website/src/pages/index.tsx - Homepage
  • website/docs/ - Documentation markdown files

Dashboard

  • frontend/src/App.tsx - Main routes
  • frontend/src/pages/Dashboard.tsx - Homepage with stats
  • frontend/src/pages/Heatmap.tsx - Interactive map
  • frontend/src/pages/Documents.tsx - Search interface
  • frontend/src/pages/Nonprofits.tsx - Nonprofit search
  • frontend/src/pages/Opportunities.tsx - Opportunity tracker

API

  • api/app.py - Databricks Apps entry point
  • api/main.py - Standalone mode
  • agents/ - Multi-agent system
  • discovery/ - Data ingestion

Common Confusion

❌ Wrong: "The documentation site IS the application" βœ… Correct: "The documentation site LINKS TO the application"

❌ Wrong: "Port 3000 has search and filters" βœ… Correct: "Port 5173 (React dashboard) has search and filters"

❌ Wrong: "Docusaurus replaced the dashboard" βœ… Correct: "Docusaurus was added FOR documentation, dashboard is unchanged"

Troubleshooting

"I can't find the search feature"

β†’ You're on the documentation site. Click "πŸš€ Dashboard" in the navbar to access the React app.

"Dashboard link goes to wrong place"

β†’ Make sure React dev server is running (cd frontend && npm run dev)

"No data showing in dashboard"

β†’ Make sure API backend is running (python main.py serve)

"Everything looks different"

β†’ Documentation site (port 3000) is new. Dashboard (port 5173) is unchanged.

Next Steps