<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suvo</title>
    <description>The latest articles on DEV Community by Suvo (@dev-444).</description>
    <link>https://dev.to/dev-444</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079693%2F61887277-b62f-4694-9652-b2632643121e.jpg</url>
      <title>DEV Community: Suvo</title>
      <link>https://dev.to/dev-444</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dev-444"/>
    <language>en</language>
    <item>
      <title>Exam Host: an exam-hall app for hosting exams in colleges</title>
      <dc:creator>Suvo</dc:creator>
      <pubDate>Fri, 02 Oct 2026 04:11:43 +0000</pubDate>
      <link>https://dev.to/dev-444/exam-host-an-exam-hall-app-for-hosting-exams-in-colleges-bca</link>
      <guid>https://dev.to/dev-444/exam-host-an-exam-hall-app-for-hosting-exams-in-colleges-bca</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path Two: Vibe-Code Something Strange&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;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 (&lt;code&gt;submitted→checking→checked→returned&lt;/code&gt;, 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://exam-os-psi.vercel.app/" rel="noopener noreferrer"&gt;Live app — General Knowledge paper always open, Math Algebra closed with 17 checkable sheets&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://exam-os-studio.sanity.studio/" rel="noopener noreferrer"&gt;Teachers Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hero — one shared timer for every college, auto-submit at zero.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftn1m1ntn1eiwyvhqhby3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftn1m1ntn1eiwyvhqhby3.png" alt="Hero — exam hosting platform powered by Sanity" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Exam Status — ongoing first, Math closed with its scheduled result date.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv7dz9ryrlvdoknqhz4kt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv7dz9ryrlvdoknqhz4kt.png" alt="Exam Status board — ongoing paper on top" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timed paper — countdown, palette, MCQ options, autosaved.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnzu16hz9bhu69vgldn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnzu16hz9bhu69vgldn9.png" alt="Timed paper — answering an MCQ" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Studio task home — teachers start from Post Notice, Create Exam, Check Paper, Post Result.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvuznwhh8gkiykwp43fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvuznwhh8gkiykwp43fz.png" alt="Studio task home — Post Notice" width="799" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Paper — ended exam opened, student sheets waiting in New submissions.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F428mk1n7mj7698o1m55p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F428mk1n7mj7698o1m55p.png" alt="Check Paper — new submissions queue" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New notice — scheduled window plus optional PDF attachment.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlvi3gbi6n8zundgsbzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlvi3gbi6n8zundgsbzp.png" alt="New notice editor" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paper workspace — one paper's questions and per-state queues, no mixed piles.&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fijxal308hlbm3rs3db8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fijxal308hlbm3rs3db8u.png" alt="Paper workspace — Math Algebra view" width="799" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Github Repo
&lt;/h2&gt;

&lt;p&gt;🔗&lt;a href="https://github.com/suvo-sos/exam-os" rel="noopener noreferrer"&gt;exam-os on GitHub — Next.js + next-sanity, standalone studio sharing schemas&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Build Process
&lt;/h2&gt;

&lt;p&gt;Built with OpenCode, ~25 prompts (full log in repo &lt;code&gt;AGENTS.md&lt;/code&gt; §6). What worked: mock-first student flow, &lt;code&gt;sanity exec&lt;/code&gt; seed scripts, standalone Studio over an embedded route. What broke: rewired imports before &lt;code&gt;npm i&lt;/code&gt; 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 &lt;code&gt;status=="returned"&lt;/code&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Project ID: &lt;code&gt;vju5fidf&lt;/code&gt;, dataset &lt;code&gt;production&lt;/code&gt; (public read, no login)&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;&lt;a href="https://vju5fidf.api.sanity.io/v2025-09-01/data/query/production?query=*%5B_type%3D%3D%22exam%22%5D%7Corder%28releaseAt%20desc%29%7Btitle%2Csubject%2CreleaseAt%2CcloseAt%2Cstatus%7D" rel="noopener noreferrer"&gt;papers&lt;/a&gt;&lt;/strong&gt; — all papers as JSON&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;&lt;a href="https://vju5fidf.api.sanity.io/v2025-09-01/data/query/production?query=*%5B_type%3D%3D%22question%22%20%26%26%20exam-%3Eslug.current%3D%3D%22judge-demo-gk%22%5D%7Corder%28number%20asc%29%7Bnumber%2Ctype%2CquestionText%2Coptions%2Cmarks%7D" rel="noopener noreferrer"&gt;judge-paper questions&lt;/a&gt;&lt;/strong&gt; — note what's missing: no &lt;code&gt;correctAnswer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Schemas: &lt;code&gt;exam&lt;/code&gt; (datetime clocks + guarded windows) · &lt;code&gt;question&lt;/code&gt; (&lt;code&gt;reference→exam&lt;/code&gt;) · &lt;code&gt;submission&lt;/code&gt; (4-state review, frozen snapshot, validated marks) · &lt;code&gt;announcement&lt;/code&gt; (scheduled + PDF)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
