Skip to main content
GrN.dk

Main navigation

  • Articles
  • Cases
  • Contact
  • Your Digital Project Manager
  • About Greg Nowak
  • Services
  • Portfolio
  • Container
    • Excel Freelancer
    • Kubuntu - tips and tricks
    • Linux Apache MySQL and PHP
    • News
    • Image Gallery
User account menu
  • Log in

Join my community / free newsletter — sign up here

Breadcrumb

  1. Home
  2. Cases

A 3D browser game where every monster is a Japanese word

Client
GrN.dk — internal build
Sector
Browser games and language learning
Period
July 2026

fantasy.grn.dk ↗

KotobaMon running in a browser: the low-poly island in third person, the trainer standing on a green meadow with cherry trees and pines, two wild monsters roaming nearby and a healing pad ahead. The HUD shows the score, the current biome そうげん · Meadow and the party slot コダマ.

At a glance

fantasy.grn.dk is コトバモン KotobaMon — a 3D monster-catching game that runs in an ordinary browser tab, where every monster is a Japanese word. ヒバナ hibana is a spark, コダマ kodama is a tree spirit, and catching one is how the word gets learned. It has a procedurally generated island with five biomes, twelve species, turn-based battles with a type chart, and full Japanese voice-over subtitled in Japanese, romaji and English at the same time. There is no download, no account, no build step and no backend: the whole game is 2,821 lines of vanilla JavaScript plus a vendored copy of Three.js, served as static files.

12 species · 5 biomes · 6 missions · a 36-word quiz bank
2,821 lines of vanilla JavaScript — no bundler, no build step
31 Japanese voice lines, generated once on our own hardware

The challenge

The teaching problem came first. A vocabulary app is easy to build and easy to abandon; a game gets played. But most “learn a language” games bolt the learning on at the side — a quiz screen between levels, skippable, worth nothing. If answering correctly does not change what happens next in the game, it is decoration, and players learn to skip it.

Then the delivery constraints, which are the more interesting half for anyone commissioning software. A build like this only makes sense if it is quick to produce and effectively free to keep alive: no licensed artwork to buy, store and keep in sync; no per-character bill from a cloud voice API; no server process to patch at three in the morning; and no build toolchain that quietly stops working in two years and takes the project down with it. The monsters also had to be one hundred per cent original — this is a genre with famously well-defended trademarks.

And the audience it is actually for cannot read Japanese yet, which rules out showing only kana and equally rules out showing only English.

The solution

The game. You roam a procedurally generated island in third person — keyboard on a desktop, an on-screen joystick and A button on a phone. Five biomes (meadow, forest, lake, volcano, snowy peak) each hold their own species at their own level range. Walk into a wild monster and a turn-based battle starts, with eight elements and a type chart deciding what lands hard and what fizzles. Weaken it, throw a Kotodama Orb, and it joins the party. Six missions and a twelve-entry KotobaDex give the roaming a shape, including one deliberately elusive species — the moon rabbit ツキウサ, at a 15% base catch rate against a starter's 40%.

Learning is a move, not a screen. The vocabulary quiz is one of the actions available on the battle menu, once per fight. Get the word right and the catch chance goes up by a flat 0.25 — for scale, wearing a monster's health all the way down is worth 0.55, so a correct answer is worth about the same as taking 45% of its HP off, and it pays 25 points on top. Answering well is a genuine alternative to fighting well, which is the only way to make a learning mechanic matter. The bank is 36 words — the twelve monster names plus everyday vocabulary — asked in both directions, Japanese to English and back.

Three subtitles at once. Every spoken line shows the Japanese, the romaji reading and the English meaning simultaneously. A learner can hear the line, look at the kana, check how it is pronounced and confirm what it means without leaving the screen — the scaffolding that makes the game usable by a genuine beginner rather than only by someone who already reads Japanese.

Voice with no API bill. The 31 Japanese voice lines were generated once by a self-hosted Kokoro text-to-speech model running on the same server — a female voice for Professor Sakura, a male one for the narration — and written out as static MP3s alongside a generated manifest carrying all three subtitle rows per line. Nothing is billed per use, no text leaves the box, and there is no runtime dependency that can rate-limit or disappear. The music is generated too: the background tracks are a WebAudio step sequencer with separate roam and battle moods, so beyond the voice-over there are no audio files at all.

No build step, on purpose. Three.js 0.178 is vendored into the project and the rest is vanilla JavaScript using native ES modules — ten files, 2,821 lines. No bundler, no transpiler, no CI step to keep green: the files that are written are the files that ship, and they will still run years from now without a toolchain to resurrect. The visuals are procedural in the same spirit — terrain, monsters and trainer are all assembled from primitives in code rather than modelled in an external tool, so there are no art files to license or keep in sync. The only third-party thing loaded at runtime is the Japanese display webfont.

Cache discipline as a feature. Deploying is a file copy and a cache purge, but a CDN caches by file extension, so a half-purged deploy once served a stale module while a direct fetch of the same URL showed fresh bytes. The rule now is that every relative import and the stylesheet carry the same version query, bumped on every deploy and never reused. The version badge in the corner of the screen is derived at runtime from the loaded module's own version query — so a stale badge means a stale deploy, by design, and the game reports its own cache bugs.

