Inspiration

Most placement prep tools treat studying like a chore. You open a DSA sheet, stare at 200 problems, close the tab, and feel guilty. We kept asking why games are so easy to return to but study tools are not. Games give you a character, a streak, a reward, a sense of identity. We built a prep tool that borrows everything games do right and applies it to the most high-stakes thing a CS student does.

What it does

Nemo OS is a placement preparation OS for software engineering students. You choose your character gender, set your placement date, pick your target role, and define daily hours. The system generates a complete day-by-day roadmap across five stages with break days inserted between each. Every task completion triggers a live AI-generated MCQ via Amazon Nova Lite, unique every time and specific to that task's topic and difficulty. Answer correctly and earn diamonds. Your pixel character reflects your progress through mood states. Spend diamonds on Pokemon companions in the shop. Streaks, badges, a tier system, and four prestige stones complete the loop.

How we built it

Frontend is Next.js 14 with TypeScript and TailwindCSS. The three panel shell keeps the character panel permanently mounted, never remounting during workspace switches. This was an architectural decision enforced from day one to preserve character state continuity. Database is Supabase PostgreSQL with tables for profiles, tasks, shop items, badges, and user progress. Plan generation is fully deterministic by design. Interview prep follows predictable patterns and deterministic plans are faster and more reliable than LLM generated ones. The AI layer is a FastAPI Python backend on AWS App Runner. On task completion the frontend posts topic, difficulty, and stage to the backend which calls Amazon Nova Lite via Amazon Bedrock using boto3. Nova returns raw JSON containing the question, four options, and correct answer index. A fallback strip function handles any markdown formatting the model occasionally adds before parsing. Character sprites are 32x32 pixel art displayed with image-rendering pixelated. The displayed sprite is chosen by crossing gender with progress percentage. Shop companions use CSS absolute positioning to overlay onto the base character without needing combined sprites.

Challenges we ran into

Getting Nova Lite to return clean parseable JSON consistently required a defensive parsing layer on the backend. The model occasionally wraps responses in markdown code blocks despite explicit instructions, so we strip those before parsing to ensure the flow never breaks. IAM setup was unexpectedly complex. The root account used federated session credentials which cannot call GetSessionToken. We created a dedicated IAM user with AmazonBedrockFullAccess, generated permanent access keys, and used those in the backend environment. Keeping the shell persistent across workspaces required toggling visibility through state rather than conditional rendering, which is non-obvious in React but critical for preserving character panel identity.

Accomplishments that we're proud of

Every MCQ is genuinely unique. Same topic, same difficulty, different question every time because Nova Lite generates fresh with temperature variation. The character feels alive. Gender, mood state, companion, tier badge, stones, and streak all compose independently in real time without conflicts. The plan generation works correctly across any timeline from 10 days to a full year, distributing stages and breaks proportionally every time.

What we learned

Deterministic core systems and AI augmentation work better together than either does alone. The plan is deterministic and reliable. The MCQ is AI generated and varied. Choosing which parts to make deterministic was one of the most important product decisions we made. Prompt engineering for structured output is more about defensive parsing than perfect prompting. Always write code to handle malformed responses gracefully regardless of how clear your instructions are.

What's next for Nemo OS

Adaptive replanning is already shown as locked in the profile. Next step is wiring it to a Nova Lite call that takes current progress, remaining tasks, and days until placement and produces a realistic compressed replan. After that, Amazon Nova Sonic for a voice prep coach that receives task context and responds with spoken guidance the student can interrupt naturally. On the product side, shop expansion with outfits and themes, full Phase 2 prestige stone implementation, leaderboards, and a mobile layout are the next milestings.

Built With

  • amazon-bedrock
  • amazon-nova-lite
  • aws-app-runner
  • aws-iam
  • boto3
  • bun
  • fastapi
  • github
  • google-gemini-ai
  • google-genai-sdk
  • loom
  • next.js-14
  • postgresql
  • python
  • react
  • shadcn/ui
  • supabase
  • tailwindcss
  • typescript
  • uvicorn
  • vite
Share this project:

Updates