Context
The HotCRM v1 launch plan (W7) included a 'try.hotcrm.ai' surface — a
zero-friction lane where a visitor clicks 'Try it' and lands inside a
pre-seeded HotCRM tenant within ~10s, no signup required, expiring after
60 minutes.
We deferred W7 from the launch because the platform does not yet expose
a tenant-provisioning API a CRM app can call to spin one up
programmatically.
What we need from the platform
A signed HTTP endpoint (or kernel method) that:
- Creates a fresh tenant with a generated id and a default driver
(sqlite-memory is fine for the trial lane).
- Loads a named seed bundle into it — same shape as our existing
build artifact (dist/objectstack.json).
- Returns a short-lived (≤60 min) session token the caller can
redirect the visitor into.
- Self-evicts when the TTL expires, tearing down the kernel and
the driver.
Bonus: a webhook tenant.expired so the calling app can show a
'Trial expired, install for real?' page.
Why this can't live in the CRM
- Kernel creation is a platform-level concern (driver wiring, plugin
registration, route mounting).
- The token issuance needs the same trust anchor as the rest of auth,
and CRM apps shouldn't be minting tokens.
- TTL eviction needs to be in the kernel manager, not in a peer app.
Acceptance
- Reference impl in @objectstack/runtime or a dedicated
@objectstack/service-trial package.
- HotCRM can call it from a static landing page with no server of its
own.
- A CLI command
objectstack trial create --seed dist/objectstack.json --ttl 60m for local testing.
Related
- HotCRM v1 launch plan, todo
w7-try-tenant.
- ADR-0010 (NL→Flow authoring) — same pattern: feature too
platform-shaped to live in an app.
Context
The HotCRM v1 launch plan (W7) included a 'try.hotcrm.ai' surface — a
zero-friction lane where a visitor clicks 'Try it' and lands inside a
pre-seeded HotCRM tenant within ~10s, no signup required, expiring after
60 minutes.
We deferred W7 from the launch because the platform does not yet expose
a tenant-provisioning API a CRM app can call to spin one up
programmatically.
What we need from the platform
A signed HTTP endpoint (or kernel method) that:
(sqlite-memory is fine for the trial lane).
build artifact (
dist/objectstack.json).redirect the visitor into.
the driver.
Bonus: a webhook
tenant.expiredso the calling app can show a'Trial expired, install for real?' page.
Why this can't live in the CRM
registration, route mounting).
and CRM apps shouldn't be minting tokens.
Acceptance
@objectstack/service-trial package.
own.
objectstack trial create --seed dist/objectstack.json --ttl 60mfor local testing.Related
w7-try-tenant.platform-shaped to live in an app.