Testable from the outside. An automated browser evaluates its scripts in an isolated JavaScript world where the page's own globals are invisible, but the DOM is shared. So the game exposes a small #e2e element: one attribute publishes the live game state as JSON, another accepts commands. That is what lets an unattended agent start a new game, skip the voiced intro, pick a starter, walk into a monster and check the result — the screenshot on this page was captured through that bridge.

The results

KotobaMon has been live at fantasy.grn.dk since 18 July 2026, on its own domain and certificate from the first day, and is currently at build v10.

It is also a worked example of the delivery model the rest of this portfolio describes. The whole game came off a Trello board one card at a time, each picked up by an AI agent: “Create a 3D pokemon game” was a single card, and over the following two days it was joined by cards for the music, the battle effects, a Water Gun move with mid-battle monster switching and a controls fix, further switching work, and a visible version number. Days, not weeks — and every one of those changes is traceable to the card that asked for it.

The running cost is the point. Static files behind a CDN: no database, no application server, no per-use voice bill and no secret to rotate. Progress is saved in the player's own browser, so there is no account to create and nothing about the player stored anywhere.

What it is not, it says out loud. It teaches vocabulary, not grammar; there are twelve species and one island; saves do not follow you between devices; and the procedural art is plain by choice, because plain art that ships beats commissioned art that does not. The longer write-up on the build decisions is here: Shipping a 3D browser game with no build step and self-hosted voice.

Learn their names, and you'll be learning Japanese too!

Professor Sakura, in the game's opening lines (名前を覚えれば、日本語も覚えられますよ!)
  • three.js
  • browser games
  • language learning
  • self-hosted AI
  • Custom Development
  • AI agents

Got a project that needs the same kind of hands-on delivery?

Your digital project manager

Review Greg on Google

Greg Nowak Google Reviews

 

Illustrated infographic summarizing: Drupal 12 Slipped to December. Drupal 10 Still Runs Out of Road
Drupal 12 Slipped to December. Drupal 10 Still Runs Out of Road
2026-08-07

Drupal 12 arrives as Drupal 10 support ends in December 2026. Moving to Drupal 11.3+ first keeps two mandatory upgrades manageable.

Illustrated infographic summarizing: EU OpenAI Residency Is a Migration Project, Not a Dashboard Toggle
EU OpenAI Residency Is a Migration Project, Not a Dashboard Toggle
2026-08-05

An EU-resident OpenAI API setup needs a new project, regional routing, dependency and state migration, compatibility testing, and clear governance evidence.

Illustrated infographic summarizing: AI Images Need a Chain of Custody, Not Just a Disclosure Label
AI Images Need a Chain of Custody, Not Just a Disclosure Label
2026-08-04

AI image labels are only the endpoint. Learn how to test C2PA credentials through editing, CMS, CDN and agency handoffs while preserving evidence.

Illustrated infographic summarizing: MCP Just Went Stateless: Audit the Integrations Behind Your AI Tools
MCP Just Went Stateless: Audit the Integrations Behind Your AI Tools
2026-08-03

The 28 July 2026 MCP release removes protocol sessions and changes discovery, tasks, caching, OAuth and tracing. A practical guide to auditing the move.

Illustrated infographic summarizing: SEO Trends for 2026: What Actually Changed Since 2024
SEO Trends for 2026: What Actually Changed Since 2024
2026-08-03

A practical guide to what changed in SEO between 2024 and 2026, from AI and multimodal search to Core Web Vitals, privacy and local visibility.

Illustrated infographic summarizing: INP and Green SEO Share a Backlog: Cut the Work Every Visit Repeats
INP and Green SEO Share a Backlog: Cut the Work Every Visit Repeats
2026-08-03

INP and sustainable web work often expose the same waste. Use field data, profiling, caching and performance budgets to build one practical backlog.

Illustrated infographic summarizing: AI crawler policy now has verbs: separate search, RAG, and training
AI crawler policy now has verbs: separate search, RAG, and training
2026-08-02

AI crawler rules now need separate decisions for search, RAG, and training, backed by practical testing across robots.txt, CDNs, WAFs, and CMS controls.

Illustrated infographic summarizing: WordPress Supports Old PHP; Your Production Server Shouldn’t
WordPress Supports Old PHP; Your Production Server Shouldn’t
2026-08-01

WordPress still runs on legacy PHP, but compatibility is not a security policy. Build and test your upgrade path before PHP 8.2 support ends.

Illustrated infographic summarizing: The AI-built tool your team relies on needs an owner
The AI-built tool your team relies on needs an owner
2026-07-31

AI-built internal tools can become business-critical before anyone owns them. Here is how to secure, review, monitor, and retire them without blocking useful work.

Illustrated infographic summarizing: Your AI model has an expiry date: build the migration lane now
Your AI model has an expiry date: build the migration lane now
2026-07-30

AI models retire on a schedule. Learn how to map dependencies, test replacements, release safely and preserve a working rollback route.

More articles
RSS feed

Footer

  • All articles
  • Contact

GrN.dk web platforms, web optimization, data analysis, data handling and logistics.