⚫✨ Edura – AI-Powered Learning Platform
Table of Contents
Overview
Edura blends AI tutoring, collaborative learning spaces, and productivity tooling into a single app. Learners can generate personalized courses, stay accountable with AI study planners, focus using immersive audio/visual experiences, jump into a shared Study VR room for collaborative sessions, and sync tasks from Google Classroom while keeping all content stored securely on Supabase.
Key Features
Highlights
AI Guidance: Gemini-powered tutor, roadmap builder, and course generator deliver contextual explanations, milestones, and syllabus drafts.
Smart Planning: AI Study Planner pairs Monaco/Judge0 practice tasks with auto-generated schedules and Google Classroom imports.
Immersive Focus & VR: Pomodoro room with adaptive audio/visuals, XP rewards, streak tracking, plus a dedicated Study VR space powered by FrameVR for real-time virtual collaboration.
Knowledge Workspace: Rich notes, flashcards, quizzes, discussions, mentor chat, and study groups with multilingual translation.
Study Materials Hub: Upload and organize PDFs, notes, and references with Supabase Storage folders tied to each course.
AI Revision Kit: Generate quizzes and flashcards directly from uploaded content so students can drill tricky sections instantly.
Progress Intelligence: Track streaks, XP, subject mastery, and assignment completion in unified analytics dashboards.
Deadline-Aware Schedules: Smart suggestions prioritize upcoming deadlines, Classroom imports, and personal goals to auto-build daily plans.
Plain-Language Explanations: Ask any question and the tutor breaks concepts down into simple, student-friendly language.
Gamified Progress: XP, levels, leaderboards, analytics dashboards, and streak reminders keep learners accountable.
Accessibility & Globalization: 30+ languages, translation provider, dyslexia-friendly fonts, colorblind themes, and screen-reader friendly UI.
Platform Capabilities
Real-time analytics across courses, modules, and study sessions using Supabase + Recharts visualizations.
External integrations: Udemy/Coursera discovery, Google Classroom assignment sync, Judge0 sandbox execution, RapidAPI Deep Translate.
Secure storage with Supabase Auth + RLS, user-driven buckets for notes/audio, and Express proxy for curated course APIs.
Developer-friendly stack: TypeScript, Vite, shadcn/ui, Tailwind, Zustand, TanStack Query, Framer Motion, Monaco Editor.
Feature Deep Dive
Learning Roadmaps
Two modes:
Simple Roadmaps for fast goal-based plans.
Detailed Roadmaps with questionnaires that factor skill level, timeline, commitment, and target roles.
AI produces milestone JSON that feeds the roadmap UI, full descriptions, and progress calculators.
Focus Room
Pomodoro timers
Ambient sound player
Visualizer feedback
XP rewards & streak tracking
Break reminders
Study VR
Embedded FrameVR spaces with:
Voice/video chat
Avatars
WASD navigation
Fullscreen iframe support
Notes Workspace
Rich editor
PDF/text uploads
AI summaries, quizzes, flashcards
Tagging + search
Community & Mentorship
Discussion forums
Study groups
Mentor chat (AI-powered)
Leaderboards
AI Study Planner + Classroom Sync
Google Classroom OAuth import
Grouped assignment panels
AI-prioritized planning
Optional Supabase Edge proxy
Judge0 IDE Workspace
Monaco editor
Multi-language snippets
Inline errors
Sandbox execution via Judge0
Ambient Focus Audio
Auto-detection of local MP3 tracks
Procedural fallback audio
Audio analyzer → particle visualizer
Architecture


