Live Change Log

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

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

Drop the unused dense prop from OrgOAuthAppSection

No call site passed it, and all eight embeds want the full header. A prop kept for a caller that does not exist is API surface someone has to reason about later...

Kamo·1w ago
FixMediaService

Build against the two-field SystemBugDispatchDTO

Unrelated to the OAuth work in the previous commit — MediaService main has not compiled since kamo-shared-library ad78dfa8 added terminalSessionId and terminalT...

Kamo·1w ago
Fixkamo-shared-library

An empty platform registration is not "connect with Kamo's app"

isPlatformEnabled now also requires a client id, matching what OrgOAuthClientController reports as platformEnabled. Without that the meetings screen and the bri...

Kamo·1w ago
Featurekamo-internal

A switch per platform registration, and bring-your-own on the org side

Each OAuth2 card on Platform Configuration → Advanced gets an enable/disable switch in its top-right corner. It writes only the enabled flag, is unavailable unt...

Kamo·1w ago
FeatureVOIPService

Teams Phone falls back to the org's own Entra app

The per-phone-server credentials still win — that is the most specific source. What changes is the fallback underneath them: the org's own MICROSOFT_TEAMS regis...

Kamo·1w ago
FeatureMediaService

Resolve Canva, Meta, X and meeting credentials per organization

Every flow here now reads whichever app the org is on — its own registration if it brought one, otherwise Kamo's platform app. The Canva and Meta entry points ...

Kamo·1w ago
FeatureEmailService

Resolve mailbox OAuth credentials per organization

Google, Microsoft 365 and Zoho mailbox connects now read whichever app the org is on — its own registration if it brought one, otherwise Kamo's platform app. T...

Kamo·1w ago
FeatureSecurityService

Org-side CRUD for an organization's own OAuth2 client

The org-scoped twin of PlatformOAuthClientController, behind **************** Same DTO shape, same encrypt-on-write, same never-return-a-secret rule, plus platf...

Kamo·1w ago
Featurekamo-shared-library

An organization can bring its own OAuth2 client

Until now the client id and secret for every OAuth provider came from one platform-wide registration, so an org could only connect what Kamo had registered — an...

Kamo·1w ago
Featurekamo-marketing

A product gallery at /screenshots

A page for showing the product as it actually looks. It is built around a data module rather than markup, because more screenshots are coming and adding one sho...

Kamo·1w ago
Featurekamo-internal

Start one from the Interaction Center tab

The tab listed terminals and gave a member no way to open one — the only starting points were the Linux Desktop submenu and the navigator's header, neither of t...

Kamo·1w ago
PerformanceDocsService

The profile endpoint stops loading the whole board

Its own comment said it existed so a page could paint the employer "without pulling every advert down with it", and the line under that comment called board() —...

Kamo·1w ago
Fixkamo-internal

Read the theme folder from the host on a white-label workspace

orgSlug reached DynamicMetaLoader only when the organization was named via ?org=, so on internal.<customer domain> - where the host names exactly one organizati...

Kamo·1w ago
FixDocsService

A country is not its enum name

Every card on every careers surface has been printing "United states" — the words after the first lose their capitals when an enum name is prettified — and "Côt...

Kamo·1w ago
Fixkamo-register

Paint a white-label signup screen from the host's organization

Same defect as kamo-login a200fc6, same cause. getThemePath()'s last resort derives a theme folder from the hostname - the name folders had BEFORE the 2026-08-2...

Kamo·1w ago
Fixkamo-login

Paint a white-label sign-in screen from the host's organization

Every image and colour was missing on login.<customer domain> for any organization created after the 2026-08-26 alias migration. getThemePath() resolves an exp...

Kamo·1w ago
Featurekamo-register

Remember which job advert brought a candidate here

The public careers site links to /team?jobId=<uid>. Registration is several steps, crosses hosts and bounces through email verification, so the uid is parked in...

Kamo·1w ago
Featurekamo-internal

