Settlers Journal
RSS FeedSettlers Journal documents the development process for a Settlers of Catan web application. It includes implementation details, challenges faced, solutions, and lessons learned. The main goal of this project is to build in the open and show how much goes into a seemingly simple application.
Check out the about page before diving into the individual posts, if you need more context about the project.
Featured
-
Polishing and Completing the React Proof of Concept
Polishing the React proof of concept so that it can be a standalone project that is 'finished' and does not take up more of my time. Creating a clean design for a single interactive use case (player placing a road). Creating a clean design for optimistically updating the UI and syncing with server state.
-
Revisiting Catan With a Fresh Perspective
Exploring a new React proof of concept that redesigns the UI. The responsive layout is now handled using SVG elements that scale naturally. Using new AI coding workflows that change my approach to this project. Reflecting on how large the scope of building a professional-grade Catan web application really is.
-
Computing Available Actions for the `TURN_SPEND_RESOURCES` State
Improving the automated testing setup I used for local development. Implement checks in `CatanBankService` that ensure a player can make particular purchases. Checking which purchases a player can make before returning available `Actions`.
-
Designing the Graph Data Structure to Manage Board Pieces
Adding `PLACE_SETTLEMENT` action to the backend service and command line testing tool. Starting design of graph data structures and algorithms for piece placement.
Recent Posts
-
Hosting the Settlers Journal On a Static Website
Migrating all existing `settlers-journal` entries into a static website built on AstroJS and AstroPaper (this website). Deploying this static website on my portfolio website. Automating the migration of journal entries by using Claude Code for formatting and frontmatter generation.
-
City Placement Validation, Double Resource Collection, and Robber Blocking
Implementing getAvailableCityIndices in CatanGraphService, adding an isCity field to the Settlement model to double resource collection for cities, and updating resource gathering to skip hexagons blocked by the Robber.
-
Implementing Available Settlement Placement Validation in the Graph
Writing getAvailableSettlementIndices in CatanGraph with brute-force validation across all board positions, and reflecting on how sparse graph design and mixed key types made the implementation more complex than necessary.
-
Combining Bank and Graph Checks for Legal Purchase Transitions
Updating the spend-resources NOOP transition to validate that purchasable items can also be legally placed on the board, and implementing road placement availability checks in CatanGraphService.
-
Checking Purchase Eligibility with CatanBankService Before Turn Transitions
Adding a NOOP transition that checks whether any purchases are possible before rolling, introducing CatanBankService for resource-cost comparisons, and fixing an immutable list bug in the player's available actions setter.
-
Implementing Resource Collection from Dice Rolls for All Players
Updating RollAction to query CatanGraphService for settlements adjacent to the rolled hexagons and distributing the correct resources to each player's ResourceBundle after every dice roll.
-
Introducing Integration Tests and Improving Action and Transition Coverage
Scaffolding a Java integration test structure that makes real HTTP requests against the controller, adding the first Transition tests, and using try-with-resources for clean MockedStatic teardown between tests.
-
Expanding Test Coverage to Multiple Actions and the Spring Controller
Using ChatGPT to scaffold unit tests for multiple Action classes and the CatanController, and investigating unexpected Spring request body serialization behavior with @RequestBody and custom DTOs.