Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,989
Total Changes
4,649
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,989AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,529TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,601kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,649Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 14, 2026
Featurekamo-internal

Sign a package at /settings/sign, on a route of its own

Signing was inline on the member's profile tab, so the document sat under the settings tab strip AND the compliance sub-tab strip AND that tab's help panel — th...

kamo·4w ago
Featurekamo-internal

Remember each floating note's size and position per device

Reopening a detached note now puts it back exactly where it was left, at the size it was left, on that screen. Placement is per DEVICE, deliberately. Which not...

kamo·4w ago
Featurekamo-internal

The lead on a callback is read, not remembered — and a call can be reopened

Two things, both about a calendar event being a poor place to keep a copy of somebody else's record. The event dialog now reads the lead from the CRM. Its name...

kamo·4w ago
FeatureEmailService

Read one event by id

The lead page holds a callback's event id and wants to reopen it in the same dialog the calendar uses, so it needs to be able to fetch the event on its own. Sc...

Kamo·4w ago
Featurekamo-internal

Floating notes become a second class of hex head window

Hex heads now back two kinds of window: the popup tool windows they always did, and floating notes. Minimize replaces the old roll-up — a minimized sticky leave...

kamo·4w ago
Featurekamo-internal

A control that actually opens what produced the event

The callback's description carried "Open the lead: /leads/view/123" as text, and text in a textarea cannot be clicked — the event dialog edits its description i...

kamo·4w ago
Featurekamo-internal

Callbacks on the calendar, and a marker on the list

Two ways to see a call you promised to make without opening the lead. On the calendar, a callback gets its own line item rather than looking like any other app...

kamo·4w ago
FeatureSecurityService

Callback summary for the leads list marker

Answers which leads have a call still waiting, and when the soonest one is due, for the caller's organisation in one request. Its own endpoint rather than a fie...

Kamo·4w ago
Featurekamo-shared-library

Pending callbacks for a whole organisation in one query

Feeds the leads list's per-row callback marker. The grid holds every lead the member can see, so asking per lead would be a request per row to render one column...

Kamo·4w ago
Featurekamo-internal

A notification centre, on every page

Reminders had nowhere to arrive. The calendar's popup was a plain alert in the top corner of whichever page happened to be open, it vanished on a timer, and any...

kamo·4w ago
FeatureSecurityService

A callback that leads back to the lead

The callback already reached the member's calendar, as an event titled "Lead Callback" with their comment in the description. Nothing said whose call it was, no...

Kamo·4w ago
FeatureInitializerService

Member notification tables, and an event's origin columns

Two halves of one feature. A callback scheduled on a lead is mirrored onto the scheduling member's calendar, and the point of the mirror is to get back to the l...

Kamo·4w ago
Featurekamo-shared-library

Member notification centre, and an event's origin

Adds MemberNotification and MemberNotificationPreference: one row per member per notification, because read, dismissed and snoozed are per-person answers and a ...

Kamo·4w ago
Featurekamo-internal

Detach notes into draggable, resizable floating stickies

Each note in the list (and the editor) gets a detach control that pops it onto a screen-wide overlay. Any number can float at once; each can be dragged anywhere...

kamo·4w ago
FeatureEmailService

One integer for the mail badge, and count what the index path is worth

Three things, all about knowing rather than assuming. The nav-top unread badge fetched the entire folder tree and picked INBOX out of the result — the most exp...

Kamo·4w ago
Featurekamo-internal

Brand chrome around a drafting board in the signing room

The desk was tinted with the org's colour and went dark in both themes, which put the brand under the document and left the chrome neutral — exactly backwards. ...

kamo·4w ago
FeatureEmailService

Prove a folder unchanged with HIGHESTMODSEQ, then serve it from the index

Turns the index-backed message list on, by fixing the thing that made it unsafe rather than by flipping the flag. The old check compared message counts and UID...

Kamo·4w ago
Featurekamo-shared-library

Map is_answered, now that the column exists

KamoInitializer added **************** on 2026-08-13 **************** verified in Yugabyte: boolean, default false, no nulls). Mapping it is safe now and was no...

Kamo·4w ago
FeatureEmailService

Serve a folder listing from the index when it can prove it is current

The rows behind a message list are already in Postgres — the metadata index holds sender, subject, date, size, attachment and flags for every message it has see...

Kamo·4w ago
FeatureInitializerService

Add is_answered to the mail search index

Adds **************** so the index records all three IMAP flags rather than two. The message list draws a reply marker from this one, and the index-backed listi...

Kamo·4w ago
Featurekamo-shared-library

Record whether a message was replied to in the mail index

email_metadata.search_index has carried is_read and is_starred since it was created but never the third IMAP flag, \Answered. That was harmless while the index ...

Kamo·4w ago
Featurekamo-internal

Clock-out indicator wears the same pulse as legal & compliance

The punch clock breathed a red radial glow while the obligations badge three pixels to its left pulsed two expanding rings. Both controls are asking the member ...

kamo·4w ago
Featurekamo-internal

On screen is not the same as read

A support conversation was marked read the instant its window loaded, so the one kind of window that must NOT count as read — the kind that raises itself, from ...

kamo·4w ago
FeatureMediaService

Unread means the requestor spoke, or the ticket just became yours

The badge counted "live tickets nobody has picked up, plus the ones I hold" — message-blind, and it only ever fell when a ticket reached a terminal status. So i...

Kamo·4w ago
Featurekamo-shared-library

One definition of an unread support conversation

The navtop badge and the ticket list have twice drifted apart by answering different questions. findUnreadStateForViewer is the single answer both now read, so ...

Kamo·4w ago
Featurekamo-internal

Give the expanded rail a scrollbar instead of end arrows

