OpsPilot is a full-stack operations command center for workshops, agencies, and small teams. It combines project management, task assignment, server-side time tracking, file uploads, client records, team reporting, and audit logs inside a polished Material UI dashboard.
Built to demonstrate production-grade full-stack SaaS architecture using Next.js, FastAPI, Supabase PostgreSQL, role-based access control, and responsive dashboard design.
- Premium dark Material UI dashboard with metrics, charts, leaderboard, alerts, and audit activity
- Interactive projects, clients, tasks, team, files, reports, settings, and worker-focused routes
- Create/edit/archive flows for projects and clients, task create/edit/delete/status/priority/assignee actions, and task detail drawer
- FastAPI backend with CRUD APIs, dashboard summary, server-side timers, manual time entries, weekly reports, CSV export, settings, and audit logs
- Supabase-ready PostgreSQL schema with RLS enabled, indexes, constraints, storage metadata, notifications, and seed data
- Dev-only demo auth flow that can be upgraded to Supabase Auth without reshaping the database
- Command Timeline dashboard section combining tasks, timers, files, and project audit events
- Switch to Maya Chen demo admin from the top-right user menu.
- Create a new client from
/clients. - Create a project for that client from
/projects. - Create and assign a task from
/tasks. - Start a timer on the task row or from
/time-tracker. - Stop the timer from the time tracker or sticky topbar widget.
- Register project/task file metadata from
/files. - Open
/reportsand export CSV. - Open
/audit-logor the dashboard Command Timeline to see recorded activity.
- Visible action buttons either perform an action, navigate, submit a form, or show a disabled tooltip.
- Mutations show Material UI toast feedback.
- Destructive actions use confirmation dialogs where appropriate.
- Reports default to a seeded-data-friendly range and include top tracked tasks.
- Settings persist through the backend and create audit log events.
- File registration works as a metadata-first workflow; Supabase Storage upload can be connected once local Storage keys are configured.
- Frontend: Next.js App Router, TypeScript, Material UI, Framer Motion, Recharts, TanStack Table-ready structure, React Hook Form/Zod-ready dependencies, Lucide React
- Backend: FastAPI, Pydantic, SQLAlchemy, pytest, CSV StreamingResponse
- Database/Auth/Storage: local Supabase, PostgreSQL, Supabase Auth-ready profiles, Supabase Storage metadata workflow
Install Supabase CLI and Docker, then run:
supabase start
supabase db resetsupabase start prints the local API URL, DB URL, Studio URL, anon key, and service role key. Copy those values into frontend/.env and backend/.env from the example files.
Backend:
cd backend
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app.main:app --reloadFrontend:
cd frontend
npm.cmd install
npm.cmd run devOpen http://localhost:3000.
If another local app already owns port 3000, run:
npm.cmd run dev -- -p 3002- Maya Chen: admin
- Owen Patel: manager
- Leah Brooks: manager
- Nadia Stone, Jon Rivera, Priya Shah, Marcus Reed: workers
- Sofia Grant, Ethan Cole: client viewers
The MVP includes a documented dev-only demo login. In production, map Supabase Auth user IDs to profiles.id and enforce policies through RLS.
cd backend
python -m pytest
python -m compileall app
cd ../frontend
npm.cmd run lint
npm.cmd run typecheck
npm.cmd run buildCurrent local validation also includes a dev-server smoke test at http://127.0.0.1:3002/dashboard.
