Baselinr Dashboard Architecture
Overviewβ
The Baselinr Dashboard is a full-stack web application that provides visualization and monitoring capabilities for the Baselinr data profiling system.
Architecture Diagramβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Next.js Frontend (Port 3000) β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β βDashboard β β Runs β β Drift β Pages β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β ββββββββββββββββββββββββββββββββββββββββ β β
β β β React Query (State & Caching) β β β
β β ββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β HTTP/REST API
β
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β FastAPI Backend (Port 8000) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β API Endpoints β β
β β /api/runs, /api/drift, /api/dashboard/metrics β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Database Client (SQLAlchemy) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β SQL Queries
β
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β PostgreSQL Database (Port 5433) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Baselinr Storage β β
β β β’ baselinr_runs β β
β β β’ baselinr_results β β
β β β’ baselinr_events β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β²
β Writes
β
ββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Baselinr Core (Phase 1) β
β β’ Profiling Engine β
β β’ Drift Detector β
β β’ Storage Writer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Technology Stackβ
Frontendβ
- Framework: Next.js 14 (App Router)
- UI Library: React 18
- Styling: Tailwind CSS
- State Management: TanStack Query (React Query)
- Charts: Recharts
- Icons: Lucide React
- HTTP Client: Fetch API
- Type Safety: TypeScript
Backendβ
- Framework: FastAPI
- ORM: SQLAlchemy
- Validation: Pydantic
- Server: Uvicorn
- Database: PostgreSQL
Component Architectureβ
Frontend Componentsβ
app/
βββ layout.tsx # Root layout with sidebar
βββ providers.tsx # React Query provider setup
βββ page.tsx # Dashboard overview page
βββ runs/page.tsx # Run history page
βββ drift/page.tsx # Drift detection page
βββ tables/[tableName]/page.tsx # Dynamic table details
βββ metrics/page.tsx # Metrics & analytics page
components/
βββ Sidebar.tsx # Navigation sidebar
βββ KPICard.tsx # Key metric display
βββ RunsTable.tsx # Runs data table
βββ DriftAlertsTable.tsx # Drift alerts table
βββ FilterPanel.tsx # Filter controls
lib/
βββ api.ts # API client functions
Backend Componentsβ
backend/
βββ main.py # FastAPI app & endpoints
βββ models.py # Pydantic models
βββ database.py # Database client
βββ sample_data_generator.py # Test data generator
Data Flowβ
1. Profiling Run Flowβ
Baselinr CLI
β (profiles data)
Profiling Engine
β (writes results)
PostgreSQL Database
β (queries data)
FastAPI Backend
β (REST API)
Next.js Frontend
β (displays)
User Browser
2. Dashboard Page Loadβ
1. User visits /
2. Next.js renders page.tsx
3. React Query fetches /api/dashboard/metrics
4. FastAPI queries database
5. Returns aggregate metrics
6. React Query caches response
7. Page displays KPIs, charts, recent runs
3. Filtering Flowβ
1. User adjusts filters in FilterPanel
2. State updates trigger React Query refetch
3. API called with query parameters
4. Backend applies WHERE clauses
5. Filtered results returned
6. UI updates with new data
Database Schemaβ
baselinr_runsβ
Stores metadata about each profiling run.
- run_id (PK)
- dataset_name
- schema_name
- profiled_at
- environment
- row_count
- column_count
- status
baselinr_resultsβ
Stores column-level metrics.
- run_id (FK)
- column_name
- column_type
- metric_name
- metric_value
baselinr_eventsβ
Stores drift detection events.
- event_id (PK)
- run_id (FK)
- event_type
- table_name
- column_name
- metric_name
- baseline_value
- current_value
- change_percent
- drift_severity
- timestamp
API Designβ
RESTful Endpointsβ
All endpoints follow REST conventions:
GET /api/resource- List resourcesGET /api/resource/{id}- Get specific resource- Query parameters for filtering
Response Formatβ
{
"run_id": "run_abc123",
"dataset_name": "customers",
"profiled_at": "2024-01-15T10:30:00Z",
"row_count": 10000,
...
}
Error Handlingβ
{
"detail": "Run abc123 not found"
}
State Managementβ
React Queryβ
- Caches API responses
- Automatic background refetching
- Optimistic updates
- Loading/error states
const { data, isLoading, error } = useQuery({
queryKey: ['runs', filters],
queryFn: () => fetchRuns(filters),
})
Performance Considerationsβ
Frontendβ
- React Query caching (1 minute stale time)
- Code splitting with Next.js
- Optimized images
- Lazy loading for large tables
Backendβ
- Database connection pooling
- Query optimization with indexes
- Pagination for large datasets
- Async/await for non-blocking I/O
Databaseβ
- Indexes on frequently queried columns
baselinr_runs.dataset_namebaselinr_runs.profiled_atbaselinr_events.run_id
Securityβ
Current (MVP)β
- CORS configuration
- No authentication (internal use only)
- Database connection string in environment variables
Future Enhancementsβ
- User authentication (OAuth2/JWT)
- Role-based access control
- API rate limiting
- Input sanitization
- SQL injection prevention (using SQLAlchemy parameterized queries)
Deploymentβ
Developmentβ
# Backend
uvicorn main:app --reload
# Frontend
npm run dev
Productionβ
# Backend
uvicorn main:app --workers 4
# Frontend
npm run build && npm start
Docker (Future)β
services:
dashboard-backend:
build: ./backend
ports: ["8000:8000"]
dashboard-frontend:
build: ./frontend
ports: ["3000:3000"]
Monitoring & Loggingβ
Backendβ
- FastAPI automatic request logging
- Error tracebacks
- Database query logging (SQLAlchemy)
Frontendβ
- Console errors in development
- React Query DevTools
- Network tab monitoring
Extensibilityβ
Adding New Visualizationsβ
- Create chart component
- Add to relevant page
- Fetch data via React Query
Adding New API Endpointsβ
- Define Pydantic model in
models.py - Add database query in
database.py - Create endpoint in
main.py - Add API function in frontend
lib/api.ts
Adding New Pagesβ
- Create
app/new-page/page.tsx - Add route to
Sidebar.tsx - Implement page logic
Testing Strategy (Future)β
Backendβ
- Unit tests with pytest
- API endpoint tests
- Database query tests
Frontendβ
- Component tests with Jest
- Integration tests with React Testing Library
- E2E tests with Playwright
Roadmapβ
Phase 2.1 - Enhanced Featuresβ
- Real-time updates (WebSockets)
- Advanced filtering
- Custom dashboards
- Alert notifications
Phase 2.2 - Production Readyβ
- User authentication
- Docker deployment
- CI/CD pipeline
- Monitoring & alerting
Phase 2.3 - Advancedβ
- Machine learning insights
- Anomaly detection
- Predictive analytics
- Multi-tenant support