A professional, minimal, and secure end-to-end platform for coaching institutes: attendance integrity, live classes, academic workflows, and parent communication in one system.
PCM is built to solve proxy attendance, fragmented communication, and disconnected live-class operations in coaching institutes.
It combines:
- Mobile workflows for students, parents, and admins
- Web classroom and conversion website
- Secure backend APIs with role-based controls
- Real-time live streaming via LiveKit
The result is a single operational stack for attendance + communication + academics + live delivery.
- GPS Geofencing: Attendance can only be marked within a 30-50m radius of the coaching premises.
- Anti-Proxy Facial Recognition: Uses open-source face embedding models (FaceNet) to verify student identity during attendance.
- Time Windows: Attendance is only allowed during specific institute hours.
- Parent Notifications: Automated push notifications sent to parents if a student is absent after the cutoff time.
- Admin Reminders: Instant or scheduled notifications to specific batches or individual students.
- Holiday Management: Automated blocking of attendance on declared holidays.
- Quizzes & Tests: Create and attempt quizzes with time limits and auto-submission.
- Study Materials: Secure access to PDFs, notes, and question sheets uploaded by tutors.
- Low-Latency Classroom Streaming: Teacher-to-student live classes powered by LiveKit (WebRTC SFU).
- Role-Based Access: Only teachers can publish; students join as subscribers.
- Class Lifecycle Controls: Start, join, and end controls with secure token issuance from backend.
- Live Session UX: Connection state, participant count, reconnect handling, and teacher presence indicators.
- Admin Dashboard: Date-wise attendance overview with present/absent summary.
- Student Lifecycle Controls: Status-based controls (active/paused/left) and attendance enable/disable.
- Attendance Overrides: Manual admin marking with reason and audit fields.
- Calendar Visibility: Student/parent/admin attendance calendars with status context.
- Framework: React Native (Expo)
- Animation: Lottie (for premium splash & micro-interactions), Reanimated
- Styling: Minimalist Design System (Beige & Green palette)
- Framework: Next.js (App Router)
- Animation: Framer Motion
- Use Cases: Landing page, pricing conversion, course discovery, and live class web classroom
- Platform: Supabase (Postgres, Auth, Storage, Edge Functions)
- API Layer: Node.js (Business logic & Attendance processing)
- Biometrics: Python-based Face Recognition Service (processing embeddings only)
- Live Streaming: Self-hosted LiveKit (WebRTC SFU) for one-to-many classroom broadcasting
This project follows a Monorepo architecture to keep the mobile app, backend, and shared logic in one place.
pcm-v2/
├── apps/
│ ├── mobile/ # React Native Expo App
│ ├── website/ # Next.js Web App (courses + live classes)
│ └── backend/ # Node.js API Server
├── services/
│ └── face-recognition/ # Python Face Embedding Service
├── packages/
│ └── shared/ # Common types, constants, and utils
├── docs/ # Detailed API and setup documentation
└── README.md
The app follows a Premium Minimalist aesthetic to ensure ease of use for parents and teachers alike:
- Palette: Warm Beige (
#F5F1EA), Soft Green (#4CAF50), Charcoal (#2D2926) - Experience: Fluid glassmorphism, organic animations, and pill-shaped UI elements for a modern feel.
- No Raw Biometrics: We do not store raw photos of students. Only mathematical embeddings are stored and compared for verification.
- Role-Based Access (RLS): Supabase Row Level Security ensures students and parents only access data relevant to them.
-
Clone the Repository
git clone https://github.com/aashwani106/pcm.git cd pcm -
Install Dependencies (Monorepo Root)
npm install
-
Setup Backend
npm --workspace apps/backend run dev
-
Setup Mobile App
npm --workspace apps/mobile run start
-
Setup Website
npm --workspace apps/website run dev
-
Environment Variables Create required
.envfiles (mobile/backend/website).
Example forapps/mobile/.env:EXPO_PUBLIC_SUPABASE_URL=your_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_key
Example for
apps/backend/.env(partial):SUPABASE_URL=your_url SUPABASE_SERVICE_ROLE_KEY=your_service_role_key LIVEKIT_API_KEY=your_livekit_key LIVEKIT_API_SECRET=your_livekit_secret LIVEKIT_URL=ws://localhost:7880
For more detailed technical information, refer to:
- Requirements
- High-Level Design
- Project Structure
- Streaming Architecture
- Streaming Flow
- Streaming Roles
- Streaming Infrastructure
Development-only accounts used for local live-class testing:
- Student:
studentnew@gmail.com/student - Teacher:
teacher@gmail.com/test@teacher
Use these only in local/dev environments. Rotate or remove before any shared/staging/production use.