Technology Stack
Frontend
Framework: React 18 with TypeScript
Build Tool: Vite 7
Routing: React Router DOM 6
State Management:
Zustand (global state)
TanStack Query (server state)
UI Components:
shadcn/ui (Radix UI primitives)
Tailwind CSS (styling)
Framer Motion (animations)
Form Handling: React Hook Form with Zod validation
Charts: Recharts
Backend
Database: Supabase (PostgreSQL)
Authentication: Supabase Auth
Storage: Supabase Storage
API: Express.js server for external course fetching
AI Services:
Google Gemini AI (chat, summaries, flashcards, quizzes, roadmaps)
RapidAPI Deep Translate (multi-language support)
Project Structure
Database Schema
The application uses Supabase (PostgreSQL) with the following main tables:
Core Tables
users: User profiles (extends Supabase auth.users)
XP, level, streak tracking
Linked to auth.users via UUID
courses: Course metadata
Title, description, level, category
Multi-language support (JSONB)
Published status
modules: Course modules
Content (JSONB) with text, video, code blocks
Flashcards, practice tasks, quizzes
IDE tasks for programming courses
Time estimates
user_course_progress: Progress tracking
Completed modules count
Progress percentage
Quiz scores (JSONB)
Last accessed timestamp
notes: User notes
Title, content, summary
File attachments (Supabase Storage)
AI-generated summaries
roadmaps: Learning roadmaps
Goal description
Milestones (JSONB array)
Progress percentage
study_sessions: Focus room sessions
Duration, XP earned
Mode (focus/break)
Security
Row Level Security (RLS) enabled on all tables
Policies ensure users can only access their own data
Public courses are viewable by all authenticated users
API Architecture
Frontend API Layer
Supabase Client: Direct database access via Supabase JS SDK
Service Layer: Business logic abstraction in
src/services/React Query: Caching and state management for server data
Backend API (Express Server)
Port: 3001
Endpoints:
GET /api/courses/external- Fetch external courses (Udemy/Coursera)GET /health- Health check
External APIs
Google Gemini AI:
Chat responses
Content summarization
Quiz/flashcard generation
Roadmap generation
RapidAPI Deep Translate:
Text translation
Multi-language support
Translation caching
State Management
Zustand Stores
userStore: Authentication state, user profile
themeStore: Theme preferences, accessibility settings, language
React Query
Server state caching
Automatic refetching
Optimistic updates
Routing
Protected routes require authentication:
/dashboard- User dashboard/courses- Course browser/courses/:courseId- Course detail/ai-bot- AI chat/roadmap- Learning roadmaps/notes- Notes management/focus- Focus room/study-planner- AI planner with Classroom imports/study-vr- Virtual reality collaboration room/community- Community features/analytics- Analytics/settings- Settings*- NotFound fallback
Public routes:
/- Landing page/login- Login/register- Registration
Getting Started
Prerequisites
Node.js 18+ and npm
A Supabase account (free tier works)
Google Gemini API key
RapidAPI account (for translation features and hosted Judge0 access, optional)
Google Cloud project with the Classroom API enabled (for Google Classroom import)
Judge0 sandbox (self-hosted container or RapidAPI Judge0 CE plan) for the IDE
Installation
Clone the repository
Install dependencies
Set up environment variables
Create a
.envfile in the root directory:Set up Supabase
Create a new project at supabase.com
Go to SQL Editor and run
supabase-schema.sqlGet your credentials from Project Settings → API
Update
.envwith your Supabase URL and anon key
Get API Keys
Gemini API: Get from Google AI Studio
RapidAPI: Get from RapidAPI Hub (subscribe to Deep Translate API)
Configure Google Classroom OAuth
Enable the Google Classroom API in Google Cloud Console
Create an OAuth 2.0 Web Client with origin
http://localhost:8080(or your deployed domain)Add the scopes used by this app (courses.readonly, coursework.me, userinfo.email/profile)
Paste the generated client ID into
VITE_GOOGLE_CLIENT_ID(Optional) Deploy a Supabase Edge Function and set
VITE_CLASSROOM_PROXY_URLif you prefer proxying Classroom requests through your backend
Optional: Add custom ambient audio
Drop your
.mp3ambience files intopublic/audioSupported filenames:
rain.mp3,forest.mp3,cafe.mp3,white-noise.mp3,ocean.mp3,space.mp3The Focus Room will automatically detect these; if a file is missing it falls back to generated audio
Run the development servers
Open the application
Navigate to
http://localhost:8080
Security
Environment Variables: All API keys stored in
.env(not committed)Row Level Security: Database-level security via Supabase RLS
Authentication: Supabase Auth with JWT tokens
Protected Routes: Client-side route protection
API Key Validation: Server-side validation for external APIs
Development
Available Scripts
npm run dev- Start frontend dev servernpm run dev:server- Start backend servernpm run dev:all- Run both servers concurrentlynpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
Code Style
TypeScript for type safety
ESLint for code quality
Prettier (via ESLint) for formatting
Component-based architecture
Dependencies
Core Dependencies
react&react-dom- UI frameworkreact-router-dom- Routing@supabase/supabase-js- Database & auth@google/genai- Gemini AIzustand- State management@tanstack/react-query- Server stateframer-motion- Animationstailwindcss- Styling
UI Components
@radix-ui/*- Accessible UI primitivesshadcn/ui- Component librarylucide-react- Iconsrecharts- Charts
Deployment
Frontend (Vite)
Build:
npm run buildOutput:
dist/directoryDeploy to: Vercel, Netlify, or any static host
Backend (Express)
Deploy to: Railway, Render, or any Node.js host
Set environment variables in hosting platform
Environment Variables
Ensure all environment variables are set in your hosting platform:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_GEMINI_API_KEYVITE_GEMINI_MODELVITE_RAPIDAPI_KEYVITE_GOOGLE_CLIENT_IDVITE_CLASSROOM_PROXY_URL(if using Supabase Edge proxy)VITE_JUDGE0_URLVITE_JUDGE0_HOST(if required)VITE_JUDGE0_KEY(if required)VITE_API_URL(if the Express server runs on a different host)
Contributing
Fork the repository
Create a feature branch
Make your changes
Test thoroughly
Submit a pull request
License
This project is licensed under the MIT License.
Support
For issues and questions:
Check the browser console for errors
Verify environment variables are set correctly
Check Supabase logs (Dashboard → Logs)
Review the SETUP.md guide
Roadmap
Acknowledgments
Built with Vite
UI components from shadcn/ui
Database powered by Supabase
AI powered by Google Gemini
Virtual reality environment powered by FrameVR
Note: Make sure to never commit your .env file. The .env file is already in .gitignore for security.
Last updated