Pages stay under the nav, the Interaction Center and the tool windows
The same two mistakes as /calendar's, everywhere else they were made. AuthedChrome's content box names no z-index, so a z-index in page code is a level in the R...
The drip enroll dialog finds leads by email
The lead search behind it now matches a lead's email (kamo-shared-library 992569a6, live with SecurityService 5c7319a), so the dialog says so: name, email, comp...
The calendar stays under the nav and the tool windows
/calendar positioned itself over the viewport — fixed at 56/80 with z-index 1000 — instead of filling the content box AuthedChrome gives every page. That box na...
Drip campaigns on /marketing/email — triggers, a visual builder, people and performance
/marketing/email gets a Broadcasts / Drips switch (?view=drips). The drips view lists every drip as a card with its trigger, its sequence and live counts, KPI a...
The Lifestyle Logo, a fourth logo per brand and the default background watermark
Behavior & Labeling gains a Lifestyle Logo slot beside the full logo, the simple logo and the tab icon, in both the company and the software (white-label) rows....
The campaign editor's Reply-To is a choice — NoReply, Member's E-mail or Custom, NoReply by default
The free-text Reply-To under the From becomes CampaignReplyToPicker, three choices that each say where replies land: - NoReply (default): NoReply@<the campaign'...
Rebuild for the Bulk Email settings page's hand-written translations
kamo-translation-dictionary de9ab66f writes Domain Setup, Sending, Opt Out and Deliverability, and the campaign screens' new From picker and sending-domain stri...
Outbound E-Mail Hosts shows the bulk relays as receiving servers see them
A "Bulk relays" card above the platform hosts: the shared relay every organization's sending domains leave through (contact.kamocrm.com, 47.181.8.86) and the pl...
Bulk Email gets Domain Setup and sub-tabs, /marketing/email explains what is missing, campaigns get a From picker
Settings → Email → Bulk Email is now four sub-tabs in ?sub=: Domain Setup · Sending · Opt Out · Deliverability. The member lands on Domain Setup until a sending...
Rebuild for the Email Campaigns widget's hand-written translations
kamo-translation-dictionary 93728a83 rewrites home.widgets.emailCampaigns by hand in 20 languages, replacing synced values such as de "Eins eins eins eins" for ...
Email's Deliverability tab has a settings-menu entry
The tab renders for whoever may manage the opt-out list (MANAGE_EMAIL_OPT_OUTS or the organization owner), but the settings menu never listed it, so settingsMen...
The scrollbar guard and the recipient-status tests pass again
Both were red on main, and vitest does not run in CI, so nothing noticed. - oneScrollbar.test.ts ("is the only thing in the app that styles a scrollbar") fai...
One copy of the Email Campaigns list's two-column comment [skip ci]
59a13aa2 moved the comment beside the state it explains and left the original above rowsKey. Comment only; nothing to build.
The campaign tabs get scroll arrows back, without hiding the selected tab
On a screen too narrow for the five sub-tabs, the strip now shows left and right arrows beside it, as the maximized-window tab strip does. It had none since the...
A live send in the Email Campaigns widget gets a spotlight card
With one send in progress, the In-Progress tab was a single thin row in a pane with room for far more, at the moment the widget matters most. When every campaig...
A checkbox, button or link inside a grid row no longer opens the row too
The ⋮ bug from /marketing/email, in the six other grids that have it. AG Grid fires rowClicked from its own native listener on the row container, which runs bef...
Email Campaigns widget tabs are the campaigns screen's stages
The widget filed campaigns under its own Live / Sent / Drafts, which put a cancelled campaign under Sent and a scheduled one under Live. Its tabs are now In-Pro...
The campaigns list follows what colleagues do to a campaign, live
BulkEmailWorkspace takes the change frames useEmailCampaignsWebSocket now delivers (onChanged, d0b56adf). A frame names a campaign and what happened to it, neve...
The Email Campaigns widget, live on the launchpad
A new home widget, email.campaigns, on the launchpad of everybody who can open the campaigns. Its five rights (EMAIL_CAMPAIGNS_WIDGET, 321-325) hang off VIEW_BU...
In-Progress, Not Started, Paused, Complete and Archived tabs, and the ⋮ opens its menu
/marketing/email splits the campaigns into five sub-tabs, each with a live count, and every campaign is under exactly one: - In-Progress: sending - Not Started...
Email Campaigns is the first Marketing tab
The Marketing Tools tab strip now reads Email Campaigns, Marketing Materials, Social Media, Tracking Codes. Bulk Email moves to the front under its new name, an...
The launchpad bands open into the bar's own dropdown surface
The administrator bar and the pinned-app bands are painted with the top bar's gradient, and then answered a hover with something from another app entirely: a wh...
Let an admin choose who is copied on presenter emails
The Scheduled Webinars tab gains an "Additionally Notified" section beside the list of webinar types. The team members chosen there get a blind copy of every au...
Open and click rates, tracking choices, 10,000+ outbox counts, person-asked on leads
- Campaign card: opened and clicked, as a share of delivered mail (or "Not tracked"). - Deliverability > Campaign rules: open and click tracking, the platform's...
See who a campaign reaches, and why not everyone
- Campaign preflight card: "1,000 selected · 742 eligible · 258 skipped", with each reason (unsubscribed, bounced before, disposable, role address…) opening...
An organizations-created icon beside every member and team member
The Members and Team Members tabs on /account get a column beside Name: a filled building in the brand colour with a count for somebody who has created organiza...
An organization's and a member's own page transition
The page transition is now chosen at three levels. The platform's stays on Platform Administration → Transitions; an organization can choose its own on Behavior...
Five more page transitions, each with its own properties
Aperture, Curtain Split, Venetian Blinds, Liquid Wipe and Shatter join Tile Dissolve. Every transition is now an effect in app/lib/transitions/effects, drawn by...
Add recipients and Send to latest on a campaign that has gone out
- A campaign's progress page has Add recipients: the recipients step in a dialog (upload, IDs, the All boxes, addresses), saved in slices as the editor save...
Tile Dissolve's tile size and tile colour, set per transition on the Transitions tab
Each transition now carries its own properties, stored per transition beside the active one, so switching transitions keeps each one's choices. Tile Dissolve ha...
A remounted shell no longer leaves the page cover standing on reload and sign-in
On every reload and every first document after sign-in the cover stayed up over the page, while in-app navigation revealed it fine. PresenceWrapper renders bare...
The recipient list's last page is the last page, and addresses sit level with their rows
Last reads a full page back from the end, so when a list does not divide into whole pages it overlaps the page before — and was numbered from the start, as page...
Shorten admin bar labels to Billing, Stats, Roles, Block, Log
The panel heading keeps each screen's full name via titleKey, as White Labeling and Apps already do.
Page transitions — how a navigation is seen, the wave's timing, and the plan
The page cover and its Tile Dissolve reveal, in place of the loading screen
Between pages the main view area (never NavTop or NavPri) is now covered in the organization's primary colour with its full logo centred on it, painted with the...
A Transitions tab to choose and preview the page transition
Platform Administration → Configuration → Transitions, gated by the new MANAGE_PLATFORM_TRANSITIONS platform right and registered everywhere a console tab is: t...
The campaign recipient list is paginated, with totals
The recipients grid on a campaign now pages like a list of billions should: First, Previous, Next and Last, rows per page, "101–150 of 3,916" and "Page 3 of 79"...
"All leads / accounts / applications" on a campaign, at any size
Each id box on the campaign editor now has an "All …" box beside it. Ticked, the box folds into a live panel for everyone of that kind the signed-in member can ...
The Opt Out tab keeps its content off the card walls
SettingsView's white card and TabPanel carry no padding; every settings tab supplies its own, and this one did not, so its heading, buttons, figure cards and li...
Pages refetch on org change events instead of loading once
Every successful write through forwardToApi now publishes rt.org.{orgId}.{domain} on core NATS (the domain is the first backend path segment, skipping security/...
The Opt Out tab and the lead chip update live
Both subscribe to **************** (EmailService and SecurityService publish after every committed change; MediaService relays), so a recipient unsubscribing, a...
Pages and settings tabs fill their width instead of a centred column
Drop the max-width and auto-margin caps that held pages and settings tabs to a slim centred column. Where lifting a cap would leave one column of form fields st...
The organization owner sees the Opt Out tab, its menu entry and its card
A brand-new right is held by nobody the day it deploys; gating only on MANAGE_EMAIL_OPT_OUTS would hide the tab from whoever could grant it. Matches Sales Scrip...
House rules for UI work — layout, look, shared parts, live data [skip ci]
Pages fill their width, build from the shared components, colour only from the globals.css tokens, and take changing data over STOMP topics instead of loading o...
A background nothing can draw is reported, not a lost batch
The org setup wizard's Backgrounds step resized each picked or suggested image in a loop with no catch. Since resizeBackgroundIfNeeded now refuses, with a reaso...
A saved background shows the member's picture, never the platform's
Behavior & Labeling pointed each tile at the slot's public URL the moment the commit returned, before provisioning had written the slot (it had not even been re...
Let the server say whether the viewer sees every organization
/network chose between all-networks and my-networks from the platform-rights context. That read fails closed and stays failed until the page reloads, and a god ...
Email opt-out chip and panel on the lead page
Beside the lead's email address there is now a chip saying whether the person may be emailed: Emails allowed, Opted out of all email, Paused until a date, Some ...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
