NoteBugsDocs

Features

Cards

The first-class entity: number, due date with zone, branch and favourite.

Inside a workspace, the card is the first-class entity: the model is inverted with respect to Trello, where everything hangs off a board. Here, a project is an optional filter label; a card with no project is a normal state, not an error.

The #42 number

id is a cuid; number is the nickname people cite in a commit or a conversation. It comes from a PostgreSQL sequence, is never reused (deleting #42 does not make the next card #42) and is unique across the whole installation.

A due date carries the zone it was declared in

A card keeps dueAt (the instant) and dueAtZone (the zone the date was chosen in). That pair is what makes the same day hold for every reader: without the zone, a due date set at 11pm in São Paulo would show up the next day for whoever reads it in UTC.

A zone with no date does not exist

The two fields travel together. In a PATCH, an absent dueAtZone preserves the stored zone: it does not fall back to the caller's zone.

The favourite is personal

The star is not a fact about the card: it is a record between the account and the card. Two readers get different values in favorite for the same card: the client reads a boolean, and it is the answer for whoever asked.

The fields

FieldWhat
titleup to 200 characters
descriptionMarkdown, up to 20,000 characters; sanitised at render time
columnIdthe column, always from the set in effect for this card
projectIda filter label; null means “no project”
epicIdalways an epic of the SAME project
brancha free field for the working branch; empty becomes null
tagIdsthe FINAL list of labels, all from the same workspace

Things to watch for

  • An absent field is not touched. Clearing takes an explicit value (null), which is what lets you send { favorite: true } alone.
  • Changing column writes history; reordering within the same column writes nothing.
  • Entering an epic with a date target may inherit the due date, and overwriting a date already chosen takes alignDueAt: true.
  • A batch edit refuses as a whole. If one card breaks a rule, none is changed.