DEV Community

Tanay Dwivedi
Tanay Dwivedi

Posted on AI-assisted

🚀 MoneyVerse: a financial literacy game for kids.

Sanity Challenge Path Two Submission

This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange

🎮 What I Built

I built MoneyVerse, a financial-literacy game for kids aged 8–12. Pip, a piggy-bank guide, walks players through three missions:

  • 🛍️ Needs vs. Wants: A 24-coin outing budget with trade-offs and opportunity cost.
  • 🐷 Savings Quest: A jar that starts at 100 coins and aims for a 150-coin bicycle, with a simple-interest example.
  • 🍋 Lemonade Stand: Supply costs, pricing, and profit = revenue − expenses.

🛠️ Tech Stack

  • Frontend: Next.js framework (App Router) with React 19 and TypeScript, Tailwind CSS.
  • CMS: Sanity v6, with the Studio embedded at /studio. It uses next-sanity, @sanity/client, GROQ queries, and defineLive for live content updates.
  • Persistence: There are no accounts. Progress is saved in the player's own browser with localStorageand it will reset if browsing history or browser cache is deleted.

🎨 Studio Customization

  • Schemas for lesson and mission, plus the reusable objects they are built from (steps, choices, quiz questions, rewards).
  • A review workflow on both lessons and missions with draft, inReview, and approved states, and the document actions "Send for review" and "Approve".
  • A custom CoinField input.
  • A mission Play preview inside the Studio.

🌐 Demo

Link: https://money-verse-orpin.vercel.app/

Repo link: https://github.com/tanay9098/Money_verse

Screenshot of my app

🔨 My Build Process

📅 30th September – 1st October: I started by learning the basics of Sanity Studio through Sanity Learn.

I used ChatGPT to get an idea for the project, and I came across the idea of building MoneyVerse.

I initialized the original MVP using Cursor AI. Later, I started using Claude Code for the rest of the code, as I had consumed 90% of my limits in Cursor 💀.

Cursor Handoff to Claude Code

I summarized the chat prompt from the Cursor implementation and later handed it off to Claude Code.

📅 2nd October: 2nd October was my birthday, so I didn't do any work. 🎂

📅 3rd–4th October: This is where I pushed the majority of the commits 💀.

My initial version was a PWA with a fully working Google sign-in and cloud save of progress to Sanity. Later I removed those features (sign-in, cloud save, and PWA) to cut technical complexity and submit this blog on time. The shipped game is guest-only, and progress lives in localStorage.

Removal of Auth and PWA Features

I prompted the AI agent to build the game, schemas, GROQ queries, and Studio, with a demo-content fallback for local development.

📅 5th October: I first assumed the deadline was 4th October, 12:30 PM Indian Standard Time, so I published a very unpolished first version of this blog in time. Later I realized the deadline is actually 5th October, 12:30 PM IST, so I unpublished the initial post and utilize the extra time to polish this post and the project.

Polishing the app and blog

🔍 Making Sanity Essential to the Game

The critique: I noticed that the game didn't really depend on Sanity. So, I added a review workflow (reviewStatus, "Send for review" / "Approve") to both lessons and missions.

In the deployed site, the demo-content fallback is switched off. The game loads only published, approved content from Sanity. If an editor hasn't approved and published a mission, players can't see it. The demo content is only a fallback for local development.

⚡ Live Content

defineLive lets published missions appear without a redeploy.

🗂️ Sanity Project Details

  • Content types: lesson and mission, plus a review workflow (reviewStatus and reviewerNote) on both.
  • Delivery: GROQ queries filtered to reviewStatus == "approved", using the published perspective, with live updates via defineLive.
  • Setup: Project ID, production dataset, a CORS origin, and npm run seed:sanity.

A few lessons were created by Claude, which I pushed to Sanity by running npm run seed:sanity locally on my machine, using an Editor-level write token kept in .env.local.

I also created an additional lesson, "Comparing Before You Buy," by manually entering everything into the Studio, as suggested by Claude, to see if it worked.

Studio Schema Structure Overview and Changes

🔗 Sanity Project

🤖 Agent Sessions

Thanks for reading :)

Top comments (1)

⭐ Must Read: tanay dwivedi/moneyverse a financial literacy game for kids m - ประเด็นร้อน
 
technogamerz profile image
𝐓𝐡𝐞 𝐋𝐚𝐳𝐲 𝐆𝐢𝐫𝐥 •

Cute 😍