Skip to content
After hours

Web and phone game · farming and fishing

In development

Conuco

A Caribbean farming, fishing and town-restoration game for web and phone, written Spanish first.

Fig. 1 The renderer boundary and the save path
  1. Game core, no renderer

    • src/core
    • src/state
    • src/systems
    • src/data
    14 systems Farming, fishing, cooking, weather, festivals and more. Content is data: 12 crops, 9 fish, 8 recipes, 6 characters.
    Saved randomness The mulberry32 state is saved with the game, so a reload continues the same stream.

    126 tests in Vitest run this core without drawing a frame.

  2. Reads the state src/render The only folder that imports PixiJS. It draws the world from the game state, so the art can change without touching the rules.

Saving and loading

  1. Autosave Runs when the app goes to the background.
  2. src/save/save.ts Moves the previous save to the backup slot, then writes the new save with its version.
  3. src/save/migrations.ts On load, a corrupt main save falls back to the backup. Old saves migrate one version at a time; new fields get defaults from a fresh game.
Role
Solo: design and code
Timeline
Jul 2026 to now
Stack
TypeScript, PixiJS, Vite, Vitest, Capacitor

In development. The code is private. I can walk you through it on a call. Status checked Oct 15, 2026.

By the numbers

126

tests in 24 files, all on the game core

194

keys per language, English and Spanish

41

Dominican terms kept the same in both languages

The idea

Conuco is a farming, fishing and town-restoration game set on the Caribbean coast, written Spanish first. You plant, fish, cook and help bring a coastal pueblo back: the colmado stays open, festivals come back, and a resort developer wants to buy the coast.

What I built

PixiJS draws the world, and no file outside src/render imports it, so systems such as the end of a day run headless in Vitest. Content is data: 12 crops, 9 fish, 8 recipes, 6 characters, 4 town projects, 2 festivals and 12 achievements.

Randomness comes from a mulberry32 generator whose state is saved with the game, so a reload continues the same stream. Saves carry a version, migrate forward one step at a time, fill new fields with defaults, and keep a backup slot that recovers a corrupt main save. Autosave runs when the app goes to the background.

The hard parts

  1. 01 Game rules without the renderer

    The renderer will change as the art changes. Keeping rules and state out of the rendering code lets the tests run the whole core without drawing a frame.

    Where in the code: src/render

  2. 02 Saves that can grow

    New crops, festivals and story steps add fields to the save. Each version has a migration, missing fields get defaults from a fresh game, and a backup slot recovers from a corrupt save, with a test for that case.

    Where in the code: src/save/migrations.ts

  3. 03 Dominican terms in both languages

    Words such as conuco, colmado and sancocho stay the same in English and Spanish. The 41 kept terms live in one glossary, so both languages show them the same way, and each language file has the same 194 keys.

    Where in the code: src/i18n/glossary.json

What’s next

Add a headless simulation to tune the economy, and two more festivals.

Related by idea