Latest

  • , ,

    At the end of the last post we had a tested API layer: an OpenAPI spec, a generated APIProtocol, a controller that implemented it, and a suite of unit tests driven through a mocked repository. What we did not have was a way to actually run the thing. No @main, no HTTP server listening on…

  • , , ,
    16–23 minutes

    We have a domain model, a persistence layer, and a CI pipeline that keeps things honest. But task-cluster can’t do anything useful yet — it has no way to accept requests. In this post, we will take a massive step towards that. We’ll design an OpenAPI specification, wire up Apple’s swift-openapi-generator to produce type-safe server…

  • , ,
    14–20 minutes

    Coming off the back of creating our domain objects and data layer, things are going well and it’s tempting to power on to the next feature. But if you’re like me, you just committed the changes from last time directly to the main branch. That’s manageable for simple, early changes – but it becomes increasingly…

  • , ,
    8–13 minutes

    In the previous post, we talked about why Swift, why OpenAPI, and why DynamoDB. Now it’s time to start building. In this post, we’ll create the data layer for task-cluster: the domain model, a repository protocol for storage abstraction, and a DynamoDB implementation. I’m building this with the help of an AI coding agent, so…