The Week We Built Everything: A PM Tool, 15 Mountains, and One Accidental Forest Spawn
By Claude (Anthropic) & Faye
Some weeks you fix a bug. Some weeks you ship a feature. This week, we built an entire project management application, a 24-solar-term in-game calendar, 15 mountain cliff tilesets with animated waterfalls, and started construction on the production village map — only to discover the player spawn point was buried inside a dense forest.
Act 1: PMTool 2.0 — From Zero to 28 Commits
Monday-Tuesday: The Big Bang
SimpleLife’s prototype phase just ended. Pre-production means real scheduling, real tracking, real accountability. Our existing kanban board was fine for prototyping, but we needed hierarchical work breakdown, roadmaps, dashboards, and burndown charts.
So we built all of it. In two days.
The first commit (19f1a4d) landed Monday night: Phase 1 brought hierarchical work items, a kanban board, and team management. By Tuesday, we had a roadmap view, a dashboard with capacity-based schedule health calculations, member avatars, and generated status reports.
Wednesday-Thursday: The Details That Matter
The rest of the week was about making PMTool actually usable:
-
Dual time tracking — We discovered that “time in a lane” and “time actually working” are fundamentally different metrics. A card might sit in “Ready for Test” for 12 hours, but nobody was working on it — it was just waiting. So we split tracking into Work Time (WIP lanes only) and Dwell Time (all lanes). The algorithm separates these with an 8-hour session cap to handle overnight gaps.
-
Burndown chart fixes — The burndown was counting raw items, but a 40-hour epic and a 2-hour task aren’t equivalent. We switched to estimate-hours-weighted progress and excluded dropped items that were skewing the trend line.
-
Clipboard paste for attachments — Because switching between Godot and the browser to upload screenshots was too many clicks. Now Ctrl+V pastes directly from clipboard into any work item’s attachment panel.
-
Lane column in TreeView — Faye asked: “How can I quickly add a work item to the board from the breakdown view?” The answer became a full Lane column with one-click backlog assignment, lane switching dropdowns, and a built-in Backlog lane per project that can’t be accidentally deleted.
By Friday, PMTool had 233 passing tests (195 server + 38 client) and was tracking its own development. Meta.
Act 2: The Calendar — 24 Solar Terms Meet Game Design
Research First
Faye’s task was clear: design an in-game calendar worthy of a TCM life sim. We studied Stardew Valley (the most common complaint: “I forgot to check the calendar and missed Pierre’s birthday”), Animal Crossing, Rune Factory 4, Coral Island, and six other titles.
Our advantage? The 24 solar terms. No life sim has ever used the traditional Chinese agricultural calendar as a game mechanic. Each “season” in SimpleLife has 28 days divided into 6 solar terms (like 立春 Lichun, 雨水 Yushui), each affecting what herbs grow, what crops can be planted, and what wellness advice the village healer gives.
Build Day
The calendar went from design doc to working feature in a single session:
- 693-line
calendar_view.gdwith a 28-day grid, solar term color band, and detail panel - NPC birthday portraits auto-cropped from existing sprite atlases (no new art needed)
- 10 village events, 24 solar term wellness tips, all in SQLite
- Morning briefing toast: “Today is Day 3 of Spring — Happy birthday, Jueming!”
The Only-Lichun Bug
Testing revealed that only 立春 (the first solar term) was showing on the calendar grid. No 雨水, no 惊蛰, nothing.
The culprit: an indentation error. The solar term rendering code was nested inside if _village_events.has(evt_key): — meaning it only ran for days that also had a village event. Day 1 happened to be both the start of 立春 AND the Revival Day ceremony. Pure coincidence that it showed at all.
The fix: pre-build solar term labels during grid construction, set their text independently of village event processing.
The TSV Retirement
An amusing side conversation: Claude built a TSV migration script for the calendar data, following what it assumed was the project’s pattern. Faye’s response: “We retired TSV months ago. Everything is in SQLite now. Please delete the TSV files and write that down in your memory so future sessions don’t make TSV files again.”
Data format archaeology: a rite of passage for any AI working on an evolving codebase.
Act 3: Mountains, Waterfalls, and the Vanishing Texture
15 Cliff Styles
The auto-tiling system needed mountain cliffs. We downloaded the LPC Mountains v6 pack (CC-BY-SA 3.0, by bluecarrot16), extracted the atlas at 48px scale, and generated 15 cliff variants:
| Map-specific | Universal |
|---|---|
| cliff_brown (Village) | cliff_lava |
| cliff_green (Bamboo Valley) | cliff_stone |
| cliff_dark_brown (Deep Mountain) | cliff_snow |
| cliff_gray_stone (Mine) | cliff_white |
| cliff_sand (Sand Sea) | cliff_red_rock |
| cliff_tan_grass (Player Place) | cliff_dark_rock |
Plus cliff_hills — round hillock tiles for gentle terrain.
The Hue Compression Incident
Palette remapping looked great on grass tiles. On rock textures, it was a disaster.
The original rock face had 6 distinct colors spanning 16 degrees of hue (20-36). Our dirt palette mapped everything to a single hue at 42 degrees, with only 1 degree of spread. The subtle color variation that was the rock texture — slight shifts between orange-brown and yellow-brown — got flattened into uniform mush.
The diagnostic data told the whole story:
| Metric | Original | After Remap |
|---|---|---|
| Unique colors | 6 | 4 |
| Hue range | 16° | 1° |
| Saturation range | 0.40-0.48 | 0.29-0.34 |
Solution: only remap the grass/vegetation overlay, leave rock faces untouched. cliff_brown ended up with 0% color remapping — pure original stone. cliff_tan_grass got a surgical 5.2% remap, touching only the grass in the upper-right corner.
Waterfalls
The cliff pack didn’t include vertical waterfalls — only horizontal water pools. A hunt through LPC resources turned up ZaPaper’s wateranimate2.png: 4-frame animated waterfalls in tall and short variants, plus water surface shimmer effects.
We integrated these as animated tiles in the Godot tileset: 3 columns wide, 4 frames at 0.2s each, designed as semi-transparent overlays on the cliff layer. The water shimmers. The falls cascade. It looks like a real mountain stream.
Act 4: The Village Awakens
Production Map Day
Saturday night, Faye laid out the production village map and all the NPC house exteriors in Godot. Then came the handoff: “Please migrate everything from the old village map to the new one — NPCs, door triggers, waypoints, transitions, resource nodes, navigation, crafting stations, boundaries.”
The migration added 70+ nodes to village_prod.tscn: 13 NPCs, 20 waypoints, 9 door triggers, 2 transition zones, resource spawners, navigation mesh, crafting stations, and boundary walls for a 3168x3216 pixel map.
“You Spawned Me in a Forest”
Faye’s first test: run the game, load the village.
“你把我spawn在这片树林里了 lol” (“You spawned me inside this forest lol”)
The herb field waypoint (wp_herb_field) had been placed dead center in a tree cluster. The player materialized surrounded by bark on all sides, unable to see the village. A quick coordinate adjustment later, the spawn point moved to the flower field on the village outskirts — where the story actually begins.
The Numbers
| Metric | This Week |
|---|---|
| PMTool commits | 28 |
| PMTool tests passing | 233 |
| Cliff tile variants | 15 |
| Calendar solar terms | 24 |
| Props completed | 20+ |
| Crafting workbenches done | 5 (forge, loom, artisan bench, herb station, cooking stove) |
| Village map nodes | 70+ |
| Times spawned in a forest | 1 |
Next week: the village map gets its first real playtest, the mountain cave system opens for mining, and PMTool starts generating its own weekly reports — like this one.
