🎉 Baselinr Dashboard - Setup Complete!
The Baselinr Phase 2 Internal Dashboard MVP has been successfully created!
✅ What's Been Built
Backend (FastAPI)
- ✅ RESTful API with 10+ endpoints
- ✅ Database client connecting to Baselinr storage
- ✅ Pydantic models for type safety
- ✅ CORS configuration for frontend
- ✅ Sample data generator
- ✅ Comprehensive documentation
Frontend (Next.js)
- ✅ Dashboard overview with KPIs
- ✅ Run history page with filtering
- ✅ Drift detection alerts page
- ✅ Table-level metrics visualization
- ✅ Metrics & analytics page
- ✅ Responsive Tailwind CSS design
- ✅ Recharts visualizations
- ✅ Export functionality (JSON)
Features Implemented
- ✅ Multi-warehouse support (Postgres, Snowflake, MySQL, BigQuery, Redshift, SQLite)
- ✅ Advanced filtering (warehouse, schema, table, date range, status, severity)
- ✅ Search and sort functionality
- ✅ Drill-down capabilities
- ✅ Real-time data fetching with React Query
- ✅ Beautiful, modern UI with Tailwind CSS
- ✅ Extensible architecture for future enhancements
📂 Project Structure
dashboard/
├── README.md # Main documentation
├── QUICKSTART.md # 5-minute setup guide (this file)
├── ARCHITECTURE.md # Technical architecture
├── SETUP_COMPLETE.md # This file
├── .gitignore # Git ignore rules
│
├── backend/ # FastAPI Backend
│ ├── main.py # API server & endpoints
│ ├── models.py # Pydantic response models
│ ├── database.py # Database client
│ ├── requirements.txt # Python dependencies
│ ├── sample_data_generator.py # Test data generator
│ ├── start.sh # Startup script
│ └── README.md # Backend docs
│
└── frontend/ # Next.js Frontend
├── app/ # Pages (App Router)
│ ├── page.tsx # Dashboard overview
│ ├── layout.tsx # Root layout
│ ├── providers.tsx # React Query setup
│ ├── runs/ # Run history page
│ ├── drift/ # Drift alerts page
│ ├── tables/ # Table details (dynamic)
│ └── metrics/ # Metrics page
├── components/ # Reusable components
│ ├── Sidebar.tsx
│ ├── KPICard.tsx
│ ├── RunsTable.tsx
│ ├── DriftAlertsTable.tsx
│ └── FilterPanel.tsx
├── lib/ # Utilities
│ └── api.ts # API client
├── package.json # Node dependencies
├── tailwind.config.ts # Tailwind config
├── tsconfig.json # TypeScript config
├── next.config.js # Next.js config
├── start.sh # Startup script
└── README.md # Frontend docs
🚀 Quick Start
Option 1: Using Start Scripts (Recommended)
Terminal 1 (Backend):
cd dashboard/backend
./start.sh
# or on Windows: bash start.sh
Terminal 2 (Frontend):
cd dashboard/frontend
./start.sh
# or on Windows: bash start.sh
Option 2: Manual Start
Terminal 1 (Backend):
cd dashboard/backend
pip install -r requirements.txt
python sample_data_generator.py # Generate sample data
python main.py
Terminal 2 (Frontend):
cd dashboard/frontend
npm install
npm run dev
Access the Dashboard
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
📋 Environment Configuration
Backend (.env)
Create dashboard/backend/.env:
BASELINR_DB_URL=postgresql://baselinr:baselinr@localhost:5433/baselinr
API_HOST=0.0.0.0
API_PORT=8000
CORS_ORIGINS=http://localhost:3000
Frontend (.env.local)
Create dashboard/frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:8000
NODE_ENV=development
🎯 Key API Endpoints
| Endpoint | Description |
|---|---|
GET / | Health check |
GET /api/dashboard/metrics | Aggregate dashboard metrics |
GET /api/runs | List profiling runs (with filters) |
GET /api/runs/{run_id} | Get detailed run results |
GET /api/drift | List drift alerts |
GET /api/tables/{name}/metrics | Get table-specific metrics |
GET /api/warehouses | List available warehouses |
GET /api/export/runs | Export runs as JSON |
GET /api/export/drift | Export drift as JSON |
📊 Sample Data
To generate sample data for testing:
cd dashboard/backend
python sample_data_generator.py
This creates:
- 100 profiling runs across all warehouse types
- Column-level metrics for each run
- Drift events for ~30% of runs
🎨 Customization
Theme Colors
Edit frontend/tailwind.config.ts:
colors: {
primary: {
500: '#0ea5e9', // Change this!
},
}
Add New Page
- Create
frontend/app/your-page/page.tsx - Add route to
frontend/components/Sidebar.tsx - Add API endpoint if needed in
backend/main.py
Add New Metric
- Query in
backend/database.py - Add to model in
backend/models.py - Display in frontend component
🔍 Integration with Baselinr Phase 1
The dashboard automatically reads from Baselinr storage:
- baselinr_runs: Run metadata
- baselinr_results: Column metrics
- baselinr_events: Drift events
To populate with real data:
# From your Baselinr Phase 1 installation
baselinr profile --config examples/config.yml
📈 Dashboard Pages
1. Dashboard (/)
- KPI cards (Total Runs, Tables Profiled, Drift Events, Avg Rows)
- Run trend chart
- Warehouse breakdown
- Recent runs table
- Recent drift alerts
2. Runs (/runs)
- Full run history
- Filter by warehouse, schema, table, status, date
- Export to JSON
- Pagination
- Click table name to drill down
3. Drift Detection (/drift)
- All drift alerts
- Filter by warehouse, table, severity, date
- Severity breakdown (low/medium/high)
- Detailed metrics comparison
- Export to JSON
4. Table Metrics (/tables/[name])
- Table overview (rows, columns, runs, drift count)
- Row count trend chart
- Column-level metrics table
- Null percentages, distinct counts, min/max values
5. Metrics (/metrics)
- Warehouse distribution pie chart
- Profiling activity bar chart
- Drift trend chart
- Statistics summary
🛠️ Troubleshooting
"Cannot connect to API"
- Ensure backend is running:
curl http://localhost:8000 - Check
.env.localhas correctNEXT_PUBLIC_API_URL
"No data showing"
- Run sample data generator:
python sample_data_generator.py - Or run Baselinr profiling:
baselinr profile --config config.yml
"Database connection error"
- Check PostgreSQL is running
- Verify
BASELINR_DB_URLin.env - Test connection:
psql "postgresql://baselinr:baselinr@localhost:5433/baselinr"
Frontend build errors
cd frontend
rm -rf .next node_modules
npm install
npm run dev
🚀 Production Deployment
Build Frontend
cd frontend
npm run build
npm start # Runs on port 3000
Run Backend with Workers
cd backend
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
Using Docker (Future Enhancement)
# TODO: Add docker-compose.yml
docker-compose up
📚 Documentation
- README.md: Comprehensive feature overview
- QUICKSTART.md: 5-minute setup guide (in this directory)
- ARCHITECTURE.md: Technical architecture deep-dive
- backend/README.md: Backend-specific docs
- frontend/README.md: Frontend-specific docs
🎉 Next Steps
- Start both servers (backend + frontend)
- Visit http://localhost:3000
- Generate sample data if database is empty
- Explore all dashboard features
- Customize colors and branding
- Integrate with real Baselinr profiling runs
🔮 Future Enhancements (TODOs)
Phase 2.1
- CSV export implementation
- Real-time updates via WebSockets
- Advanced filtering & saved views
- User authentication
- Dark mode support
Phase 2.2
- Docker Compose setup
- Alert notifications (email, Slack)
- Custom dashboard builder
- API rate limiting
- Unit & integration tests
Phase 2.3
- Machine learning insights
- Predictive analytics
- Multi-tenant support
- Advanced anomaly detection
- Figma design refinements
✨ Features Highlight
MVP Scope ✅
- ✅ Run history with filters
- ✅ Drift alerts visualization
- ✅ Table-level profiling metrics
- ✅ Multi-warehouse support
- ✅ Clean, responsive UI
- ✅ Export functionality
- ✅ Extensible architecture
Ready for Figma Design Integration
The dashboard is structured with:
- Modular components
- Tailwind CSS for easy styling
- Clear component boundaries
- Design system ready (colors, spacing, typography)
🤝 Support
For issues or questions:
- Check QUICKSTART.md for setup help
- Review ARCHITECTURE.md for technical details
- Check API docs at http://localhost:8000/docs
- Review backend/frontend README files
🎊 Congratulations!
You now have a fully functional Baselinr Dashboard MVP!
Start exploring your data profiling results with a beautiful, modern interface.
# Start the dashboard
cd dashboard/backend && python main.py &
cd dashboard/frontend && npm run dev &
# Visit: http://localhost:3000
Happy profiling! 🚀📊