Inspiration: We wanted a STEM learning tool that actually works offline, is truly customizable, and doesn’t lock students into premade content. Many learners—especially those with unreliable internet or who need different pacing—get left out by cloud-only tools. So we set out to build an offline-first tutor where everything (courses, flashcards, skill trees, progress) lives locally and still feels modern and fast.
What it does: STEM Forge is a fully offline STEM learning platform featuring:
- AI Tutor chat, flashcards, skill trees, and a course builder you control.
- Progress tracking with XP/levels and learning games for engagement.
- All data stored locally in JSON files so it works without internet.
- A clean React frontend and a lightweight Node/Express API for flashcards, subjects, and progress.
How we built it Frontend: React + Vite app (frontend/) with a componentized UI and an API service layer. Backend: Node.js + Express server (backend/server.js) with a simple JSON-file “database” in backend/data/ for flashcards.json, subjects.json, and progress.json. API design: REST endpoints with GET/POST/PUT/DELETE for flashcards and subjects, plus progress read/update. The FastAPI framework gave us automatic docs (Swagger/OpenAPI), type validation with Pydantic, and very fast local performance. Dev DX: Shell scripts for install, start, testing, troubleshooting, and quick fixes (install.sh, start.sh, test.sh, etc.) so anyone can get running quickly.
Challenges we ran into Dependency & permission issues: npm ERESOLVE/EACCES on some machines—handled via curated scripts (quick-fix.sh, fix-permissions.sh, fix-packages.sh). Keeping it truly offline: Designing features (AI chat, flashcards, course builder, progress) to function without a cloud backend meant leaning on file-based storage and careful error handling. Simplicity vs. power: Balancing a minimal JSON store with features like reviewing stats and XP/levels required tight API contracts and clear data models.
Accomplishments that we’re proud of A complete offline learning loop: create subjects → build courses → review with flashcards → track progress—no internet required. Fast local setup: ./install.sh then ./start.sh—Frontend on 5173, API on 3001. It “just works,” and when it doesn’t, there’s a script for that. Clean separation of concerns: Frontend/Backend split with documented endpoints and a tidy folder structure for future contributors.
What we learned Offline-first changes your architecture: You think in terms of local state, durability, and conflict-free writes—JSON schemas and validation matter a lot more. Dev ergonomics pay off: Shipping with scripts, a clear README, and troubleshooting steps makes onboarding and hackathon demos much smoother. Smaller APIs are sturdier: A tight set of REST endpoints is easier to maintain and reason about, especially for file-backed storage.
What’s next for STEM Forge Local-only AI tutoring modes: Integrate an on-device LLM (e.g., via an Ollama-style runtime) so AI chat works 100% offline, with prompt templates for STEM topics. Richer course objects: Expand subjects.json/course schemas to include lessons, checkpoints, and assessments (you already have a chemistry-course.json seed to build from). Spaced repetition engine: Extend flashcard review stats into true SRS scheduling (Ebbinghaus-style intervals) stored in flashcards.json. Accessibility first: Add dyslexia-friendly fonts, color-blind-safe palettes, keyboard-only navigation, and adjustable reading levels as user prefs saved locally. Export/Import: Allow .zip exports of backend/data/ and one-click imports so learners can share courses or move devices. Pluggable mini-games: A small SDK for adding learning games per subject (physics formula drills, math quickfire, coding trace-the-output) that read/write the same progress API. Versioned data & backups: Simple snapshotting of data/ plus migrations to keep user progress safe across updates.
Built With
- css-backend:-fastapi
- for
- frontend:-react
- git/github
- html
- javascript
- progress.json)-dev-tools-&-scripts:-bash-(install
- pydantic-(validation)
- python
- start
- subjects.json
- test
- troubleshoot-scripts)-other:-rest-api
- uvicorn-data-storage:-local-json-files-(flashcards.json
- version
- vite
Log in or sign up for Devpost to join the conversation.