Publish an advert externally, and pick the candidate back up

Three changes, all in service of the new public job board at careers.<apex>. The posting editor gains "list on our public careers site". It sits with status an...

Kamo·1w ago
ChoreKlusterServices

Careers joins the documented alias list

kamo-careers serves the org's public job board at careers.<apex>. The list is informational — the log-scan mechanism is what actually mints certificates — but t...

Kamo·1w ago
ChoreSecurityService

Baseline the by-host branding endpoint

**************** refused /org/public/by-host/{host}, which is exactly its job — a new mapping that resolves no session is reachable without credentials through ...

Kamo·1w ago
FeatureDocsService

The anonymous API behind careers.<apex>

The public job board reads this. It is the only surface in Careers with no session, so the safety comes from the QUERY rather than from a rights check: PublicCa...

Kamo·1w ago
Featurekamo-shared-library

The two columns a public job board needs

publish_externally decides whether an advert reaches careers.<apex> at all. It is a separate axis from status: an internal-only posting is fully AVAILABLE and m...

Kamo·1w ago
FeatureSecurityService

Serve an org's branding from the host it is browsed on

A white-label sign-in screen is reached at login.<customer domain> with no ?org= on the URL and nothing in sessionStorage, so the front end has no way to name t...

Kamo·1w ago
Featurekamo-shared-library

Careers is a platform alias, not an org's own

OrgResolutionService.byHost reads a leading label that is not a known platform alias as an ORGANIZATION's alias within the domain behind it, so without this ent...

Kamo·1w ago
September 3, 2026
Fixkamo-internal

The tab strip declared minHeight twice, so the build never type-checked

Adding icons to the panel tabs appended a second `minHeight` to the same `& .MuiTab-root` literal instead of replacing the old one. TypeScript rejects a duplica...

Kamo·1w ago
FixMediaService

The incoming-call deep link must use kamocopilot://

KamoMobile's kamomobile:// scheme is step 2 of a rename that has not happened. The published binary registers kamocopilot alone, and a deep link to an unregiste...

Kamo·1w ago
Featurekamo-internal

Footer Badges — a row of images under the signature

The Content tab's 'Footer Image' was one picture chosen from three fixed sources and sized by a percentage. It is now 'Footer Badges': the same three plus anyth...

Kamo·1w ago
FeatureInitializerService

Email_signature_badges, and the columns that order them

The footer badge library plus footer_badges / footer_badge_spacing / footer_badge_height on email_signature_templates. A runner and not just ddl-auto for the u...

Kamo·1w ago
FixKlusterServices

The AI hand-off raced tmux, so nothing was typed and nothing named

Caught by running it on the machine: the terminal opened at the right path, with no command in it and no title. One race, both symptoms. `bootstrap` runs strai...

Kamo·1w ago
FeatureEmailService

A library of footer badges, and the row each scope prints

The signature footer went from one image to a row of them. The library is org-wide; the selection and its order are per scope, so an image uploaded while editin...

Kamo·1w ago
FeatureConversionService

Resize an image by height, keeping its format and transparency

Backs the email signature footer badges, which are downscaled to 150px tall on upload. resize-bg could not be reused. It exists to make a wallpaper cheap to sh...

Kamo·1w ago
Featurekamo-shared-library

The schema behind a row of footer badges

The email signature footer held one image, named by footer_image_source and sized by a percentage. It now holds a ROW of them: the three built-in sources plus a...

Kamo·1w ago
Featurekamo-internal

Add the VOIP_CALL_EVENTS scope

Lets an org issue kamo-asterisk-support a key for reporting ringing extensions, separately from VOIP_RECORDING_UPLOADS. Uploading a recording after the fact and...

Kamo·1w ago
Featurekamo-asterisk-support

Report ringing extensions so a member's mobile rings

The AMI client logs in with 'Events: off' and only sends actions, so nothing on a customer's FreePBX ever told the platform a call was arriving. That silence is...

Kamo·1w ago
FeatureAPIService

