Learnify is a cutting-edge, AI-powered learning platform that revolutionizes education through interactive learning experiences, personalized content generation, and intelligent tutoring systems.
- Interactive Quizzes: Dynamic quiz generation with AI-powered analysis
- PDF Chat: Engage with your documents through intelligent conversations
- Language Tutor: Advanced AI language learning assistant
- Smart Analytics: Detailed performance insights and learning recommendations
- Course Management: Create and manage structured learning content
- Learning Roadmaps: Customized learning paths for various technologies
- Resource Library: Comprehensive collection of educational materials
- Community Learning: Collaborative learning environment
- Interactive Whiteboard: Digital workspace with AI analysis
- Notebook System: Organized note-taking with smart features
- Progress Tracking: Advanced analytics and performance monitoring
- Resource Management: Efficient organization of learning materials
- Full-Page Translation: Users can translate the entire website into their preferred Indian language using the language dropdown in the navbar.
- Supported Languages: Includes Hindi, Bengali, Tamil, Telugu, Marathi, Gujarati, Kannada, Malayalam, Punjabi, Odia, Assamese, Urdu, and more.
- Dynamic Translation: All user-facing content is translated in real time using the integrated Flask translation API (Bhashini).
- Seamless UX: Language selection is persistent and applies instantly across all pages.
The project includes a robust AI fallback system to handle service disruptions and rate limiting, ensuring reliability for AI-powered features.
- Fallback AI Models: Uses GROQ as the primary service and OpenAI as fallback for quiz generation, PDF chat, and language tutor features.
- Retry Logic: Implements exponential backoff for retries (configured via
VITE_AI_RETRY_ATTEMPTS). - Circuit Breaker: Prevents repeated calls to failing services (
src/services/circuitBreaker.ts). - Graceful Degradation: Provides dynamic mock responses (
src/services/mockAI.ts) when both primary and fallback services fail. - Real-Time Monitoring: Displays AI service health (feature, provider, duration, status, error) on the admin dashboard (
/admin) using Supabase Realtime (src/components/MonitoringDashboard.tsx). - Access Control: Restricts the admin dashboard to users with the
adminrole (src/hooks/useAuth.ts).
- Contact Form: Users can send messages directly to the developer via the contact form on the website.
- Nodemailer Integration: The backend uses Nodemailer to send emails from the contact form to the developer's email address.
- Environment Variables: Email credentials and recipient addresses are securely managed using environment variables in the
.envfile: test_dev_mail_idβ SMTP sender email addresstest_dev_mail_passwordβ SMTP app password (for Gmail, use an App Password)devs_mail_idβ Developer's recipient email address- Backend API: The mailing service is exposed at
POST /api/contact(seecontact_api.cjs). The frontend form submits user data to this endpoint. - Security: Sensitive credentials are never exposed in frontend code.
- Node.js (v18 or higher)
- npm (v9 or higher)
- Docker Desktop (for local development)
- Supabase CLI (
npm install -g supabase) - Supabase account
- GROQ API key
- Bhashini API key
- Create your own Supabase project.
- Go to
Authentication β Providersin Supabase dashboard. - Enable Google and GitHub, and provide Client ID/Secret.
- Clone the repository:
git clone https://github.com/tarinagarwal/learnify.git
cd learnify- Install dependencies:
npm install npm install express cors nodemailer dotenv- Install Supabase CLI
npm i supabase --save-dev- Start Supabase Locally
npx supabase start- Create a
.envfile in the root directory:
VITE_GROQ_API_KEY=your_groq_api_key
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
TRANSLATION_BHASHINI_API_KEY=your_bhshini_api_key
test_dev_mail_id=your_gmail_address@gmail.com
test_dev_mail_password=your_gmail_app_password
devs_mail_id=developer_recipient@gmail.com- Start the local Supabase instance:
supabase start- Apply database migrations:
supabase db push- Start the development server:
npm run dev- Start the translation server:
python ./translation_api.py- Start the backend mailing API:
node contact_api.cjsFor detailed instructions on setting up and working with the database, please refer to our Contributing Guide.
Key points:
- Local development uses Docker and Supabase CLI
- Migrations are stored in
/supabase/migrations - Follow migration guidelines when making database changes
- Test all changes locally before committing
Learnify is built with modern technologies and follows best practices:
- Frontend: React with TypeScript
- Styling: Tailwind CSS with shadcn/ui components
- State Management: Zustand
- Database: Supabase
- AI Integration: GROQ API
- PDF Processing: PDF.js
- Routing: React Router
- Form Handling: React Hook Form
- Type Safety: TypeScript
- Multilingual Support: Bhashini
learnify/
βββ src/
β βββ components/ # Reusable UI components
β βββ pages/ # Page components
β βββ services/ # API and service integrations
β βββ store/ # State management
β βββ types/ # TypeScript type definitions
β βββ utils/ # Utility functions
β βββ lib/ # Shared libraries and configurations
βββ public/ # Static assets
βββ supabase/ # Supabase configuration and migrations
β βββ migrations/ # Database migration files
βββ tests/ # Test files
The project uses various configuration files:
vite.config.ts: Vite configurationtailwind.config.js: Tailwind CSS configurationtsconfig.json: TypeScript configurationeslint.config.js: ESLint configurationsupabase/config.toml: Supabase configuration
We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under the MIT License - see the LICENSE file for details.
- Supabase for the backend infrastructure
- GROQ for AI capabilities
- shadcn/ui for UI components
- All contributors who have helped shape Learnify
- Project Maintainer: Tarin Agarwal
- Project Link: https://github.com/tarinagarwal/learnify
If you find this project helpful, please consider giving it a star βοΈ