Jadwlak جدولك
Course Scheduling Web App
BAU's official system lets students register for courses but not see their week before committing. Jadwlak lets them build that week first: search the catalog, compare three plans, catch every clash, then register.
- campuses covered
- 4
- end-to-end tests
- 74
- a year to run: just the domain
- $14
- student accounts needed
- 0
- GitHub Actionsregistration-calendar cron
- then, via run: Playwrightheadless scraper
- then, via upsert: SupabasePostgres + RLS
- then, via 1 query/5 min: Cloudflare edgecatalog cached 5 min
- then, via fan-out: Every studentplans in localStorage
The hard part
Registration day sends the whole student body to the planner in the same few hours, and it all has to fit in free tiers. The catalog API is cached at Cloudflare's edge for five minutes, so the entire campus costs one Supabase query per five minutes, and returning visitors get a 304 instead of the full catalog. Students never make an account: plans live in localStorage and no personal data is collected.
What I built
- Full course catalog across Tripoli, Beirut, Debbieh and Bekaa: three parallel plans, real-time clash detection, placeholders, undo, and exports to .ics, PDF or CRNs
- A headless Playwright scraper on GitHub Actions, scheduled around BAU's registration calendar: daily during registration months, weekly the rest of the year
- Built for the open internet: Upstash sliding-window rate limits on every API route, a per-request nonce CSP, and row-level security so only the admin can write
- Moved hosting from Vercel to Cloudflare Workers through OpenNext, and wrote 74 Playwright end-to-end tests, 29 of them security checks
- Next.js 15
- React 19
- Cloudflare Workers
- OpenNext
- Supabase
- Postgres + RLS
- Upstash Redis
- Playwright
- GitHub Actions
- Chrome MV3