An adaptive Python learning platform with in-browser code execution, an AI tutor, and privacy-preserving federated learning — no installs, no setup, no server.
Every classroom has a hundred different starting lines. BridgeUp begins with a coding proficiency test, places each learner into Beginner, Intermediate, or Advanced, then teaches through an interactive course where real Python runs in the browser — no installs, no setup, no lab configuration.
It's a single-page app in plain HTML, CSS, and JavaScript — no framework, no build step, no server. Serve the folder statically and it runs.
- Features
- Architecture
- Demo Accounts
- Quick Start
- The Course
- Gamification
- How It Works
- Project Structure
- Deployment
- Roadmap
- Contributing
- Credits
- License
| Category | What you get |
|---|---|
| Adaptive Placement | 10-question diagnostic (~2 min) → personalised Beginner/Intermediate/Advanced track with per-topic breakdown |
| Real Python in the Browser | In-page scratchpad via Pyodide (WASM): 165 runnable examples, input() support, REPL echo, infinite-loop watchdog |
| Full Course | The Python Handbook — 8 chapters, 99 lessons adapted from the official Python Tutorial |
| Meaningful Completion | Chapters close only after lessons read + quiz passed (≥70%) + graded coding challenge solved |
| Gamification | XP, 5 levels (Newcomer → Pythonista), streaks, downloadable certificate with verification code |
| AI Tutor | Lesson-aware chat powered by the learner's own Gemini API key — key stays in-browser, calls Google directly |
| Federated Learning | Privacy-preserving adaptive engine: on-device struggle signals, differential-privacy noise, FedAvg aggregation — no raw data leaves the browser |
| Three Roles | Student (course + tests), Faculty (analytics + authoring), Admin (full console) |
| Faculty Tools | Peer-reviewed MCQ test editor, per-chapter materials/PDFs, class marks with CSV export |
| Offline PWA | Installable on any device, service worker caches shell + Python runtime |
| Accessible | Skip-to-content, aria-live announcements, WCAG-AA contrast, prefers-reduced-motion support |
┌───────────────────────────────────────────────────────────────────┐
│ Browser (Client) │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌─────────────────┐ │
│ │ index.html│ │ app.js │ │ runner.js │ │ adaptive.js │ │
│ │ (shell) │ │ (router, │ │ (Pyodide/ │ │ (federated │ │
│ │ │ │ views) │ │ WASM) │ │ learning, DP) │ │
│ └──────────┘ └──────────┘ └───────────┘ └────────┬────────┘ │
│ │ │ │
│ ┌─────────┴──────────┐ ┌────────┴───────┐ │
│ │ localStorage │ │ On-device │ │
│ │ (demo mode) │ │ model updates │ │
│ └────────────────────┘ └────────┬───────┘ │
└───────────────────────────────────────────────────────┼──────────┘
│
┌──────────────────────────────┴──────┐
│ Supabase (Campus Mode) │
│ ┌────────┐ ┌─────┐ ┌──────────┐ │
│ │ Auth │ │ RLS │ │ FedAvg │ │
│ │ │ │ │ │ RPC │ │
│ └────────┘ └─────┘ └──────────┘ │
└─────────────────────────────────────┘
Two modes, one codebase: leave js/config.js empty for a per-browser demo, or add a Supabase URL + anon key for campus mode with real auth, cross-device sync, and row-level security.
Open …/bridgeup/?demo=1 for instant access with a populated demo cohort (no signup needed).
| Role | Password | |
|---|---|---|
| Admin | admin@bridgeup.app |
admin123 |
| Faculty | rao@vit.ac.in |
teach123 |
| Faculty | iyer@vit.ac.in |
teach123 |
| Student | swagata@vitstudent.ac.in |
python123 |
More demo students with varied progress (all python123): aisha@, ben@, cara@ — vitstudent.ac.in.
BridgeUp must be served over HTTP (not file://) — the Python runtime and Web Crypto API require a secure context.
# 1. Clone
git clone https://github.com/gitswagata1/bridgeup.git
cd bridgeup
# 2. Serve (pick one)
python3 -m http.server 8750 # zero dependencies
npm start # same command via package.json
npx serve . # Node alternative
# 3. Open
open http://localhost:8750First run: Pyodide downloads the Python runtime (~7 s on broadband). It's cached after that.
For a real cohort (~1,000 students + 15 faculty fit in Supabase's free tier):
- Create a free Supabase project
- Run
supabase/schema.sql - Paste URL + anon key into
js/config.js
Full walkthrough: SETUP-CLOUD.md (~5 minutes).
Adapted from the official Python Tutorial, restructured into an interactive path. Each chapter ends with a quiz and a graded coding challenge.
| # | Chapter | Level | Lessons | Time |
|---|---|---|---|---|
| 1 | Introduction to Python | Beginner | 6 | ~45 min |
| 2 | More Control Flow Tools | Beginner | 19 | ~1 hr |
| 3 | Data Structures | Core | 13 | ~1.5 hrs |
| 4 | Modules | Core | 11 | ~45 min |
| 5 | Input and Output | Core | 9 | ~1 hr |
| 6 | Errors and Exceptions | Core | 11 | ~45 min |
| 7 | Classes | Advanced | 18 | ~1.5 hrs |
| 8 | A Tour of the Standard Library | Advanced | 12 | ~1 hr |
99 lessons · 269 code examples (165 runnable) · 8 quizzes · 8 graded challenges.
XP is computed from real progress — never stored, so it can't drift or be edited.
| Action | XP |
|---|---|
| Complete a lesson | +10 |
| Pass a chapter quiz (≥70%) | +25 |
| Solve a coding challenge | +50 |
| Finish the proficiency test | +20 |
Levels: 1,610 XP total — Newcomer → Learner (150) → Coder (450) → Builder (900) → Pythonista (1,400).
Streaks: Consecutive learning days with a one-day grace period and best-streak memory.
Certificate: Unlocks when every lesson, quiz, and challenge is done. A4 PDF with name, date, XP, and a deterministic verification code.
Routing. A tiny hash-free router in app.js swaps #app per view. Navigation cross-fades via the View Transitions API where available.
In-browser Python. runner.js lazy-loads Pyodide, executes each run in a fresh namespace, captures stdout/stderr, feeds student input, echoes trailing expressions, and aborts runaway loops.
Placement & progress. The diagnostic maps a score to a level in data.js; the course lives in handbook.js. Completion rolls up into student, faculty, and admin views.
Federated adaptive learning. adaptive.js records struggle signals on-device, derives per-module difficulty estimates, perturbs with DP noise, and contributes only those estimates via weighted averaging — no raw events or identity ever leave the browser. See docs/PATENT-DISCLOSURE.md.
bridgeup/
├── index.html # App shell: nav, mount point, asset includes
├── css/styles.css # Design system, responsive rules, themes, motion
├── js/
│ ├── config.js # Deployment config (empty = demo, filled = campus)
│ ├── cloud.js # Supabase adapter (auth, sync, tests, marks)
│ ├── auth.js # Accounts & roles
│ ├── data.js # Proficiency test, scoring, levels
│ ├── handbook.js # Course content: 8 chapters / 99 lessons
│ ├── runner.js # In-browser Python via Pyodide
│ ├── pdf.js # Chapter study guides + completion certificate
│ ├── adaptive.js # Federated Adaptive Learning engine
│ └── app.js # Views, routing, progress, gamification
├── manifest.webmanifest # PWA manifest
├── sw.js # Service worker (offline + runtime caching)
├── icons/ # App icons (192, 512, apple-touch)
├── supabase/schema.sql # Campus DB: tables, RLS, RPCs
├── tests/ # node:test suite
├── .github/workflows/ # CI, CodeQL, release, stale
└── docs/
├── banner.svg
└── PATENT-DISCLOSURE.md # Federated Adaptive Learning disclosure
No build step — "host the files" is the entire deploy.
| Platform | Steps |
|---|---|
| GitHub Pages | Push to main → Settings → Pages → Deploy from main / root |
| Netlify / Vercel | Import repo, no build command, publish dir = root |
| University intranet | Copy folder to any static web server |
Live at gitswagata1.github.io/bridgeup.
Demo mode: Accounts in localStorage with salted SHA-256 hashes — great for trying the product.
Campus mode: Supabase auth with real sessions, server-assigned roles, and Postgres row-level security on every table. See SETUP-CLOUD.md.
| Priority | Feature | Status |
|---|---|---|
| 🔴 High | VIT SSO sign-in & section management | Planned |
| 🟡 Medium | C and Java tracks for first-year curricula | Design phase |
| 🟡 Medium | Proctored test modes & LMS integration | Planned |
| 🟢 Active | Formal (ε, δ)-DP guarantees for federated engine | In progress |
| ✅ Done | Campus mode with Supabase | Shipped |
| ✅ Done | Federated Adaptive Learning PoC + patent disclosure | Shipped |
We welcome contributions of all kinds! See CONTRIBUTING.md for detailed setup instructions, coding standards, and the PR process.
Quick links:
- Good first issues — beginner-friendly tasks
- Feature requests — ideas we'd love help with
- Bug reports — found something? Let us know
- Course content adapted from the official Python Tutorial (PSF License)
- Pyodide — CPython compiled to WebAssembly
- jsPDF — client-side PDF generation
- Type: Inter and Space Grotesk via Google Fonts
Built for first-year students at VIT Vellore by Swagata Banerjee.
Released under the MIT License. See LICENSE for details.