Live Change Log

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

17,876
Total Changes
4,587
Features
4,517
Fixes
32
Projects
Filter by project
All Projects17,876AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService352InitializerService299KBService74KlusterServices542MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,557kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,587Fix4,517Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 5, 2026
Featurekamo-login

Run a glimmer round the pane's gap every five seconds

A conic gradient centred on the pane, spun once per --glimmer-period, painted twice: a sweep filling the 15px gap, and a 2px rim on the pane's own border. The r...

Kamo·6d ago
Featurekamo-apps

The mark returns to the rail, governed by the Apps Site Logo Overlay

Reverts the relocation in 47e6e39. The invisible-logo problem it worked around is real — a mark drawn in the company's own brand colour can vanish on a rail pai...

Kamo·6d ago
Featurekamo-internal

One scrollbar, for every scroller in the app

The terminal tool window had a scrollbar worth keeping — 32px, with a button for each END of the scrollback as well as the usual step arrows, because in a long ...

Kamo·6d ago
Featurekamo-apps

Send the first-time-buyer answer with the application

The question was on the form and the answer went nowhere — there was no column for it until the shared library gained one. It changes which programmes are worth...

Kamo·6d ago
FeatureSecurityService

Serve the public mortgage application, addressed by product

Three unauthenticated endpoints under **************** plus the CRUD behind the organization's own state licences. **The organization is named by the PATH, nev...

Kamo·6d ago
Featurekamo-shared-library

Record whether a borrower says this is their first home

A first-time buyer is eligible for programmes nobody else can use, so a lead that does not carry the answer costs the officer a call to ask it. The public appli...

Kamo·6d ago
Featurekamo-apps

Rebuild the mortgage application as a real, white-labelled form

The page this replaces was a prototype wearing a production URL. It posted to `http://localhost:8082`, so no application it ever collected reached anything. It ...

Kamo·6d ago
Featurekamo-login

Seat every screen in a rounded pane under a corner ribbon

Every route now renders inside .kamo-pane: a card inset 15px from the browser edge with a 14px radius, a soft shadow, and overflow:hidden, so a page's own conte...

Kamo·6d ago
Featurekamo-shared-library

Give a lender somewhere to put the truth about itself

The public mortgage application page composed its legal footer out of nothing — a hardcoded California licence, an invented NMLS number, a fictional address — a...

Kamo·6d ago
Featurekamo-internal

Publish the policy addresses, the real state licences, and a link per product

Three things the public loan-application site could not previously be told, and one it was told wrongly. **Company Info gains Privacy Policy Address and Terms ...

Kamo·6d ago
Featurekamo-internal

Start a coder session from the Linux Desktop menu, at a model and effort you keep

The icon already opened a remote desktop and a remote terminal. The third thing people actually go to that machine for was reachable only by opening the Interac...

Kamo·6d ago
Featurekamo-internal

Finish the personal calendars panel, and put it where a member can reach it

PersonalProviderSection was scaffolding that nothing rendered, and it would not have worked if it had: it read GET /member/{id}, a route that did not exist, so ...

Kamo·6d ago
FeatureEmailService

Let a member connect their OWN calendars and contacts

The personal calendars panel asked for GET **************** which was never mapped -- so it failed on every open -- and for Google and Microsoft it had no way t...

Kamo·6d ago
Featurekamo-internal

Gate the user account on platform rights, not on which org owns it

Authored in a concurrent session on this machine and committed here at the user's request; recorded so the provenance is not guessed at later. The user account...

Kamo·6d ago
FeatureEmailService

Give every provider's folder tree the same shape before any client sees it

Reporting a folder's SPECIAL-USE attribute was not enough, because a server only sends one if it is configured to — and the KamoMail Dovecot in production sends...

Kamo·6d ago
Featurekamo-internal

Make Connect via OAuth on the CalDAV/CardDAV tab actually connect

The button raised alert('OAuth flow not yet implemented - configure credentials manually via the API'). It now opens the real Google Workspace / Microsoft 365 c...

