Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
Tapasok은 학생 단체의 행사, QR·RFID 출석, 회비 및 공지 등을 한 곳에서 웹과 안드로이드로 관리합니다
Tapasok: events, QR and RFID attendance, dues and announcements for student organizations, in one place. On the web and on Android.
비즈니스TypeScript · C++GitHub @Recheese04온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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).