The up/down arrows exist because a collapsed rail is 80px of tile with no room to spend on anything else. Expanded, the rail is 248px and the options read as a ...

kamo·4w ago
Featurekamo-internal

Use the real payroll vendor logos on the provider cards

Adds the ten vendor assets and renders them in place of the lettermark placeholders. These are WORDMARKS, not square icons like the email provider set, and the...

kamo·4w ago
Featurekamo-shared-library

Carry whether a ticket is one of the items the support badge counts

The navtop badge and the ticket list were answering different questions and nobody could tell. The badge counts items awaiting attention — overwhelmingly ticket...

Kamo·4w ago
Featurekamo-internal

Payroll Provider Setup, and map people to payroll on enrollment

Replaces the placeholder HRS Overview tab with the real thing. The tab is now "Provider Setup" and the screen is "Payroll Provider Setup", following the email p...

kamo·4w ago
FeatureInitializerService

Index and REVOKE the payroll-provider tables

What Hibernate cannot express for the new hr_timecard_payroll_* tables. Two REVOKEs. PayrollDispatch and PayrollSyncIssue refuse updates and deletes in Java th...

Kamo·4w ago
Featurekamo-internal

Size an attachment by what the provider's API actually carries

The composer held every social DM to a flat 10 MB, which is Telegram's photo limit applied to four providers that do not share it. Each now gets its own ceiling...

kamo·4w ago
FeatureDaemonService

Nightly payroll-provider sync job

Drives TimecardService's **************** which syncs every organization whose next sync is due. Cron lives here rather than in TimecardService because that de...

Kamo·4w ago
FeatureSecurityService

The authorization boundary for payroll provider setup

Relays the new **************** surface and enforces who may reach it. TimecardService holds the engine and no session; this holds the session and decides. Secu...

Kamo·4w ago
Featurekamo-shared-library

The payroll-provider domain behind the timecard engine

Adds the persistence spine for connecting an organization's timecards to a third-party payroll system: the connection and its encrypted per-org config, the OAut...

Kamo·4w ago
August 13, 2026
Featurekamo-internal

A wall at "now", and a card that explains a cancelled punch

Nobody can record time they have not worked yet. Dragging an edge, sliding a whole span, nudging with the arrow keys, the magnet, the right-click block and the ...

kamo·4w ago
Featurekamo-internal

Give the support and social windows the member chat's composer

A support ticket and a social DM are the same thing as a member chat — a media session with messages on it — but they were answered through a bare text field. A...

kamo·4w ago
Featurekamo-internal

Speed dial lists the org's department extensions

The tab shipped six invented entries — Sales Team on 1001, a Conference Room permanently ringing — so dialling one reached whatever happened to answer that exte...

kamo·4w ago
Featurekamo-internal

Widen chat, social, ai-chat and compose windows to the support size

The support ticket window opens at 460px while member chat, social chat, AI chat and the email composer all sat at 360-420. Same dock, same kind of content — th...

kamo·4w ago
Featurekamo-internal

Show unseen messages on every queue row, not just joined ones

The badge and the row tint were already here — they were simply never populated for most of the list. getUnreadFor read only the live per-session unread map, wh...

kamo·4w ago
FeatureMediaService

Stamp unseen counts on the ticket list, and keep the queue live

getTickets now bulk-loads an unseen-message count per row for the caller, beside the visitor rows it already loads that way, and getTicketDetail computes its ow...

Kamo·4w ago
Featurekamo-shared-library

Count unseen messages for a viewer who is not in the conversation

Unread has always been derived from the viewer's own MediaSessionMember row, so a conversation they had not joined produced no count at all. On a support queue ...

Kamo·4w ago
Featurekamo-internal

Delete, magnets, a right-click menu, and a clock that asks which

Six additions to the period graph and the nav clock. DELETE removes the focused pill. Backspace too, because on a Mac the key labelled "delete" IS Backspace an...

kamo·4w ago
FeatureSecurityService

Relay the punch void

Passthrough for POST /punches/{id}/void, the editor's delete key and the machinery behind merging two adjacent spans. Same authority as /correct, and for the s...

Kamo·4w ago
Featurekamo-shared-library

A punch can be voided without being deleted

Four nullable columns and a second write-once transition on TimecardPunch. A void says the punch should never have existed — a double tap on the clock, an aband...

Kamo·4w ago
FeatureInitializerService

The void columns on hr_timecard_punch

Mirrors four new nullable columns on the TimecardPunch entity. A void is neither a delete nor a correction: it says the punch should never have existed — a doub...

Kamo·4w ago
Featurekamo-internal

Show the market onboarding panel when no CRM markets exist

/leads rendered the lead grid with an empty, disabled market tab bar for an org that had never configured a CRM market. It now shows the same onboarding panel /...

kamo·4w ago
August 12, 2026
Featurekamo-internal

The period graph, and a timecard you edit as a draft

Replaces the one-day timeline on **************** with a whole pay period, and changes what editing one feels like. The pills carry no text. They used to carry...

kamo·4w ago
FeatureSecurityService

Relay the editor's period range

Passthrough for GET /members/{id}/range, the period graph's read. from/to are forwarded only when present so TimecardService can resolve the member's own pay pe...

Kamo·4w ago
Featurekamo-internal

Raise a support conversation when somebody replies in it

Closing a support window is not leaving the conversation, but it was treated as if it were. ChatNotificationListener returned early on every SUPPORT_TICKET noti...

kamo·4w ago
FeatureMediaService

One conversation, many hands — join on open, name every message, re-open on a reply

A support ticket is worked by whoever is helping, not only by whoever it is currently stamped with. Assignment decides who the work is offered to and whose list...

Kamo·4w ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing