TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Study resources and previous exams for Computer Science, Faculty of Science, Lebanese University.
EducationTypeScript · JavaScriptGitHub @hadi-chebboOnlineOwner 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 ↗Study platform for Computer Science students of the Faculty of Science, Lebanese University (Hadath).
See CLAUDE.md for product context, scope and engineering rules.
See docs/dependencies.md for what each dependency is and why the project has it.
cp .env.example .env
docker compose up -d --wait # Postgres on localhost:5432
npm install
npm run db:migrate
npm run dev # http://localhost:3000
Check it works: open http://localhost:3000 and http://localhost:3000/api/health
(expects {"status":"ok","database":"up"}).
npm run lint
npm run typecheck
npm test # unit tests (Vitest)
npm run test:e2e # browser smoke tests (Playwright); needs the database running
First time only: npx playwright install chromium.
npm run db:migration:create -- add-courses # new file in db/migrations
npm run db:migrate
npm run db:migrate:undo # reverts the last migration
npm run db:migrate:status
Every schema change is a migration. Migrations are plain CommonJS files in db/migrations,
and each must implement a working down. Set DATABASE_SSL=true for hosted databases such as Neon.
Create a separate, gitignored file .env.neon next to .env, once, with two lines:
DATABASE_URL=<Neon direct connection string, not the "-pooler" one>
DATABASE_SSL=true
Then look first, and migrate:
npm run db:migrate:status:neon
npm run db:migrate:neon
These scripts read only .env.neon, never .env, and fail immediately if the file is missing.
.env.production or .env.local: Next.js loads those automatically.export DATABASE_URL in your terminal. A variable already set in the shell takes
precedence over any env file, so both the local and the Neon scripts would use it.npm run db:seed # runs all seeders; safe to run repeatedly
npm run db:seed:undo # removes what the seeders created
SEED_DEMO_DATA=true (in .env) enables the fake demo courses, resources and demo student
([email protected]). Local development only; never set it in production..storage locally, or into the R2 bucket when STORAGE_DRIVER=r2. npm run db:seed:undo
deletes them again. Needs Node 22.18+. Set STORAGE_DRIVER=local to keep seeding off R2.ADMIN_EMAIL and ADMIN_PASSWORD (12+ characters)
when running npm run db:seed. Running it again with the same email updates the password.npm test needs Docker Postgres running (docker compose up -d --wait). It uses a separate
database (TEST_DATABASE_URL, name must end in _test), created and migrated automatically,
so development data is never touched.
All configuration comes from environment variables, validated at startup in src/lib/env.ts.
See .env.example. Never commit .env.