prospekt
v0.16.0
Published
Client SDK for the Prospekt personalized-landing-page API: typed PageDocument contract + fetch-based client
Readme
prospekt (SDK)
Typed client for the Prospekt personalized-landing-page API. Ships the full
PageDocument / Operation / survey contract types plus a dependency-free
fetch client — browser, Node ≥18, edge.
npm i prospektimport { ProspektClient } from 'prospekt'
const prospekt = new ProspektClient({
baseUrl: 'https://prospekt-api.cloudflare-8fa.workers.dev',
tenant: 'davos',
})
// 1. render the survey from tenant config
const { survey } = await prospekt.getConfig('de')
// 2. compose a page from the answers
const { pageId, editToken, document } = await prospekt.createPage(
{
dates: { from: '2026-07-30', to: '2026-08-01' },
party: 'couple',
interests: ['hiking', 'wellness'],
},
'de',
)
// share URL = your renderer route + pageId; keep editToken client-side
// 3. shared link → same document for everyone
const doc = await prospekt.getPage(pageId)
// 4. refine in any language; response says honestly what changed
const { message } = await prospekt.refine(pageId, 'bitte einfachere Wege', editToken)
// 5. structured UI actions
await prospekt.applyOperations(
pageId,
[{ op: 'setInterests', interests: ['hiking', 'cycling'] }],
editToken,
)Rendering: iterate document.blocks and switch on block.type
(lead | weather | hero | collection | offerHighlight | closing | …).
Unknown block types must be skipped, not crashed on — the backend may add
types within the same major schemaVersion.
Sanity schema for tenant Studios
The editorial-config document type ships in this same package:
// schemas/index.ts of the tenant Studio
import { prospektConfig } from 'prospekt/sanity'
export const schemaTypes = [/* … */, prospektConfig]Create exactly one prospektConfig document and publish it — the backend
picks it up (with built-in defaults as fallback).
Development
The contract source of truth lives in src/contract here — the backend
worker imports these files directly; edit them in this package only.
