Devlog · January—August 2026

From a K-drama questionnaire to a full game platform.

How eight months of building KDrama Director also led me to create CastStride.

Read the build story 8 months · 2 products · 1 feedback loop
KDrama Director mobile lobby with the player’s studio and game navigation
The current KDrama Director lobby

In January 2026, I started building what was supposed to be a relatively straightforward K-drama questionnaire.

Eight months later, it had evolved into KDrama Director: progression maps, actors, casting, currencies, live events, minigames, localization, offline play, content tooling and a server-authoritative backend.

Somewhere in that process, creating and maintaining animated game characters became a bottleneck. So I built tools for that too.

Those tools eventually became CastStride.

The build, month by month

Every architecture change started with pressure.

13 Jan 2026

January · A small idea finds a bigger game loop

The questionnaire

I started with Kotlin Multiplatform, Compose Multiplatform, an MVVM-style architecture and a PostgREST-backed questionnaire. Then the edges kept moving. Authentication led to profiles. Questions led to battles, scoring and progression. Progression needed stars, hearts, gold, gems and consumables. Before long there were actors, casting, a Saga map, multilingual content and administration tools.

The questionnaire didn’t disappear. It became one mechanic inside a much larger game.

Repository boundaries such as SagaRepository, EconomyRepository,VitalsRepository, ProfileRepository, AuthRepositoryand ActorRepository emerged as the project grew—not as a grand plan on day one, but as pressure from the game itself.

1 Feb 2026

February · The first clue that assets would become a product

Building my own production tools

A bigger game needs much more than code: questions, translations, actors, poses, sprites, maps, backgrounds, minigame assets, metadata and progression configuration. A separate WebAdmin became a serious part of the workflow, combining React, Vite, Supabase JS, Framer Motion, Sharp, background-removal tools, Node scripts, Python utilities and AI-assisted generation and translation.

On February 1, the repository gained an Animation Viewer with drag-and-drop sprite-sheet inspection, pixel scanning, trimming and frame-consistency tools. It lived inside the KDrama Director WebAdmin at first. That was the beginning of what became Sprite Studio—and, eventually, CastStride.

Mar 2026

March · Responsive locally, reconciled remotely

Going offline-first

Mobile gameplay should not freeze because a train enters a tunnel. I introduced SQLDelight for local persistence while Supabase remained the remote backend. That sounds simple until local progress, account linking and rewards meet: data needs reconciliation, assets need fallbacks, and offline rewards cannot be trusted blindly.

This period also brought an offline Saga map, authentication and account-linking work, Cloudflare Turnstile, server reconciliation, ad-verification planning and more Kotlin Multiplatform platform work.

Compose UI
ViewModels / state
Domain & game logic
Repository interfaces
SQLDelight local database
Supabase remote backend

Sync & reconciliation connects both sides

The client remains useful without assuming the client is authoritative.
Apr 2026

April · Boundaries became an engineering feature

Breaking the monolith apart

I adopted clean-architecture principles without following a template blindly: keep the domain independent, define boundaries, make infrastructure replaceable and stop every feature from knowing about the entire application.

shared:modelshared:domainshared:datashared:ui-commonshared:battleshared:lobbyshared:mapshared:gameshared:awardsshared:accountshared:studioshared:fancafeshared:platformshared:testing

Gradle architecture checks now catch boundary drift. Fake repositories, deterministic time providers, ViewModel unit tests, UI regression tests and Compose UI tests make the modules safer to evolve. Play Asset Delivery joined the release pipeline as the game’s asset surface grew.

May 2026

May · A client cannot award itself 50,000 gems

Backend security became game design

Once a game has currencies, progression and rewards, backend security becomes part of game design. I continued moving valuable operations behind RPC guardrails, stronger Row Level Security, validated rewards and controlled backend operations.

Supabase provides PostgreSQL, PostgREST, authentication, Realtime, Storage, database functions, Edge Functions and scheduled jobs. Schema compatibility checks and live-system protections help ensure that the convenient client experience does not become the source of truth for valuable persistent state.

Jun 2026

June · Not every new scene should be a code change

Content became a pipeline

A large part of game development happens outside the executable. The WebAdmin grew workflows for question QA, translations, map templates, nodes, minigames, item assets, actor poses, avatars, casting boards, publishing and Supabase synchronization.

Author
Validate
Translate & QA
Process assets
Sync
Bundle
Verify
Release
Content moves through a repeatable release pipeline.

