A modern web application for skill sharing and peer-to-peer learning, powered by React, TypeScript, and Supabase.
- ๐ Authentication - Secure signup/login with Supabase Auth
- ๐ค User Profiles - Customizable profiles with skills to teach and learn
- ๐ค Smart Matching - AI-powered algorithm to find complementary skill matches
- ๐ฌ Real-time Chat - Direct messaging between matched users
- ๐ Session Scheduling - Schedule and manage learning sessions
- ๐ Gamification - Earn coins, badges, and climb the leaderboard
- ๐ Community - Share posts, like, and comment with the community
- ๐ Dashboard - Track your learning journey and stats
- Node.js 16+ and npm
- A Supabase account (free tier works great!)
-
Clone and install dependencies
git clone <your-repo> cd LearnEase npm install
-
Set up Supabase database
- Go to Supabase Dashboard
- Open SQL Editor
- Copy and run
supabase/schema.sql - (Optional) Run
supabase/seed.sqlfor demo data
-
Start the dev server
npm run dev
-
Open in browser
- Navigate to http://localhost:5173
- Sign up with any email/password
- Start exploring!
- QUICKSTART.md - Get started in 5 minutes
- SUPABASE_SETUP.md - Detailed Supabase setup guide
- SUMMARY.md - Complete integration summary
- React 18 - UI library
- TypeScript - Type safety
- Vite - Build tool and dev server
- TailwindCSS - Styling
- Framer Motion - Animations
- Lucide React - Icons
- Zustand - State management
- Supabase - Backend as a Service
- Authentication
- PostgreSQL Database
- Row Level Security
- Real-time subscriptions (ready)
- Edge Functions (ready)
- Google Gemini AI - Content generation (bio, intro messages)
- Dicebear - Avatar generation
- Unsplash - Sample images
LearnEase/
โโโ src/
โ โโโ LearnEaseApp.tsx # Main application
โ โโโ supabaseClient.ts # Supabase configuration
โ โโโ supabaseApi.ts # API layer
โ โโโ Prism.tsx # Background visual effects
โ โโโ PixelBlast.tsx # Particle effects
โ โโโ main.tsx # Entry point
โโโ supabase/
โ โโโ schema.sql # Database schema
โ โโโ seed.sql # Demo data
โโโ public/ # Static assets
โโโ docs/ # Documentation
The app uses a sophisticated scoring system to find the best matches:
- Reciprocal matches (you teach what they want to learn, and vice versa) get the highest score
- Skill overlap increases match quality
- Availability is considered for scheduling
- Coins: Earn by teaching, spend on learning
- Badges: Unlock achievements for milestones
- Leaderboard: Compete with other users
- Row Level Security (RLS) ensures users only access their own data
- Passwords are securely hashed by Supabase
- API keys are protected and should be in environment variables for production
npm testnpm run buildnpm run previewCreate a .env file (see .env.example):
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_anon_key- Push your code to GitHub
- Import repository in Vercel
- Add environment variables
- Deploy!
- Build the project:
npm run build - Deploy the
distfolder - Set environment variables in Netlify dashboard
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - feel free to use this project for learning or commercial purposes!
"RLS policy violation"
- Ensure you're logged in
- Check RLS policies in Supabase dashboard
"User not found after signup"
- Verify the
handle_new_user()trigger exists - Check Supabase logs
Data not syncing
- Check browser console for errors
- Verify Supabase connection
- Check network tab for failed requests
- Check the QUICKSTART.md guide
- Review Supabase Documentation
- Open an issue on GitHub
- Real-time chat with WebSocket
- Video call integration
- Profile picture uploads
- Email notifications
- Advanced search and filters
- Mobile app (React Native)
- Recommendation engine
- Payment integration
- Multi-language support
- Supabase for the amazing backend platform
- React team for the excellent framework
- All open-source contributors
Questions or feedback? Open an issue or reach out!
Built with โค๏ธ using React, TypeScript, and Supabase import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([ globalIgnores(['dist']), { files: ['**/*.{ts,tsx}'], extends: [ // Other configs... // Enable lint rules for React reactX.configs['recommended-typescript'], // Enable lint rules for React DOM reactDom.configs.recommended, ], languageOptions: { parserOptions: { project: ['./tsconfig.node.json', './tsconfig.app.json'], tsconfigRootDir: import.meta.dirname, }, // other options... }, }, ])