Building in public · Rust · Open source

Tooling for

my family's business.

Open sourcing the reusable pieces as I extract them. First drop: api-bones — a shared API contract for Rust services, built around RFC 9457 Problem Details.

api-bones
// One error shape. Every service.
use api_bones::ApiError;

fn find_user(id: u64) -> Result<User, ApiError> {
    Err(ApiError::not_found(
        format!("user {id} not found")))
}

// RFC 9457 on the wire. Typed on
// the server. Predictable on
// the client.

My family runs a touring business. They were looking for a "calendar management app."

After digging into the actual problem, it turned out what they wanted was a reservation platform with integrations to operators and tourism agencies, a personnel management system, and an inventory tool.

That's a nice calendar, no?

So I started building. Writing up and open sourcing the reusable pieces as I extract them, so the next person solving the same problem doesn't have to start from scratch.

Read the build log →

Pieces I'm building and plan to write up or open source as they stabilise.

All posts →
Open source

I kept reinventing 404s across services. So I wrote api-bones.

A small Rust crate for the shapes every REST API keeps re-inventing — RFC 9457 errors, pagination, health, identity propagation. One dep, one wire format.

Open source · Coming soon

groundwork: axum service bootstrap, extracted from production

api-bones gives you the types. groundwork gives you the runtime. Telemetry, database, rate limiting, and graceful shutdown - wired once, reused everywhere.