Tell a presenter, live, when nobody can book a time with them
A presenter whose declared hours have run out is the one state in this feature nothing reported: the booking page simply offers no times, the visitor leaves, an...
The demos booked on a lead, on the lead
GET **************** The lead page's Webinars section has called /api/webinar/leads/{id} since it was written and nothing ever served it — the live API answers ...
A window the member brings to the front lands with a light you cannot miss
Clicking a hexhead, or the strip of a window standing behind, brought the window forward with a faint shadow bloom (strip) or a 600ms green glow (hexhead) - eas...
A presenter's viewed stamp, so a booked session can badge them
The Support icon's webinar count reads WebinarAttendee.dateViewed. A presenter is not an attendee row, so a session booked with them was emailed and then never ...
A live demo button beside Start Free Forever
The home hero offered two things: start free, or read the pricing. It now also offers half an hour with a person. "Book a Live Demo", with "30 minutes" on a sec...
A page for unlimited email campaigns and drips, linked from everywhere it belongs
/email-marketing sells what shipped on 2026-09-16 (broadcast campaigns, drips, sending domains): unlimited, and 100% free with Business and Enterprise. The pag...
Play the kamo14 reel, and let it be paused
The recut reel (new closing logo shot, otherwise frame-identical, same 66s running time and chapter timings) is published under its own name. The kamo13 ladder ...
Encode the kamo14 reel
The marketing reel was recut (new closing logo shot) and uploaded as public/kamo14.mp4. It gets a new name instead of replacing kamo13 in place because the ladd...
Windows that do not fit the dock stand in rows behind it
A tool window that does not fit the front row now stands in a row BEHIND it, one title strip higher per row: its 42px title bar and 10px of body show above the ...
Seven link sets that match the nav, and careers goes to the careers site
The footer now lists Features, Services, Pricing, Company, Resources, Solutions and Legal, in that order. That is the top nav's own five categories plus the two...
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...
Every page shows how many times it has been viewed
A view counter now sits at the foot of every page, in the footer's bottom row beside Sitemap and Back to top: an eye whose iris is the site's hexagon, and the f...
Count the marketing site's page views, on the article or on the page
KBService now answers the view counter kamo-marketing shows at the foot of every page. Two endpoints, both {"views": n} with the view just counted included: ...
Page-view counters for the marketing site
Two tables behind the view count kamo-marketing now shows at the foot of every page, written by KBService's /internal/page-views endpoints. KbArticleView (KB_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....
Lifestyle logo uploads, config.json keys, and the LIFESTYLE watermark
The lifestyle logo is a fourth logo per brand (company and white-label), the decorative rendition the background watermark now draws by default. Its fallback is...
Lifestyle logo columns, and LIFESTYLE as the watermark default
The lifestyle logo is a fourth piece of branding artwork per brand, beside the full logo, the simple logo and the tab icon: the decorative rendition the backgro...
Drip campaigns
A drip is an automated sequence of emails a person enters when something happens: a lead arrives (by hand, imported, or from an integration), a lead's status or...
An imported lead is recorded as imported
LeadImportController created every row with the two-argument createLead, so a lead's history said source API with nobody acting, exactly like one sent in throug...
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'...
Drip campaign triggers, recorded where leads and members change
Drip campaigns start when something happens in the CRM, so the places that change leads and members now hand those events to EmailService's drip engine: - Lead...
Open on monthly, and sell 1- and 3-year terms as locking in today's rate
Most buyers come to compare what they would pay with no commitment, so HOME_TERM is now monthly. /pricing, the homepage plan strip, /calculator and the product ...
A campaign's replies go to NoReply, the member's e-mail, or a custom address — NoReply by default
The editor's Reply-To becomes three choices (CampaignReplyTo), kept in the existing reply_to column. No DDL. - NO_REPLY (empty column, the default): Reply-To: N...
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...
Bounces for organizations' sending domains reach EmailService through postfix-k3m1-inbound
A campaign sent through the shared relay has its From at the organization's sending domain as its envelope sender, and that domain is a CNAME to contact.kamocrm...
Bounces to org sending domains come home, test sends are signed, and the relays' DNS is read
Async bounces. A campaign's envelope sender is its From at the organization's sending domain, whose MX (through the CNAME to contact.kamocrm.com) is the shared ...
Postmaster@ and abuse@contact.kamocrm.com reach KamoCRM — the shared relay's name receives its checks
contact.kamocrm.com is the shared org relay's name (47.181.8.86's PTR, MX contact.kamocrm.com), and its MX is 47.181.8.86 → k3m1, where postfix-k3m1-inbound ans...
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...
Campaign mail is signed as, sent from, and routed by its verified sending domain
A campaign may name its own From on a verified domain; otherwise it goes as the org's bulk sender — which must itself be on a verified domain (saveSender refuse...
Domain Setup's API, the shared relay's sender map, and a sweep that confirms records live
**************** GET the tab (VIEW_BULK_EMAIL), GET lookup for the add form, POST add, POST {id}/check, DELETE (MANAGE_BULK_EMAIL); every write answers with the...
Sending domains — add one, read its DNS record by record, verify it, know what an address may do
A sending domain (news.acme.com) is kept in the org's encrypted bulk provider blob with its DKIM key. SendingDomainChecker reads what receivers will see — SPF e...
DKIM keys and a relaxed/relaxed rsa-sha256 signer for organizations' sending domains
DkimKeys generates a domain's RSA-2048 key (kept in the org's encrypted bulk provider blob) and the TXT value a member publishes at kamoXXXXXX._domainkey.<domai...
DNS for sending domains — each domain's own nameservers first, SPF evaluated, DNS provider named
LiveDnsResolver asks the zone's authoritative nameservers (found through 1.1.1.1/8.8.8.8), so a record a member just saved at their DNS provider is seen at once...
The shared org relay (47.181.8.86) is seeded for every organization; the platform relay stays KamoCRM's
PlatformRelayProperties now knows both in-cluster relays: postfix-bulk (47.181.8.87, hello.kamocrm.com) and postfix-orgs (47.181.8.86), with the egress address,...
Postfix-orgs, the shared bulk relay every organization sends through as 47.181.8.86
KamoCRM's own campaign mail keeps leaving through postfix-bulk (47.181.8.87) and regular mail through postfix (47.181.8.84). Every other organization's campaign...
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...
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 widget reads by stage, the stages the campaigns screen files by
The launchpad widget's read now groups and counts campaigns by the stages /marketing/email's tabs use: In-Progress (sending), Not Started (draft or scheduled), ...
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...
Archive a campaign, and the widget leaves archived ones out
POST **************** and /unarchive (MANAGE_BULK_EMAIL) set and clear the campaign's archivedAt, and CampaignDTO carries it. The /marketing/email screen files ...
A campaign can be archived
EmailCampaignEntity gains archivedAt (archived_at): when a member archived the campaign, null while it is not. The /marketing/email screen gets an Archived tab ...
A live read and live frames for the Email Campaigns home widget
GET /api/email/widget/campaigns is the launchpad widget's one read, built for a pane that sits on every campaign viewer's home page all day: lean rows with no b...
The Email Campaigns widget arrives on for everyone who can open the campaigns
EMAIL_CAMPAIGNS_WIDGET and its ADDED, OPTIONAL and MOVABLE policies seed from VIEW_BULK_EMAIL on the boot that introduces them, so the pane lands on the launchp...
The Email Campaigns home widget's five rights
EMAIL_CAMPAIGNS_WIDGET (321) and its four policy children (322-325), hung off VIEW_BULK_EMAIL: every read behind the widget, the campaign list, its counters and...
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...
Solutions moves under Resources, one level down
The top row carried five categories before the phone number, the language selector and three CTAs. Solutions is now the first item inside Resources, above the t...
Application development, web design and web marketing
**************** argues that a business paying an agency per seat is paying for software the agency did not build, host, or keep running. It ends by asking who ...
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.
