TutorLoom
기업·대학·교육기관을 위한 학습 플랫폼, 무료 오픈소스이며 엔터프라이즈 버전 제공
무료로 시험 중심 학습 자료·정리 노트·연습문제 제공, 주제별 정리, 비싼 코칭·분산 PDF 없이 CPA 준비 가능
Free, exam-focused study material, revision notes, and practice questions for every US CPA section — organized topic by topic. No expensive coaching. No scattered PDFs. Just CPA.
교육TypeScript · CSSGitHub @simplycpaindia-glitch온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A research-backed US CPA Exam study platform built for Indian CA students, commerce graduates, and working professionals — study material, revision notes, MCQ practice, and a real admin CMS, organized around the actual CPA Exam structure (3 Core sections + 1 Discipline).
Non-technical? See CONTENT-MANAGEMENT-GUIDE.md instead — it covers everyday editing without touching any code. For the research and content assumptions behind the seed data, see docs/RESEARCH.md.
sanitize-html before storageNote on Prisma 7: this version of Prisma moved connection configuration out of
schema.prismaand intoprisma.config.ts, and generates the client intosrc/generated/prisma(via driver adapters like@prisma/adapter-pg) instead ofnode_modules/@prisma/client. If you're used to older Prisma versions, don't be surprised by this — it's intentional, not a misconfiguration.
prisma/
schema.prisma # data model
seed.ts # seed script orchestrator
seed-data/ # seed data: subject and topic structure (far.ts, aud.ts, ...), FAQs, blog, fees...
content/ # study page + revision sheet for each topic, one file per topic
mcq-bank/ # practice questions, keyed by topic slug
check-abbreviations.ts # checks short forms are written out in full on first use (npm run content:check)
src/
app/
(site)/ # public site — homepage, /cpa/*, /blog, /faq, /login, /dashboard, ...
admin/ # staff-only CMS
api/auth/ # Auth.js route handler
components/
ui/ # design-system primitives (Button, Card, Badge, Tabs, Accordion...)
home/, practice/, discussion/, faq/, fees/, admin/, content/, auth/, site/
lib/
actions/ # Server Actions (mutations)
auth.ts, dal.ts # Auth.js config + server-side authorization helpers
prisma.ts # Prisma client singleton (driver-adapter setup)
sanitize.ts # HTML allow-list for admin-authored content
generated/prisma/ # generated Prisma Client (not checked in — see .gitignore)
proxy.ts # route protection for /admin and /dashboard (Next 16 renamed "middleware" to "proxy")
npm install
Copy .env.example to .env and fill in the values:
DATABASE_URL="postgresql://user:password@host/dbname?sslmode=require"
AUTH_SECRET="run: openssl rand -base64 32"
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
# Optional — controls the admin account created by the seed script
SEED_ADMIN_EMAIL="[email protected]"
SEED_ADMIN_PASSWORD="choose-a-real-password"
npm run db:generate # generate the Prisma Client into src/generated/prisma
npm run db:migrate # create tables (prompts for a migration name on first run)
npm run db:seed # populate subjects, topics, study material, MCQs, FAQs, blog, fees, sources
npm run dev
Visit http://localhost:3000. Log in at /login with the admin email/password from your .env (or the defaults [email protected] / ChangeMe123! if you didn't set them — change this password immediately if you seed a real environment with the defaults).
The seed script creates one ADMIN user. To promote another user to staff access, either:
npm run db:studio) to change their role field to EDITOR, MODERATOR, or ADMIN, or| Task | Command / place |
|---|---|
| Add a subject/topic, edit content, manage MCQs, moderate comments | /admin — see CONTENT-MANAGEMENT-GUIDE.md |
| Regenerate Prisma Client after a schema change | npm run db:generate |
| Create a new migration after a schema change | npm run db:migrate |
| Inspect/edit raw data | npm run db:studio |
| Re-run the seed script (safe — uses upserts) | npm run db:seed |
| Lint | npm run lint |
| Production build | npm run build |
.env.example in the Vercel project settings (DATABASE_URL, AUTH_SECRET, NEXT_PUBLIC_SITE_URL set to your production domain).npx prisma migrate deploy && npm run build. Do not run prisma migrate dev or db:seed automatically in production builds — apply migrations deliberately and seed only once per environment.Homepage, all 6 CPA sections with real topic structures, full study material + revision notes + MCQs for FAR (flagship), one fully-worked demo topic each for AUD/REG/BAR/ISC/TCP, an MCQ practice engine (server-graded, answers never sent to the client before submission), per-topic discussion/comments, FAQ + blog + CPA Radar + Fee Estimator + Indian-candidates guide, authentication with role-based admin access, a real admin CMS (subjects, topics, Study Material/Revision Notes editors with independent versioning, MCQ CRUD + CSV bulk import, blog/FAQ CRUD, comment moderation, source manager), SEO (sitemap, robots, JSON-LD), and responsive design throughout.
Tier field ready for this)ContentStatus.AI_DRAFT is ready for an AI drafting pipeline)prisma/seed-data/facts.ts + reseed, or Prisma Studio, for now)PracticeSession/MCQAttempt models and are a natural extension)