opencompany
Self-improving AI that runs your whole business: six AI employees automate development, design, accounting, sales, marketing, and tax with 200+ AI models.
Clash-free timetables and hall bookings for any college
BusinessTypeScript · PythonGitHub @njain05OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗| What | Link |
|---|---|
| The app (open this) | https://college-timetable-teal.vercel.app |
| Sign in (demo buttons for every role) | https://college-timetable-teal.vercel.app/login |
| Demo college's timetable, no sign-in (share link) | https://college-timetable-teal.vercel.app/c/4H7GM5 |
| Book a room (no account needed) | https://college-timetable-teal.vercel.app/book |
| Events calendar | https://college-timetable-teal.vercel.app/events |
| Backend API, interactive docs | https://college-timetable-api.onrender.com/docs |
| Backend health check | https://college-timetable-api.onrender.com/health |
The frontend runs on Vercel, the backend on Render (free plan, Singapore), and the database is Postgres on Supabase. The free backend sleeps after about 15 minutes without visitors, so the first visit can take up to a minute while it wakes up (the site says "Waking up the server"). Generating a timetable there takes about 20 seconds for the sample college and about a minute for the larger demo college.
One place for the whole college. The Dean's office generates a clash-free timetable in minutes. Everyone signs in with their own username and password and sees only their own pages. Departments prepare and approve their own data, teachers ask for leave and get covered, students see what's on now and next, and clubs book rooms with digital approval instead of paper letters.
Built for the Punjab Jobs AI Bootcamp hackathon (J-PAL South Asia). It works for any college: nothing about days, periods, breaks, rooms or departments is hard-coded.
Contents: Live links · About · Try it · Who it's for · What it does · How a Dean uses it · Screenshots · How it's built · Run it locally · Limitations
Open Sign in on the live site. Under "Evaluators: try it as", pick a person: their sign-in shows in grey in the boxes, so just press Sign in.
| Sign in as | Username | Password | What to try |
|---|---|---|---|
| Dean (super admin) | dean | demo1234 | Today (what needs doing), all timetables, Setup (change data, generate again, publish), People & sign-ins, Reports, room approvals |
| HOD of CSE | hod | demo1234 | Approve CSE's timetable data (or send it back with a note), approve leave and arrange cover, room requests, make the in-charge's sign-in |
| Timetable in-charge of CSE | incharge | demo1234 | Edit only CSE's rooms, teachers, sections and classes, then send them to the HOD |
| Teacher (Dr. Kulwinder Singh Mann) | teacher | demo1234 | Today's classes, their week, ask for leave, book a room |
| Student (CSE-3A) | student | demo1234 | "Now / Next", their section's week, today's changes, add it to their phone's calendar |
College code: 4H7GM5, the demo college Guru Nanak Institute of Technology, Ludhiana, built from docs/New_College_Data.xlsx (3 departments, 23 teachers, 8 sections, Monday to Saturday with a short Saturday, open electives).
These demo sign-ins are public and open only the demo college. If someone changes it, python backend/seed_demo.py https://college-timetable-api.onrender.com makes a fresh one; put its code in frontend/lib/demo.ts.
| Person | Where they land | What they get |
|---|---|---|
| Dean (super admin) | Today | A to-do list (publish, leave waiting, classes needing cover, bookings waiting); a 6-step setup or one Excel workbook; a timetable with 0 clashes, checked twice; plain-English reasons when something can't fit; one click to publish; everyone's sign-ins; reports |
| HOD | HOD page | Approves the department's data before the Dean generates, approves leave and arranges cover, decides room requests, makes the timetable in-charge's sign-in |
| Timetable in-charge | Department | Edits only their department's rooms, teachers, sections and subjects, and sends them to the HOD |
| Teacher | Teacher page | Their own week, today's classes, leave requests and room bookings |
| Student | My timetable | Their section's week, a "Now / Next" card and today's changes. Nothing to change, nothing else to see. |
| Clubs and organisers | Book a room (no account) | Book a seminar hall or room in a free slot, follow the approval on a tracking link, see the events calendar |
Each person's top bar shows only their own pages, and the server checks every request, so nobody can open someone else's page.
| Setup (desktop) | Department in-charge (phone) | My timetable (phone) |
|---|---|---|
| Timetables | Book a room | Events calendar |
|---|---|---|
flowchart TB
subgraph People["People (phones and laptops)"]
Dean
HOD
Incharge["Timetable in-charge"]
Teacher
Student
Club["Club / organiser (no account)"]
end
subgraph Vercel["Vercel: frontend/ (Next.js 16, React, Tailwind v4)"]
Pages["Pages: /login /today /setup /timetable /my /teacher /hod /department /people /book /approvals /events /reports"]
Browser["In the browser: Excel import (SheetJS), instant checks, grid layout, exports (.xlsx, .ics)"]
end
subgraph Render["Render: backend/ (Python, FastAPI)"]
API["app/: colleges · accounts · members · departments · bookings · changes · ask"]
Solver["solver/ (pure): precheck → CP-SAT → independent checker → diagnose"]
Assistant["assistant/ (pure): 6 read-only tools + Claude tool loop"]
end
DB[("Postgres on Supabase (SQLite locally)")]
Claude["Anthropic API: Claude Haiku"]
People -->|HTTPS| Pages
Pages -->|"JSON over HTTPS"| API
API --> Solver
API --> Assistant
Assistant -->|"tool use, backend only"| Claude
API -->|SQLAlchemy| DB
| Part | Technology | Where |
|---|---|---|
| Frontend | Next.js 16 (App Router), React, TypeScript (strict), Tailwind CSS v4, SheetJS for Excel in the browser | frontend/, on Vercel |
| Backend | Python 3.14, FastAPI, SQLAlchemy, Pydantic | backend/app/, on Render |
| Timetable engine | Google OR-Tools CP-SAT, plus an independent checker and a diagnoser | backend/solver/ (pure: no web or database code) |
| Assistant | Claude Haiku with tool use, backend only | backend/assistant/ (pure) |
| Database | Postgres on Supabase (SQLite locally) | via DATABASE_URL |
flowchart LR
In["College data<br/>(days, periods, rooms, teachers,<br/>sections, subjects, who teaches what)"] --> Pre["precheck<br/>invalid codes, overloads,<br/>room shortages"]
Pre -- problems --> Explain["Plain-English reasons<br/>+ how to fix them"]
Pre -- ok --> CP["CP-SAT solver<br/>hard rules = constraints<br/>preferences = weighted penalties"]
CP -- "no solution" --> Diag["diagnose<br/>switch one rule group off at a time<br/>to find the bottleneck"]
Diag --> Explain
CP -- solution --> Chk["independent checker<br/>(shares no code with the solver)"]
Chk --> Out["Timetable<br/>Verified: 0 clashes + quality score"]
flowchart LR
Login["Sign in<br/>college code + username + password"] --> Check{"password matches?<br/>(5 wrong tries → 5-minute lock)"}
Check -- no --> Wrong["Wrong username or password"]
Check -- yes --> Role{role}
Role -- Dean --> D["Today · Setup · Timetables · Reports<br/>People & sign-ins · Changes · Approvals"]
Role -- HOD --> H["HOD page · Department<br/>(approve data, leave, cover, room requests)"]
Role -- "In-charge" --> I["Department<br/>(only their department's rows)"]
Role -- Teacher --> T["Teacher page<br/>(classes, leave, room bookings)"]
Role -- Student --> S["My timetable<br/>(their section only)"]
DATABASE_URL, ANTHROPIC_API_KEY in Render's environment only).Full details: docs/ARCHITECTURE.md has the data model (all 15 tables), every API group, what the browser stores, and step-by-step diagrams for set up → generate → publish, department review, leave and cover, room booking, and Ask the timetable. More: context.md (design and decisions), progress.md (build log), CLAUDE.md (conventions), docs/DEMO_TESTCASES.md (22 demo test cases).
# Backend: http://localhost:8000 (API docs at /docs)
cd backend
python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
cp .env.example .env
.venv/bin/python -m uvicorn app.main:app --reload --port 8000
# Frontend: http://localhost:3000
cd frontend
npm install
cp .env.local.example .env.local
npm run dev
Without DATABASE_URL, the backend uses a local SQLite file. To try the sign-ins locally, make a demo college with cd backend && .venv/bin/python seed_demo.py http://localhost:8000 and put its code in NEXT_PUBLIC_DEMO_LOGINS (see Settings).
cd backend && .venv/bin/python -m pytest -q # 97 tests: solver, checker, API, sign-in, departments, bookings, leave, assistant
cd frontend && npm run lint && npm run build
cd frontend && npx playwright install chromium && npm run e2e # 16 real-browser tests
The end-to-end tests click through the app in a real browser:
UPDATE_SCREENSHOTS=1 npm run e2e refreshes the screenshots in this README.
These are set on the live Vercel and Render projects; locally they go in frontend/.env.local and backend/.env.
| Where | Variable | Purpose |
|---|---|---|
| Vercel | NEXT_PUBLIC_API_URL | The Render URL, without a trailing /. Baked in at build time. |
| Vercel | NEXT_PUBLIC_DEMO_LOGINS | Optional. JSON {"code": "...", "logins": [{"role", "label", "username", "password"}]} to override the evaluator demo sign-ins. |
| Render | FRONTEND_ORIGINS | Comma-separated CORS origins: the Vercel URL (and http://localhost:3000 for development). |
| Render | DATABASE_URL | Supabase Session pooler URI. Unset = SQLite, which Render wipes on restart. |
| Render | SOLVER_WORKERS | CP-SAT search threads. render.yaml sets 2 for the free plan. |
| Render | ANTHROPIC_API_KEY | Optional. Turns on "Ask the timetable". |
Secrets (DATABASE_URL, ANTHROPIC_API_KEY) go only in Render's Environment page, never in the code or in a NEXT_PUBLIC_ variable.
Every push to main redeploys both Vercel and Render automatically.
backend/seed_demo.py for a fresh one.ANTHROPIC_API_KEY on the server; without it, the box is hidden.