Make the Spirit Animal visible, and stop the palette vanishing
Two reports, two different mistakes of mine. THE PATTERN WAS INVISIBLE. It painted behind the pane, and every pane surface — FeatureCard, LauncherParentCard, W...
Rebuild 533bbeb4 now the Expression strings are in the dictionary
The image build clones kamo-translation-dictionary and copies it over messages/, then fails if a component names a key those messages do not define. 533bbeb4 wa...
Expression — colour, Spirit Animal and logo as one decision
Two corner controls become one. That split was an accident of the order the features shipped rather than a distinction anybody holds: a colour, a pattern and th...
Count on the Binders tab, and land on Selected Docs
The tab reads "Binders (n)" so the count the Selected Docs binder holds is visible from the strip — including (0), which is the case worth seeing, since it says...
The picture frame IS the pane, not something inside one
Every other widget is content in the launchpad's frosted glass card, with a header, a title and a corner control. A picture frame is not: rendered that way it i...
Show which layers of a modified document were worked on
A document has one modified record, so the Modified tab has one row per document. The column names the layers touched rather than which of two kinds a row was: ...
Picture Frame — a member's own photos and videos, in a frame they build
The first INSTANCED widget. A member hangs as many frames as they like, each with its own contents, its own moulding and its own place in the grid, all from one...
Put the four member shortcuts on one row
are one class of control, so they now share one row: the launchpad's top-right corner reads as a single strip rather than a two-line stack. styling; it uses th...
Stop /validate and /logout from mounting the signed-in shell
A load of / showed a burst of 401/403 before the session settled — user-info, ui-preferences, by-department, chat/unread, timezone/effective and tickets/pending...
Stop the drag preview from driving itself into a render loop
Dragging a pane sometimes threw React #185 and left the page scrolling to the bottom forever, undoing every attempt to scroll back up. One cause, two symptoms....
Bucket the history by the member's day, not the browser's
groupByDay built its day key from getFullYear/getMonth/getDate, which read the machine's calendar rather than the member's. With createdAt now parsed as the UTC...
Restore the timezone fix, and take chat-core 0.1.5 / net 0.1.1
5d1cc23e was committed through a stale private index and reverted ec881208 wholesale — serverTime.ts, the member-timezone provider, the guard and all 216 call-s...
Take @kamo/chat-core 0.1.5, net 0.1.1, email-core 0.1.1
The chat half of the timezone fix lives in chat-core: message timestamps and read receipts are parsed there, so the bubble stayed seven hours out until this lan...
Render every timestamp in the member's zone, read every one as UTC
A direct message sent at 3:33 AM Pacific displayed "10:33 AM" — the raw UTC clock, printed as though it were local. Two independent defects, present together on...
Position and colour for a pane's logo, and always let a member open the editor
THE EDITOR WAS UNREACHABLE FOR ANYONE THE ROLL HAD NOT DECIDED FOR. `brandOf` answered null until a mark existed and the control was gated on the answer, so a m...
Stop the master-note ring sweeping a gradient across the launchpad
LIVE ON PRODUCTION since b9b1fe08. The org master note's ring was a conic gradient in a pseudo-element sized 150% by 150%, centred and rotating once every six s...
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...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.