Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗School/college organization management web app (Next.js, React, TypeScript, Tailwind, PostgreSQL, Prisma).
See tapasok-web-spec-new-database.md for the specification.
tapasok_dev.
Never point this project at a production database during development.cp .env.example .env and set DATABASE_URL for the dev database.npm install (runs prisma generate).npm run db:migrate — applies migrations in prisma/migrations to the dev database.npm run db:seed (development only; creates *@tapasok.test accounts, one per role,
in a [DEMO] organization; the generated password is printed once).npm run dev, then open http://localhost:3000 and sign in.Tests: create a second empty database named tapasok_test (owned by your dev role), set TEST_DATABASE_URL in .env, then npm test. The test run applies migrations to that database and refuses to run against any database whose name does not end in _test.
Other scripts: npm run lint, npm run typecheck, npm run build, npm run db:deploy (apply existing migrations without creating new ones), npm run db:studio.
Tables: users, sessions, organizations, organization_members, organization_join_codes, audit_logs. Schema: prisma/schema.prisma.
users.system_role is SYSTEM_ADMIN or USER. Organization roles (PRESIDENT, TREASURER, OFFICER, ADVISER, MEMBER) live on organization_members, so one person can hold different roles in different organizations.ended_at. Partial unique indexes (in the init migration SQL) allow one active membership per user per organization and one active president per organization.httpOnly, sameSite=lax, secure in production, validated against the database on every request.src/lib/auth/dal.ts, src/lib/permissions). Sidebar visibility (src/config/navigation.ts) is cosmetic only./users (system admins only): search, create, edit, deactivate/activate, and reset passwords. New accounts are always regular users; there is no UI or form field that grants system admin. Deactivation and password resets delete the user's sessions. Passwords are never displayed after creation; a generated password is shown once to the admin./join always creates a MEMBER membership; redemption is atomic, so the use limit cannot be exceeded under concurrency.tapasok-full-system-structure.md)Role rules: docs/permission-matrix.md (enforced from src/lib/permissions/policy.ts). Phase status: docs/phase-status.md.
/academic (school years, semesters, active term, colleges, departments, programs; archived, never deleted), organizations with scope and an
official adviser, one User Management page for students, faculty/staff and admins, with program, year level (kept per semester), RFID UID, photo and PSGC address, CSV import with one-time account setup links.POST /api/rfid/scan), student QR self check-in (/check-in), and officer scan or manual entry; closing a session marks expected students Absent;
excuses and corrections are audited.Register a terminal under Attendance (shows its key once). The terminal sends, for each card tap:
POST /api/rfid/scan
Authorization: Bearer <device key>
{"sessionId": "<session uuid>", "cardUid": "04A1B2C3"}
The response is {"ok":true,"status":"PRESENT"|"LATE","name":"<first name>"} or {"ok":false,"code":...,"message":...}. The endpoint is tested with simulated
requests only; no physical reader has been connected. Push notifications are not implemented; notifications are in-app.
New env vars: QR_SECRET (32+ random chars), APP_URL (encoded in check-in QR codes), STORAGE_DIR, TEST_DATABASE_URL. See .env.example.
Addresses use https://psgc.gitlab.io/api/ (live check: LIVE_PSGC=1 npx vitest run tests/psgc-live.test.ts). Times are Philippine time (UTC+8).