The unofficial open-source course preselection, timetable builder, and course catalog website!
We are a passionate team of students dedicated to improving the technological standards of NTHU through students. We hope that with our efforts and yours, we'll make NTHU great again!
Since its inception, NTHUMods has been continuously enhanced with features like:
- π Course Selector - Advanced course search and filtering
- π Timetable Builder - Interactive drag-and-drop course scheduling
- π Graduation Planner - Track your academic progress
- π Bus Schedule - Real-time campus shuttle information
- π± Mobile Support - Progressive Web App with offline capabilities
- π Multi-Language Support - Traditional Chinese and English
- π« Venue Explorer - Campus building and room finder
- π¬ Course Reviews - Student feedback and ratings
- π Calendar Integration - Export to Google Calendar, iCal
- π Grade Analytics - Academic performance tracking
The platform has gained significant traction, now boasting over 3,000+ active users. It is proudly supported under NTHU IDEAL, CLC, and CLL projects.
Follow more updates on Instagram | Website
This project is organized as a modern monorepo using Turborepo for efficient builds and development:
courseweb/
βββ apps/ # Applications
β βββ web/ # Main Next.js web application
β βββ mobile/ # Capacitor mobile app (iOS/Android)
β βββ admin/ # Admin dashboard (planned)
β βββ docs/ # Documentation site (planned)
βββ packages/ # Shared packages
β βββ ui/ # Shared React components (40+ components)
β βββ shared/ # Shared utilities, types, and constants
β βββ database/ # Database schema and migrations
β βββ eslint-config/ # Shared ESLint configuration
βββ services/ # Backend services (git submodules)
β βββ api/ # Main API service (Cloudflare Workers)
β βββ secure-api/ # Authentication API service
β βββ discord-bot/ # Discord integration service
βββ tools/ # Development and build tools
βββ data-sync/ # Course data synchronization tools
βββ dict-manager/ # i18n dictionary management CLI
βββ build-scripts/ # Build automation and CI/CD scripts
| Package | Description | Technology |
|---|---|---|
@courseweb/web |
Main web application | Next.js 14, App Router, TypeScript |
@courseweb/mobile |
Mobile application | Capacitor, Ionic |
@courseweb/ui |
UI component library | React, Radix UI, Tailwind CSS |
@courseweb/shared |
Shared utilities & types | TypeScript |
@courseweb/database |
Database schema | SQL, Migrations |
@courseweb/api |
Main API service | Hono, Cloudflare Workers |
@courseweb/secure-api |
Auth API service | Hono, Cloudflare Workers |
Frontend:
- Next.js 14 with App Router
- React 18 with Server Components
- TypeScript for type safety
- Tailwind CSS for styling
- Radix UI for accessible components
- Framer Motion for animations
Backend:
- Hono web framework
- Cloudflare Workers for serverless compute
- Supabase for database and authentication
- Firebase for additional services
Mobile:
Infrastructure:
- Turborepo for monorepo management
- Vercel for web deployment
- DigitalOcean for production hosting
- Algolia for search functionality
Access the website at nthumods.com
For issues, feature requests, or bug reports, please open an issue.
- Node.js 20+
- npm (comes with Node.js)
- Git with submodules support
-
Clone the repository with submodules:
git clone --recursive https://github.com/nthumodifications/courseweb.git cd courseweb -
Install dependencies:
npm install
-
Set up environment variables:
cp apps/web/.env.local.example apps/web/.env.local # Edit .env.local with your configuration -
Start development server:
npm run dev # or for faster builds: npm run dev-turbo -
Open your browser: Navigate to http://localhost:3000
# Development
npm run dev # Start all development servers
npm run dev-turbo # Start with Turbo for faster builds
npm run dev:web # Start only web app
npm run dev:mobile # Start mobile development
# Building
npm run build # Build all packages and apps
npm run build:web # Build only web app
npm run build:mobile # Build mobile app
# Tools
npm run dict # Manage translation dictionary
npm run sync:once # Sync course data once
npm run sync:scheduled # Start scheduled sync service
# Mobile
npm run sync:mobile # Sync mobile app
npm run build:ios # Build iOS app
npm run build:android # Build Android app
# Utilities
npm run lint # Lint all packages
npm run type-check # TypeScript type checking
npm run clean # Clean build artifactsThe project uses Turborepo for efficient task running:
# Run build for specific package
npx turbo run build --filter=@courseweb/web
# Run dev for all packages
npx turbo run dev
# Run tests with dependencies
npx turbo run test --filter=@courseweb/ui...
# Clear Turborepo cache
npx turbo run cleanThe mobile app is built with Capacitor and supports both iOS and Android:
# Install mobile dependencies
cd apps/mobile
npm install
# Sync web assets to mobile
npm run sync:mobile
# Run on iOS simulator
npm run build:ios
# Run on Android emulator
npm run build:androidWe use a custom dictionary management system for translations:
# Create new translation entry
npm run dict -- create "settings.theme" "δΈ»ι‘" "Theme"
# Remove translation entry
npm run dict -- remove "old.key"
# Move/rename translation key
npm run dict -- move "old.key" "new.key"We welcome contributions from everyone! Here's how to get started:
git clone https://github.com/your-username/courseweb.git
cd courseweb
npm installgit checkout -b feat/my-awesome-feature
# or
git checkout -b fix/bug-description- Follow our coding standards (ESLint + Prettier configured)
- Add tests if applicable
- Update documentation as needed
- Test your changes:
npm run dev-turbo
git add .
git commit -m "feat: add awesome new feature"
git push origin feat/my-awesome-featureWe follow Conventional Commits for commit messages.
- Create a PR against the
mainbranch - Provide a clear description of your changes
- Link any related issues
- Wait for review and CI checks
- Code Style: We use ESLint + Prettier (automatically configured)
- TypeScript: All new code should be properly typed
- Components: Use shared UI components from
@courseweb/uiwhen possible - Testing: Add tests for new features (we use Vitest)
- Performance: Consider bundle size and runtime performance
The web app is deployed on Vercel with automatic deployments from main branch.
Production: nthumods.com
For self-hosting, use the provided Docker configuration:
# Build Docker image (run from repository root)
docker build -f apps/web/Dockerfile -t nthumods-web .
# Run container
docker run -p 3000:3000 nthumods-webNote: The Dockerfile is located in apps/web/Dockerfile but must be run from the repository root to access the monorepo structure and shared packages.
Required environment variables (see apps/web/.env.local.example):
# Database
DATABASE_URL=
DIRECT_URL=
# Authentication
NEXTAUTH_SECRET=
NEXTAUTH_URL=
# External Services
SUPABASE_URL=
SUPABASE_ANON_KEY=
ALGOLIA_APP_ID=
ALGOLIA_API_KEY=
# Optional
SENTRY_AUTH_TOKEN=
TURNSTILE_SECRET_KEY=- Performance: Web Vitals monitoring with Vercel Analytics
- Error Tracking: Sentry integration for error monitoring
- Search: Algolia for lightning-fast course search
- Caching: Aggressive caching strategy with Vercel Edge Network
- Bundle Analysis: Built-in bundle analyzer (
npm run analyze)
This project is licensed under the GNU General Public License v3.0.
- β You can: Use, modify, distribute, and contribute
- β You must: Keep it open source, include license and copyright
- π Learn more: License Details | GPL-3.0 Guide
Core Contributors:
- Chew Tzi Hwee - Project Lead & Full-Stack Developer
- Joshua Lean - Frontend Developer & UI/UX Designer
- Huang Shi Jie - Backend Developer & DevOps
Want to join? Email us at [email protected]
Academic Support:
- National Tsing Hua University Interdisciplinary Program - Academic backing and project support
Technology Partners:
- Algolia - Powering our lightning-fast course search functionality
- Cerana Technology - Sponsoring our infrastructure to keep the project running
Infrastructure:
- Vercel - Web hosting and deployment platform
- DigitalOcean - Production infrastructure
- Cloudflare - API hosting and CDN services
- Website: nthumods.com
- Instagram: @nthumods
- Email: [email protected]
- GitHub: nthumodifications/courseweb
Inspired by NUSMods from the National University of Singapore. The lack of a modern, student-friendly course planning system at NTHU motivated us to create this open-source alternative that puts students first.
Made with β€οΈ by students, for students at National Tsing Hua University
