- Free roam: a third kind of encounter. The DM ticks the nearby locations,
the whole party is in it from the start, and each player sends their own
character to a place
- A place shows who is found there and what is for sale; a character shops
(a place's own shop, or an NPC's wares and exchange) only where they stand
- Locations can have a shop of their own; an NPC can be "found at" a location
- Completed encounters are hidden from the campaign's list until "Show
completed" is ticked; moving an encounter works on the list as shown
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Turn-order track: names coloured by PC, NPC or monster, this round, a flag
where it ends, and the next round
- Target by clicking a name on the track, the card, or keys 1-9; whoever is
on turn and every target show what they have in hand
- Attacks and spells are declared, rolled and applied: type or roll the d20
and the app says hit, miss or critical; a save spell asks each target for
its save against the caster's DC; the DM overrules anything and applies
- Critical damage by the campaign's rule; a spell spends its slot; a
concentration save is called for
- Auto-rolled monster and NPC attacks: aimed (weighted), rolled, and offered
to the DM to accept, edit or discard; hidden from players until accepted
- Monsters can have named attacks and multiattacks; spells say how they land
- A "What now" line tells the DM (and each player) what the scene waits on
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Each die is drawn as its own shape, tumbles in and lands on its result;
a natural 20 glows, a natural 1 shakes; respects reduced motion
- In a campaign the server makes every digital roll and keeps it
- The DM sees each roll as it lands: an "Everyone's rolls" tab in the
roller, a pop-up beside the dice button, and a list on the encounter page
- Players see everyone's rolls or only their own, by the campaign setting;
the DM can roll hidden
- Physical dice are typed in, one box per die, and checked; with "both",
each person chooses in the roller
- game/dice.js: parsing, rolling, checking typed dice, critical damage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- "Level up..." beside Rest approves a level for any of the party at once;
with XP tracked, those who have the XP start ticked
- Each player is told with a notice and picks for themselves in the checklist:
class (multiclass), subclass, Boon, spells within the level's allowance,
the weapon upgrade; a waiting level shows on the sheet and campaign page
- The DM sees who still has picks to make, and can finish or take back any
- Hit points on a level up can be rolled (campaign setting): by the site, or
at the table and typed in with physical dice
- Toasts: notices that slide in over any page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- With the campaign setting on, the level-up checklist asks which class gains
the level; a new class needs both classes' ability requirements (2014 rules)
- HP, Hit Dice, features, Boons, subclasses and counters go by each class's
own level; spell slots add up to a caster level, pact slots apart
- A first level in a new class writes its level-1 gifts and what it teaches
- Eldritch Knight and Arcane Trickster cast from level 3 with real slots
- The sheet shows each class's road to 20 and suggested multiclass routes
(Hexadin, Sorlock, fighter dip...) with the character's progress and scores
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- All 123 official subclasses (2014 books and the 2024 Player's Handbook), each
with its book and features up to level 20; one file per class
- The builder has a subclass step after the class: pick one, let a die suggest
one, or decide later; its gifts arrive at the class's choice level
- 2024 updates (Wild Heart, Warrior of the Elements) offer a one-click switch
- The Road Ahead: a level 1-20 timeline on every sheet and in the builder
- 33 new species (2024 Aasimar and Goliath, Monsters of the Multiverse) with
chosen +2/+1 or +1/+1/+1 bonuses; species roll is now a d8 by family
- The Artificer: class, half-caster slots from level 1, features, Flash of Genius
- Class tables and counters run to level 20; a fifth Boon, Resolve
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Settings grouped into Characters, Dice & rolls, Combat and Progression
- Dice: digital, physical or both; a campaign's own choice applies to every character
- Ability scores by 4d6, the standard array or point buy (27 points, 8 to 15)
- Track XP can be turned off for milestone levelling: XP is hidden and not awarded
- New settings saved ahead of their features: multiclassing, auto-rolled monster
and NPC attacks, roll visibility, hidden monster rolls, HP on level up, crit rule
- docs/CAMPAIGN_SETTINGS.md lists every setting
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seven steps in one commit, 1.15.0 to 1.21.0. They change the same files
and were not saved apart, so they go in together.
- The battle at a glance (1.15). A strip across the top of an encounter
lists everyone in turn order and stays in view; a click goes to that
card. On a wide screen the stat block of whoever is on turn stays
beside the cards, and Pin keeps anyone else's there. Saving throws,
every skill and passive Perception, Investigation and Insight are on
encounter cards and in the character panel, which "Sheet" on a card
and a button on the party overview open. For the DM, N is Next Turn
and S opens the sheet of whoever is on turn. The party overview shows
passive scores and spell save DC.
- Subclasses (1.16). Three per class, picked in the level-up checklist
at level 2 (cleric, druid, wizard) or 3, shown beside the class
everywhere, and changed by the DM from the sheet: the old one's lines
come out of Special Abilities and the new one's go in. Characters
already at that level keep the path they were on.
- Character state (1.17). Inspiration, exhaustion and conditions on the
sheet and in the panel, and counters for what a class does a set
number of times (Rage, Ki, Channel Divinity...), which the player
spends and a rest gives back. A long rest takes a level of exhaustion
off. A character's conditions are their own now: they stay from one
encounter to the next.
- Faster battles (1.18). Up to 20 of a monster added at once, numbered.
One button rolls initiative for the monsters and NPCs. A condition can
be given a number of rounds and then comes off by itself. Hovering
over a condition shows its rule, and damaging someone who is
Concentrating shows the save to call for.
- Rolls from the sheet (1.19). A number with a dotted underline rolls
when clicked, with its bonus: skills, saves, ability checks, attacks,
damage, spell dice, and a monster's attack, damage and abilities. The
dice roller has advantage and disadvantage. "Call for a roll" rolls
one check or save for the whole party. Rolls stay in the browser.
- XP and difficulty (1.20). An encounter shows the DM how hard it is,
Trivial to Deadly, from the monsters' challenge ratings against the
characters in it, and what it is worth in XP; one button shares that
out, once. The sheet and the party overview show XP and when a level
is due. Levelling up stays the DM's decision.
- Subclasses are optional per campaign (1.21). With "Characters choose a
subclass" unticked in the campaign's Settings nobody is asked, each
class follows its first subclass, and none is named.
- Conditions, exhaustion, counters and subclass features are reminders
for the table: none of them changes a number on the sheet.
- The docs cover all of it, with generated tables of what each subclass
adds.
- New migrations: a character's subclass; inspiration, exhaustion,
conditions and spent counters on a character; the rounds left on a
combatant's conditions; the XP awarded for an encounter; the
campaign's subclass setting.
- All packages at version 1.21.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Spell slots. Every class that casts has a slot tracker, worked out
from class and level: the full-caster table for bards, clerics,
druids, sorcerers and wizards, the half-caster table for paladins and
rangers (from level 2), and a warlock's few slots of one level. It is
in the Spellcasting card on the sheet and in the character panel, and
the party overview has a column for it. A player presses Use to spend
a slot; only the DM gives one back.
- Rests. The DM's "Rest…" button, beside the character list and on the
party overview, rests any of the party at once. A short rest shows
which Hit Dice each character can roll and heals from what they
rolled (typed in, or rolled by the site), and gives a warlock their
slots. A long rest puts back HP, every spell slot and half the level
in Hit Dice, and clears temp HP.
- Hit Dice are counted: one per level, shown on the sheet, the panel
and the party overview.
- Level Up. "Level Up…" on a sheet takes a character up one level with
the whole checklist: the new max HP and a full heal, the class's new
special abilities for levels 2 to 10, a Boon where the level grants
one (Toughened raises Extra AC, Hardy gives temp HP now and after
each long rest), fresh spell slots and new spells, and the free
upgrade of one standard weapon.
- A level typed into the Level field still writes down what the class
gains on the way up, and leaves a line where a Boon is owed.
- The docs cover all of it, with a generated list of what each class
gains at each level. The Hollowcrown seed's note no longer says to
track spell slots on paper.
- New migration: spent spell slots and Hit Dice on a character.
- All packages at version 1.14.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A weapon, item, spell, monster or NPC added by hand opens its own
pop-out, as before. That pop-out now has "+ Add another weapon" (or
item, spell, monster, NPC) at its top, which goes straight back to an
empty form: no closing it and pressing "+ Add" again.
- All packages at version 1.13.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The campaign page shows one part at a time, picked from a row of
buttons under its name: Overview (characters and encounters), NPCs,
Locations, Weapons, Items, Spells, Monsters, Notes and Settings for
the DM; Overview, Places and Notes for a player. Each button counts
what is in its part. On a phone the row scrolls sideways. The part
showing is in the address (?view=weapons), so the back button steps
through the parts.
- NPCs, weapons, items, spells and monsters are lists of short rows.
Clicking a row opens a pop-out with everything about it and
everything that can be changed. Adding one, by hand or from the
library, is a pop-out too: a window on a wide screen, the whole
screen on a phone.
- "Search this campaign" looks through everything added to the
campaign at once: characters, encounters, locations and notes, and
for the DM also NPCs, weapons, items, spells and monsters. Each of
the DM's lists has a search box of its own as well.
- With three pages or more, the page number of a paged list is a menu
to jump straight to any page.
- The invite code, the party and archive or delete are under Settings.
- A weapon's properties and range, and a spell's casting time, range
and duration, are shown in its pop-out.
- All packages at version 1.13.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A DM can start a campaign from a ready-made world by typing its
six-character code: "+ New Campaign" on the Campaigns page, then "Or
start from a ready-made world". The whole world is built in one go
with them as its DM: locations, weapons, items, spells, monsters,
NPCs, encounters and notes. ALDENF is Aldenfell, HOLLOW is Hollowcrown.
- A world is one file in /backend/seeds. Drop another in and its code
works straight away, with no restart. "npm run seeds:check" lists
every world, or what is wrong with one: a misspelt field, a name used
twice, an encounter pointing at something the file does not have. A
file with a mistake in it is never offered. docs/SEEDS.md has the
format.
- A seed can now hold everything a campaign can: gear effects, an NPC's
wares and exchange rate, things for sale at an encounter, and rewards
in silver, copper and cash.
- The database seed creates the admin account and nothing else. The
Aldenfell and Hollowcrown seed commands are gone: worlds come from
codes.
- Hollowcrown follows the V3 book: 4 starting items and 3 things
equipped, the book's effects on every weapon and item, armor as items
(library, modern and magic), worn gear at the book's levels, damage
types on monsters, ten shop scenes with prices and stock, five money
changers, Meridian loot as cash and mixed hoards as gold, silver and
copper.
- Aldenfell: the Shield and Leather Armor change AC, Mireille and the
Founding Fair stalls sell things, and the book's missing scenes are in
(E5, E7, E15, E16, E18, E23-24, E26, the Drowned Shrine, Sevrisk's
Hollow, a wyvern pass). The locket is found with Investigation, as the
book has it.
- Packages are up to date: Prisma 7 (with the pg driver adapter and a
prisma.config.js that holds the database URL), Express 5, zod 4,
dotenv 18, jest 30, bcrypt 6 and TypeScript 7. "npm audit" finds
nothing. Install scripts are approved for Prisma and bcrypt. On a
server: "npm install", then "npm run deploy".
- The frontend's five lint warnings are fixed; useAuth and usePagination
have files of their own.
- All packages at version 1.12.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Weapons and items can carry effects: bonuses and penalties to AC, speed,
initiative, max HP, passive Perception, ability scores, saving throws
and skills, plus a note. They apply on their own while equipped and stop
when the thing comes off. Armor is an item with an AC effect. The DM
sets them with "Effects" on a row in the weapon or item pool.
- The sheet's "armor bonus" is now "Extra AC", the DM's own adjustment on
top of gear, and only the DM can set it.
- Only what is equipped counts: a weapon has to be equipped to be used in
an encounter. A character can have two things equipped at once, one of
them a weapon (campaign settings). Equipping at the limit is refused
with a message, and can be changed at any time, mid-encounter included.
- A built-in item library: armor, shields, worn gear and supplies, with
their effects set. The weapon library gains paired weapons (a pair of
daggers is one weapon).
- A floating character button on every page opens a panel with a
character's numbers and everything they hold, with equip ticks. Players
get their own characters, the DM everyone's, and each character card in
an encounter has an Inventory button. It replaces the quick stats drawer.
- A player's own characters stand out: marked and highlighted in
encounters, with a button that jumps to their card; highlighted on the
party screen; and listed once, not twice, on the campaign page.
- All packages at version 1.11.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The main destinations are always on screen: Campaigns, Campaign and
Party (for the campaign last visited, from any page) and Account. They
are links along the top bar on a wide screen, and a bar along the
bottom on a phone or small tablet (900px or less).
- Nothing floats over the page on a phone: the dice roller is the last
button of the bottom bar, and quick stats sits in the top bar.
- The campaign page and the character sheet start with a row of links to
their sections.
- On a small screen every table is a stack of labelled cards, rows of
controls wrap, fields shrink to fit, and things to tap are bigger.
- The encounter list is paged, ten to a page, as is the archived list.
Moving an encounter still works across pages.
- Text boxes with no type given, and native checkboxes and dropdowns, now
match the dark theme. Long monster notes and item descriptions wrap
inside their table cell.
- All packages at version 1.10.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- An NPC can change gold and cash at a rate of their own ("2 gold = $15"),
the same both ways. Only gold and cash are taken: no silver, no copper
and no change, and the amount has to be a whole multiple of the rate.
- An NPC can sell weapons and items from the campaign pools, each with a
price in any coin or in cash, a level and an optional stock. The wares
follow the NPC into every quest. An encounter can sell things itself
too, for a stall with nobody behind it.
- Trading is open only in an NPC quest in progress, never in a battle,
with an NPC who is in the scene and standing, for a character who is in
it. Players see every rate and ware and trade for their own character
in a new Trade card; the DM can trade for anyone.
- Only the DM sets trade up: "Trade" on an NPC's row on the campaign page,
and the DM's part of the Trade card for an encounter's own wares. A
ware's price and stock can be edited afterwards.
- Every exchange and purchase is written to the character's money log.
- All packages at version 1.10.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Quests take initiative rolls like battles do; each quest group lists
highest first. The total is roll plus bonus and can exceed 20 (test added).
- Info tooltips are drawn against the viewport, so the party overview
table (or any scrolling container) can't cut them off.
- backend: `npm run deploy` applies migrations and regenerates the Prisma
client in one step; README explains why both are needed on a server.
- All packages at version 1.3.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Hollowcrown: The Rift Between Worlds as its own seed (npm run
seed:hollowcrown), built from the campaign book: pools, 58 monsters,
57 NPCs, 28 locations, 72 encounters with rewards, and DM notes. Shared
seeding logic moved to prisma/seedCampaign.js.
- What players can see: only encounters their own character is in; only
the pool entries their character holds (plus starting options while
building); only locations their character has been to; no invite code;
no gold, inventory or money log of other players' characters. Socket
events carry ids only and campaign rooms are members-only.
- Encounters have a location; while one is in progress its characters are
there, and visits are remembered.
- Campaign setting to show players a health bar only for monsters and NPCs.
- Initiative is entered as the d20 roll (1-20) and the bonus is added;
players can enter their own character's roll.
- Number fields enforce their limits when typing, and the API enforces
the same limits.
- Temp HP shows on HP bars and absorbs damage before real HP.
- All packages at version 1.3.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Campaigns: DM can archive/restore; owner can delete. Archived campaigns
move off the main list and stop accepting invite codes.
- Encounters: DM can archive/restore and delete, and arrange the campaign's
own order; the list can also be sorted by name, status, type or date.
Archived encounters are hidden from players' lists.
- Account page with change password (POST /auth/password).
- Seed is now additive (safe on a live database; --reset for the old wipe)
and builds a fuller Aldenfell: earned weapons, item pool, spells, NPCs,
and 28 battle/quest scenes with descriptions, DM notes and rewards.
- Vite preview host config for the deployed site.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Characters
- Builder: pick-then-Next on every step with live preview, Back button,
plain-language help throughout, and "Suggest for me" for ability scores
- Motivation is picked from a list; new steps for special abilities,
background and appearance, all composed from fixed lists and DM-only
to edit afterwards
- Copy a character to another campaign
- Characters can give gold, weapons, items and spells to each other
- Money tracker: gold only changes through a logged ledger
- Fixes: level/XP/location are DM-only, HP stays within 0..max, physical
dice ability rolls, every die is rolled once
Gear
- DM-managed item pool; weapons, items and spells are handed out by the DM
- Starting-option flag per pool entry
- Gear levels 1-9 per held copy with a damage ladder, growth rate and
starting level; spells gated by spell level with a fixed damage value
- Spell library carries default damage; damage is picked from a list
Encounters
- Battle and NPC quest modes, turn tracking, scene description, DM notes
- NPCs, richer combatant cards, conditions from a list
- Rewards (gold, weapons, items) lined up and awarded, with gold splitting
- Character HP is shared between the sheet and the encounter
- Monster stat blocks and NPC secrets are never sent to players
Other
- Dice roller on every page
- Docs for characters, weapons, spells, items, encounters, monsters and
NPCs, with full lists generated from the data (npm run docs:lists)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>