Offline-first schedule optimizer for BTU (Business and Technology University) students. Upload your course data, set constraints, and find the best timetable for your week β all in the browser.
- Course file upload β drag-and-drop or browse to load HTML course pages exported from BTU's portal (or use the companion userscript)
- Constraint engine β per-day enable/disable/prioritize, allowed time windows, busy periods, min/max classes per day, max overlap tolerance, per-day commute budgets
- Lecturer preferences β prefer, neutral, or avoid specific lecturers
- Smart scoring β schedules ranked by free days, gap time, commute cost, and lecturer fit
- Web Worker scheduler β heavy combinatorics run off the main thread for a responsive UI
- Schedule comparison β pin & name your favourite schedules; side-by-side stat comparison
- Collapsible schedule cards β expand/collapse individual calendar views
- Accordion results β collapse the entire results section to quickly reach the footer
- Statistics dashboard β aggregate stats bar showing result count, best free days, min gaps, and score range
- Find similar β 1-group-swap neighbor search to explore close variations
- What-if mode β temporarily exclude courses to explore alternative plans
- Group locking β pre-select a specific group for any course
- Multi-group exclusion β mark groups as occupied/unavailable
- Drag-and-drop ordering β reorder courses to set priority
- Interactive calendar β click events to see group details including room, lecturer, and all time slots
- Busy periods β draw unavailable time blocks directly on the calendar
- Commute visualization β before/after-class commute blocks shown on calendar
- Gap highlighting β idle gaps between classes shown with duration labels
- Mobile day tabs β swipe left/right to change weekday on mobile
- Color legend β mobile-only dot legend mapping course names to calendar colors
- ICS export β download any schedule as a
.icscalendar file (with optional reminder) - HTML export β clean HTML table grouped by day
- PDF print β opens a formatted print-friendly window for the focused schedule
- Image export β capture the calendar view as a PNG via
html-to-image - Bulk export β merge all pinned schedules into a single ICS download
- Toast notifications β success/error/info feedback for all export and share actions
- URL sharing β snapshot settings into a shareable link or compact hash
- Dark mode β system-aware with manual toggle (light / dark / auto)
- Consent banner β dismissible banner linking to Privacy Policy and Terms of Service
- Scroll-to-top FAB β floating button appears on scroll for quick navigation
- Empty state guide β 3-step "How it works" onboarding for new users
- Animated dialogs β smooth scale/fade open/close transitions on desktop modals
- i18n β English and Georgian (α₯αα αα£αα) via Lingui, including full legal text
- PWA β installable, works offline via Workbox service worker
- Keyboard shortcuts β
Ggenerate,Dtheme,Ppin,β/βnavigate schedules - Accessible β ARIA labels, focus-visible rings, focus trap in modals, keyboard navigation
pnpm install
pnpm devOpen http://localhost:5173 in your browser.
pnpm build # extracts & compiles i18n, type-checks, then bundles
pnpm preview # serve the production build locallybtu-timetable-helper.user.js is a companion userscript that exports course data from BTU's portal into clean HTML table, JSON, CSV or Markdown files this app can import.
| Layer | Library |
|---|---|
| UI | React 19, TypeScript 5.9, Tailwind CSS 4 |
| Build | Vite 8, React Compiler |
| i18n | Lingui 5 (.po catalogs) |
| PWA | vite-plugin-pwa + Workbox |
| Drag & drop | @dnd-kit/react |
| Icons | Lucide React |
| Mobile drawer | Vaul |
| Image export | html-to-image |
The app auto-deploys to GitHub Pages on every push to main via the workflow in .github/workflows/deploy.yml.