Credit-based lead assignment UI (available/history/credits)
- /leads/available: real-time vendor/product grid, atomic Accept (routes to the lead), comment-gate blocked state, rows animate the moment a lead is claimable...
Add **************** for the registry decision half
doc 11 §5.3 step 4 / §10 audit completeness — every registry mint/receipt/supersede emits a paired WORM AiDecision + LoanIdentifierEvent. This adds the AiFuncti...
Daily-allotment forfeit audit job (hourly, per-member timezone)
Records FORFEITED rows for members with drip allotments who did not sign in on their completed local day. Idempotent, yields to GRANTED rows. Compiles clean (mv...
Relay credit/lead-assignment NATS events to STOMP
Subscribes security.leads.> and security.credits.>, mirrors each to /topic/... so the CRM front-end updates the Leads-Available grid, Manage-Credits fields, and...
Credit lead-assignment API ****************
- LeadAcceptController: GET /leads/available, POST /leads/accept (atomic, comment-gated, FFA + credit), GET /leads/uncommented, POST /leads/{id}/mark-reassign...
Credit-assignment orchestration services (shared-lib)
- LeadAllotment.isInfiniteBalance (∞ credit balance → mint-on-the-fly at accept) - CreditLeadAssignmentService: atomic Accept-Lead (select→lock→recheck→claim, m...
Credit-assignment shared-lib helpers
- **************** — powers the 'must comment before accepting another lead' gate (comment = member's non-removed MediaObj in lead stream) - **************** ...
Credit lead-assignment data model (shared-lib)
- Lead: requiresAssignment flag + markedForReassignmentAt/By (nullable; null actor = vendor/API import) - **************** + eventTypeForKey routing + registry ...
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 m...
Scope mock lead vendors to a market; drop removed createMarket arg
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 /...
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...
Stop refresh icon blinking via infinite check loop
Once a domain was SSL-confirmed, checkDns unconditionally built a new domain object even when sslConfirmed was already true. The new object reference re-trigger...
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 custo...
Return 422 (not 500) when member has no mailbox
listFolders and other read endpoints threw IllegalStateException from MailContext.toMailCredentials() when a member had no IMAP credentials provisioned, which t...
Don't fetch org with a precision-truncated id
LabelManager derived orgIdStr from getOrgIdString() (precision-safe) with a fallback to String(organization.id). organization.id is a JS number and silently tru...
Show TRIAL pending (not-started) distinctly from expired on platform Organizations tab
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-s...
Set site region + use node-local MinIO per pod
- Add kamo.minio.region (MINIO_REGION, default us-west-ca-s-1) so SigV4 signatures match the server's enforced site region; fixes background upload and sett...
Sign requests with configurable site region
MinIO now enforces MINIO_SITE_REGION (us-west-ca-s-1) in the SigV4 authorization scope since site replication was enabled. The client was built without a region...
Drop background images that 404 instead of showing a broken frame
Track failed background image loads and filter them out of the Swiper carousel, so an incompletely provisioned theme (e.g. optionone, whose bg/2.webp was never ...
Remove the 2s intro/loading animation screen
Drop showIntro/introComplete state, the 2s intro timer effect, and the branded early-return loading screen. The page now renders straight into the background + ...
Trial chip on NavPri (white/red, tooltip=expiry) + homepage chip red; remove NavTop chip
Never return 401 from proxy (was logging users out on enter-as); degrade to empty
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 comp...
Proxy injects X-Member-Id from session (me endpoint 400'd, so trial banner never had data)
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, s...
Show trial banner on the welcome homepage (app/page.tsx) top-right, not just NavTop
Trial banner shows for any TEAM_MEMBER (system/team/admin), drop god dependency
Gate homepage trial banner to staff (team members/admins/system), hide from plain members
Trial banner signal is org-level (all members of a trialing org), not seat-based
Explicit Apply/Extend Trial buttons on platform Organizations tab (chips weren't discoverable)
Trial status chip + apply/extend-trial action on platform Organizations tab
Expose trialExpiresAt on platform org summary for the admin trials UI
Platform-admin apply/extend/status trial endpoints + DTO trialExpiresAt
Member gate grants unlimited catalog for active TRIAL + exposes trialExpiresAt
Comp provisioning clears trial deadline (comp supersedes trial)
In the existing-subscription update path of provisionCompSubscription, set trialExpiresAt to null so a previously trialling org is cleanly promoted to comp with...
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 test...
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 *...
Retry boot-time rights sync on transient DB unavailability to avoid CrashLoopBackOff
**************** (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.
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.