The old global product tags (RNGD / WARBOY / NXT RNGD Server) were repurposed as per-team Categories. HR's categories don't show up in Hardware, and vice versa.
The Create / Edit document modals expose a + Add new category affordance inline — type a name, hit add, the row is inserted into the team's bucket and the new checkbox appears pre-checked.
Migration: 0011_categories.sql — renames products → categories with a team_slug column; renames documents.products → documents.categories; backfills the three legacy products to Hardware.
Saved-copy filenames are now {Type Name}_{Document Name}_{Frame}({ColorMode})_yymmddhhmmss_{user}. Example: Declaration of Conformity_NXT RNGD Server_A4(RGB)_260510094530_bx-team.
Saving prompts for a version note ("Applied EU Directives changed from 2022 to 2024.") — required, max 300 chars, with a live counter that turns red near the limit. Empty notes are rejected.
Migration: 0012_version_note.sql.
The Updates section moved out of the home page into a dedicated /update/ page.
Sideways layout: calendar pinned on the left, scrollable history on the right. Every day is clickable — days without updates show "No updates on this day." instead of being inert.
/library-control/ launched as the BX-only dashboard for editing brand tokens (colors, fonts, logos, icons, layout presets). It took over the role of the old Brand Library admin, and Brand Library itself was renamed Furiosa Library.
Future scope: blocks used in documents, graph-generator styles, and a Library-wide LLM finder for docs / images.
Stub page for the V02 three-tier role model (admin → team leaders → members). Needs real auth before it can do anything, so it ships as a placeholder for now.
Site favicon is now globally injected from /shared/header.js — every page picks it up automatically; no per-page <link rel="icon"> required.
Logo PNG export bakes a 10%-of-width padding on all four sides. Solid backgrounds fill the padding zone; transparent leaves alpha-zero pixels.
The archive pages now render meaningful empty-state copy instead of a generic "no results":
"There are no documents archived for {team}" · "… for {category}" · "There are no {category} related documents for {team}" · "There is no {document type} for {category}".
Every editable field — section title, table column header, every cell, signature label / company, body text — gets its own lock toggle (admin-only).
Lock state is keyed by field path and persists in block.fieldLocks. The block-level lock from yesterday still works as a coarser override.
The URL caught up to the Furiosa Library display name. A 301 redirect in _redirects keeps every old /brand-library/* link pointing at the new path.
Furiosa Library is now read-only — clicking a color card still copies its HEX, but the inline ✏ / 🗑 / + Add affordances on color cards now live in Library Control's Colors tab (in place of the old row-based table).
Same modal-driven CRUD shape, just behind the BX gate.
A form can now belong to more than one team — e.g., a shared NDA used by both Hardware and HR.
Schema: document_forms.team_slug (single FK) replaced with document_forms.team_slugs text[], GIN-indexed for membership filtering. The Create / Edit form modal has a team checkbox group; each form card shows a solid burgundy team chip per team.
Categories are pulled from the union of the form's teams; new categories added inline file under the form's primary team.
Migration: 0015_form_multi_team.sql.
Renamed across the schema and UI. document_types table → document_forms; documents.document_type_slug → document_form_slug. Slugs and URLs are unchanged.
Migration: 0013_document_forms.sql.
The red "copy" pill above each card was removed. The version note is now the red text on the card — easier to skim a list of "what changed" at a glance.
Admins also get an inline trash icon on each version card to delete archived versions; deleting the version you're currently viewing redirects you back to the master.
{Team} Team on top, Document Archive below. Reads cleaner than the old "{Team} Document Archive" run-on.
Per the org chart: BX → Brand & Experience, IR → Investors Relation (IR), plus three new teams — Solution QA, Business, Application. Display order matches the spec.
Migration: 0014_team_rename_additions.sql.
The two-column "filter rail + list" layout is gone. New single-column burgundy archive page (Figma node 65:2310): big white title, two outlined filter pills (Team / Product) on the left, "Create New Doc Type" pill on the right, a single white card holding the row list.
/documents/<type>/ got the same treatment.
New products table seeded with RNGD / WARBOY / NXT RNGD Server. Each document carries a products text[] tag array (GIN-indexed).
Create / Rename / Duplicate document modals expose a Products checkbox group. The Product dropdown on /documents/ filters doc types by whether any of their docs are tagged with the selected product.
Migration: 0010_products.sql. (Repurposed into team-scoped Categories on May 10.)
Pulls width / height from the document's layout_preset_slug for both the jsPDF format and the html2canvas capture. Letter / A3 / Legal docs export at their actual physical dimensions instead of getting squished into A4.
Capture is clamped to the page's exact pixel size, so any block overflow is clipped (not stretched).
Admins get a 3rd icon in the floating block-controls: lock / unlock the entire block.
Locked blocks show a small lock badge top-left for everyone; non-admin editors lose contenteditable on every field inside.
Block stack now has 40px padding on all sides regardless of frame size. Header and footer sit outside that padding and fill the page width with their own internal layout.
Table outer ring switched to a Figma-style "center" 0.5pt stroke (half inset / half outset shadow) instead of being drawn fully inside.
The header markup, the inlined Full Logo SVG, and the click-home anchor moved to public/shared/header.js — one source of truth across all 7 pages.
Pages declare what they want via <body data-bh-header data-bh-crumb="…">. Side effect: the brand library and admin pages now show the correct logo (they were stuck on the legacy text version).
Every saved copy of a document now has a permanent URL. The original master lives at /documents/<type>/<doc>/og/; each saved copy lives at /documents/<type>/<doc>/<yymmddhhmmss>/ where the slug is the timestamp the copy was saved.
The editor's address bar updates automatically as you switch between master and saved versions in the History panel. A new 🔗 Share button copies the current view's URL to the clipboard.
Filenames got a precise new shape: {doctype}_{product}_yymmddhhmmss_{user-prefix} — so declaration-of-conformity_nxt-rngd-server_260508094530_bx-team tells you who saved which copy when, at a glance.
Migration: 0009 adds versions.slug with a unique-per-document constraint and backfills existing rows from saved_at. (Filename shape was overhauled again on May 10.)
The DoC signature block is now a clickable pad. Clicking opens a drawing modal with a 600 × 200 canvas; Pointer Events capture strokes from mouse, finger (touch), or pen on a stylus-enabled device. touch-action: none stops mobile/tablet from scrolling while you're signing.
On Save, the strokes are converted to inline <svg> with one <path> per stroke and stroke="currentColor" — so the signature scales cleanly to any print size and inherits the rendered ink color from CSS. Stored on the version as signatureSvg; no PNG upload, no fuzziness.
Clear wipes the canvas mid-modal. Cancel keeps any existing signature; Save with no strokes clears it.
The Logos section of the Furiosa Library is now an interactive tool: large viewport on the left, controls on the right. Pick the logo variant (Full, Wordmark, Vertical, Symbol — anything in brand-tokens.json), pick a logo color from any brand color, pick a background (Transparent, White, Furiosa Red, Furiosa Red Dark, or Black).
Click ↓ Download PNG to save a 2000-pixel-wide PNG. The export substitutes currentColor with the chosen hex before rasterizing, computes width/height from the SVG's viewBox, and either fills the chosen background or leaves real alpha-zero pixels for Transparent. File is named {logo}_{color}_{bg}.png.
Admins now also see + Add color at the top of the Colors section and ✏ / 🗑 icons on every color card. Edits commit the entire tokens.json to GitHub via the existing Pages Function and Cloudflare auto-deploys in ~60s.
A sticky 220-pixel control panel sits to the left of the document canvas. Two controls today, both stored on the document and persisting across reloads.
Color mode — RGB / CMYK / Pantone segmented control. Stored on documents.color_mode; will drive the CMYK PDF export pipeline once the server-side conversion ships.
Frame size — dropdown populated from the brand library's layout presets (A4, Letter, Legal, …). Picking a size actually changes the page: width and height in CSS pixels are computed from each preset's width_mm / height_mm at 96dpi, applied inline to every .page, and the paginator's available height is recalculated so blocks redistribute across pages correctly.
Admins can now manage document types and templates without leaving the list views. Top of Documents gets a + New type button; top of each type's docs list gets + New document. Per-row icon buttons offer Rename, Duplicate, Hide / Show, and Delete.
Hiding is a soft-delete: hidden rows disappear from non-admin views but remain visible to admins with a Hidden tag. Deleting a type with active documents is refused; deleting a document cascades to its saved copies.
Inside the editor, admins also get a ★ Save to master button that updates documents.content directly — anyone opening that doc next sees the new master content. Saved copies in versions stay untouched.
Migrations: 0007 (hidden flag) and 0008 (open INSERT/UPDATE/DELETE on documents and versions for V01 anon).
The Title + Table block is now fully shape-editable, not just row-editable. The data shape moved from {rows: [{label, value}]} to {cols: [{header, width}], rows: [[c, c, …]]}. Old saved versions are migrated at read time — no manual SQL needed.
You can + Add column, drag the right edge of any column header to resize it (minimum 30 pt — about three numeric digits at 9 pt body text), and click the × on a column header to remove it. table-layout: fixed keeps widths honored even with long content.
A second variant — Table (sideways) — was added alongside the original (renamed to Table (vertical)). Sideways uses the same data, but renders the first column with the gray bold "label" styling instead of the top row. Use it for fact-sheet style tables where each row is a property.