This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange
What I Built
Exam-hall app for colleges. Teachers publish papers in Sanity Studio; students join with name + 4-digit roll, write against one shared timer, auto-submit at zero. Checking happens in Sanity (submitted→checking→checked→returned, marks + feedback) — the student screen never shows scores or answers. Teachers work from a task home (Post Notice, Create Exam, Check Paper, Post Result): each paper has its own question list and submission queues, each sheet opens as plain text with one total to award, and the Result tab unlocks publishing only when every sheet is marked — now or on schedule.
Demo
Hero — one shared timer for every college, auto-submit at zero.
Exam Status — ongoing first, Math closed with its scheduled result date.
Timed paper — countdown, palette, MCQ options, autosaved.
Studio task home — teachers start from Post Notice, Create Exam, Check Paper, Post Result.
Check Paper — ended exam opened, student sheets waiting in New submissions.
New notice — scheduled window plus optional PDF attachment.
Paper workspace — one paper's questions and per-state queues, no mixed piles.
Github Repo
🔗exam-os on GitHub — Next.js + next-sanity, standalone studio sharing schemas
My Build Process
Built with OpenCode, ~25 prompts (full log in repo AGENTS.md §6). What worked: mock-first student flow, sanity exec seed scripts, standalone Studio over an embedded route. What broke: rewired imports before npm i finished (build red); Vercel's Sanity integration pointed at a different empty project while the app silently served mocks (deleted it, set envs manually); a code-reading audit caught 7 issues incl. mock-backed results pages — now results query real status=="returned" submissions. Past the Studio: custom MCQ answer-picker input, per-paper workspaces, a frozen submit-time snapshot so late edits can't corrupt sheets, submit dedupe, and the review workflow modeled as data. No App SDK, honestly — the frontend writes via Mutations API instead.
Sanity Project Details
- Project ID:
vju5fidf, datasetproduction(public read, no login) - 🔗 papers — all papers as JSON
- 🔗 judge-paper questions — note what's missing: no
correctAnswer - Schemas:
exam(datetime clocks + guarded windows) ·question(reference→exam) ·submission(4-state review, frozen snapshot, validated marks) ·announcement(scheduled + PDF)

Top comments (0)