Inspiration
Studying can feel lonely. The night before an exam, notes are scattered everywhere, practice questions don't exist unless you write them yourself, and everyone else seems to be coping alone. [TEAM: replace this sentence with a real moment from your own experience.] We wanted a place where studying feels like play, and where every student leaves a little light for the next one.
What it does
Enchanted Grove is a study companion set in an enchanted forest. The Grove of Trials: Upload a PDF, a photo of your notes, or paste text. Gemini reads it and returns a short summary and a quiz, with an explanation for every answer. Correct answers earn Starlight Dew and build a combo multiplier. Wrong answers drift into the Mist Forest, where they come back until you master them. The Memory Tree: A glowing tree shared by every student. Click a star to read an encouraging message from another student, and "Infuse Energy" to make it shine brighter. Spend some Starlight Dew to hang your own blessing, or use Polish with Magic to let Gemini turn a plain "good luck" into poetic, enchanted prose. Forest Awakening: As your points grow, the fog retreats and the forest comes alive. Your stats show concepts mastered, blessings hung, and the energy you received. The Music Glade: Twenty calm soundscapes generated live in the browser, with no audio files at all.
How we built it
Gemini API is the core. It reads PDFs, images, and text directly (no separate OCR step) and returns structured JSON that our game logic runs on. We validate every response before it reaches the game. Node.js and Express power the back end: accounts with bcrypt-hashed passwords, httpOnly session cookies, per-account progress, the shared Memory Tree with likes, and a server-side Gemini proxy. The API key never reaches the browser. Every Gemini call goes through our server and requires login. Resilience: If Gemini is busy, the server retries automatically and can switch to a backup model. If everything fails, the app falls back to a sample quiz instead of crashing, and it tells the student. Front end: plain HTML, CSS, and JavaScript, with Canvas fireflies and the Web Audio API for music.
Challenges we ran into
Keeping our API key secret. Our first version put the key in front-end code, and GitHub's push protection blocked it. That pushed us to rebuild around a server-side proxy with login. A changing model landscape. A model name we used was retired and returned 404, and later the replacement was overloaded (503) during testing. That is why we added retries and a backup model. Merging two halves. The interface and the back end were built separately, with different assumptions. We connected them through one small integration layer instead of rewriting either side. Untrustworthy AI output. A model can return malformed JSON, so we validate everything and show readable errors when a problem is fixable, like an unsupported file type. Accomplishments that we're proud of A full loop from "upload your notes" to a game with combos, a Mist Forest, shared community blessings, and an AI that helps students encourage each other. A back end that is safer than a typical hackathon prototype: hashed passwords, a protected API key, rate limiting, and validated input. A forest that feels alive, with fireflies, aurora, generative music, and a tree that glows brighter as people support each other.
What we learned
Multimodal models remove a lot of plumbing. One API call replaced what would have been OCR, parsing, and question generation. Treat AI output like user input: validate it, and always have a fallback. Secrets belong on the server, even in a weekend project. What's next for Enchanted Grove Server-side scoring. Right now the browser reports points and the server only checks the format. We would verify answers on the server. A real database and deployment. Today, data lives in local JSON files. Moderation for blessings, possibly with Gemini. Smarter review: track which concepts a student keeps missing and generate new questions about them.
Built With
- bcrptjs
- claude
- css
- express.js
- geminiapi
- html
- java
- python
Log in or sign up for Devpost to join the conversation.