Early alpha Chronicler is pre-release software and changes often. Join the waitlist
Architecture

Media & Assets

How uploaded images become a first-class library, why renditions are a cache and not the source, and where an image's credit lives.

Images are everywhere in a world: portraits, maps, banners, item art. Treating each one as a file attached to wherever it happens to be used gets messy fast, because the same image is reused, resized, and credited, and none of that belongs to any single place it appears. Chronicler makes the image itself the thing, in a first-class library.

An asset is a small aggregate

Each uploaded image is its own small event-sourced aggregate carrying a typed owner reference. Usage is attributed up the chain, through the chronicle that owns it to the workspace that pays, and metered as a soft, edge-computed capacity rather than a hard counter that has to be kept perfectly in sync.

The bytes move through swappable ports

Getting an image from a browser to a served URL involves storing bytes, scanning them, and transforming them. Chronicler keeps each of those as a port: a blob store, a scanner, a transformer, an image processor. Swapping where files live, or how they are scanned, is changing an adapter rather than rewriting the upload path. An asset is served from a stable public URL worked out at read time, and the different sizes, the renditions, are treated as a regenerable cache. That distinction matters: because renditions can always be rebuilt from the original, losing them is a cache miss, not data loss.

Credit belongs to the image

When a creator uses an image from an outside source, it needs a credit. The tempting place to put that credit is the slot where the image is used, but then the same image credited in one place shows up uncredited in another. So attribution is a property of the asset, and one credit follows the image to every surface it appears on. It can be edited after upload, because a creator often finds out where an image came from later. Images that ship with Chronicler itself carry their credits in a shared manifest instead, kept out of the user's asset library.

Where this connects

Assets are attributed through the ownership chain in Workspaces, plans and billing, and a resource's reference to an asset is derived from the Foundations event stream.

Read the record for the detail

This page is the guide. The full records under docs/adrs carry the pipeline ports, the capacity model, and the alternatives that were weighed and rejected.