Add multi-tenant cloud mode: self-serve purchase, credit metering, core-decoupling
Introduces RECAP_MODE=multi alongside single-mode self-host: - Tenant auth + accounts (magic-link via System SMTP), per-tenant credit pool, anonymous trial minting with per-IP/-64 caps - Self-serve Pro/Max purchase: inline Lightning (BTCPay) + card (Zaprite), prepaid 30-day periods, expiry-reminder emails - Core-decoupling: relay owns cloud tier/expiry keyed by Recaps user-id - SQLite (better-sqlite3) schema for multi-mode; filesystem unchanged for single - StartOS actions/versions through 0.2.155
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
import { VersionInfo } from '@start9labs/start-sdk'
|
||||
|
||||
export const v_0_2_64 = VersionInfo.of({
|
||||
version: '0.2.64:0',
|
||||
releaseNotes: {
|
||||
en_US: 'Speed + UI fixes for long content. (1) Client-side audio chunking now runs in parallel (up to 6 chunks in flight) instead of serially. Previously, a 90-min video split into 2 chunks would transcribe them one after the other; now they overlap, halving wall-time on the multi-chunk path. Out-of-order completion is handled correctly via index-based merge after all chunks return. (2) Topic-analysis concurrency bumped from 4 to 12 in-flight windows. Stays well under Gemini paid Tier 1 RPM caps (1000 RPM for flash, 150 RPM for pro) and saturates a single Spark for the operator-hardware path. (3) Periodic relay-status poll no longer triggers a full re-render every 60 seconds. The poll now compares previous vs new relay state and only re-renders if something actually changed — eliminates the full-screen flicker and scroll-jump that was happening on every minute mark. (4) Clicking the chevron on an activity-log group header now toggles only that group\'s body display + chevron icon instead of rebuilding the entire app DOM. No more flash-and-scroll-to-top when collapsing a log section. (5) YouTube embed no longer flickers / goes black after Cancel mid-stream. The render-time mount logic now checks whether the yt-player div already has an iframe child; if so, the existing player is left in place instead of destroyed and recreated.',
|
||||
},
|
||||
migrations: {
|
||||
up: async ({ effects }) => {},
|
||||
down: async ({ effects }) => {},
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user