Kamo·6d ago
FeatureEmailService

Connect Google and Microsoft calendars over OAuth, on the app the mailbox already uses

The CalDAV/CardDAV tab's Connect via OAuth button raised an alert saying the flow was not implemented and to configure credentials through the API. It now runs ...

Kamo·6d ago
Featurekamo-shared-library

Retry the member reads that fail first after a DDL

The member-by-id load is close to the first statement an authenticated request performs, so a catalog-version bump hits it before it hits anything else. That is...

Kamo·6d ago
FeatureMediaService

Send the sender's avatar with the message and its push

The chat notification carried `senderAvatar: ""` with the comment "avatar resolved on frontend", and the push carried no avatar at all. A browser can resolve on...

Kamo·6d ago
Featurekamo-shared-library

Retry a transactional method in a NEW transaction, and stop rights failing open

Two fixes that only make sense together. @RetryOnDbConflict retries a method OUTSIDE its transaction, so each attempt begins a fresh one. Retrying inside the t...

Kamo·6d ago
Featurekamo-marketing

Say what the Free plan does not charge, beside what the paid ones do

Now that Starter and Business each carry a one-time charge on the card, a Free card that says nothing about it invites exactly the wrong inference — the reader ...

Kamo·6d ago
FeatureSecurityService

Expose what a seat change will cost before it is made

Raising a subscription's seat count now raises an invoice — a per-seat startup fee follows the person, so ten hires on a $99 plan is $990 and a large account ru...

Kamo·6d ago
FeatureEmailService

Send an organization's mail as its own domain when its SPF says we may

The From address was chosen by asking who hosts the organization's MAILBOXES. That is a different question from the one that matters, and it was wrong in both d...

Kamo·6d ago
Featurekamo-shared-library

Let the console ask what a seat change costs before making it

changeSeats now raises an invoice for the startup fee on new heads, which turns a number in a dialog into a charge — ten hires on a $99 plan is $990, and on a l...

Kamo·6d ago
FeatureSecurityService

Record which domains authorize us, so their mail can go out as them

Transactional mail currently picks its From address by asking who hosts an organization's MAILBOXES. That is the wrong question. Whether we may send as chinilaw...

Kamo·6d ago
Featurekamo-shared-library

Record whether a domain's SPF authorizes us to send as it

Two columns beside the ownership and SSL flags, answering the third DNS question about a domain: may we put its name on the From line of the transactional mail ...

Kamo·6d ago
Featurekamo-internal

A put-away terminal's hexhead says whether it wants you

A member with six terminals minimized has one question about each: is that one waiting for me? The head now answers it in a colour. green working — nothing ...

Kamo·6d ago
FeatureSecurityService

Carry a terminal's activity state to the console

TerminalSummary gains `state`: busy, or waiting for its member. Read off the session's transcript — neither of which is knowable from here, which is why it trav...

Kamo·6d ago
Featurekamo-internal

Give a head the app's own tooltip, placed from where it sits

The label was the browser's native `title` box: unstyled, and put wherever the other 291 hover targets in this chrome use, arrow and all. A head is not a norma...

Kamo·6d ago
Featurekamo-marketing

State the startup fee, and stop claiming there isn't one

The site said "$0 setup fees" three times in the pricing page's metadata and listed "No mandatory onboarding fees" as an advantage over HubSpot. All of it is no...

Kamo·6d ago
Featurekamo-internal

Show the startup fee before it is charged, and where a deal overrides it

calculate-price has always returned a setupFee and the order wizard printed it nowhere, so a charge that runs to four figures on a large order reached the custo...

Kamo·6d ago
FeatureInitializerService

Seed the $99 per-seat startup fee on every paid tier

The loader passed null for setupFee on all four plans, so a freshly seeded environment priced onboarding at nothing while production charges $99 a seat — the ki...

Kamo·6d ago
FeatureBillingService

Bill the startup fee on both routes to a plan, and record negotiated terms

Two routes reach the same plan and only one of them was going to charge the new per-seat startup fee. A sales-written order bills through SubscriptionService, w...

