KotobaMon: Shipping a 3D Browser Game With No Build Step and Self-Hosted Voice

KotobaMon title screen: the Japanese logo コトバモン over a low-poly 3D island with monsters, cherry-blossom trees and a trainer.

By Greg Nowak. Last updated 2026-10-04.

KotobaMon is a small 3D game in which catching a monster means learning a Japanese word. Players explore an island, meet creatures and answer vocabulary questions during encounters. The game runs in a browser tab without an account. Its progress is saved on the player’s device.

For someone commissioning an interactive experience, the interesting part is how the game was delivered. KotobaMon uses native browser modules, a copy of Three.js kept with the project, artwork assembled in code and Japanese voice lines generated before release. It has no application backend or build step. Those choices kept a complete, playable idea within a small operating footprint, but each choice comes with a boundary worth understanding.

Build the experience around the point of the project

KotobaMon’s vocabulary questions affect a capture attempt. Spoken Japanese appears alongside Japanese writing, romaji and an English meaning, so a beginner can connect sound, spelling and meaning during play. The project case study describes five biomes, twelve species and six missions: enough material to experience the idea as a game rather than judge it from a static mock-up.

That is a useful standard for a client prototype. Identify the one interaction that must feel convincing, then give it enough content and feedback to test with real people. A larger feature list will not rescue a weak central loop. For a training game, also decide what success means: enjoyment, recall, completion or something else. KotobaMon teaches vocabulary; it does not claim to teach grammar or provide a formal assessment.

Why a build step was optional here

The game’s JavaScript is served as native ES modules, and its Three.js files live with the project. There is no bundling or transpilation stage between the files being edited and the files being deployed. For a small, controlled dependency set, that makes releases and handover simpler: a future maintainer can inspect the files the browser actually loads.

This still requires deliberate dependency management. Keep the Three.js core and any add-ons on the same version, record that version, and test upgrades. Use an import map where browser imports need package names resolved to local files. Run the project through a local web server while developing; opening the HTML directly from a file can behave differently. The current Three.js installation guide documents the no-build route while recommending npm and a build tool for most projects, especially as dependencies grow.

If the brief calls for many packages, TypeScript, automated asset processing or several developers changing the same codebase, a build pipeline may earn its upkeep. The useful question is whether that machinery solves a present delivery problem.

Make stable content once, then serve the result

KotobaMon’s terrain, trainer and monsters are assembled from simple shapes in code. That supports a consistent style without a separate 3D modelling workflow. It works well for a stylised prototype or teaching tool; detailed character art and complex animation would change the calculation.

The voice follows a similar pattern. The Japanese lines were generated using the self-hosted Kokoro-82M model, then saved as ordinary audio files. Playing the game does not trigger a text-to-speech request. For fixed dialogue, onboarding or guided tours, this makes playback predictable and allows every clip to be reviewed before publication. If text must change for each visitor, prerecorded clips will not cover that requirement.

For a production release, retain the source script and generation settings, pin the model version, check the model and voice licences, and have a qualified speaker review important pronunciation. Regenerate and version the affected clips when the script changes.

Choose storage according to what a lost save would cost

The game uses the browser’s localStorage for progress. It generally survives a normal browser restart and avoids an account flow. It does not automatically sync across devices. Private-browsing data is temporary, users can clear stored data, and browser settings can prevent writes.

That is a reasonable trade-off for personal game progress. It is a different decision for training records, customer work or anything a business must recover or report on. In those cases, plan for authenticated server-side storage. Even in a small game, handle storage failures gracefully so a player is not led to believe a session was saved when it was not.

Requirement Lean choice Reason to add infrastructure
Small, stable codebase Native modules and local dependencies Many packages, TypeScript or automated builds
Fixed narration Generate, review and serve audio files Personalised or frequently changing speech
Personal progress Browser storage Device sync, recovery or completion reports
Stylised visuals Geometry assembled in code Detailed models or complex animation
A starting decision matrix for an interactive browser project. Confirm the operational requirement before committing to the simpler option.

Static deployment still needs a release routine

Static files can produce a broken release when a browser or CDN mixes old and new versions. KotobaMon’s case study describes a stale module appearing after a partial cache purge; the project now applies a consistent version query to its imports and stylesheet.

For a similar site, give changed assets new URLs and publish them before updating the HTML that references them. Configure HTML to revalidate so visitors can discover a new release; versioned assets can be cached for longer. That follows MDN’s HTTP caching guidance. Before calling a release done, test a fresh session and a returning session, check keyboard and touch controls, play the audio, confirm a save survives reload, and open the live site once after deployment. Keep the previous release available for rollback.

Where this approach fits

A campaign experience, interactive demonstration, lightweight learning game or proof of concept can often start with this architecture. It is especially attractive when the content is mostly fixed and the central interaction matters more than accounts or reporting. If the brief already requires shared progress, sensitive records, live collaboration or frequently generated content, include those needs in the architecture from day one.

If you are shaping an interactive web project, talk to Greg about the scope and delivery choices. You can also play KotobaMon to see how these choices feel in a finished experience.

Related on GrN.dk

Need help with this kind of work?

Discuss your interactive web project Get in touch with Greg.

Sources

Latest articles

A supplier PDF can influence more than an AI summary. Follow its path to a CRM update and see where validation, tool permissions and destination controls matter.

Check whether AI shopping channels show the right product, variant, price and availability, then trace discrepancies from your catalog through to checkout.

Add approved hours from Clockify to draft invoices in Dinero. AI writes service descriptions, while fixed rules govern amounts, approvals and reruns.

A blanket AI restriction can limit search discovery. Compare Google and Bing controls, agree content permissions, and check what your CMS actually delivers.

Measure AI automation costs per accepted result, including retries and human review. Check caching, batch processing and spending controls before scaling.

A 502 after maintenance can interrupt enquiries or checkout. Trace the NGINX-to-PHP connection, diagnose the failure, and check the fix survives a restart.

Let AI customer service retrieve order status from Shopify and Shipmondo. Learn how to define the scope, verify the customer's identity and hand over cases when information is uncertain.

Move a useful AI workflow into company-controlled projects, with clear ownership, tested permissions, service accounts and a practical plan for replacing credentials.

Drupal 10 reaches end of life on 9 December 2026. Decide whether to upgrade first or combine it with a relaunch, with clear budgets, compatibility checks and launch criteria.

Before expanding internal AI search, check how permissions survive indexing, retrieval and access changes, with practical tests for staff and client boundaries.