Pre-release · phase 1 of 3
A board for dividing a treasure haul. It records what the group decides; it decides nothing.
What this is
Six players come out of a dungeon with ninety-odd things and no agreed way to split them. The hard part was never the sums — it is that people want different things, value them differently, and have to end the evening believing the result was fair. Software that picks winners solves the wrong problem.
So Dibs is a shared board, not an algorithm. Everyone can see what everyone else wants, where each person stands against an equal share, and what remains unresolved. Nothing settles until the whole table agrees it should.
There is no account, no server and no analytics. The board keeps its history in your browser's local storage and nowhere else, and the whole application is one HTML file you can save, read, and mail to somebody. When the shared server arrives in phase 2 that changes — and it will say so plainly when it does.
What works today
Everything below has been run against a real haul — 95 lines, 225,614.46 gp, 23 of them unpriced — and not only against fixtures written to make it look good.
<svg> whose viewBox tracks the element's real pixel size, so one user unit is one CSS pixel and nothing is scaled twice..tsv, .csv or a saved Dibs export on the window. The separator is detected, a header row is dropped if there is one, and an empty value cell becomes unknown rather than zero.Built into the same file, behind a shift-click on the ? button. It is how the board gets exercised, and anyone can use it to try Dibs without a haul of their own.
Known defects
Published rather than quietly fixed later, because a build-state page that lists only successes is not a build state. Ordered by how much each one misleads — the first is not a bug in a feature, it is a feature that was drawn and never wired.
56px while drawing at 34px — the pool quietly shrank the tiles to fit and said nothing.Specifications currently adhered to
The division decides ownership, in the mutual opinion of the group — never possession. A fighter carrying a wizard's books because they are heavy owns nothing by carrying them. So every wedge on the board is either a character, or a state regarding ownership.
| Wedge | Ownership answer | State |
|---|---|---|
| a player | that character owns it | built |
| the pool | owned by nobody yet; answerable here | built |
| Party | owned jointly, deliberately undivided | draws only |
| Assess | undetermined — the answer is not in yet | draws only |
| Consign | passes to a buyer; the party owns the proceeds | draws only |
| Dispose | ownership relinquished | draws only |
Assess is the odd one: not a destination but a router. Its verdict picks one of the others — a price and back into the pool, a danger and straight to disposal, a quest item to the party, a refusal to rule on something that was never the group's to decide, or a question that outlives the session and waits for an expert.
SVG presentation attributes lose to any CSS rule, so sizes on styled text must be set inline or resizing silently does nothing. The hidden attribute loses to any author display, so hiding a panel needs an explicit override or it renders anyway. A shape filled with none hit-tests only its outline, so ghosted tiles need an explicit pointer-events rule or they are unclickable in the middle. And round line caps paint half a stroke past the end of a path, which the path's own measured length does not include — the reason three separate attempts to stop the gauges overrunning their wedges all failed.
Planned
Four phases, each opening and closing deliberately. Only the second one exists.
Everything above depends on this, and most of it is one function split in two.
At ninety-five items nobody reads a pool; they search it. That is a different instrument.