ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Generate and rank every valid FFCS timetable. Free for VIT Vellore, Chennai, Bhopal & AP students.
EducationTypeScript · HTMLGitHub @mrRR7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
A timetable optimizer for VIT FFCS that helps students build clash-free schedules, compare faculty options, and find timetables that fit their preferences. Supporting VIT campuses with intelligent scheduling, course catalog search, and timetable sharing.
Loading the full README.
Read the full README ↗FFCS (Fully Flexible Credit System) is VIT's biannual course registration system where students race to register for the best professor-slot combinations before they fill up — manually cross-checking hundreds of possible timetable arrangements. Ultimate FFCS Planner automates that entirely.
Generation
Course input
Results
Onboarding
Export & share
Multi-campus
| Framework | Next.js 14 App Router |
| Language | TypeScript |
| Styling | Tailwind CSS + in-house fp-ui primitives (theme tokens in src/app/fp-tokens.css) |
| State | Zustand + localStorage persistence |
| Database | Supabase (Postgres + RLS) |
| Generation | Web Worker (backtracking DFS) |
| Parsing | PapaParse, SheetJS, LZ-string |
| Export | html-to-image, jsPDF |
| Hosting | Vercel |
src/
├── app/ # Next.js App Router
│ ├── [campus]/ # Static slot-timing pages per campus (SEO)
│ ├── planner/ # Courses + preferences, "Find my weeks"
│ ├── results/ # Browse, swap, export, share generated weeks
│ ├── compare/ saved/ settings/ support/
│ ├── timetable/[id]/ # Shared timetable view (public, no auth)
│ ├── admin/ # Bulk catalog upload + usage stats (developer only)
│ └── api/
│ ├── catalog/search/ # Whole campus/semester catalog (edge-cached)
│ ├── catalog/semesters/ # Semester metadata
│ ├── share-timetable/ # Share link creation + resolution
│ ├── events/ # Anonymous usage events (allowlisted props)
│ ├── vtop-import/ # VTOP bookmarklet hand-off
│ └── admin/ # Bulk course upload, auth
│
├── engine/ # Generator, conflicts, zero-result analysis,
│ # metrics, ranking, per-campus slot catalogs, worker
│
├── components/fp-ui/ # Design-system primitives, app shell, program picker
│
├── features/
│ ├── planner/fp/ # Search, paste, file, manual tabs; preferences
│ ├── programs/ # Program names + "Your program / All courses" scoping
│ ├── courses/ # Merging catalog options into the plan
│ ├── import/ paste-import/ # CSV/XLSX pipeline, free-text parser
│ ├── results/ # Slot matrix, block details, iCal dialog
│ ├── tour/ # Guided tour + sample courses
│ ├── landing/ campus/ # Home page, campus pages
│ └── vtop-scraper/ # VTOP bookmarklet
│
├── lib/ # Supabase clients, catalog cache, usage events, iCal
├── utils/ # Share encoding, PNG/PDF export
├── store/useAppStore.ts # Zustand store — app state + persistence
└── hooks/ # useGenerator, useMediaQuery
supabase/migrations/ # Versioned SQL migrations
Generation algorithm in brief: courses are sorted by ascending option count (MRV) before search. At each DFS node, violatesOptionHardConstraints prunes infeasible options immediately; conflictsWithExisting prunes time overlaps against already-placed courses. Soft constraints (max gap) are deferred to complete-timetable checks to avoid premature pruning. Results are scored through a weighted metric pipeline (src/engine/ranking.ts) and returned sorted by descending score.
Catalog and programs: the client fetches a campus's whole active catalog once (src/lib/catalogCache.ts) and filters it locally per keystroke. Each professor option carries a program code (BCE, BYB, … or ALL for untagged); the program picker lists only codes present in the catalog, and friendly names live in src/features/programs/programCatalog.ts.
Prerequisites: Node.js 18+, a Supabase project
git clone https://github.com/mrRR7/ffcsmaker
cd ffcsmaker
npm install
Copy .env.local.example to .env.local and fill in your Supabase URL, anon key, service role key, and an ADMIN_SECRET_KEY.
Run the SQL files in supabase/migrations/ against your Supabase project, then:
npm run dev
Checks: npm run typecheck, npm run lint, npm test (Node's built-in test runner).
The admin panel at /admin handles semester and course data upload — developer-only, protected by ADMIN_SECRET_KEY. Re-uploading a semester updates courses in place and replaces options only for the program codes present in the upload.
Kill switch: NEXT_PUBLIC_PROGRAM_PICKER=off hides the program picker and searches every course. It's read at build time, so changing it needs a redeploy.
Source-visible. Not actively seeking contributions — but bug reports via issues are welcome.