opencompany
스스로 개선하는 AI가 사업 전체를 운영, 6명 AI 직원이 개발·디자인·회계·영업·마케팅·세무를 200개 모델로 자동화
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.