KamoCameras app (39) and its four rights (333-336)
VIEW_CAMERAS is the hub; MANAGE_CAMERAS, MANAGE_CAMERA_SITES and ACCESS_ALL_CAMERAS hang off it. PHI module CAMERAS is BLOCKED_PENDING_WORK until a per-view aud...
Label pages are no longer short; the pager's notes say so
EmailService 4f90690 pages a label by joining it to the index, so its pages are full until the last and its total is exactly what they show, and it now counts M...
Label pages are no longer short; the pager's notes say so
EmailService 4f90690 pages a label by joining it to the index, so its pages are full until the last and its total is exactly what they show, and it now counts M...
Labels page in one date order with an exact total; Microsoft 365 folders are counted
Labels - A label was paged through the join table by UID and each page sorted by date afterwards. UIDs only order mail within one folder and a label spans f...
The pager counts from the server's own total
EmailService now sends each listing's size in X-Total-Count (emailservice 12926f6) beside the bare array it always returned. The email proxy carries that header...
The pager counts from the server's own total
EmailService now sends each listing's size in X-Total-Count (emailservice 12926f6) beside the bare array it always returned. The email proxy carries that header...
Message listings say how many messages they hold (X-Total-Count)
The message list in kamo-internal can now be browsed by pages, and its pager needs the listing's size for "51-100 of 1,240" and a Last button. Every listing ans...
Members choose to scroll the message list or browse it by pages
The second column only ever loaded more mail as it was scrolled. A member can now pick Scroll or Pages under Filters ("Browse the list"). The choice is kept per...
Members choose to scroll the message list or browse it by pages
The second column only ever loaded more mail as it was scrolled. A member can now pick Scroll or Pages under Filters ("Browse the list"). The choice is kept per...
Auto-create standard IMAP folders for every mailbox
Dovecot now subscribes Drafts, Sent, Junk, Trash and Archive on first open with SPECIAL-USE flags so EmailService and the UI see real folders instead of client-...
Lower-case NATS mailbox subjects for live updates
Mixed-case addresses like Sales@kamocrm.com published on different NATS subjects than subscribers used, so watched mailboxes never refreshed.
Mark not-yet-created folders when switching mailboxes
Secondary mailboxes often hold only INBOX while the sidebar still offered Drafts, Sent and the rest as if they were real — opening them looked like a failed swi...
Mark not-yet-created folders when switching mailboxes
Secondary mailboxes often hold only INBOX while the sidebar still offered Drafts, Sent and the rest as if they were real — opening them looked like a failed swi...
Chess and Hold'em background music loops while their window is in use
Three new Games sound events — Chess Background, Holdem Background and Holdem Lobby — played on repeat with startLoopingEventSound. Chess loops whenever a chess...
Chess and Hold'em background music loops while their window is in use
Three new Games sound events — Chess Background, Holdem Background and Holdem Lobby — played on repeat with startLoopingEventSound. Chess loops whenever a chess...
Picture frame says when an upload lands, plays videos once or on repeat, and opens full screen
- Uploads show the file, its place in the batch and byte progress, then a toast when it is in. - A frame's videos play on repeat (loop while showing, held for w...
Picture frame says when an upload lands, plays videos once or on repeat, and opens full screen
- Uploads show the file, its place in the batch and byte progress, then a toast when it is in. - A frame's videos play on repeat (loop while showing, held for w...
The reading pane shows who a sent message was Bcc'd to
The header was drawn from the list row, which comes from the search index, and the index keeps To and Cc but has no Bcc column. It now reads Bcc (as it already ...
The reading pane shows who a sent message was Bcc'd to
The header was drawn from the list row, which comes from the search index, and the index keeps To and Cc but has no Bcc column. It now reads Bcc (as it already ...
Onboarding panel for a market with no vendors yet
A market with no vendor products can never show a lead (a lead needs a product), so /leads now replaces the grid for that market with the same onboarding panel ...
Onboarding panel for a market with no vendors yet
A market with no vendor products can never show a lead (a lead needs a product), so /leads now replaces the grid for that market with the same onboarding panel ...
A composed message carries its meeting, and calendar edits ask before telling guests
- /api/email/send takes meetingInvite: the event is filed on the sender's calendar in the same transaction, its ics rides on the composed message with an X-...
Composer meetings ride on the email, edits ask before emailing guests, mail links to its event
- The composer sends its meeting with the message instead of a second invite. - Saving an edit to an event with invited guests asks whether to send them an up...
Branded meeting invitation and update letters for calendar guests
Adds calendar.meeting_invite and calendar.meeting_updated canonical templates and MeetingInviteEmail, the variable builder EmailService fills them from.
Tell TranslateService to stop before this client does
The careers client reads for 60 seconds, and TranslateService worked to its own default of 100, holding a LibreTranslate worker for 40 seconds after nobody was ...
A translation with a failed field is a failure, and long articles get time to finish
TranslateService leaves a field it could not translate out of its reply and names it in failedKeys. This client returned the reply as it was, so the article was...
One deadline per request, never retry a timeout, and queue for LibreTranslate here
LibreTranslate keeps translating a request after its client stops waiting, so every timeout was work done for no one. Measured over six hours on 2026-10-07: 46 ...
A meeting invite from the composer actually sends
Two things kept it from ever reaching anyone. The request posted the meeting's fields flat, but EmailService reads them from a nested `meetingInvite` and refuse...
Team-member assignment in lead mappings; automated imports on the mapping canvas
Assignment. Manual and automated imports get an "Assigned Team Member" target (replacing "Assigned User", which no importer ever honoured). Its dialog sets a sp...
Intake job maps through the shared engine, with team-member assignment
LeadIntakeProcessingJob builds each lead with kamo-shared-library's LeadRequestMapper instead of its own field switch and transform copy, so automated imports a...
Manual imports and the intake backlog through the shared mapping engine
LeadImportController maps every row with kamo-shared-library's LeadRequestMapper instead of its own switch, so manual and template imports get the full field se...
One mapping engine for lead imports, with team-member assignment
Manual imports, automated (intake) imports and the backlog each carried their own copy of the mapping code, and they disagreed: date, regex and split transforma...
Rename Artificial Intelligence / AI to Super Intelligence / SI across marketing copy.
Updates hardcoded English in app content, SEO metadata, integrations, industries, and public llms files to match the Super Intelligence rebrand.
An AI hire no longer waits forever on an email provider that was never connected
An org that chose Google Workspace (or another third-party provider) but left it at PENDING_SETUP, or switched it off, can never produce the AI's mailbox, so th...
Webinar registrants' leads are indexed, so their calls, texts and emails link to them
PublicWebinarService creates a lead per public webinar registrant through LeadService.createLead, which indexes the lead's phones and addresses (LEAD_CONTACT_PO...
Intake makes a lead only of a person, once per person, with no placeholder names, assigned as mapped
Harmony Home Loans pointed every JustCall webhook at its "Justcall" intake endpoint, and the job made every event a lead: 287 in three days. 247 have no name, c...
The JustCall contact import finishes — paced, resumable, and no longer skipping pages
Harmony Home Loans' import had never once completed (no JustCall book or integration exists for any member). Three defects: 1. One burst per tick: it read ever...
The caller lookup is V13, not V7 (SP13 already names a V7) (completes 3fab95d)
Call and meeting options on an AI member's voice card (SP92 calls)
Under the AI member's voices in the profile's Identity room: "Transfer callers to a person when they ask for an agent or a human" (on), "Keep full call and meet...
V7 — which colleague is calling from an internal extension (SP92 calls)
GET **************** (KAMOAI_INTERNAL_SECRET) answers the active member of the phone server's org that the extension is ACTIVE-ly assigned to, or 404 NO_MEMBER....
An AI member's call and meeting options, beside its voices (SP92 calls)
keywordTransfer (default on), keepFullTranscript (default off) and meetingMode COMPANION | CONVERSATION (default COMPANION), in ai_member_call_options (hand-app...
MEETING_COMPLETED run trigger, for a conversation meeting's follow-up (SP92 calls)
A meeting an AI member took part in as a conversation partner wakes it once it ends, with its transcript note, the way a phone call's CALL_COMPLETED does. STRIN...
Leads created by the intake job are indexed, so their calls, texts and emails link to them
LeadIntakeProcessingJob creates every lead that arrives through the intake endpoint, via LeadService.createLead, which indexes the lead's phones and addresses (...
JustCall calls are credited to the agent who took them, and Sales Dialer calls sync
Checked against Harmony Home Loans' JustCall account (read-only GETs): the newest 100 of its 1,058 /calls match PHONE_CALL_LOG one for one, so the ordinary log ...
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.
