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

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: One Timeout, Two Orders: Make AI Actions Safe to Retry
One Timeout, Two Orders: Make AI Actions Safe to Retry
2026-07-25

A timed-out AI action may already have succeeded. Stable keys, durable ledgers, queues and stored results prevent a routine retry from duplicating real work.

Illustrated infographic summarizing: Your AI Visibility Dashboard Needs a Methodology, Not More Charts
Your AI Visibility Dashboard Needs a Methodology, Not More Charts
2026-07-24

A practical framework for measuring AI-search visibility with fixed prompts, repeated tests, separate metrics, retained evidence, and honest reporting.

Illustrated infographic summarizing: AI Admin APIs Are Here—But Your Directory Is Still the Source of Truth
AI Admin APIs Are Here—But Your Directory Is Still the Source of Truth
2026-07-23

New AI admin APIs can automate access and spend controls, but reliable governance still starts with authoritative directory data and clear ownership.

Illustrated infographic summarizing: OpenAI Presence Arrived—But Is Your Workflow Ready for an Agent?
OpenAI Presence Arrived—But Is Your Workflow Ready for an Agent?
2026-07-22

Before an AI agent can take on real work, its workflow needs clear scope, permissions, handoffs, evaluation cases, and production monitoring.

Illustrated infographic summarizing: Chatbot Transcripts Quietly Became a Retention and Redaction Problem
Chatbot Transcripts Quietly Became a Retention and Redaction Problem
2026-07-21

Chatbot transcripts spread across providers, logs and support tools. Here is how to map each copy, redact sensitive data and test deletion properly.

Illustrated infographic summarizing: Cloudflare Service Keys Stop in September: Find Every Caller
Cloudflare Service Keys Stop in September: Find Every Caller
2026-07-20

Cloudflare Service Keys stop working on September 30, 2026. Here is how to find every caller, move to scoped API tokens and avoid a late outage.

Illustrated infographic summarizing: Your AI Workflow Needs an Acceptance Test Before It Meets Customers
Your AI Workflow Needs an Acceptance Test Before It Meets Customers
2026-07-19

A practical way to test AI workflows using realistic scenarios, tool checks, human rubrics, regression suites, and clear release gates.

Three cover candidates for The Goats Were Load-Bearing fanned on a dark background: an ember-lit door, three slow knocks, and a founders' ledger
The Goats Were Load-Bearing: a fantasy where the bill always comes due
2026-07-19

A teaser for the upcoming darkly comic fantasy novel The Goats Were Load-Bearing — a village, a door that must stay poor, and the worst possible time to sell the herd. Readers pick the cover.

Vegan Power game: the yellow player catches falling fruit while a chicken and a cow look on
Vegan Power: The Little Game About Eating Fruit, Not Friends
2026-07-19

Vegan Power is a free browser game where you catch fruit, dodge the animals, protect seven hearts, and chase a better high score.

KotobaMon title screen: the Japanese logo コトバモン over a low-poly 3D island with monsters, cherry-blossom trees and a trainer.
KotobaMon: Shipping a 3D Browser Game With No Build Step and Self-Hosted Voice
2026-07-19

A look at fantasy.grn.dk, a browser-based 3D game that teaches Japanese with no build step, procedural art and self-hosted AI voice, and what its constraints show about shipping interactive products fast and cheap.

More articles
RSS feed

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