Skip to content
KAMOUniverse

Changelog

What's new.

Every improvement to the platform, as it ships.

  1. · kamo-internal

    Drop Vendor Products column from Markets & Fields table

  2. · kamo-internal

    Market lifecycle + market-scoped vendors/products

    - Markets & Fields: Active/Archived sub-tabs; row action is Archive/Reactivate (PATCH .../active), never delete - Vendors & Products: one sub-tab per active market; vendors are created under the current market's sub-tab; empty-state when the org has no active markets - Hide Vendors & Products / Manual Imports / Automated Imports tabs, /settings cards and nav slide-out links until the org has at least one active market (useHasActiveMarkets) - /leads only ever shows active markets

  3. · SecurityService

    Market status filter, archive/reactivate, market-scoped vendors

    - GET **************** (default active); enrich each market DTO with vendor-products derived from its vendors - Replace DELETE /lead-markets/{id} with PATCH /lead-markets/{id}/active (archive/ reactivate) — markets are never hard-deleted - GET /lead-vendors?marketId= filter; vendor create forwards marketId

  4. · kamo-shared-library

    Scope vendors to a market; derive market products; archive markets

    - LeadVendor gains a required MARKET_ID (columnDefinition pinned to plain UUID so the FK column does not inherit the referenced PK's gen_random_uuid() default) - Remove LeadMarket.vendorProducts M2M; a market's products are now derived from its vendors (LeadVendorProduct where vendor.market = market) - Vendor create takes a marketId and validates the market (org-owned + active); vendor title uniqueness is per-market - Markets are never deleted: replace soft-delete with setMarketActive (archive/ reactivate); add archived-markets query - DTOs: LeadVendorDTO.marketId; drop vendorProductIds from market request DTOs

  5. · kamo-internal

    Add media subdomain to the required records list

    media.<domain> backs the realtime websockets (chat, calls, SMS, theme provisioning) and media streaming, but it was missing from the DNS setup catalog, so customers were never told to create the record — leaving media.<domain> as NXDOMAIN and the websockets failing to connect. Add it as a required record so the /setup/dns studio instructs the CNAME.

  6. · kamo-internal

    Show TRIAL pending (not-started) distinctly from expired on platform Organizations tab

  7. · BillingService

    TRIAL_PENDING mode for a not-yet-started trial

  8. · SecurityService

    Start trial clock on org owner's first login

    Seed new orgs with a PENDING trial (source=TRIAL, trialExpiresAt=null) that grants nothing until started, then start the 3-day clock on the owner's first FQDN-scoped login so it never burns while DNS is still being configured. Owner-only, once (setting expiry clears pending); non-fatal so a trial hiccup never breaks login.

  9. · kamo-internal

    Trial chip on NavPri (white/red, tooltip=expiry) + homepage chip red; remove NavTop chip

  10. · kamo-login

    Panel bleeds off-page left so its edge never shows on bounce; card fades ~250ms sooner

    - Welcome/recover panel now extends --welcome-bleed (16rem) off the left edge with its right edge still pinned to --welcome-w; inner content padding is compensated so text stays put. The spring overshoot can no longer reveal the panel's left edge. - Card now fades in on a 450ms timer instead of waiting for the spring to fully settle, closing the dead gap between the bounce and the form appearing.

  11. · kamo-login

    Choreographed entrance — panel springs in after bg loads, then card fades

    Wait for the first background image (onLoad, with a 3s safety fallback), then spring-bounce the welcome/recover panel in from off-screen left (physics spring, stiffness 300 / damping 17). On bounce settle, fade+scale the form card into place. Mobile (panel hidden) and reduced-motion skip the bounce and fade the card directly. Entrance x is summed with the parallax x on one transform, so drift still works and never exposes an edge.

  12. · kamo-internal

    Trial status chip + apply/extend-trial action on platform Organizations tab

  13. · BillingService

    Expose trialExpiresAt on platform org summary for the admin trials UI

  14. · BillingService

    Platform-admin apply/extend/status trial endpoints + DTO trialExpiresAt

  15. · BillingService

    Scheduled sweep reverts expired trials to Free with cache-bust

  16. · SecurityService

    Auto-grant a 3-day trial to every newly created org

  17. · SecurityService

    Member gate grants unlimited catalog for active TRIAL + exposes trialExpiresAt

  18. · kamo-internal

    FeaturesManager unlocks full catalog on active trial

  19. · kamo-internal

    Trial status panel + apply/extend-trial action on subscription page

  20. · kamo-internal

    Homepage trial-mode banner with live countdown

  21. · kamo-internal

    TRIAL source, trialExpiresAt, platform trial API methods

  22. · kamo-shared-library

    Org-level gate grants full catalog for active TRIAL

    resolveEntitlement now short-circuits for TRIAL subs whose trialExpiresAt is in the future (compute-on-read). Adds static isTrialActive() helper and 4 unit tests covering active, expired, null-deadline, and non-TRIAL source cases.

  23. · kamo-shared-library

    Add TRIAL billing source + trialExpiresAt on AccountSubscription

    Adds BillingSourceType.TRIAL, a precise LocalDateTime trialExpiresAt field on AccountSubscription (nullable, column trial_expires_at), and a repository finder **************** for the expiry sweep.

  24. · kamo-shared-library

    **************** (steward exception queue)

    Org-scoped-by-status finder backing the closing-steward exception queue (e.g. all BLOCKED_STEWARD packages for an org). Spring Data derived; no schema/KI.

  25. · kamo-shared-library

    CLOSING_RON_FALLBACK_APPLIED event key (doc 05 §6.1/§6.4)

    The steward recovers a RON-walled/failed BLOCKED_STEWARD closing by satisfying the required RON slot with an alternative notarization (WET_SIGN/IPEN/PAPER_OUT); the compliance/audit + pipeline-advance signal (carries the next pointer).

  26. · kamo-login

    Pointer parallax (x+y) between welcome panel and background

    Both layers drift with the pointer at different rates and opposite directions via framer springs. Background is scaled 1.12 and the welcome panel is oversized 16px on every side with its right edge pinned, so the drift never exposes an edge. Existing Ken Burns background animation is untouched and stacks underneath. Disabled under prefers-reduced-motion.

  27. · kamo-shared-library

    CLOSING_PACKAGE_CANCELLED event key (doc 05 §6.4 steward cancel)

    The steward terminates a non-terminal closing **************** -> CANCELLED; the durable signal downstream stand-down / steward-queue close-out reacts to.

  28. · kamo-login

    Move animated logo to bottom-right, centered above Powered-by pill

    PoweredByKamo gains an optional logoSlot rendered centered directly above the pill within its fixed bottom-right anchor (other pages unaffected). The animated logo moves out of the top-left corner into that slot on the sign-in and recover pages; still hidden on mobile and during the phone-landscape rotate prompt.

  29. · kamo-login

    Left-pinned translucent welcome panel + centered rounded form card

    Welcome/Recover panel now full-height, flush to the left edge, on top of the background image with a translucent wash and square corners; hidden on mobile. Animated logo now sits above the panel. Login/recovery form is a fully-rounded glass card centered in the remaining right-side space.

  30. · kamo-shared-library

    CLOSING_MERS_CONFIRMED + CLOSING_MERS_REJECTED event keys (doc 05 §6.3/§6.4)

    The MERSCORP async callback flips a MersRegistration SUBMITTED->CONFIRMED/REJECTED; these are the durable signals **************** (confirmed) + the steward exception queue (rejected) react to.

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