An intelligent course scheduling application for CUNY students, powered by AI and built with modern web technologies.
- Smart Course Search: Search courses with advanced filters (department, modality, time slots)
- AI-Powered Optimization: Generate optimal schedules based on your preferences
- Conflict Detection: Automatic detection and prevention of schedule conflicts
- Interactive Calendar: Visual schedule grid with drag-and-drop support
- Professor Ratings: View and compare professor ratings and reviews
- Real-time Updates: Instant UI updates with optimistic rendering
- Secure authentication with Supabase
- Protected routes with automatic redirects
- Session management and token refresh
- Row-level security (RLS) for data access
- WCAG 2.1 AA compliant
- Full keyboard navigation support
- Screen reader compatible
- High contrast colors
- Responsive design for all devices
- Debounced search (300ms)
- Cached API responses (5 minutes)
- Memoized calculations
- Lazy loading for images and content
- Code splitting for faster loads
- React 18 - UI library with concurrent features
- TypeScript - Type-safe development
- Vite - Fast build tool and dev server
- React Router - Client-side routing
- Tailwind CSS - Utility-first styling
- Radix UI - Accessible component primitives
- Framer Motion - Smooth animations
- Supabase - PostgreSQL database with real-time capabilities
- FastAPI - Python backend for AI features
- Google Gemini AI - AI-powered schedule optimization
- TypeScript - Static type checking
- SWC - Fast TypeScript/JavaScript compiler
- PostCSS - CSS processing
- Node.js 18+ and npm
- Supabase account
- Google Gemini API key (for AI features)
- Clone the repository:
git clone https://github.com/KBesada24/ScheduleFirst-AI.git
cd ScheduleFirst-AI- Install dependencies:
npm install- Set up environment variables:
cp .env.example .envEdit .env and add your credentials:
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key- Start the development server:
npm run dev- Open http://localhost:5173 in your browser
See services/README.md for backend setup instructions.
βββ src/
β βββ components/ # React components
β β βββ auth/ # Authentication components
β β βββ schedule/ # Schedule-related components
β β βββ ui/ # Reusable UI components
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utility functions and helpers
β βββ types/ # TypeScript type definitions
β βββ App.tsx # Main application component
βββ services/ # Backend services
β βββ mcp_server/ # MCP server for AI integration
β βββ background_jobs/ # Scheduled tasks
βββ docs/ # Documentation
β βββ API_DOCUMENTATION.md
β βββ ACCESSIBILITY.md
β βββ PERFORMANCE_OPTIMIZATION.md
β βββ INTEGRATION_TESTING.md
βββ supabase/ # Database migrations and config
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run types:supabase- Generate TypeScript types from Supabase
- API Documentation - Complete API reference
- Accessibility Guide - Accessibility features and compliance
- Performance Optimization - Performance strategies
- Integration Testing - Testing approach and results
- Button Audit - Button component inventory
- Supabase Guide - Database setup and queries
All forms use centralized validation with the useFormSubmission hook:
const { values, errors, handleSubmit } = useFormSubmission(
{ email: "", password: "" },
{
validationRules: {
email: combine(required, email),
password: combine(required, minLength(8)),
},
onSubmit: async (values) => await signIn(values.email, values.password),
}
);Search results are automatically cached and debounced:
const { courses, loading, search } = useCourseSearch();
search("Computer Science", { department: "csc" }); // Debounced 300msAI-powered schedule generation with constraints:
<OptimizeButton
courseCodes={["CSC 101", "MATH 201"]}
constraints={{
earliestStartTime: "09:00",
latestEndTime: "17:00",
minProfessorRating: 4.0
}}
onOptimized={(schedules) => setSchedules(schedules)}
/>| Metric | Target | Actual | Status |
|---|---|---|---|
| Button click response | < 50ms | ~10ms | β |
| API call initiation | < 100ms | ~20ms | β |
| DOM update | < 100ms | ~50ms | β |
| Calendar render | < 200ms | ~120ms | β |
| Page navigation | < 300ms | ~150ms | β |
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
- CUNY for course data
- Supabase for backend infrastructure
- Google Gemini for AI capabilities
- Radix UI for accessible components
- Tailwind CSS for styling utilities
For issues and questions:
- Open an issue on GitHub
- Contact: [your-email@example.com]
- Mobile app (React Native)
- Email notifications for schedule changes
- Course recommendations based on major
- Study group finder
- Grade prediction
- Multi-semester planning