Instead of treating every new piece of content as a code change, I started building systems that produce and validate the content the game needs.

Jul 2026

July · The architecture became a habit, not an exception

Offline-first as the default

Offline-first networking, local assets, background synchronization, concurrency testing and reusable content bundles became normal. Actor and avatar pipelines matured alongside unlock policies, Live Wave scheduling and promotional tooling.

By now KDrama Director contained drama progression, trivia battles, actor collection, casting and synergy, avatars, awards, fan systems, minigames, Live Wave, currencies, unlock systems and multilingual content. The questionnaire was still there—now surrounded by the world it had helped create.

Aug 2026

August · From “it works” to “it is safe to ship”

Server authority and production readiness

The app stays local and offline-first where that creates resilience, while sensitive state increasingly flows through purpose-built authoritative server operations: profile preferences, owned actors, casting, progression, rewards, gameplay settlement and sessions.

Offline-first and server-authoritative don’t have to be opposites.

A responsive client can still let the backend own valuable persistent state. Production security rollout, staging validation, settlement, content synchronization, localization, release diagnostics, Google account handoff and Android release work are turning a working game into one prepared for real players.

What the questionnaire became

The source promo assets are 9:16, so they stay in their native phone format—no stretched “cinematic” crops.

KDrama Director lobby and primary game navigation
The studio lobby
KDrama Director map showing an actor duo synergy moment
Actor synergy
KDrama Director studio screen revealing a newly cast actor
Cast reveal
Current selectable node on the KDrama Director progression map
Progression

Sprite Studio → CastStride · 18 August 2026

The tool the game forced me to build.

Generating or drawing a character is only the beginning. A real game needs repeatable movement, consistent frames, transparent backgrounds, predictable alignment, correct timing, sprite sheets, metadata and a way to test everything before shipping.

1 · Source setup. Character references, movement intent and provider settings come together before a paid generation.
2 · Refine and preview. The source video sits beside a transparent sprite preview and local output controls.
3 · Track production. The board turns multiple characters and movements into a visible, trackable production queue.
4 · Shape the result. Individual frames can be reviewed and removed before rebuilding the output locally.

The working loop

Reference
Movement
Generate
Extract
Clean up
Retime
Playtest
Export

One distinction changes the economics

Pay for generation. Keep refinement local.

“I don’t want to pay for another AI generation because frame 7 needs to be removed.”

Provider-billed

  • Generate animation
  • Generate another attempt

Local operations

  • Select or remove frames
  • Adjust FPS
  • Rebuild output
  • Change sprite config
  • Playtest
  • Export

Under the hood

A TypeScript monorepo with replaceable edges.

React 19, Vite and React Router power the web app. Fastify, TypeScript and Zod power the API. Domain and application code remain independent of concrete AI providers, the filesystem, FFmpeg, Python, Supabase and image-processing infrastructure; those stay adapters.

apps/
  api
  web

packages/
  domain
  application
  adapters-local
  providers-minimax
Multiple character references
Preset & custom movements
Provider-independent prompts
MiniMax H3 + fixture provider
Frame cleanup & retiming
Sprite sheet + atlas JSON
Immutable generation history
Durable jobs & bulk queues
Keyboard playtesting
Game-pack export
Authenticated local REST API
MCP integration
Human UI / REST / MCP
Application & domain
Storage / provider / media adapters

Automation reaches the same application behavior as the UI instead of growing a second, parallel implementation.

The development profile uses JSON metadata, local files, local processing and a deterministic fixture provider. No Supabase account is required for the normal local workflow. MiniMax is bring-your-own-provider, and credentials stay on the local server—not in browser localStorage.

Build KDrama Director
Discover bottleneck
Build reusable tooling
Use it in production
Create better assets
Improve the game
Then the loop starts again
Real production use keeps both products honest.

The lesson

CastStride wasn’t created from a hypothetical product idea. It came from actually needing it while building a game.

Looking back at January is slightly surreal. I’m not building the architecture I imagined then. I’m building the architecture the product forced me to learn.

Two directions from the same build

Follow what happens next.

KDrama Director

The game I’m building—combining K-drama trivia with progression, actors, casting, live events and minigames.

Follow KDrama Director

CastStride

The local-first production tool that grew out of building the game, turning character art into repeatable, game-ready sprite animation.

Public link coming soon