Phone-first collaborative study platform for medical exam preparation
Exam simulator with structured review for high stakes exams. Schedule real-time QCM (multiple-choice) sessions with study partners, track your progress through detailed analytics, and optimize your exam readiness.
ActiveBoard is a BYOM (Bring Your Own Meeting) study platform where medical students organize collaborative exam prep sessions. Group members take turns as "leader"—one person presents questions while others answer in real-time under a countdown timer. Everyone sees their and chooses areas for improvement and track their score, confidence calibration, and category-level accuracy metrics.
Key insight: Most med students already study in WhatsApp groups. ActiveBoard doesn't replace those groups—it plugs into them. You bring your study group. We provide the exam tools, real-time sync, and analytics.
- Mobile-first PWA — Designed for one-handed phone use; full offline support
- Bilingual (EN/FR) — International medical exams don't wait for translation
- Real-time sync — Timer, scores, and presence via Supabase Realtime (< 1 second drift)
- Pay-per-cycle — Each member pays individually for an exam prep cycle (no group subscriptions)
- Privacy-focused — No names on wrong answers; only leader identity shared
- Analytics-driven — Heatmap, accuracy by category, confidence calibration, confidence trends
- Create or join study groups with 3–5 members
- Shareable invite codes
- Real-time presence tracking
- Schedule — Set date/time and meeting link (Zoom, Teams, etc.)
- Lobby — Wait with groupmates; meeting link prominent
- Leader launches timer — Countdown synced across all devices per question (prompt user to move to the next session)
- Everyone answers — Pick option (A–E) or leave [ ] For any other letter only and confidence radio boutton (low , medium, high)
- Leader reveals — Correct answer highlighted; group distribution shown anonymously
- Score updates — Your accuracy %, running tally
- Next question — Repeat or end session
- Activity heatmap — GitHub-style contributions (questions answered per day)
- Accuracy by category — Identify weak exam blueprint areas
- Confidence calibration — Are you overconfident? Underconfident?
- Streaks & trends — Weekly accuracy trend lines
- Browse other test takers' public cards (activity only, no session history)
- Find study partners beyond your WhatsApp circle
- Invite recruits directly to your group
Execution System for Group-Based Exam Simulation
- Create account
- Create session OR join session
| Field | Type | Options |
|---|---|---|
| Session name | Text | Optional |
| Number of questions | Integer | Required |
| Timer mode | Select | Per question / Full session / None |
| Time per question | Integer | Required if per-question |
| Total time | Integer | Required if full-session |
| Method | Description |
|---|---|
| Link invite | Shareable URL |
| Search + add | Add users directly |
When session starts:
- All users receive:
- Number of questions
- Timer configuration
- Session state synced across all users
| Field | Type | Constraint |
|---|---|---|
| Answer | MCQ (A–E) + free input | One selection only |
| Certainty level | Radio | Low / Medium / High |
- One answer per question
- One certainty level required
- No back navigation if timer active
- If per-question timer:
- Auto-advance on timeout
- If user disconnects:
- Resume at current question
- Unanswered questions:
- Not counted
- Session valid only after full submission
- Partial participation = excluded from scoring
Condition: → All users submit
Then: → Leader (Captain) unlocks review phase
| Column | Description |
|---|---|
| Question number | Index |
| Correct answer | A–E + free input |
| Answer distribution | Count per option (A–E + free) |
- Each option displays:
- Count of users who selected it
- Updates dynamically after submission
| Field | Type |
|---|---|
| Dimension of care | Dropdown |
| Activity / Vision | Dropdown |
| Error type | Dropdown |
| Comment | Text input |
- Failure to identify next step
- Misread question stem
- Attracted to trap answer
- Incomplete reading
- Pattern recognition failure
- Logical reasoning failure
- Knowledge gap
| Element | Behavior |
|---|---|
| User answer | Highlighted |
| Correct answer | Displayed |
| Incorrect answer | Greyed out |
| Error selection | Required |
| Comment input | Required |
Text placeholder adapts based on:
| Condition | Prompt |
|---|---|
| Correct + low confidence | “Why did you not trust your answer?” |
| Incorrect + high confidence | “Why were you overconfident?” |
| Incorrect + low confidence | “What knowledge or reasoning was missing?” |
A question is validated only if:
- All participants complete tagging
- All comments submitted
Then:
→ Question marked as complete
→ Progress moves forward
After each validated question:
Data updates for each user:
| Component | Update |
|---|---|
| Heatmap | +1 question attempt |
| Blueprint table | Updated (dimension × activity) |
| Error log | Error type stored |
| Comment log | Reflection stored |
| Tab | Content |
|---|---|
| Heatmap | Questions over time |
| Blueprint | 4×4 table (dimension × activity) |
| Errors & Comments | All tagged errors + reflections |
- X-axis: Days (monthly scroll)
- Y-axis: Questions completed
- Overlay:
- Correctness
- Confidence
- Calibration trend
| Axis | Description |
|---|---|
| Rows | Dimension of care |
| Columns | Activity |
Each cell:
- Tracks performance
- Aggregates results
- All past errors
- All reflections
- Filterable by type
| Rule | Effect |
|---|---|
| Incomplete answer phase | No scoring |
| Incomplete review phase | No data update |
| Full completion | Data stored |
- Server-authoritative session state
- No backtracking under timer
- All inputs required before progression
- Data only recorded for valid sessions
- Enforced flow → higher performance
- Reduced user freedom
Decision: → enforce discipline
- Only valid sessions counted
- Partial data discarded
Decision: → prioritize clean data
- Mandatory inputs increase friction
- Improves diagnostic quality
Decision: → accept friction
- Leader drives review phase
- System enforces structure
Decision: → hybrid control model
| Risk | Cause | Mitigation |
|---|---|---|
| Drop-off | High friction | UX optimization |
| Incomplete sessions | Weak enforcement | Hard gating |
| Low engagement | Poor captain | Captain system |
| Data noise | Partial entries | Validity rules |
This system is designed to:
- force decision-making under pressure
- capture reasoning, not just answers
- generate structured performance data
Not designed for:
- passive learning
- flexible workflows
- casual usage
| Layer | Tech | Purpose |
|---|---|---|
| Frontend | Next.js 14 App Router, TypeScript, Tailwind CSS | Type-safe, mobile-first UI |
| Realtime | Supabase Realtime (WebSocket) | Timer sync, presence, answer streaming |
| Backend | Supabase PostgreSQL, RLS policies | Data, auth, authorization |
| Auth | Supabase Auth (email/password, Google OAuth, magic link) | Multi-method sign-in |
| i18n | next-intl | Bilingual routing (en/fr) |
| Resend API | Session reminders, activity digests | |
| Payments | Stripe | Pay-per-cycle subscriptions |
| Analytics | PostHog | Usage tracking, feature flags |
| Errors | Sentry | Exception monitoring |
| Storage | Supabase Storage | Avatar uploads, backups |
| Hosting | Vercel | Auto-deploy on main branch, preview deploys |
| PWA | Web Push API, service workers | "Add to home screen", offline assets |
- Node.js 18+
- npm or pnpm
- Supabase account (free tier)
- Vercel account (for deployment previews)
git clone https://github.com/alexis-chifor/activeboard.git
cd activeboard
npm install