Published-page features
The opt-in interactive features an app owner can switch on for a published page — ask-the-data chat, live read/write collections and their SSE stream, the comment board, reactions, threaded replies, polls, live presence, applause, follow-the-presenter, annotations, and the forms engine — each with its tuning environment variables.
Every published IntelliApps page is a static, sandboxed document by default. The features below are opt-in per app and, where they persist data, are backed by the app-data plane and streamed with lightweight polling/SSE. This page documents each feature and the environment variables that tune it. Core service, secrets, data planes, assets, theming, branding, the ask-the-data LLM, and the Identity Bridge live on Configuration.
How viewers are identified
Collaborative writes are attributed via the Identity Bridge — an authenticated
IntelliAsk viewer is named automatically, otherwise a guest name is captured. Rate
limits below are per client fingerprint per 60 seconds unless noted; 0 disables a
limit.
Ask-the-data chat
A viewer can ask natural-language questions about the app's data; answers are grounded in the app's dataset (or page text when there's no dataset) and streamed back. The LLM wiring and limits live on Configuration → Ask-the-data LLM.
Live collections
Turns a published page into a real multi-user app with its own read/write tables (one PostgreSQL schema per app). Used for sign-up lists, submissions, trackers, and anything that must persist and be shared between viewers.
| Name | Purpose | Default |
|---|---|---|
MAX_COLLECTIONS_PER_APP | Collections (tables) an app may define | 25 |
MAX_FIELDS_PER_COLLECTION | Fields per collection | 40 |
MAX_COLLECTION_ROW_BYTES | Max serialized bytes of one row | 64000 |
MAX_ROWS_PER_COLLECTION | Hard cap on rows in a collection | 100000 |
MAX_COLLECTION_ROWS_RETURNED | Max rows returned by one read | 500 |
COLLECTION_INSERT_RATE_PER_MIN | Inserts per viewer per minute | 60 |
COLLECTION_MAX_WRITE_RATE_PER_MIN | Total writes per app per minute | 1200 |
Live collection stream (SSE)
Pushes inserts/updates/deletes to viewers so lists update in near real time without a manual refresh.
| Name | Purpose | Default |
|---|---|---|
COLLECTION_STREAM_ENABLED | Enable the collection SSE stream | true |
COLLECTION_STREAM_POLL_MS | Server poll interval feeding the stream | 150 |
COLLECTION_STREAM_MIN_POLL_MS | Floor for the adaptive poll interval | 40 |
COLLECTION_STREAM_HEARTBEAT_SECONDS | Heartbeat keeping the connection alive | 15 |
COLLECTION_STREAM_MAX_SECONDS | Max lifetime of one stream connection before reconnect | 300 |
COLLECTION_STREAM_MAX_BATCH | Max events delivered per flush | 200 |
Comment board
A moderated feedback wall for a page.
| Name | Purpose | Default |
|---|---|---|
FEEDBACK_MAX_MESSAGE_CHARS | Max characters per message | 2000 |
FEEDBACK_MAX_NAME_CHARS | Max characters for a poster's name | 60 |
FEEDBACK_RATE_PER_MIN | Messages per viewer per minute | 5 |
FEEDBACK_MAX_LISTED | Max messages returned/retained in the listing | 200 |
Reactions, replies & polls
Shared collaboration primitives layered over comments and the page.
| Name | Purpose | Default |
|---|---|---|
REACTION_EMOJIS | Allowed reaction emojis (comma list) | 👍,❤️,🎉,😂,😮,😢 |
REPLIES_MAX_DEPTH | Max nesting depth for threaded replies | 1 |
POLL_MAX_OPTIONS | Max options in a poll | 8 |
POLL_QUESTION_MAX_CHARS | Max characters in a poll question | 200 |
POLL_OPTION_MAX_CHARS | Max characters per poll option | 80 |
Live presence & applause
Ambient "who's here / react live" signals for shared viewing sessions.
| Name | Purpose | Default |
|---|---|---|
PRESENCE_WINDOW_SECONDS | Window a heartbeat counts as "present" | 20 |
APPLAUSE_WINDOW_SECONDS | Window applause bursts are aggregated over | 10 |
APPLAUSE_RATE_PER_MIN | Applause taps per viewer per minute | 60 |
Follow the presenter
Lets one viewer drive the scroll/pointer position of everyone following, for guided walkthroughs and live demos. Followers can break away by scrolling manually.
| Name | Purpose | Default |
|---|---|---|
FOLLOW_PRESENTER_STALE_SECONDS | After this long with no presenter update, the session is considered idle | 12 |
PRESENTER_UPDATE_RATE_PER_MIN | Presenter position updates accepted per minute | 1200 |
FOLLOW_PRESENTER_POLL_MS | Follower poll interval when not on the push stream | 500 |
Collaboration push stream (SSE)
The shared SSE channel that delivers comments, reactions, polls, presence, applause, and presenter updates. Presenter frames use a faster cadence and a short snapshot cache so many followers can be served cheaply.
| Name | Purpose | Default |
|---|---|---|
COLLAB_STREAM_ENABLED | Enable the collaboration SSE stream | true |
COLLAB_STREAM_POLL_MS | Base server poll interval | 1000 |
COLLAB_STREAM_PRESENTER_POLL_MS | Faster poll while a presenter is active | 200 |
COLLAB_SNAPSHOT_CACHE_MS | Snapshot cache window shared across followers | 100 |
COLLAB_STREAM_HEARTBEAT_SECONDS | Heartbeat keeping the connection alive | 15 |
COLLAB_STREAM_MAX_SECONDS | Max lifetime of one stream connection before reconnect | 300 |
Annotations
Viewers can drop point/ink annotations on the page for review and markup.
| Name | Purpose | Default |
|---|---|---|
ANNOTATIONS_MAX_LISTED | Max annotations returned/retained | 500 |
ANNOTATIONS_RATE_PER_MIN | Annotation writes per viewer per minute | 120 |
ANNOTATIONS_MAX_POINTS | Max points in one ink stroke | 400 |
ANNOTATIONS_MAX_TEXT_CHARS | Max characters in an annotation label | 500 |
ANNOTATIONS_MAX_NAME_CHARS | Max characters for the author name | 60 |
Forms engine
Structured, validated forms with server-side submissions (surveys, applications, intake) stored in the app-data plane.
| Name | Purpose | Default |
|---|---|---|
MAX_FORMS_PER_APP | Forms an app may define | 100 |
FORMS_MAX_FIELDS | Fields per form | 60 |
FORMS_TITLE_MAX_CHARS | Max characters in a form title | 200 |
FORMS_DESCRIPTION_MAX_CHARS | Max characters in a form description | 2000 |
FORMS_LABEL_MAX_CHARS | Max characters in a field label | 300 |
FORMS_MAX_OPTIONS | Max options in a choice field | 60 |
FORMS_OPTION_MAX_CHARS | Max characters per option | 200 |
FORMS_ANSWER_MAX_CHARS | Max characters in a single answer | 5000 |
FORMS_SUBMIT_RATE_PER_MIN | Submissions per viewer per minute | 20 |
FORMS_SUBMISSIONS_PAGE_SIZE | Default submissions page size | 50 |
FORMS_SUBMISSIONS_MAX_PAGE_SIZE | Max submissions page size | 200 |
Where data lives
Collections, form submissions, and datasets persist in the app-data plane (PostgreSQL). Comments, reactions, polls, presence, applause, presenter state, and annotations are collaboration data keyed to the app in the control plane. See Architecture.
Last updated on