The campaign editor writes edge to edge, merge tokens in their own column
The subject sits under the campaign title and the audience beside the status chip, so the compose step is the email body alone, filling the middle of the page, ...
Recipient rows carry contacted, and already-sent rows keep their mark beside the status
EmailService's recipient DTO now reports whether the campaign has already emailed each address. The mapper carries it through, together with lastError, and fill...
The campaign From field says when the bulk relay would refuse it
The campaign's own From field, defaulted from the bulk provider, warns when the address is off the provider's domain, as mail that may land in spam. On the plat...
A relay that never signs in counts as a configured bulk sender
/marketing/email let an organization send campaigns only once its bulk provider had a stored password. The platform relay listens on port 25 with no TLS and no ...
Recipient grid fills name, source and error from either row shape
The campaign recipient grid read name, sourceType and errorMessage from rows that only carried email, status, sentAt and lastError, so three of its five columns...
Warm-up pacing banner on /marketing/email
While the new host warm-up is pacing, campaigns go out far more slowly than their own settings say, and nothing on the campaign said why. The campaigns workspac...
Typed bulk sender client with field errors and the warm-up endpoints
The client knew a provider status called PENDING that the backend never sends, so a sender that was saved but not yet tested fell through to "Not configured". I...
Connection rule, presets and warm-up view model behind the bulk sender
The pure pieces the new screens are built on, each with tests: - the backend's port-first connection rule, mirrored so the form can say how KamoCRM will conn...
Rebuilt bulk sender tab with a new host warm-up panel
The Bulk Email Sender tab is rebuilt from one long form into a set of cards over a draft of the saved state: - a masthead with the live status (a saved but unt...
A missing mailing address no longer blocks sending
The preflight treated an org with no address on file as an error and kept Send and Schedule disabled. The address still goes in the footer when there is one; wh...
Preview the email as sent, a Custom / No Template audience, and a real From field
Preview: a dialog that renders the editor's own buildBodyHtml() output - the string Save stores and the dispatcher sends - so the audience's header, signature a...
NoReply Outbound, a god-only audit of mail sent as the platform NoReply address
A third section under Mail, shown only to god-eligible members, opens /messages/outbound/noreply: every message EmailService handed to the relay as the platform...
The campaigns grid read counts the API never sent
EmailService's CampaignDTO carries a campaign's counters flat (totalCount, sentCount, failedCount, suppressedCount, bouncedCount, queuedCount), but every screen...
A tracking link can land on the white-label CRM fees article
Adds **************** to the destinations the tracking-link picker offers on /marketing/tracking, with its own icon. The path is locale-free like its siblings: ...
The launch bar ends at the form column, clear of a docked chat window
On /network/create the readiness meter and the Launch organization button sat in a bar across the whole page, under the brand preview too - exactly where docked...
A department's Select checks the members it is showing
The Directory's per-department Select used to switch the whole list into select mode with nothing checked, and read "Done" until pressed again. It now checks ev...
Void an organization from Platform -> Configuration -> Organizations
The Organizations tab gains Active and Void sub-tabs, and each organization's drawer a way to void it β or, on the Void tab, to restore it. - Active / Void sub...
Binders and Uploads read as live buttons in the org's brand
The two tabs looked disabled because they were: a MUI Tab with no <Tabs> parent defaults to textColor="inherit", which draws the whole tab at 60% opacity unless...
Topic titles in the bar's dropdowns sit on a darker plate of the brand
A menu's own name at its top and every section heading (Support's "Online Support", "Bugs & Enhancements", "Training"; Docs' "Create new") now sit on a rounded ...
Rebuild for Doc Manager's "Docs & Files" tab label
No code change. The label comes from kamo-translation-dictionary 649b24cb, which the image build clones into messages/ at build time, so it only reaches the sit...
Faces on messages only in conversations of three or more
A face beside every message tells people apart, and between two people the side a message is drawn on already does that - so the corner face now appears only wh...
Every message wears its author's face, on the bubble's corner
In every chat popup tool window - Chat, Support, Exec2Exec, Social, SMS, AI Chat - each message now carries a 16x16 photo that overlaps the bubble's top-left co...
The Signature Requests tab, and a colleague's save in the template editor
Signature Requests, between Templates and Common in the Docs manager: every document the collection's templates sent out for signature, in a grid paged on the s...
Add a meeting link to the conversation - always the platform's Kamo Meet
Both sides of an Exec2Exec window now carry the camera the other chat windows have: Add a meeting link. The meeting is created by MediaService as the PLATFORM o...
The desk's filters, faces and presence; an Exec2Exec badge that burns
Interaction Center > Chats > Exec2Exec gets two filters under the sub-tabs: Org Owner (All | Org-less | Org Owner) and Order By (Last Message | Latest Sign In) ...
Files and Templates, version history, and versioning settings
Members asked for documents that keep their history the way their organization chooses, and for templates that stand on their own instead of the Originals/Modif...
Kamo-careers picks up a branding change within a minute
The comment beside the Careers Logo Overlay said the careers site re-reads config.json hourly. It re-reads it every minute since kamo-careers 14c9ddb, which fix...
A Nav Logo Overlay and a Careers Logo Overlay
Behavior & Labeling gains two more logo overlays in the vocabulary the other six use - a token, resolved against the org's own palette: - "Nav Logo Overlay", d...
The rim's lead current stays white-hot all the way round
Its gradient was pinned to the hexagon's box rather than travelling with the arc, so for a third of every lap the current was gold on the gold rim and simply va...
A minimized Exec2Exec head runs a current of light round its rim
A line to KamoCRM's executives must never sit in the dock looking like one more chat. Its minimized head now carries an energy rim: a gold-to-white-to-sky arc r...
A window's scrollbars no longer show through the window on top of it
Maximizing a tool window left a column of scrollbar buttons from the window behind it floating in the middle of the pane, and two overlapping floating windows s...
MUI text is set in Geist, not Helvetica and Arial
I18nProviders handed the Geist font to createTheme as an overlay, and overlays are merged in after the theme is built. By then MUI has already written its Robot...
Every Chats sub-tab fits, with the same gap between each
The Interaction Center's Chats strip gave its seven tabs seven equal shares of the 550px pane, 78px each whatever they said. "Team Members" needs 91px, so it wa...
NavTop's Exec2Exec control is the desk for a KamoCRM executive
For a member with Exec2Exec Access standing in the platform organization, the control now counts messages from clients they have not viewed (GET ***************...
One brand-painted dropdown surface for the whole top bar
Every dropdown that hangs off NavTop β the eight option menus (Mail, Docs, Call / Text, Calculator, Support, Settings, Linux Desktop, Games), the availability p...
Stop a revoked executive's window; raise only chats waiting on the desk
- A MEMBER_REMOVED naming the viewer unsubscribes the transcript, empties it, disables the composer and says why. Revoking Exec2Exec Access used to leave th...
Show who from KamoCRM is on the chat, and how to reach them
The customer's window now lists the KamoCRM executives on their conversation, re-read whenever somebody is added or removed. The line shows NAMES only, with tit...
Stop at a pinned Interaction Center; keep windows under every menu
Two follow-ups to 0c5ef994 (maximize beside the nav). A PINNED Interaction Center now takes its width away from the maximized pane. Pinned, the panel is worked...
Maximize beside the nav, not over it
A maximized tool window used to take the whole viewport. It, its navigator column and its tab strip were all pinned at (0,0) at the dock's stacking level, over ...
Raise the conversation when a customer writes, and on a reply
An executive's message reached nobody at KamoCRM: nothing on the console read an Exec2Exec frame. Exec2ExecDeskOpener now raises that customer's window β named,...
The executive channel in the console
A direct line between a customer executive and the KamoCRM executives: the chat half of the support window with no ticket, no status, no rating and no queue. T...
Finish the category page β width, one back arrow, real words
The three managers were written to sit inside a nested tab of a tab. As a page of their own they needed the space they now have. - Configuration capped itself ...
The nudge the inviter could never send, and a chat invite that rejoins
**Nudge.** The rail hid the button unless it was the opponent's turn, which reads as a rule about fairness and is a rule about nothing β the server has never ha...
One "on" colour, and a retry that does not cascade
Two things left over from the categories table. The allow swatch was tinted by whether the setting is locked β primary for locked, a green for unlocked. The lo...
Categories are a table, and each one opens as its own page
/settings/features/docs carried eight tabs: General, then seven that each mounted the same three managers against a different ordinal. Seven copies of one scree...
Cover the topInset the maximized window already honours
ToolWindowShell has taken a topInset since the tab strip landed β it starts the window below the strip and stops it short by the same amount, or the strip is dr...
Stop forking the signing surface, and offer the whole signed record
kamo-internal carried a hand-copied fork of the external signer app β fifteen files under app/lib/esign, app/stores/esign and app/components/esign/signing, each...
The envelope dashboard could not tell "not emailed" from "not opened"
The warning naming an undelivered invitation lives in the send response, so it is gone the moment the dialog closes. After that the dashboard is all there is β ...
A Signature Date field, and a send that admits when nothing was emailed
**"Sent" was not the same thing as "delivered", and the dialog never said so.** ESigService discarded the result of every invitation email, so a send whose mail...
Open at the front of a new session, stay put inside one
Two rules that only make sense together, and the panel did the opposite of both. A member arriving in a NEW browser tab β a fresh sign-in, a second tab opened ...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.