All projects

Web Game

TTSLA

An interactive crossword puzzle game inspired by Katla (Indonesian Wordle). Players solve interconnected crossword grids with Katla-style letter feedback.

  • React
  • Vite
  • TypeScript
  • SCSS
  • Zustand
  • Node.js
TTSLA interface
TTSLA — interconnected crossword puzzle with Katla-style feedback.

Overview

A word puzzle game combining crossword mechanics with Katla-style color feedback.

A word puzzle game combining crossword mechanics with Katla-style color feedback. Built as a monorepo with client-server RPC-like architecture for rapid prototyping.

The game challenges players to solve interconnected crossword grids where solving one word reveals hints for others.

The problem

Crossword puzzles need interconnected logic and daily lock mechanics.

Crossword puzzles need interconnected logic where solving one word reveals hints for others, plus daily lock mechanics to prevent replay.

  • Interconnected grids require complex validation logic that spans multiple words.
  • Daily puzzles need lock mechanisms to prevent players from replaying past puzzles.
  • Traditional REST endpoints add boilerplate for game-specific procedures.

Approach

Shared procedure system with dynamic TypeScript imports as local RPC calls.

Designed a shared procedure system where the client dynamically imports TypeScript functions from the server, acting like local RPC calls. Avoided traditional REST endpoints for faster iteration.

This approach allowed game logic to be written once and shared between client and server without duplication.

Solution

Pnpm workspace packages with dynamic procedure imports and Zustand state.

Built client and server as separate pnpm workspace packages. Server exposes procedures (getRandomCrossword, validateGuess) that client imports dynamically. Zustand manages game state.

The shared procedure architecture eliminated API boilerplate while maintaining clear separation between game logic and UI rendering.

TTSLA architecture diagram
Client-server RPC-like architecture with shared procedures.

Implementation

Technical implementation.

Built with React 19 and Vite for fast development, Zustand for lightweight state management, and Node.js for the server with dynamic ESM imports.

Frontend

React 19 + Vite 7 + TypeScript + SCSS, Zustand for game state management.

Backend

Node.js server with dynamic ESM imports for shared procedure system.

Testing

Vitest for unit and integration testing of game logic.

Results

What changed.

The RPC-like architecture enabled rapid development of the crossword game with clean separation between game logic and UI.

Dailylock crossword system implemented
0API boilerplate with shared procedures
Cleanseparation of game logic and UI

Links

Let's work together

Have a problem worth solving?

Let's talk about your project, technical challenge, or next idea.

Get in touch