A full-stack React + Firebase peer tutoring platform where students book live 1-on-1 video sessions with fellow students who've mastered the skills they're learning.
git clone <your-repo>
cd clario
npm install- Create a project at console.firebase.google.com
- Enable Authentication β Email/Password
- Enable Cloud Firestore
- Copy
.env.exampleβ.env.localand fill in your project credentials
cp .env.example .env.local
# Edit .env.local with your Firebase valuesnpm install -g firebase-tools
firebase login
firebase deploy --only firestore:rulesnpm run devnpm run buildsrc/
βββ components/
β βββ AppShell.jsx # Shared UI components (Card, Button, Modalβ¦)
β βββ Layout.jsx # Authenticated app shell with sidebar
β βββ Sidebar.jsx # Desktop sidebar + mobile drawer + bottom nav
β βββ SkillMap.jsx # 3D interactive skill visualization (Three.js)
β βββ WebRTCCall.jsx # Peer-to-peer video call via WebRTC + Firestore
βββ context/
β βββ ToastContext.jsx # Global toast notification system
βββ pages/
β βββ Landing.jsx # Public marketing page
β βββ Login.jsx # Sign in + forgot password
β βββ Register.jsx # Sign up with role selection
β βββ StudentDashboard.jsx # Student home
β βββ TutorDashboard.jsx # Tutor home with stats
β βββ FindSkills.jsx # Browse & search tutors
β βββ TutorProfile.jsx # Public tutor profile + booking form
β βββ TutorProfileEditor.jsx# Tutor edit skills, bio, rates
β βββ TutorRequests.jsx # Incoming session requests
β βββ MySessions.jsx # Session history with filters
β βββ SessionLobby.jsx # Pre-session waiting room
β βββ SessionRoom.jsx # Live video room with timer + notes
β βββ SessionComplete.jsx # Post-session summary
β βββ RateSession.jsx # Star rating + written review
β βββ Settings.jsx # Full account management
β βββ NotFound.jsx # 404 page
βββ services/
β βββ authService.js # Firebase Auth (register, login, reset, delete)
β βββ firebase.js # Firebase app init (reads from .env.local)
β βββ sessionService.js # Session CRUD + real-time subscriptions
β βββ userService.js # User profile read/write
β βββ ratingService.js # Ratings + aggregated averages
βββ utils/
βββ skills.js # Skill list, timing options, normalizers
- Firebase credentials stored in
.env.local(not committed) -
.gitignoreexcludes all.env*files - Firestore rules: users can only read/write their own data
- Sessions readable only by participants (
participantIdsarray) - Ratings writable only by the authenticated rater
- Tutor email addresses never exposed in UI
- Account deletion requires password re-authentication
- Responsive breakpoint at 768px
- Desktop: fixed sidebar (256px)
- Mobile: hamburger β slide-in drawer + bottom navigation bar
- Touch-safe WebRTC video grid
touchAction: noneon 3D SkillMap canvas
All design tokens are in src/index.css as CSS custom properties:
| Token | Value | Use |
|---|---|---|
--navy |
#060d1b |
Page background |
--cyan |
#00e5ff |
Primary accent |
--teal |
#3fe0c5 |
Success / completed |
--coral |
#ff6b6b |
Danger / pending |
--violet |
#7c6fff |
Secondary accent |
firebase init hosting
# Set public dir to: dist
# Configure as SPA: yes
npm run build
firebase deployPoint build command to npm run build, output dir to dist. Add a rewrite rule: /* β /index.html.
Created with π for Students by Students.