A modern reimagining of USC's Schedule of Classes, built by students, for students. CourseX puts the browsing experience front and center — fast search, rich course details, enrollment status, instructor info, and syllabus access, all in one clean interface.
All contributions are welcome.
- Three-panel layout — browse programs and terms, scan the course list, and view full section details all at the same time
- Fast course search & filtering — search by keyword, filter by GE requirement, units, days, and more with a virtualized list that handles hundreds of courses without lag
- Instructor RMP — see instructors' RateMyProfessors ratings
- Schedule calendar — visual weekly schedule preview for any selected section
- Syllabus links — direct links to cached syllabi when available, no more simple syllabus headache
- Google OAuth login — sign in to view classes, as per current USC requirement ;)
| Layer | Technology |
|---|---|
| Framework | Nuxt 4 + Vue 3 |
| Styling | Tailwind CSS v4 + Nuxt UI v3 |
| State | Pinia |
| Database | Drizzle ORM + Neon (PostgreSQL) |
| Auth | nuxt-auth-utils (Google OAuth) |
| Virtualization | TanStack Virtual |
| Runtime | Bun |
| Deployment | Cloudflare Workers |
- Bun installed (
curl -fsSL https://bun.sh/install | bash) - A Neon PostgreSQL database
- Google OAuth credentials (Google Cloud Console)
git clone https://github.com/MeloticZ/CourseX
cd CourseXbun installCreate a .env file in the project root:
DATABASE_URL=postgresql://<user>:<password>@<host>/<db>?sslmode=require
NUXT_OAUTH_GOOGLE_CLIENT_ID=your_google_client_id
NUXT_OAUTH_GOOGLE_CLIENT_SECRET=your_google_client_secret
NUXT_SESSION_PASSWORD=a_random_32_char_secret
NUXT_PUBLIC_SYLLABUS_DOMAIN=https://your-syllabus-bucket-urlbunx drizzle-kit pushbun run devThe app will be available at http://localhost:3000.
Contributions, bug reports, and feature requests are all welcome. Please open an issue or submit a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add my feature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request