A complete computer vision platform MVP built with React, TypeScript, Tailwind CSS, and Supabase. This project implements four core modules for dataset management, annotation, workflow building, and public dataset sharing.
- Create and manage CV projects with task types (Detection, Classification, Segmentation)
- Upload images with drag-and-drop support
- Organize images into train/validation/test splits
- Browse and search dataset with filtering
- Export datasets in standard formats
- Version control for dataset snapshots
- Canvas-based annotation editor with zoom, pan, and reset controls
- Bounding box and polygon drawing tools
- Color-coded label classes
- Undo/Redo functionality with keyboard shortcuts
- Auto-save annotations to database
- Image navigation with progress tracking
- Drag-and-drop pipeline editor with React Flow
- Four node types: Load Dataset, Preprocess, Augment, Export
- Configurable node settings for each processing step
- Visual pipeline execution with results summary
- Workflow persistence and versioning
- Browse and search publicly shared datasets
- Filter by task type and tags
- Dataset detail pages with image previews
- Like and fork public datasets
- Multi-step dataset upload wizard
- Community contribution system
- Frontend: React 18, TypeScript, Tailwind CSS
- Routing: React Router v6
- Database: Supabase (PostgreSQL with RLS)
- Storage: Supabase Storage
- Canvas: react-konva for annotation
- Workflow: React Flow for pipeline building
- Charts: Recharts for data visualization
- Icons: Lucide React
- Build: Vite
src/
├── components/
│ ├── Layout.tsx # Main sidebar layout
│ ├── dataset/ # Module 1 components
│ ├── annotator/ # Module 2 components
│ ├── workflow/ # Module 3 components
│ └── universe/ # Module 4 components
├── pages/
│ ├── ProjectList.tsx
│ ├── ProjectDashboard.tsx
│ ├── DatasetView.tsx
│ ├── AnnotationEditor.tsx
│ ├── ClassManager.tsx
│ ├── WorkflowBuilder.tsx
│ ├── UniverseHome.tsx
│ ├── DatasetDetail.tsx
│ └── UploadDataset.tsx
├── lib/
│ └── supabase.ts # Supabase client
├── types/
│ └── index.ts # TypeScript type definitions
├── utils/ # Utility functions
└── App.tsx # Main app with routing
projects- CV projectsimages- Project imagesannotations- Bounding boxes and polygonslabel_classes- Label definitionsworkflows- Processing pipelinespublic_datasets- Shared datasetsdataset_likes- User likes for public datasets
All tables include:
- Row Level Security (RLS) for data protection
- Proper indexing for query performance
- Foreign key constraints for data integrity
- Timestamps for audit trails
- Node.js 18+
- npm or yarn
- Supabase project (free tier available at supabase.com)
- Clone the repository
git clone <repository-url>
cd cv-platform- Install dependencies
npm install- Create
.envfile with your Supabase credentials
cp .env.example .env- Add your Supabase URL and anon key:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
- Run development server
npm run devThe app will be available at http://localhost:5173
npm run buildThis creates an optimized production build in the dist/ directory.
- Push your repository to GitHub
- Visit vercel.com and sign in
- Click "New Project" and select your GitHub repository
- Vercel will auto-detect the Vite configuration
- Add environment variables in project settings:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Click "Deploy"
npm install -g vercel
vercelFollow the CLI prompts to deploy your project.
Required environment variables for deployment:
VITE_SUPABASE_URL - Your Supabase project URL
VITE_SUPABASE_ANON_KEY - Your Supabase anon key
These are injected at build time and embedded in the frontend bundle (they are public credentials).
-
Create a new bucket named
project-images:- Go to Storage in Supabase dashboard
- Click "New bucket"
- Name:
project-images - Make it public or configure access policies
-
Configure RLS policies for the bucket (if needed)
See src/types/index.ts for complete TypeScript type definitions.
{
id: string
name: string
taskType: 'detection' | 'classification' | 'segmentation'
imageCount: number
splits: { train: number, val: number, test: number }
createdAt: string
updatedAt: string
}{
id: string
projectId: string
storageUrl: string
filename: string
split: 'train' | 'val' | 'test'
annotated: boolean
uploadedAt: string
}{
id: string
projectId: string
imageId: string
type: 'bbox' | 'polygon'
classId: string
className: string
color: string
// bbox: x, y, width, height
// polygon: points
createdAt: string
}# Development
npm run dev # Start dev server on :5173
# Build
npm run build # Production build
npm run preview # Preview production build
# Quality
npm run lint # Run ESLint
npm run typecheck # TypeScript type checking
# Maintenance
npm audit fix # Fix vulnerable dependenciesThe project uses Tailwind CSS for styling with:
- Custom color scheme (dark theme)
- Responsive design with breakpoints
- Smooth transitions and hover states
- Accessible color contrast ratios
Edit tailwind.config.js to customize the design system.
- Row Level Security (RLS) enabled on all tables
- Public data access policies for MVP phase
- Environment variables for sensitive config
- No secrets embedded in code
- HTTPS-only deployment recommended
For production, implement proper authentication and tighter RLS policies based on user identity.
- ✅ Project management basics
- ✅ Image upload and browser
- ⏳ Annotation canvas (in progress)
- ⏳ Workflow builder (in progress)
- ⏳ Universe hub (in progress)
- User authentication with Supabase Auth
- Real-time collaboration
- Model training integration
- Advanced export formats
- Performance monitoring
- API endpoint documentation
- Webhook system
- Batch operations
- Dataset versioning UI
- Multi-user projects
- Code splitting with Vite
- Image lazy loading
- Database query optimization with indexes
- Minified production builds
- CSS purging with Tailwind
- Asset compression
- Chrome/Edge (latest 2 versions)
- Firefox (latest 2 versions)
- Safari (latest 2 versions)
- Mobile browsers (iOS Safari, Chrome Mobile)
npm install --save-dev terser- Verify VITE_SUPABASE_URL is correct
- Check VITE_SUPABASE_ANON_KEY is valid
- Ensure .env file is loaded properly
- Check Storage bucket exists and is public
- Verify bucket name is
project-images - Check browser console for error details
This is an MVP project. Contributions welcome!
MIT - Open source and free to use
For issues or questions:
- Check the troubleshooting section
- Review Supabase documentation: https://supabase.com/docs
- Check React Flow docs: https://reactflow.dev
- Open an issue in the repository
Ready to deploy! Your CV Platform is production-ready and can be deployed to Vercel with zero configuration needed beyond environment variables.