Manage your tutoring business like a pro.
Vellor is a free, open-source Progressive Web App built for private teachers and tutors. It provides a single, beautifully designed interface to manage students, track lessons and payments, generate invoices, and stay motivated through built-in gamification โ all while keeping your data 100% private on your own device.
Getting Started ยท Features ยท Tech Stack ยท Contributing
- Why Vellor?
- Features
- Getting Started
- Usage
- Tech Stack
- Project Structure
- Available Scripts
- Testing
- CI/CD Pipeline
- Contributing
- Roadmap
- License
Most tutoring management tools are either too complex, too expensive, or require handing over your data to a third-party service. Vellor was built to solve this:
| Pain Point | Vellor's Answer |
|---|---|
| Expensive SaaS | Free & open-source โ no subscriptions, no hidden fees |
| Data privacy concerns | Privacy-first โ all data lives in your browser's encrypted localStorage. Nothing leaves your device |
| Motivation burnout | Gamified โ earn points, level up, and unlock 25+ achievements to stay motivated |
| Complex setup | Zero-config โ runs instantly in any modern browser, installable as a PWA |
Vellor has evolved into a complete operating system for private educators with 7 major capabilities:
- WhatsApp Integration โ One-click, pre-filled WhatsApp reminders for overdue payments directly from the dashboard.
- Automated Monthly Invoicing โ Generate comprehensive, multi-page PDF statements for all unpaid lessons with a single click.
- Secure Client Portals โ Generate read-only Base64 URL snapshots of a student's progress and attendance to share with parents instantly.
- Financial Forecasting โ Dynamic charts predicting your future monthly income based on scheduled lessons and active student rates.
- Smart Rescheduling โ Automatically prompts and pre-fills the make-up class scheduler whenever a student is marked as "Absent" or "Cancelled".
- White-Label Customization โ Upload your own brand logo and set a custom accent color that dynamically themes the entire UI and PDF invoices.
- Enhanced Offline Engine โ Seamlessly detects network drops with UI indicators and proactively reminds you to backup data upon reconnecting.
- Guided Onboarding Wizard โ A beautiful 4-step interactive walkthrough for new users.
- Push Notifications โ Automated local lesson reminders sent directly to your device.
- PWA Install Prompt โ Persistent prompts to install Vellor as a native app for a seamless offline experience.
- Bulk Actions โ Manage, archive, clear debts, or delete multiple students at once.
- Branded PDF Invoices & WhatsApp Share โ Generate professional invoices with one click and share them instantly.
- Progress & Grade Tracking โ Track academic performance and add progress remarks alongside payments.
- Smart Data Import Wizard โ Migrate your existing student roster seamlessly from a CSV file.
- Customizable Gamification โ Set custom rank titles and personalized achievements to stay motivated.
- Interactive Drag-and-Drop Calendar โ Schedule lessons visually by dragging students right onto the dates.
- Power-User Keyboard Shortcuts โ
Ctrl+Kfor a global command palette,Ctrl+Lfor quick lesson logging, andShift+Pfor instant quick-pay.
- Organized Profiles โ Store contact info, parent details, rates, and subjects in one place.
- Instant Search โ Filter your roster by name in real time.
- Detailed History โ View the complete lesson and payment record for each student.
- Quick Lesson Logging โ Record a lesson and payment in seconds via the floating action button.
- Payment Statuses โ Automatically categorized as
Paid,Due,Partially Paid, orOverpaid. - Dashboard Overview โ At-a-glance cards showing monthly income, unpaid fees, active students, and overdue alerts.
- Income Charts โ 6-month interactive area chart for income and student growth trends.
- CSV & PDF Export โ Export financial data to CSV for tax season, or generate professional PDF invoices.
- Calendar View โ Visualize your schedule with a color-coded calendar of all lessons and payments.
- Points System โ Earn points for adding students, logging payments, and clearing debts.
- Ranks & Levels โ Progress from Novice Tutor to Scholarly Sensei across multiple tiers.
- 25+ Achievements โ Unlock badges for milestones like your first $100 earned, a 30-day login streak, or managing 50 students.
- Monthly Goal Tracker โ Set an income target and watch your progress bar fill up in real time.
- Confetti Celebrations โ Achievement unlocks are accompanied by confetti animations ๐
- 100% Offline (PWA) โ Install directly to your device. No server, no database, no tracking.
- AES-GCM Encryption โ Data is encrypted before being saved to
localStorage, with a secure "Recovery Key" fallback. - Export & Import โ Back up your data to a JSON file and restore it anytime.
- Automated Backup Alerts โ Gentle reminders to secure your data every 14 days.
- Secure Reset โ Wipe all application data with one click.
- Dark / Light Mode โ Toggle between themes with smooth transitions.
- Responsive Layout โ Fully usable on desktop, tablet, and mobile.
- Smooth Animations โ Page transitions and micro-interactions powered by Framer Motion.
- Multi-Currency Support โ Configure your preferred currency symbol in settings.
- International Phone Input โ Country code selection with flag indicators.
| Tool | Version | Purpose |
|---|---|---|
| Node.js | โฅ 18.x (LTS recommended) |
JavaScript runtime |
| npm | โฅ 9.x (bundled with Node.js) |
Package manager |
# 1. Clone the repository
git clone https://github.com/dhaatrik/vellor.git
# 2. Navigate into the project
cd vellor
# 3. Install dependencies
npm install
# 4. Start the development server
npm run devThe app will launch at http://localhost:5173 (default Vite port). Open it in your browser and you're ready to go!
- Welcome Screen โ Enter your name, email, country, phone, and preferred currency to personalize the app, then click Get Started.
- Dashboard โ Your home base. View stats, charts, recent activity, and overdue alerts.
- Add a Student โ Click + Add Student and fill in their details: name, country, contact, parent info, subjects, and rate.
- Log a Lesson โ Click + Log Lesson (or the floating โก button) to quickly record a lesson duration and payment.
Dashboard โ Add Student โ Log Lesson โ Track Payments โ Unlock Achievements
| Action | How |
|---|---|
| Add a student | Navigate to Students โ click + Add Student โ fill the form |
| Log a lesson | Click the โก floating button โ select student โ enter duration & amount |
| View payment history | Students โ click a student card โ scroll to Transactions |
| Export data | Profile & Settings โ scroll to Data Management โ click Export Data |
| Change theme | Click the โ๏ธ/๐ icon in the top navigation bar |
| Keyboard shortcuts | Ctrl+K โ Command Palette ยท Ctrl+L โ Quick Log ยท Shift+P โ Quick Pay |
| Technology | Role | Why |
|---|---|---|
| React 19 | UI framework | Component-based architecture with hooks and concurrent features |
| TypeScript 5.7 | Language | Compile-time type safety and superior developer experience |
| Vite 6 | Build tool | Lightning-fast HMR and optimized production builds |
| Zustand 5 | State management | Lightweight, scalable store with slice-based architecture |
| Zod 4 | Validation | Schema-based runtime validation for forms and data integrity |
| React Hook Form 7 | Form handling | Performant, flexible forms with minimal re-renders |
| Tailwind CSS 3 | Styling | Utility-first CSS with PostCSS integration |
| React Router 6 | Navigation | Client-side routing with URL-based navigation |
| Framer Motion 11 | Animations | Declarative animations and page transitions |
| Radix UI | Primitives | Accessible, unstyled UI components (Dialog, Select, Accordion) |
| Recharts 3 | Charts | Composable, responsive charting for dashboards |
| jsPDF | PDF generation | Client-side PDF invoice and statement generation |
| date-fns 4 | Date utilities | Lightweight, tree-shakeable date manipulation |
| Lucide React | Icons | Beautiful, consistent open-source icon set |
| Vitest 4 | Testing | Blazing-fast unit and component testing with Jest-compatible API |
| vite-plugin-pwa | PWA support | Service worker generation and offline caching |
vellor/
โโโ .github/
โ โโโ workflows/
โ โโโ ci.yml # CI pipeline (lint โ test โ build)
โโโ components/
โ โโโ auth/ # Authentication components
โ โโโ dashboard/ # Dashboard charts & goals
โ โ โโโ DashboardCharts.tsx
โ โ โโโ DashboardGoal.tsx
โ โโโ error/ # Error boundary components
โ โโโ layout/ # App layout & navigation
โ โ โโโ AppContent.tsx
โ โ โโโ AppLayout.tsx
โ โโโ students/ # Student-specific components
โ โ โโโ CSVImportWizard.tsx # CSV data import wizard
โ โ โโโ StudentDetailView.tsx # Full student profile view
โ โ โโโ StudentForm.tsx # Add/edit student form
โ โ โโโ StudentHistoryTab.tsx # Lesson history tab
โ โ โโโ StudentListItem.tsx # Student card in roster
โ โ โโโ StudentProgressTab.tsx # Academic progress tab
โ โโโ transactions/ # Transaction-specific components
โ โ โโโ QuickLogModal.tsx # Quick lesson logging modal
โ โ โโโ TransactionForm.tsx # Full transaction form
โ โ โโโ TransactionListItem.tsx # Transaction row item
โ โ โโโ TransactionStatusBadge.tsx
โ โโโ ui/ # Reusable UI primitives (19 components)
โ โ โโโ Button.tsx, Card.tsx, Modal.tsx, Input.tsx, Select.tsx,
โ โ โ FAB.tsx, Toast.tsx, Badge.tsx, ProgressBar.tsx,
โ โ โ PhoneInput.tsx, OnboardingWizard.tsx, SearchModal.tsx,
โ โ โ StatDisplayCard.tsx, ConfirmationModal.tsx, ...
โ โ โโโ index.ts # Barrel export
โ โโโ BackupPromptModal.tsx # Backup reminder modal
โโโ helpers/
โ โโโ globalHover.ts # Global hover event utilities
โโโ hooks/
โ โโโ useKeyboardShortcuts.ts # Keyboard shortcut handler
โโโ pages/ # Route-level page components
โ โโโ DashboardPage.tsx # Main dashboard with stats & charts
โ โโโ StudentsPage.tsx # Student roster & management
โ โโโ TransactionsPage.tsx # Transaction list & filters
โ โโโ CalendarPage.tsx # Drag-and-drop calendar view
โ โโโ AchievementsPage.tsx # Gamification badges & progress
โ โโโ ProfilePage.tsx # User profile & data management
โ โโโ SettingsPage.tsx # App settings & customization
โ โโโ WelcomePage.tsx # First-time onboarding
โ โโโ PortalPage.tsx # Secure client portal view
โ โโโ TutorAdvicePage.tsx # Tutor tips & best practices
โ โโโ MarketingPage.tsx # Public marketing landing page
โโโ src/
โ โโโ crypto.ts # AES-GCM encryption utilities
โ โโโ defaultLogo.ts # Embedded default logo (Base64)
โโโ store/
โ โโโ createStudentSlice.ts # Student CRUD operations
โ โโโ createTransactionSlice.ts # Transaction & payment logic
โ โโโ createGamificationSlice.ts # Points, ranks, achievements
โ โโโ createSettingsSlice.ts # User preferences & config
โ โโโ createDataManagementSlice.ts # Import/export/reset
โ โโโ createUISlice.ts # UI state (modals, toasts)
โ โโโ validation.ts # Zod schemas for store actions
โ โโโ types.ts # Store-specific type definitions
โ โโโ tests/ # 28 test suites (see Testing)
โโโ App.tsx # Root component, layout & routing
โโโ store.ts # Zustand store composition
โโโ types.ts # Global TypeScript type definitions
โโโ constants.ts # App constants & achievement definitions
โโโ helpers.ts # Utility functions (formatting, etc.)
โโโ pdf.ts # PDF invoice generation engine
โโโ usePwaInstall.ts # PWA install prompt hook
โโโ useReminders.ts # Lesson reminder notifications hook
โโโ index.tsx # Application entry point
โโโ index.html # HTML shell with meta tags
โโโ index.css # Custom scrollbar & animation styles
โโโ vite.config.ts # Vite + PWA + Vitest configuration
โโโ vitest.setup.ts # Test environment setup
โโโ tsconfig.json # TypeScript configuration
โโโ tailwind.config.js # Tailwind CSS configuration
โโโ postcss.config.js # PostCSS configuration
โโโ CONTRIBUTING.md # Contribution guidelines
โโโ LICENSE # MIT License
โโโ package.json # Dependencies & scripts
| Command | Description |
|---|---|
npm run dev |
Start the Vite development server with HMR |
npm run build |
Create an optimized production build in dist/ |
npm run preview |
Preview the production build locally |
npm run lint |
Run TypeScript type-checking (tsc --noEmit) |
npm run test |
Run the full Vitest test suite |
Vellor has a comprehensive test suite powered by Vitest with 28 test files covering unit tests, component tests, and integration tests.
# Run the full test suite
npm run test
# Run tests in watch mode (for development)
npx vitest
# Run tests with coverage report
npx vitest run --coverageThe test suite covers:
| Category | Test Files | What's Tested |
|---|---|---|
| Store Slices | 6 suites | Student CRUD, transactions, gamification, settings, data management, UI state |
| Page Components | 5 suites | Dashboard, Students, Transactions, Welcome, and core page rendering |
| UI Components | 4 suites | Button, Card, Modal, ProgressBar variants and interactions |
| Form Components | 2 suites | StudentForm and TransactionForm validation and submission |
| Core Logic | 2 suites | Financial derivations, calculation edge cases, and store composition |
| Utilities | 4 suites | Helpers, PDF generation, crypto encryption, input validation schemas |
| Hooks | 3 suites | Keyboard shortcuts, PWA install, and lesson reminders |
| Other | 2 suites | Storage persistence, global hover utilities |
| Tool | Purpose |
|---|---|
| Vitest 4 | Test runner with Jest-compatible API |
| React Testing Library | Component rendering and user-event simulation |
| jsdom | Browser environment simulation |
| @testing-library/jest-dom | Custom DOM matchers (toBeInTheDocument, toHaveClass, etc.) |
Vellor uses GitHub Actions for continuous integration. The pipeline runs automatically on every push or pull request to the main branch.
Pipeline Steps:
Checkout โ Setup Node.js 20 โ npm ci โ Type-check (tsc) โ Test (vitest) โ Build (vite)
The workflow is defined in .github/workflows/ci.yml.
Contributions are welcome and appreciated! Whether it's a bug fix, a new feature, or a documentation improvement โ every contribution makes Vellor better.
Please read the full Contributing Guide before getting started.
- Fork the repository
- Create a feature branch
git checkout -b feature/your-feature-name
- Make your changes and ensure they pass all checks:
npm run lint && npm run test
- Commit with a descriptive message following Conventional Commits:
git commit -m "feat: add your feature description" - Push your branch
git push origin feature/your-feature-name
- Open a Pull Request on GitHub
- Follow the existing TypeScript conventions and code style.
- Ensure
npm run lintandnpm run testboth pass with zero errors. - Keep pull requests focused โ one feature or fix per PR.
- New functionality should be accompanied by relevant tests.
This project adheres to the Contributor Covenant Code of Conduct. By participating, you agree to uphold a welcoming and inclusive community.
Planned features for future releases:
- Cloud Sync โ Sync data across devices via Firebase or Supabase
- Advanced Analytics โ Trend analysis, student retention metrics, and forecasting
- Calendar View โ Visual scheduling for lessons and due dates
- PDF Invoices โ Generate professional invoices for parents
- Unit Tests โ Vitest + React Testing Library coverage (28 suites)
- PWA Support โ Install Vellor as a native-like app on mobile
- Smart CSV Imports โ Import existing student rosters seamlessly
- Browser Push Notifications โ Automated local reminders for lessons
- AES-GCM Encryption โ Client-side data encryption with recovery key
- White-Label Branding โ Custom logos and accent colors
This project is licensed under the MIT License โ you are free to use, modify, and distribute this software.
See the LICENSE file for details.
