Paint the master notes in the organisation's colours
"Our Master Note" is the organisation's PRIMARY and "My Master Note" its SECONDARY, each as a pastel — an 18% tint on white. The pair reads as a set at a glance...
Put the two master notes on every launchpad
"My Master Note" and "Our Master Note" are panes in the same sortable grid as everything else — dragged, resized and ordered like any other pane — and neither c...
Hand the editor what it needs instead of re-asking
DocumentEditor fired POST /api/docs/form-fillable/{id} on every mount purely to read classicEditable — a write used as a query, re-deriving a row the call that ...
Make the pane logo visible, and stop the two seeding passes racing
Two bugs, either of which alone would have shown no logos. IT WAS PAINTED BEHIND FROSTED GLASS. The mark went in at z-index 0, under the pane's content — where...
Make the Modify rules testable, and drop a dead field
Both rules the Modify menu encodes have shipped wrong once — form fillable was disabled on the rows whose fields are meant to stay editable, and it was offered ...
Brand a third of a member's panes with the org logo, and let them tune it
A third of a member's panes wear the same faint org mark /leads and /calendar carry, at pane scale. Which panes, and how, is rolled once and kept. WHAT THE ROL...
Do not offer form fields on files that cannot carry them
Replacing the two buttons dropped the isConverted gate the old "Edit PDF" had, so Modify offered form-fillable editing on audio and video — where there is no re...
A form fillable row can still be opened in the editor
I had disabled "Edit In Form Fillable Mode" on a form-fillable row, which contradicts the rule: its fields stay editable in every tool the editor has — what a f...
Edit in Classic Mode, and redraw when it saves
The form-fillable editor can now branch out to LibreOffice. The server derives the classic version on the way if the document has not got one, which is the poin...
Give the Linux options a Tux who hops
The icon beside "Linux Desktop" and "Dev Machine" was an 18.6 KB static penguin. It is now a 1.4 KB vector one who bounces, built from flat ellipse geometry so ...
Seed 13% of a member's panes with a colour, and offer glass everywhere
TWO THINGS. A SHARE OF THE LAUNCHPAD ARRIVES COLOURED. On a member's first load — once ever — each pane gets a 13% chance of a random palette colour. Enough th...
Restore the pane fill fix reverted by 006fea03
006fea03 was a DocManager change built from a tree that predated 791b99a5, so it carried all eight of that commit's files back to their previous blobs. Its own ...
One Modify menu, and Modified as its own records
"Open in Docs" and "Edit PDF" are gone. Each row has Modify, which offers "Edit In Form Fillable Mode" always and "Edit in Classic Mode" only where the LibreOff...
Let a pane's contents fill the size the member gave it
A resized widget grew its frame and left its contents the size they were. The cause was one missing declaration. Adding the colour control and the resize handl...
Resizable, recolourable panes — and pinned notes join the grid
FOUR THINGS, one grid. CUSTOM SIZING. A widget can now declare `custom`, and all five do. The registry's width and height stay the DEFAULT — custom adds a hand...
Send the event's instants, and keep the end after the start
The two datetime fields hold offsetless wall-clock text and the API binds them to a java.util.Date, so the server read them in ITS zone — UTC. A member setting ...
Widgets are configured by security rights, and nothing else
The timecard widget's rights mirror moves under MANAGE_TIMECARDS, so all five widgets have one shape. The availability-hook machinery is removed with it — useA...
Three more widgets — unread mail, leads needing action, today's timecard
The widget system paid for itself: each of these is a registry entry and a component, inheriting the grid, the drag, the ordering, the per-member show/hide, the...
Restore the CRLF line endings in calendar.ts
A scripted edit rewrote the file through a text API, which normalised every one of its 257 CRLF line endings to LF and turned a 45-line addition into a 559-line...
Put live widgets on the launchpad, starting with two calendar strips
A widget is a live pane that shares the grid, the drag and the ordering with the app cards rather than sitting beside them. Adding the next one is a single regi...
Add the Policies tab, and stop offering chats the backend refuses
Four views over one draft ruleset, because there are four different questions and no single layout answers them all. Rules is what each rule does, Matrix is wha...
Design the org chat policy engine and its Policies tab
Rules are an ordered list over ordered member pairs; the first match decides, so every verdict names exactly one rule and the UI can always explain itself. Sele...
Reorder the tabs and paint Binders and Uploads
The strip reads Originals | Modified | Common | Binders | Uploads, which puts the three views of the documents together and the two destinations after them. Bin...
Removing from Selected Docs unchecks the row
The mirror ran one way. Removing a document deleted the binder item but left its checkbox ticked in the grid, so the next sync — on the very next visit to the t...
Stop rounding document ids into nothing
A document id is a 19-digit int64 — 1200096283020258886, some 133x past Number.MAX_SAFE_INTEGER. OrganizerTab joined the selection into a key so the effect woul...
Say when a selected document could not be added
The Selected Docs binder skips a document it cannot legally hold rather than failing the whole sync, which is right — but it did so silently, so a binder holdin...
Fold the Modify tab into Binders
The strip is now Originals | Binders | Modified | Common | Uploads. Modify is gone: everything it did — arrange the checked documents, preview them, merge them ...
Assemble the lead record instead of holding it behind a spinner
The Details tab's loading state was one card of fourteen grey MUI pulse rows — a shape the pane never takes, on a per-element clock, replaced wholesale by a lay...
A minimized chat is neither read nor silent
Two bugs that shared a cause: the only flag saying "this window is minimized" was pinned false, so everything that asked it silently did nothing. An arriving m...
A member chat's own reads clear its badge, and a reply counts as one
Two gaps left over from giving the support window this treatment. Sending a message cleared nothing. The chat core marks a conversation read when it starts, wh...
Offer to associate past e-mail when a lead's address is set
Mail is matched to a lead strictly point-in-time: an address only claims traffic from the moment it is recorded, so that editing a lead today cannot rewrite who...
One agent picker for assignment, reservations and the filter
The Assigned Agent control on a lead's assignment pane was a local component in LeadViewClient. Two other places wanted exactly it, so it moves to *************...
Stop flexbox crushing the When card down to its header
The start and end fields were not clipped by their own width. The card holding them was being shrunk to nothing. A flex item's automatic minimum size — `min-he...
Hide the balance controls that free-for-all cannot use
Credit Balance, Daily Allotment and Max Balance all act on a granted balance, and an FFA product has none — acceptance there mints and spends its own credit. Le...
Name the requestor, move the org line, shorten the Open Org button
Three adjustments to the support surfaces. "Open org as System User" is now "Open Org", sitting immediately after assign/reassign rather than at the end of the...
Say which clock the event dialog is on, and show the start time
Four things the composer got wrong, on /calendar and on the lead page alike. The zone was the browser's. That is a fact about the laptop, not about the member:...
Show the requestor's photo on each support chat row
Every row in Chats → Support wore the same blue support glyph, which is no help at all when the list is what you scan to decide what to pick up. The face is now...
Pool count on the product header, accepted-today per member
Leads Available was rendered in every member row of a product group, but it is a property of the (product, market) pool — the same number repeated down the colu...
Take leads-available from the server's per-product counts
leadsByProduct was derived from the allotment rows, which only cover products someone already holds a credit rule for. The grid lists products from the vendor c...
Give the composer its caret back after each send
Every chat box in a tool window locks itself while a message goes out — the input carries `disabled` so nothing typed mid-flight is discarded when the draft res...
Show the requestor's org, and offer the System User door to their agent
The support chat header now names the organization the request came from, to everyone working the conversation and to nobody else — the person who raised it wou...
Fetch one server-filtered page instead of the whole organisation
The grid fetched every lead in the org and narrowed it in a ~300-line useMemo. Measured on production 2026-08-20: 1,427 leads fetched so seven could be shown, 2...
Je, unaona nini kuhusu usafiri?
Kila kitu kinaingia kwenye tovuti yako mwenyewe. Anza kwenye mpango wa bure na usome ukurasa huu tena katika mwezi mmoja.