Kamo·6d ago
Featurekamo-shared-library

Charge the startup fee, per seat, and let one customer out of it

The startup fee has been half-built for as long as the model has existed. SubscriptionPlan carried a setupFee, SubscriptionOrder carried a setupFee, OrderLineTy...

Kamo·6d ago
Featurekamo-shared-library

Retry the database errors Yugabyte expects a client to retry

Applying DDL bumps the catalog version, and every physical backend still holding the old one fails its next statement with SQLState 40001 — "schema version mism...

Kamo·6d ago
FeatureKlusterServices

Say whether a terminal is working or waiting for its member

Every terminal in the listing now carries `state`: busy, or waiting. It is the one question somebody asks of a window they cannot see, and it is what a minimize...

Kamo·6d ago
Featurekamo-internal

Pick the model and effort before starting a coder session, once

Send To AI dialog has, and the two are the SAME choice rather than two. Somebody who has settled on Sonnet at High has settled on it. Re-picking in the other p...

Kamo·6d ago
FeatureSecurityService

Carry the member's model and effort to a coder session

and deliberately not examined here. `coder_flags` on the agent is the one thing that decides what a session runs with — its own comment calls it "the security ...

Kamo·6d ago
FeatureKlusterServices

Let a coder session run at the model and effort the member picked

for a new session and for a resumed one alike, since `--model` and `--effort` are per-session flags either way. They are the ONLY part of the command a caller ...

Kamo·6d ago
Featurekamo-internal

Name a hexhead after the window it stands for

A hexhead's tooltip read "User w12" — the head id, which is the window id, in a string written for member avatars. A dock of six minimized windows was six ident...

Kamo·6d ago
FeatureSecurityService

Refuse a sign-in whose host names no organization

Such a host could sign in until now. It fell through to the workspace-choice path and succeeded on membership alone, which made it a door where none of the tena...

Kamo·6d ago
FeatureKlusterServices

A coder terminal wears the name coder gave the conversation

running had long since been titled "Startup fee implementation and Harmony account adjustment". Two separate things were swallowing that name. **The listing.**...

Kamo·1w ago
Featurekamo-internal

Show the sign-in lockout as a rule that cannot be switched off

SecurityService now applies a progressive sign-in lockout to every organization whether or not a row exists for it — five free attempts, then five seconds, then...

Kamo·1w ago
Featurekamo-login

Show the progressive lockout, so a held sign-in explains itself

The server now refuses sign-ins on a ladder — five free attempts, then five seconds, then locks of five, fifteen and thirty minutes, then a permanent block. Wit...

Kamo·1w ago
FeatureSecurityService

Progressive sign-in lockout, escalating to a permanent IP block

A wrong password now costs something, and the cost climbs. Counted since the subject's last successful sign-in: the first five failures are free, the sixth and ...

Kamo·1w ago
September 4, 2026
Featurekamo-internal

Show a member the redirect URI on their own domain

This is the screen the whole change is for. A member setting up Google Workspace with their organization's own OAuth app comes here to find the address to paste...

Kamo·1w ago
FeatureSecurityService

Serve each org the callback URL on its own domain

This endpoint is where a member finds the string they paste into Google's console, so it is the endpoint that was wrong: it returned only the redirect the org h...

Kamo·1w ago
FeatureVOIPService

Fall back to the org's own hostname for the Teams redirect

A redirect the org typed into its own registration still wins outright — Microsoft requires the URI replayed on the token exchange to match the authorization by...

Kamo·1w ago
FeatureMediaService

Send an org's own hostname as the meeting OAuth redirect

The same rule the mailbox flow now follows, for Zoom and Teams meetings: an organization on its OWN app registered that app against api.<its own domain>, so tha...

Kamo·1w ago
FeatureEmailService

Send an org's own hostname as the mailbox OAuth redirect

An organization that brought its own Google or Entra app registered that app in its own account, under its own brand, and is now told on its settings screen to ...

Kamo·1w 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