Skip to content
KAMOUniverse

Changelog

What's new.

Every improvement to the platform, as it ships.

  1. · VOIPService

    A lead calling back a shared number tells the member a stream worked for

    The call rings on JustCall's side, where Kamo can't move it, so the live call signal goes to the routed member.

  2. · EmailService

    Stream emails on the drip road, and a lead's mail reply tells their streams

    /api/internal/stream-email queues one edition per run and step through DripEditions, so the campaign path keeps the opt-out check, hosts, warm-up and unsubscribe, and a repeat lands on the same row. Replies go to the lead's owner. Mail from the lead itself tells their live runs; a message that only copies them, an out-of-office and a back-fill do not.

  3. · VOIPService

    Streams text from the member's own number, place SI calls, and hear every reply

    /internal/voip/automation sends a stream's text from the member's sole number, else the org's main line with a reply route back to the member, and places an SI call through a new siCalls capability (JustCall's voice agent). Every inbound text from a lead tells the lead's live runs, including a STOP and a text to a number no member owns, on its own transaction after the dedupe. A JustCall timeout read as a refusal, which would let a retry send a text twice. It now reads as unknown, and a 4xx or a rate limit stays a definite no.

  4. · kamo-shared-library

    Human-send queue, call list, reply signal and SI call settings, and email hours for streams

    A run hears a reply through automation_outbox (LEAD_REPLIED) and the run's new read-only replied_at. Human sends and call_list_entries are new tables, call_list_outcomes is append-only and freezes the M4 outcome. A stream's email keeps the org's text hours in the recipient's zone.

  5. · kamo-internal

    The loan milestone review queue and automation settings

    /settings/automation/review lists reported loan milestones that could not move by themselves, with why each one is waiting. A person approves, correcting the loan number where the report had it wrong, or dismisses it. Approval runs on that person's own rights and a refusal shows the service's reason, and a view-only member sees the list without the actions. The streams list points at the queue only while something is waiting, so a new org sees nothing odd. A settings dialog beside the pause sets the time between texts to one number and, for an org that can report loan milestones, the confidence at which a loan moves by itself. Blank keeps every report with a person. ConfirmationDialog gains typedChallenge={false}. Every confirmation made people type a word such as DELETE under a trash can, which is wrong for leaving a page, archiving a stream, pausing automation or approving a loan. Existing callers are unchanged, and those dialogs now have their own icons.

  6. · kamo-internal

    Choose which loans move with a lead on the board

    With several open loans the server stops the move and lists them. The board puts the card back and asks; choosing none moves only the lead. A refused move already shows the server's reason.

  7. · kamo-internal

    Stage and loan sync switches in the Automation tab

  8. · SecurityService

    A lead's stage and its loans follow each other, switch by switch

    Both directions are off until a lender turns them on, and the map is org data on the stage. Loan to lead: a stage follows the least advanced loan, heard off the status event so any service's move counts. Ended loans are ignored, and if all ended the stage waits for a person. Only the stage moves. Lead to loan: no open loan moves nothing; one moves through the state machine; several wait for a person to pick. A refused move leaves the stage alone and says why, and a stage never ends a loan. Each loan carries an origin, so the rollup drops the echo and cannot undo the person's move. A linked loan stays with its system unless the lender allows a person's stage move to reach it, the connection accepts it, and the move is forward. With no person it never moves, so no sync or import sends a status.

  9. · SecurityService

    Streams move leads through the pipeline's system move and ask OutreachCheck

  10. · kamo-internal

    Board mode, pipeline and dropdown settings, saved views

    Cards move by drag, keyboard or menu, and a refused move goes back and says why. Cards count deals and loans rather than standing in for one. Dropdown fields filter and show on the grid and on cards. An org with no pipeline and no fields sees the page it has today.

  11. · SecurityService

    The lead outbox bean and the internal actions automation-service calls

    Lead changes reach the outbox on the lead's own transaction, inside a savepoint, and cost nothing for an org with no published stream. Lead writes and loan moves stay here.

  12. · DaemonService

    Tick automation-service every 30 seconds

  13. · APIService

    Route /api/automation to automation-service and seal its internal subtree

  14. · kamo-internal

    The Contact card on a lead, and Contact rules in settings

    The card shows the last attempt, last conversation and last heard from, one-click call outcomes, Stop all outreach with its history, and consent proof. Settings → Organization → Contact rules holds call and text hours with a resume time, text limits, the conversation threshold, the opt-out switch, call outcomes and consent fields. An organization's consent fields are offered as lead intake mapping targets.

  15. · SecurityService

    Pipelines, board, stage moves, dropdown fields and saved views

    Rights 661-664. Dark by default: nothing changes for an org with no pipeline or fields. The board shares the grid's permission floor and filters, and each column is a capped range read. Member moves and moveBySystem share one path; only a member's move may carry a reaction, so a system move cannot re-trigger sync.

  16. · SecurityService

    The lead's contact facts, Stop all outreach, and an organization's contact rules

    GET **************** and its outcome, stop, resume, consent and check actions, under the same read gate as the Communications tab; /api/security/contact-rules for settings, outcomes and consent fields. Stopping is open to anyone who can edit leads, or the assigned member; lifting takes RESUME_LEAD_OUTREACH and a reason. A person's stop or resume also lands on the History tab.

  17. · DaemonService

    Keep the consent proof a lead source sends

    An intake mapping can target consent.<key>. The values are written once the lead exists, on a new lead or on the lead the payload merged into, with the payload id so the original can be found. A failure here is logged and does not fail the payload, which would re-import the lead.

  18. · EmailService

    A lead's Stop all outreach ends their drips, and an unsubscribe can set it

    An unsubscribe is offered to the lead's Stop all outreach, which does nothing unless the organization turned it on. Mail to and from a lead now updates its last attempt and last heard from, through the same linker every channel uses.

  19. · kamo-shared-library

    A board floor on each pipeline, and an index for a lead's loans

    leads_from holds every board column to a range of (ORG_ID, DATE_CREATED): 14 seconds down to 3 ms on a market of 795,919 leads. Column already applied by hand; the index is being built online.

  20. · kamo-internal

    Offer the optional statuses in the Arive stage map

  21. · kamo-internal

    The Automation Streams canvas and list (sales floor M6)

    The canvas moves from /tasks to /settings/automation/[id] and /tasks now redirects to the list with a 307. It keeps the spring wires, glow and side panel, split into focused components. - Typed cards for every step, with pickers driven by GET /catalog and config matching the contract's table. - Each step says who does it. Automatic and human-sends read differently on the card, a new text or email starts human-sends, and an unchosen sender is never read as automatic. - Save, publish, pause, duplicate, undo and redo, zoom, minimap, tidy layout, touch, pinch, keyboard wiring and reduced motion. - Problems from validate on the cards, live counts on wires and cards, and a test run that rides a bullet along the wires with a reason at each step. - The automation tab lists real streams with search, status filter, summary and run counts, plus Duplicate, a template gallery and the org-wide pause. - Org theme tokens replace the fixed blue and amber. Everything talks to the service through a typed client in app/lib/automation and the /api/automation proxy. Until the service is deployed both screens show a calm unavailable state, never an empty list. Rights 665 and 666 are mirrored and gate the tab, canvas and menu, with the org owner admitted as the service does. The brief records the request shapes and the TEXT, EMAIL and CALL config.

  22. · VOIPService

    Feed a lead's last contact from real calls, honestly

    Two capabilities say what a provider really reports: whether calls connected and how long they ran. Call evidence is built from those, so a limited provider records attempts and never a conversation. JustCall's dialer answered-by and FreePBX billsec are read, so a machine or ringing time cannot read as talk. A text STOP is offered to the lead's Stop all outreach, which does nothing unless the organization turned it on.

  23. · kamo-shared-library

    Switches for stage and loan sync, and a move's origin

    Three lender switches, off by default: a stage follows its loans, loans follow a stage, and a person's stage move may reach a linked external loan. A transition can now carry what inside Kamo started it, so a stage move can recognize its own echo. Unlike syncSource it keeps Kamo's dates and notices.

  24. · kamo-shared-library

    Contact foundation: outcomes, last contact, stop all outreach, consent and the outreach check

    Org-named call outcomes on fixed meanings, last attempt and conversation per lead in a new table fed from LeadCommunicationLinker, a lead-level Stop all outreach with its audit trail, an org consent list with append-only values and intake mapping (consent.<key>), and org call hours and text limits. OutreachCheck is the shared answer to "may we contact this lead now": stop, missing address, do-not-contact, hours in the recipient's local time, text limits. It returns a plain reason and the next allowed time. RecipientZones resolves the zone from the lead's zone, then address, then area code, across all US zones; unknown holds to every likely zone. Rights 669-672. Tables were created by hand first.

  25. · kamo-internal

    A lead's loans, and correcting a loan's deal or lead

    The lead page shows the rollup across its deals, with each deal on its own and the least advanced loan on top, never one loan as the lead's. Loans in a deal that are not on the lead, and the borrower's unlinked loans, can be linked from there. A loan's deal and lead can be corrected from the lead and from the pipeline. Nothing here reaches another loan system.

  26. · kamo-shared-library

    Durable send keys, phone spacing and inbound loan milestones

  27. · SecurityService

    A lead's loan rollup, and corrections to deals and leads

    A lead holds many loans, so stop treating one as the lead's. - The legacy Arive path took the lead's newest application, which could already speak for another Arive loan and would have its link and fields overwritten. A legacy loan now takes an application only when exactly one is free; otherwise it is adopted and a person can link it. - Portal chat routing and the funnel resume took an arbitrary row. Chat goes to the officer the open loans agree on, else the lead's own assignee. The funnel resumes the least advanced open loan and never an ended one. - A deal reassignment reaches every lead on the deal, not the first. New: the rollup API (deals, per-deal status, least advanced loan) and the corrections API (move a loan between deals, link and unlink a lead), audited on the deal timeline and in lead history. Its path sits outside the one that queues an outbound sync, so a correction never reaches an external LOS. An adopted loan attaches to a lead only when exactly one open lead on its account fits, and a finished loan never does.

  28. · kamo-shared-library

    How a lead reads its loans

    A lead shows the least advanced loan still in play. Loans that ended unfunded and unfinished archived loans are ignored, funded loans count, and the answer never depends on row order. Pure, so the service, the board and the sync read loans one way.

  29. · kamo-shared-library

    Filter the grid query by an organization's dropdown fields

  30. · InitializerService

    Add the Automation Streams package to the repository scan

Your universe is waiting.

Start free in minutes. Add products whenever you are ready — no migration, no new logins.

Free forever — no credit card required