API-key surface for live call events from a customer PBX

Companion to VoipRecordingUploadController, on a deliberately separate VOIP_CALL_EVENTS scope: uploading a recording after the fact and making somebody's phone ...

Kamo·1w ago
FeatureVOIPService

Let an on-premise PBX report a ringing extension

RingCentral and JustCall publish INBOUND_RINGING from their webhooks. FreePBX and KamoPBX publish nothing -- they are the customer's own Asterisk and nothing wa...

Kamo·1w ago
FeatureMediaService

Ring a member's phone for an incoming call

VoipStompRelayController relayed voip.call.* ringing events to the browser and deliberately never pushed them, reserving incoming-call alerting for 'the future ...

Kamo·1w ago
Featurekamo-internal

Send to AI opens the terminal it runs in, and the tabs get icons

A dispatch now comes back naming a terminal, and the console opens it. That is not a courtesy view of something already underway — the hand-off is PREPARED on t...

Kamo·1w ago
FeatureKlusterServices

Pin the session id, and link the terminal session into VS Code

`--session-id <uuid>` is chosen at prepare time rather than left to the CLI, which is what makes the editor hand-off deterministic: the id is known before the s...

Kamo·1w ago
Fixkamo-internal

Apply in one request, and say why a role cannot be applied to

Follow-up to a review of my own commit. Six real findings. APPLYING IS NOW ONE REQUEST. The résumé used to upload after the application was created, and a fail...

Kamo·1w ago
FixDocsService

A REQUIRED resume is now actually enforced

A review of my own commit found the enforcement it claimed. JobApplicationService carried the comment "a REQUIRED resume is enforced at that point by requireRes...

Kamo·1w ago
FeatureSecurityService

Send to AI now runs in a Remote Terminal the operator can watch

The dispatch prepares the hand-off on the dev machine — screenshots, video and the composed prompt written to disk — and answers with the terminal it will run i...

Kamo·1w ago
Featurekamo-shared-library

A dispatch names the terminal it is running in

Send to AI is hosted in a Remote Terminal now, so the answer has to say which one — the console opens that window, and opening it is what starts the session. B...

Kamo·1w ago
FeatureKlusterServices

Host a Send-to-AI dispatch in a Remote Terminal

composed prompt — and answers with an opaque TOKEN. A terminal that connects command typed into it. THE TOKEN IS THE WHOLE SECURITY DESIGN. `bootstrap=<command...

Kamo·1w ago
Fixkamo-internal

The navigator had no surface of its own, so it was transparent

ChatNavigatorPanel draws no background — it is a positioned, animated shell, and the column inside it is what makes it opaque. ChatSwitcherColumn supplies `bg-w...

Kamo·1w ago
Featurekamo-internal

Jobs Available on /hr, and a Careers tab for every member

Two surfaces over one feature. /hr/careers is where HR writes the adverts and reads who applied; **************** is the internal board an employee browses and ...

Kamo·1w ago
FeatureInitializerService

Scan hr.careers, and drop the frozen work-location CHECK

Two changes, both required before the careers entities can reach the database. The @EnableJpaRepositories list is an explicit array while @EntityScan is wildca...

Kamo·1w ago
FeatureSecurityService

Seed the two careers rights onto HR's existing authoring group

MANAGE_JOB_POSTINGS and VIEW_JOB_LISTINGS are inserted as NOT_SPECIFIED like every new right, so without a seed the /hr/careers tab and the member Careers tab w...

Kamo·1w ago
FeatureDocsService

/api/docs/careers — job postings, the member board, and applying

Two controllers behind one feature, and the split is the point. /careers/** is HR's and requires MANAGE_JOB_POSTINGS; /careers/member/** is the employee's and r...

Kamo·1w ago
Featurekamo-shared-library

Job postings and applications — the schema behind /hr/careers

Two entities, six enums and two repositories under com.kamo.z.shared.hr.careers, plus the three shared types the feature had to widen. JobPosting is three grou...

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