TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
ZverTs turns any YouTube playlist into a structured course: lessons unlock in order, real watch time is tracked, and you earn streaks, XP and a certificate. Free to start.
EducationTypeScript · PLpgSQLGitHub @zerodagenciesOnlineOwner 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 ↗ZverTs is a gamified learning platform that turns YouTube playlists into structured, sequential courses. Students import playlists, progress through locked modules, track learning analytics, earn XP/gems, unlock achievements, and practise code (C, C++, Python) right next to each lesson.
| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript + Vite |
| UI | Tailwind CSS + shadcn/ui + Radix primitives |
| Data / Auth / Backend | Supabase (Postgres, Auth, RLS, RPCs, Edge Functions) |
| State | TanStack React Query |
| i18n | i18next |
| Testing | Vitest + Testing Library |
src/
components/
ui/ # shadcn/ui primitives
app/ # domain components (AppShell, player, notes, code runner, etc.)
hooks/ # useAuth, useEntitlements, useNotifications, etc.
integrations/supabase/ # typed Supabase client + generated types
lib/ # i18n, brand config, payment config, utils
pages/
admin/ # Admin sub-pages (users, payments, broadcast, etc.)
*.tsx # Route-level pages
supabase/
functions/ # Edge Functions (see below)
migrations/ # Schema, RLS, RPCs, gamification logic
| Path | Description |
|---|---|
/ | Landing page |
/auth | Sign in / sign up / password reset trigger |
/reset-password | Password reset completion |
/dashboard | Personal learning dashboard |
/courses | User courses + YouTube playlist importer |
/courses/:id | Course detail + module list management |
/learn | All user modules |
/learn/:id | Module player (video + progress + notes + code runner) |
/quiz/:id | Quiz (placeholder — MCQ backend exists) |
/growth | Growth analytics page |
/leaderboard | Leaderboard |
/profile | Public profile page |
/settings | Account settings |
/buy | Package selection page |
/payment | Payment submission form (Bkash/Nagad) |
/payments | Payment history |
/certificate/:courseId | Certificate page + PDF download |
/info/:slug | Dynamic info/content pages |
/refund-policy | Refund policy page |
/admin | Admin dashboard (admin role required) |
/admin/payments | Admin payment review |
/admin/users | Admin user management |
/admin/management | Admin role management |
/admin/broadcast | Broadcast messages to users |
/admin/support-contacts | Manage support contact info |
.env)VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_anon_key
Set these in your Supabase project dashboard under Project Settings → Edge Functions:
| Secret | Used by |
|---|---|
SUPABASE_URL | All functions |
SUPABASE_SERVICE_ROLE_KEY | All functions |
YOUTUBE_API_KEY | preview-youtube-playlist, import-youtube-playlist, search-youtube-playlists |
TELEGRAM_BOT_TOKEN | telegram-webhook, notify-admin |
TELEGRAM_ADMIN_CHAT_ID | notify-admin |
npm install
npm run dev
npm run build
| Script | Description |
|---|---|
npm run dev | Start Vite dev server |
npm run build | Production build |
npm run build:dev | Build in development mode |
npm run preview | Preview built app locally |
npm run lint | Run ESLint |
npm run test | Run tests once |
npm run test:watch | Run tests in watch mode |
Migrations in supabase/migrations define:
profiles, courses, modules, module_progressachievements, daily_challenges, XP/gems/streak logicnotes, mcq_*, certificates, attendancepackages, payment_requests, entitlements| Function | Purpose |
|---|---|
preview-youtube-playlist | Fetch playlist metadata before import |
import-youtube-playlist | Import playlist as a course with modules |
fetch-playlist-author | Resolve channel author name + URL for a course |
run-code | Fallback C/C++ runner (Wandbox, or Judge0 if configured) |
notify-admin | Send Telegram alert to admin on new payment |
telegram-webhook | Receive and handle Telegram bot webhook events |
delete-account | Permanently delete a user account and all data |
/quiz/:id is a placeholder view — the MCQ infrastructure exists in the database but the UI quiz flow is not yet implemented.