Inspiration
Students are the early adopters of AI, and they should have tools that facilitate learning as much as the tools that facilitate productivity.
What it does
Praxis turns conversations with AI into scaffolded learning experiences. A learner describes an idea or requests practice; the AI returns a concise explanation, a short coding challenge, and a set of small, automated tests. The student writes code inside an embedded editor, runs tests locally in the browser, gets immediate pass/fail feedback and console logs, and receives targeted hints to move forward. The loop repeats until the challenge is solved, at which point Praxis proposes the next step or a slightly harder exercise.
How we built it
Praxis is a lightweight web app built with modern, developer-friendly tools:
Vite provides the development and build pipeline for fast iteration. React + TypeScript implements a type-safe, component-driven UI. Monaco Editor gives a full-featured in-browser coding experience. The app integrates with an LLM (via @google/genai/Gemini) to generate explanations, challenges, and test snippets. Tests and user code run locally inside a Web Worker to isolate execution from the main thread and display console output/results safely in the UI. Design decisions focused on: reliability of the feedback loop, maintaining an explicit pedagogical policy (system prompt), and keeping code execution local so tests are immediate and student data stay in the browser.
Challenges we ran into
- Test expressiveness vs. safety: We limited tests to pure boolean expressions to keep evaluation simple and secure, which constrained the kinds of exercises we could auto-generate.
- Prompt reliability: Getting large models to consistently output the exact JSON schema required careful prompt engineering and defensive parsing in the client.
Accomplishments that we're proud of
- A complete end-to-end interactive loop: from chat prompt to AI challenge to local test execution and adaptive next-step generation.
- A robust system prompt that enforces Socratic tutoring behavior and JSON-only responses, reducing noisy model outputs.
- A compact, fast developer experience (Vite + TypeScript + Monaco) that makes iterating on both pedagogy and UI rapid and pleasant.
- Local, isolated test execution with captured console logs — giving students quick, actionable feedback without sending code to remote sandboxes.
What we learned
Models are excellent at generating scaffolding and hints, but they need strict constraints to be reliable for programmatic workflows. Successful UX depends as much on engineering as on frontend polish.
What's next for Praxis
- Expand test patterns: allow slightly richer test types (e.g., time-bounded assertions, property checks) while keeping execution safe.
- Improve curriculum workflows: let instructors bundle multiple incremental challenges into lesson plans.
Built With
- gemini
- google/genai-(gemini)
- lucide-react
- monaco
- monaco-editor/react-(monaco-editor)
- node.js/npm
- react
- react-markdown
- typescript
- vite
Log in or sign up for Devpost to join the conversation.