Skip to main content

🎉 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

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

📋 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

EndpointDescription
GET /Health check
GET /api/dashboard/metricsAggregate dashboard metrics
GET /api/runsList profiling runs (with filters)
GET /api/runs/{run_id}Get detailed run results
GET /api/driftList drift alerts
GET /api/tables/{name}/metricsGet table-specific metrics
GET /api/warehousesList available warehouses
GET /api/export/runsExport runs as JSON
GET /api/export/driftExport 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

  1. Create frontend/app/your-page/page.tsx
  2. Add route to frontend/components/Sidebar.tsx
  3. Add API endpoint if needed in backend/main.py

Add New Metric

  1. Query in backend/database.py
  2. Add to model in backend/models.py
  3. 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.local has correct NEXT_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_URL in .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

  1. Start both servers (backend + frontend)
  2. Visit http://localhost:3000
  3. Generate sample data if database is empty
  4. Explore all dashboard features
  5. Customize colors and branding
  6. 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:

  1. Check QUICKSTART.md for setup help
  2. Review ARCHITECTURE.md for technical details
  3. Check API docs at http://localhost:8000/docs
  4. 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! 🚀📊