← all projects
In progress · beta.ryoriquest.com · invite betalive

Ryōri Quest (料理クエスト)

a phone-first game for learning Japanese by cooking

  • Game Testing
  • E2E Automation
  • Mobile-first QA
  • Access Control
  • Content Moderation
  • Text-to-Speech
  • Smoke Testing
  • Observability
The title screen: Mochiyuko in her kitchen under the 料理クエスト sign, with はじめる Start, つづき Continue and せってい Settings buttons.

The title screen, sized for a phone held in one hand.

On a wide screen

What it involved

Game Testing
Playwright plays a whole dish: chapters, unlocking, stars, XP, stamps and the victory screen.
E2E Automation
Browser playthroughs run against the built game at phone and desktop sizes and fail on any page error.
Mobile-first QA
Every step is checked to fit a 390px-wide phone with no sideways scrolling.
Access Control
An invite gate in server middleware with signed cookies; tests cover typed codes, one-tap links and which paths skip it.
Content Moderation
Display names are tidied, length-checked and screened by a profanity filter before anyone else sees them.
Text-to-Speech
Mochiyuko's lines are Kokoro TTS generated on a local GPU, and a voice actor can replace any line.
Smoke Testing
After each deploy, a script checks from outside that APIs refuse visitors and a wrong code is rejected.
Observability
Game analytics, players per invite code, and a live strip of who is playing, in an admin report.

About

A cooking game for learning Japanese, played in the browser and installable to a phone's home screen. Menus are in hiragana, and each dish is a run of mini-games hosted by Mochiyuko, who talks you through it, ending in a stamp, stars and XP, with chapters that unlock in order. I built it solo, with AI tools for the code and the art. Mochiyuko's voice is generated locally with Kokoro TTS on my own GPU, and a built-in VoiceDub tool lets a voice actor record over any line from her phone; recordings stay private until an admin publishes them. Accounts and cloud saves run on Supabase, and the whole beta sits behind an invite gate checked on the server.

  • JavaScript
  • Vite
  • Playwright
  • Supabase
  • WebGL
  • Kokoro TTS
  • Vercel
  • PWA

How it's tested 5 checks

  • a new player cooks onigiri from start to stamp in a real browser

    Playwright plays the built game in Chrome at phone and desktop sizes: chapters and unlocking, a whole dish, stars, XP, the stamp and the victory screen. Mini-games are finished through a test hook that only exists on localhost, and a playthrough fails on any page error or sideways scroll.

  • the invite gate is checked on the server before any page or API is served

    Unit tests cover a typed code, a one-tap invite link, a wrong code, and exactly which paths may skip the gate. After each deploy, a smoke check confirms from outside that APIs refuse visitors without a pass and a wrong code is rejected.

  • player names are screened before anyone else can see them

    Display names are tidied and length-checked, and reserved or unfriendly names are refused through a profanity filter, each with its own unit test.

  • voice lines can be replaced by a human without a redeploy

    Generated lines ship with the game. A recorded line replaces the generated one on every device once an admin publishes it. Tests pin down the permissions: only voice contributors may record, and only admins may publish.

  • an admin kitchen report shows who is playing and where they get stuck

    Analytics events from the game, players per invite code, a live strip of who is playing right now, and each dish's step spread, so a mini-game that loses players shows up as data.