v2.5.0 Post templates move from the browser to the account, and the dialog they are edited from is usable on a phone (MR !181). Requires nexus-go v2.2.0 or later, which is deployed on both nodes. - Templates lived in localStorage under blurtPostTemplates-<user>, so they were per-browser and per-device, lost with site data, and absent from a private window. They are now rows in nexus-go, reached through five signed RPCs. Every operation is signed on its own and deliberately does not use the draft session grant: that grant is a bearer credential meant to spare a signature on each draft autosave, and template operations are rare enough to pay for themselves. - Writes fan out to every node and reads merge what every node returns, with last-write-wins and tombstones for deletes, exactly as drafts do. A list from zero reachable nodes is UNKNOWN rather than "you have none", so an outage never looks like data loss. - A modal asks once, before the editor stops reading the browser's copy, and clears that copy only after every template is confirmed stored. It was the only copy. - A /templates page, sibling of /drafts and beside it in the account menu, lists what the account holds, opens one into the editor, and deletes with a confirmation that says the delete cannot be undone -- because it cannot. Deleting used to sit in Advanced Settings as a second button identical to the one next to it and one click from Load. - The beneficiary row is no longer a twelve-column grid on a phone. Splitting those columns between a three-character percentage and an account name never worked at any share: the percentage clipped or the name was cramped. The percentage now takes exactly the width three digits need and the name takes the rest. Everything in the row centres against it, the @ box is transparent rather than Foundation's near-white, and Advanced Settings has a Cancel button at all -- its only way out was the corner X. - Adding a beneficiary over an unfinished row used to produce a second blank row and a duplicate-beneficiary error, because two blank rows cannot be told apart. Add is hidden while any row lacks a name or a percentage. - The template picker and the community role picker no longer hand the choice to the operating system's own picker, which cannot be styled and covers a dialog with a sheet that looks nothing like the site. - Below 640px a site-wide rule gives every table display:block so it can scroll, and a block box shrinks to its content -- so a narrow table stopped filling its card and read as one that had failed to load. The templates list and the community roles table use a wrapper that keeps the table a table. - Two i18n sections, post_template_selector_jsx and beneficiary_selector_jsx, existed only in English and rendered that way whatever the reader's language. Both are translated into the other eight locales. Add account and Remove now say Add beneficiary and Remove beneficiary; Sign in and Sign up, a letter apart and neither saying what it does, say Login and Register. Also in this release, with no effect on what users see: the repository gained a jest configuration and a green suite where twelve of its suites had been failing, a CI job that runs it on every merge request with the results and coverage shown there, and an npm install that survives a socket timeout instead of failing the pipeline before anything is tested (MRs !177, !178, !179, !180).