Zvessa docs

Catalog

Generated from the code by node --no-warnings docs/build/catalog.mjs. Don't edit by hand. Last generated 2026-10-21.

Status words. Ready: works in the app today. Described: the server and the AI know it, the screen for it is being built. Coming: listed in the library, waits for its engine.

Engines #

EngineIdStatus
CollectionscollectionsReady
SpacesspacesReady
StructurestructureReady
LedgerledgerReady
RoundsroundsReady
RoomsroomsReady
TimetimeReady
LifecyclelifecycleReady
EventseventsReady
AppsappsReady
CapabilitiescapabilitiesReady
ScreensscreensReady
FilesfilesReady
AudiencesaudiencesReady
AutomationsautomationsReady
NotifynotifyReady
WebwebReady
AI JobsaiReady
SearchsearchReady

Blocks #

137 kinds.

Props marked * are required. A block with children holds other blocks.

KindWhat it isPropsStatus
bots.listThe space's bots (the AI chat first) and automations: what each does, what starts it, today's use, the next scheduled run, and an on/off switch. For people who manage the space.title (string): Heading, default none<br>show (string): 'all' (default), 'bots' or 'automations'Ready
bots.waitingThings bots and automations want to do that wait for a person: posts (reply drafts), records, notifications, coins. Approvers can edit the words, approve or discard. Shows only what this person may approve.title (string): Heading<br>empty (string): Shown when nothing waitsReady
bots.runsRecent runs of automations and bots: what started each, every step's result and any failure. For people who manage the space.automation (string): Only this automation's runs<br>bot (string): Only this bot's runs<br>limit (number): How many, default 10<br>title (string): HeadingReady
bots.runA button that starts an automation whose trigger is manual (send the weekly report now, close the day, deal a new round). Shows only to roles in its when.who and people who manage.automation* (string): The /automations id<br>label (string): Button words, default the automation's name<br>done (string): Words after it startsReady
bots.askGive one of the space's bots a task in words and see its answer (for people who manage the space). People talk with bots in conversations by @mentioning them.bot* (string): A /bots id (not the builder)<br>placeholder (string): Words in the empty box<br>title (string): HeadingReady
bots.hooksWebhook addresses that start an automation whose trigger is webhook, for outside services (forms, shops, scripts). Make one, copy it once, revoke it. For people who manage the space.automation* (string): The /automations id<br>title (string): HeadingReady
stackLays out child blocks in a column or a row. Holds children.direction (string): 'column' (default) or 'row'<br>gap (number): Space between children in px, default 12Ready
headingA title.text* (string): The words<br>level (number): 1 to 3, default 1Ready
textA paragraph of text.text* (string): The wordsReady
imageA picture from a URL.src* (string): https URL<br>alt (string): What the picture showsReady
buttonA button that opens a link or another page.label* (string): Button words<br>href (string): https URL, or '#page-id' for a page in this workspaceReady
listA bulleted list.items* (string[]): One string per itemReady
cardA framed box with an optional title, text and child blocks. Holds children.title (string): Card title<br>text (string): Card textReady
statA big number with a label.label* (string): What the number is<br>value* (string): The number or short valueReady
dividerA thin line between sections.noneReady
miniappRuns one of the workspace's mini-apps (apps[].id) in a sandbox. Use for games and anything blocks can't express. props.config is a JSON object the mini-app reads as window.zvessa.config (its settings; config.connections lists connection ids it may read from).app* (string): The id of an entry in blueprint.apps<br>height (number): Height in px, default 360<br>config (object): Settings for this copy of the app, handed to it as window.zvessa.config (a starter app lists its keys). Plain JSON, up to 16 KB. config.connections names the space connections it may read through the bridgeReady
records.listShows a collection's records as a list, or as a board with one column per option when groupBy names a choice field.collection* (string): A blueprint.collections id<br>fields (string[]): Which fields to show, in order; default all<br>groupBy (string): A choice field id: show a board, one column per option<br>empty (string): Words when there are no recordsReady
records.formA form that adds a record to a collection.collection* (string): A blueprint.collections id<br>fields (string[]): Which fields to ask for; default all<br>submit (string): Button words, default 'Save'<br>done (string): Words shown after saving<br>defaults (string): JSON object of values set on every new record, e.g. {"status":"To do"}Ready
records.countA big number: how many records a collection has.collection* (string): A blueprint.collections id<br>label (string): What the number isReady
streamOne live conversation from blueprint.streams: a room, a channel, a feed. Who sees, writes and moderates is set on the stream. look 'feed' shows posts as cards, newest first.stream* (string): A blueprint.streams id<br>look (string): 'chat' (default, bubbles) or 'feed' (cards)<br>height (number): Height in px of the chat look, default 520<br>placeholder (string): Words in the empty message box (overrides the stream's)Ready
conversationOne conversation with its header: back, picture, name and people count, voice and video call buttons (direct and group chats, with the calls kit), a details button (people, mute, leave), then the messages and the box to write in. Replies, reactions, edits, read receipts and typing follow the conversation's settings (/streams, /talk). Without a stream it shows the conversation that was opened: put it on the page /talk/screen names to design the full-screen chat.stream (string): A blueprint.streams id. Leave it out on the /talk/screen page to show whichever chat was opened<br>header (boolean): Show the header row (default true)<br>calls (boolean): Show voice and video call buttons when calls are on (default true)<br>details (boolean): Show the details button (default true)<br>look (string): 'chat' (default, bubbles) or 'feed' (cards)<br>height (number): Height in px when it sits inside a page, default 520<br>placeholder (string): Words in the empty message box<br>background (string): The colour behind the messages: a style colour role (chatBg, bg, surface…). Default chatBg on the full screen<br>send (string): The send button: 'text' (default, a Send button) or 'icon' (a round button with an arrow, like messaging apps)Ready
inboxA person's conversations in one list: direct chats, groups, the space's streams and their cases, with unread counts, search and New chat. Opens a conversation (beside the list on wide screens).title (string): Heading<br>show (string[]): Which kinds to list: direct, group, stream, case; default all<br>height (number): Height in px on wide screens, default 600Ready
directThe person's direct (one-to-one) conversations. Same as an inbox showing only direct chats.title (string): Heading, default 'Messages'Ready
queueThe team's side of a queue stream (support desk, applications, orders): every case by status and who it's given to, to answer them. Only the stream's team sees it.stream* (string): A blueprint.streams id whose mode is 'queue'<br>title (string): HeadingReady
askThe asking side of a queue stream: a person opens a case (asks for help, applies, orders) and follows their own.stream* (string): A blueprint.streams id whose mode is 'queue'<br>subject (string): Label for the short title, default 'Subject'<br>button (string): Button words, default 'Send'<br>done (string): Words shown after sendingReady
draftsA person's unsent drafts and scheduled posts, and, for moderators, posts waiting for approval.title (string): HeadingReady
unitsThe space's units (teams, departments, classes, branches…) as a tree with who is in each, their titles and leads. Leads and managers place people; open units can be joined; managers add and rename units.unit (string): Start at this unit (blueprint.structure.units id); default the whole tree<br>people (boolean): Show who is in each unit, default trueReady
membersThe space's members and their roles, with a button to message each one directly.title (string): Heading, default 'People'Ready
inviteMakes an invite link people open to join the space with a role.role (string): Role new people get, default 'member'<br>label (string): Button wordsReady
bookingPeople book a time (appointments, classes, a table). Props are the opening hours, in the owner's time zone; people who manage the space see every booking.title (string): Heading, default 'Book a time'<br>duration (number): Minutes per booking, 5-480 (default 30)<br>days (string[]): Open days: sun, mon, tue, wed, thu, fri, sat (default mon-fri)<br>from (string): Opening time, HH:MM 24-hour (default 09:00)<br>to (string): Closing time, HH:MM 24-hour (default 17:00)<br>tz (string): IANA time zone like America/New_York (default UTC; ask the owner)<br>ahead (number): How many days ahead people can book (default 14)Ready
scheduledWrite a post now and have it go out in a chat, channel or feed later; lists what's waiting.stream (string): Only post into this blueprint.streams idReady
analyticsCharts of what happens in the space per day: page views, posts, records, joins, plays. Only people who manage the space see it.days (number): Days to show first: 7, 14, 30 or 90Ready
pollA question members vote on, with live results.question* (string): The question<br>options* (string[]): At least two answers<br>multiple (boolean): Allow picking more than oneReady
wheelA wheel anyone can spin for a random pick; everyone sees the same result.options* (string[]): At least two slices<br>label (string): Button words, default 'Spin'Ready
gameA live game from blueprint.games (trivia, quiz board, charades, bingo, a gift draw…). People start one, join with a code and play on their phones; on a TV paired with Show on TV it shows the big screen.game* (string): A blueprint.games id<br>title (string): Heading, default the game's nameReady
game.screenThe big-screen view (question, board, timer, scores) of the game in progress, for a tablet or a screen on the wall.game* (string): A blueprint.games idReady
splitTotals a collection's money field, shows each person's share and the fewest payments to settle up. Trip costs, a shared gift, a picnic.collection* (string): A blueprint.collections id<br>amount* (string): The money or number field to add up<br>payer* (string): The text field with who paid<br>people (string[]): Names sharing the cost; default everyone who paid<br>title (string): HeadingReady
roomA live room for voice, video and screen sharing. mode 'talk': everyone allowed to speak joins as equals (calls, group calls, huddles, a study room). mode 'stage': hosts are seen and heard and everyone else watches and reacts (live streams, classes, town halls, a show).title (string): Name shown on the room<br>mode (string): 'talk' (default) or 'stage'<br>video (boolean): Allow cameras, default true; false makes it voice only<br>screen (boolean): Allow screen sharing, default true<br>speak (string): Permission needed to speak in 'talk' mode (view, post, play, add, edit, invite, manage), default 'post'<br>watch (string): Permission needed to watch a 'stage', default 'view'<br>host (string): Permission needed to host: be on stage, invite people up, mute, remove and record. Default 'manage'<br>max (number): Most people in the room at once, default 50 for talk, 1000 for stage<br>record (boolean): Let hosts record to the media library (needs LiveKit Egress and R2)<br>join (string): Join button wordsReady
callA button that rings people for a voice or video call. Use it on a contact page, a service page or a members list.to (string): Who it rings: 'owner' (default), 'pick' (choose from the space's members) or a role id (everyone with that role)<br>video (boolean): Start with cameras on, default false<br>label (string): Button wordsReady
media.galleryA grid of photos, videos, audio and files from the space's media library, with an upload button for people allowed to add. Tap an item to open it.folder (string): Which folder of the library, default 'main'. Any short name; recordings go to 'recordings'<br>kinds (string[]): Only these kinds: image, video, audio, file. Default all<br>upload (boolean): Show the upload button to people with 'add', default true<br>columns (number): Columns on a phone, default 3<br>empty (string): Words when the folder is empty<br>label (string): Upload button wordsReady
media.playerPlays the newest video or audio (or shows the newest photo) from a media folder. Good for a latest episode, a welcome video or a song.folder* (string): Which folder of the media library<br>kind (string): 'video' (default), 'audio' or 'image'<br>title (string): Words above the playerReady
screen.pairConnects a TV, projector or any big screen. Open the TV link on the screen (any browser, a smart TV, or a laptop with AirPlay or Chromecast), then type the code it shows here. The screen joins the space with the role you pick and shows a page.page (string): Page id the screen opens on, default this page's first other page<br>role (string): Role the screen gets in the space, default 'guest'<br>pair (string): Permission needed to connect screens, default 'manage'<br>label (string): Button wordsReady
screen.remoteA remote for the space's connected screens: pick what each one shows. Phones become controllers.pages (string[]): Page ids people can put on the screen, default every page except HQ<br>control (string): Permission needed to use the remote, default 'play'<br>title (string): HeadingReady
hq.pagesHQ: every page of the space, to open one.noneReady
hq.libraryHQ: the kit library, to add or remove kits (optional features).noneReady
hq.historyHQ: the list of saved versions with undo.noneReady
hq.proposalsHQ: changes the AI proposed, waiting for Approve.noneReady
hq.stylesHQ: the style library (Classic, Futuristic and the space's own) and the scheme, to switch the look.noneReady
hq.accessHQ: who can find and join the space (visibility, join rule), join requests, and the roles.noneReady
hq.connectionsHQ: the space's own AI key, its key vault, access tokens for MCP clients, and connections to outside MCP servers and APIs.noneReady
hq.blueprintHQ: the whole blueprint as readable JSON.noneReady
ledger.balanceThe viewer's balance in one unit (coins, points, credits…) or in every unit of the space.unit (string): A unit id; leave out to show every unit<br>label (string): Words under the number, e.g. 'Your coins'Ready
ledger.sendA form to send some of a unit to another person by email. Only works for units with transfers on.unit* (string): A unit id from ledger.units, e.g. 'coins'<br>title (string): Heading, e.g. 'Send coins'<br>button (string): Button words, e.g. 'Send'<br>done (string): Words shown after sendingReady
ledger.giveFor whoever may issue a unit: create some and give it to a person by email, or take some back.unit* (string): A unit id from ledger.units, e.g. 'coins'<br>title (string): Heading, e.g. 'Give coins'Ready
ledger.historyThe viewer's latest movements in and out (received, sent, spent, rewards).unit (string): A unit id; leave out for every unit<br>limit (number): How many, default 20<br>empty (string): Words when there's nothing yetReady
ledger.leaderboardA ranking of people: by a unit (who holds the most, received the most ever, or received the most this day/week/month/year), or by how often they did something (an event: post, view, play, record, join or a custom one). Give either unit or event.unit (string): A unit id to rank by, e.g. 'coins'<br>event (string): An event name to rank by instead, e.g. 'post' or 'play' (needs the Leaderboards kit)<br>by (string): 'balance' (default) or 'earned'<br>window (string): 'all' (default), 'day', 'week', 'month' or 'year'; ranks by what was received in that time<br>limit (number): How many places, default 10<br>title (string): Heading<br>empty (string): Words when nobody is ranked yetReady
ledger.levelsThe space's levels (tiers, VIP, memberships, plans) with their perks and price, and a button to get or renew one.only (string[]): Level ids to show; leave out for all<br>get (string): Button words to get a level, e.g. 'Join'<br>renew (string): Button words to renew a level that runs out, e.g. 'Renew'<br>held (string): Words on a level the viewer holds, e.g. 'You're in'<br>byHand (string): Words on a level that can't be bought, e.g. 'By invite'Ready
ledger.marksThe viewer's marks in this space: their top level and badges (verified, VIP…).empty (string): Words when they have noneReady
ledger.grantsFor whoever may give a level or badge: who holds it, give it to someone by email (optionally for some days), or take it away. Use for verified, VIP, staff and the like.kind* (string): 'level' or 'badge'<br>key* (string): The level or badge id<br>title (string): HeadingReady
invites.codeThe viewer's own invite code for this space, as a link, a QR code and a share button, with what inviting earns. Needs /referrals/codes.title (string): Heading, e.g. 'Invite friends'<br>qr (boolean): Show the QR code (default true)<br>message (string): Share words; {space}, {code} and {link} are filled in. Default 'Join me in {space}: {link}'<br>button (string): Share button words, default 'Share'<br>empty (string): Words for people who can't get a codeReady
invites.listWho the viewer invited and whether each counted, with totals; or, for people who can invite or manage, who invited whom in the whole space.who (string): 'mine' (default) or 'everyone' (only shows to roles that can invite or manage)<br>title (string): Heading<br>limit (number): How many, default 50<br>empty (string): Words when nobody has joined yetReady
invites.redeemA box to type or paste an invite code or link and join that space.title (string): Heading, e.g. 'Have a code?'<br>button (string): Button words, default 'Join'<br>scan (boolean): Also offer to scan a QR code with the camera (default true on phones)Ready
qrA QR code for any link or text: a page of this space, a website, wifi details, a ticket number. Phones open it with their camera.value (string): The text or full link to encode (up to 300 characters)<br>page (string): Or a page id of this space: makes a link that opens that page<br>label (string): Words under the code<br>size (number): Width in points, 96-320 (default 200)Ready
ai.chatThe builder AI chat: people ask, the reply streams in word by word with a progress line and a Stop button, and proposals show Approve and Discard. Only people who can manage the space see it.placeholder (string): Words in the empty box (default: words.chatPlaceholder)<br>model (string): Model size for messages sent here: auto (default, follows /ai/model), small or large<br>steps (boolean): Show what the AI is doing while it works (default true)Ready
ai.modelHQ: choose the AI's model size (auto, small and fast, large and careful), and switch streaming and finish pushes on or off. Writes /ai.title (string): Heading, default 'AI'Ready
ai.notesThe notes the AI keeps on how the viewer likes things built: read, add and delete them, and switch notes on or off (/ai/remember).title (string): Heading, default 'What the AI remembers'Ready
ai.jobsThe space's latest AI work (chat replies, bots): what each is doing now, how it ended, and Stop for running ones.title (string): Heading, default 'AI activity'<br>limit (number): How many to show, default 10Ready
ai.setupThe 'Connect your AI' step: people who manage the space paste their Claude API key right here (sealed in the vault, never shown again); others see who to ask. Hides itself once the AI is connected unless hideWhenReady is false. Good at the top of HQ, a welcome page or an onboarding page.title (string): Heading, default the word aiSetupTitle ('Connect your AI')<br>about (string): Words under the heading, default the word aiSetupAbout<br>hideWhenReady (boolean): Hide once a key is connected, default trueReady
ai.allowanceHow many AI messages the viewer has left today in this space (or that there's no limit), and when they come back. Put it near an AI chat or on a profile page.label (string): Words above the number, e.g. 'Your AI today'<br>meter (boolean): Show a bar of used vs. allowed, default trueReady
hq.aiUsageHQ, for people who manage the space: today's AI use by person, the space and its bots, the limits that apply (the space's /ai/limits and, on the server's key, the server's), and whose key pays.limit (number): How many people to list, default 20Ready
feed.timelinePosts of a feed (blueprint.feeds) with likes, replies, reposts and a box to post. Layouts: list (X/Threads style), cards (Instagram style), grid (gallery, profile grid), stories (a row of recent posts that disappear).feed* (string): A blueprint.feeds id, or '*' for every feed of the space<br>layout (string): 'list' (default), 'cards', 'grid' or 'stories'<br>sort (string): 'new' (default), 'active' (latest reply first, for forums) or 'top' (most liked this week)<br>scope (string): 'all' (default), 'following' (people I follow), 'mine', or 'person' with the person prop<br>person (string): A @handle, when scope is 'person'<br>tag (string): Only posts with this #tag (an album, a topic)<br>mediaOnly (boolean): Only posts with photos or videos<br>composer (boolean): Show the box to post at the top, default true<br>placeholder (string): Words in the empty post box<br>empty (string): Words when there are no posts<br>columns (number): Grid columns, 2 to 5, default 3<br>pageSize (number): Posts per page, 5 to 50, default 20Ready
feed.composerJust the box to write a post in a feed, with photos and videos when the feed takes them.feed* (string): A blueprint.feeds id<br>placeholder (string): Words in the empty post boxReady
feed.profileA person's profile: photo, name, @handle, bio, link, follower counts, a follow button and their posts.person (string): 'owner' (the space's owner, default), 'me' (whoever looks), or a @handle<br>feed (string): Which feed's posts to show: a feed id or '*' (default)<br>layout (string): 'grid' (default) or 'list'<br>posts (boolean): Show their posts under the profile, default trueReady
feed.peopleA list of people with follow buttons: who to follow in this space, or someone's followers or following.list (string): 'suggested' (default), 'followers' or 'following' (of the person looking)<br>title (string): Heading<br>limit (number): How many, default 10Ready
feed.activityThe person's activity: likes, replies, mentions, reposts and new followers.title (string): HeadingReady
feed.searchSearch posts by words and #tags, with the week's trending tags.feed (string): A feed id to search in, or '*' (default) for all<br>trending (boolean): Show trending tags, default trueReady
feed.savedPosts the person saved for later. Private to them.title (string): HeadingReady
feed.sourcesFor people who manage the space: the outside feeds (X, Bluesky, Mastodon, Instagram, Threads, YouTube, RSS) a feed pulls in, how the last pull went, and adding, pausing or removing them.feed (string): A feed id, or '*' (default) for allReady
reviews.summaryThe rating at a glance: the average in big stars, how many reviews, a bar for each star (tap one to read those), the average of each aspect, and a Write a review button. Put it at the top of a services, product, place, game or profile page.reviews* (string): A blueprint.reviews id (a review board)<br>subject (string): What the reviews are about: a subject id of the board, 'record:<id>' (a record of the board's subjectsFrom collection), '@handle' (a person), any short id (app:weather, deep-clean), 'main' for the board as a whole, or '' for every subject. Default '' when reading; writing then asks which one (or uses 'main' when the board has no list)<br>heading (string): Heading over it, e.g. 'What people say'<br>bars (boolean): Show the bar for each star. Default true<br>aspects (boolean): Show each aspect's average. Default true<br>write (string): Words on the write button. Default 'Write a review'; empty = no button<br>look (string): 'card' (default) or 'plain'Ready
reviews.listReviews with stars, words, photos, the verified mark, helpful votes, answers from the owner, report, and edit or delete your own. Chips to sort (most helpful, newest, highest, lowest) and filter (stars, with photos, verified). People who manage can hide, show and answer. Your own review shows first.reviews* (string): A blueprint.reviews id (a review board)<br>subject (string): What the reviews are about: a subject id of the board, 'record:<id>' (a record of the board's subjectsFrom collection), '@handle' (a person), any short id (app:weather, deep-clean), 'main' for the board as a whole, or '' for every subject. Default '' when reading; writing then asks which one (or uses 'main' when the board has no list)<br>sort (string): 'helpful' (default), 'new', 'high' or 'low'<br>filters (boolean): Show the sort and filter chips. Default true<br>write (string): Words on a write button over the list. Default none<br>pageSize (number): Reviews per page, 3 to 50. Default 10<br>heading (string): Heading over the list<br>empty (string): Words when there are no reviews<br>look (string): 'cards' (default, each review on a card) or 'list' (rows with lines between)<br>subjects (boolean): Show what each review is about. Default true when subject is '*'Ready
reviews.starsA small rating line: ★ 4.6 (128). Tap it to read and write reviews in a sheet. Put it under a heading, a product or a service, in a hero or on a profile.reviews* (string): A blueprint.reviews id (a review board)<br>subject (string): What the reviews are about: a subject id of the board, 'record:<id>' (a record of the board's subjectsFrom collection), '@handle' (a person), any short id (app:weather, deep-clean), 'main' for the board as a whole, or '' for every subject. Default '' when reading; writing then asks which one (or uses 'main' when the board has no list)<br>count (boolean): Show how many reviews. Default true<br>size (number): Star size in points, 12 to 40. Default 16<br>empty (string): Words when there are no reviews yet. Default: hidden until the first one<br>open (boolean): Tap opens the reviews sheet. Default trueReady
reviews.writeA card that asks for a rating: a question and a row of stars to tap, which opens the full review (words, photos, aspects). Shows your own review once you wrote one, with Edit.reviews* (string): A blueprint.reviews id (a review board)<br>subject (string): What the reviews are about: a subject id of the board, 'record:<id>' (a record of the board's subjectsFrom collection), '@handle' (a person), any short id (app:weather, deep-clean), 'main' for the board as a whole, or '' for every subject. Default '' when reading; writing then asks which one (or uses 'main' when the board has no list)<br>question (string): The question, e.g. 'How was your visit?'<br>note (string): A line under the questionReady
reviews.topA ranked list of the board's subjects by rating: top rated services, best games, favourite places, most loved mini-apps. Each row shows stars and the count; tap one for its reviews.reviews* (string): A blueprint.reviews id (a review board)<br>heading (string): Heading. Default 'Top rated'<br>limit (number): How many, 3 to 50. Default 10<br>min (number): Fewest reviews to be listed, 1 to 100. Default 1<br>sort (string): 'best' (highest average, default) or 'most' (most reviews)Ready
reviews.queueFor people who manage: reviews waiting for approval and reviews people reported, to approve, hide or keep. Shows nothing to anyone else.reviews (string): A blueprint.reviews id, or '*' (default) for every boardReady
heroThe top of a page: a big round picture or emoji, a title, a line under it, and a row of buttons (its child blocks: button, call or tile). A profile header, a business card, a welcome. Holds children.title (string): Big title. Empty uses the space's name<br>subtitle (string): A line or two under the title<br>image (string): https URL of a round picture (logo, face)<br>icon (string): An emoji or a letter shown when there's no picture<br>cover (string): Colour of the band behind it: a style colour role (accent, accent2, gold…) or a colour. 'none' for no band<br>align (string): 'center' (default) or 'left'<br>look (string): 'band' (default: a colour band and a round picture) or 'card' (the chat app's page header: a rounded logo, the space's name in small capitals over the title, a soft glow of the cover colour)<br>eyebrow (string): look 'card': the small line over the title. Empty uses the space's nameReady
tilesA grid of app-style tiles (its children are tile blocks): a games hub, an apps page, quick actions, a link-in-bio. Big tiles show a note under the name. Holds children.title (string): Section title over the grid<br>columns (number): Tiles per row on a phone, 2 to 5. Default 4 (2 for big tiles)<br>size (string): 'small' (icon and name, default) or 'large' (a card with a note)<br>tone (string): How the icons are painted: 'solid' (default), 'soft' (a light tint with the icon in colour, like the chat app's app grid) or 'glossy' (shiny, eye-catching)<br>frame (string): 'card' puts the grid on a card (the chat app's sections), 'none' (default) draws it on the page<br>heading (string): How the title looks: 'title' (default, big) or 'label' (small capitals over the card)Ready
tileOne tile in a tiles grid: an icon on a coloured square and a name. Opens a page, a conversation, a link or the AI.label* (string): Name under the icon<br>icon (string): An icon name (game, trophy, chat, phone, calendar, coin…) or an emoji<br>href (string): '#page-id' opens a page, 'https://…' a website, 'chat:<conversation key>' a conversation (e.g. chat:support, chat:general), 'ai' the AI chat (people who manage), 'mailto:' or 'tel:' a mail or a phone call<br>tint (string): The square's colour: a style colour role or a colour. Default accent<br>note (string): A short line: under the name on large tiles, a small status line on small ones (12 players, Fridays 8 PM)<br>badge (string): A small label on the corner (New, 2). 'Live' shows a red LIVE pillReady
linksA section of a service page or link list (its children are link blocks): services with prices, support links, partners, a menu, social links. People who manage the space edit it in place. Holds children.title (string): Section title<br>note (string): A line under the title<br>layout (string): 'list' (default, rows on a card), 'cards' (big cards with a button), 'grid' (two across), 'icons' (the chat app's app grid: icons on one card, four across) or 'banners' (big pictures swiped sideways)<br>heading (string): How the title looks: 'title' (default, big) or 'label' (small capitals over the card, like the chat app)<br>tone (string): How the entries' icons are painted: 'solid' (default), 'soft' (a light tint with the icon in colour) or 'glossy'Ready
linkOne entry in a links section: a service, a product, a support link, a social profile.title* (string): Name<br>note (string): A short description<br>icon (string): An icon name or an emoji<br>image (string): https URL of a picture (cards, grid and banners show it)<br>tint (string): The icon's colour (and a banner's, without a picture): a style colour role or a colour. Default accent<br>href (string): '#page-id' opens a page, 'https://…' a website, 'chat:<conversation key>' a conversation (e.g. chat:support, chat:general), 'ai' the AI chat (people who manage), 'mailto:' or 'tel:' a mail or a phone call<br>price (string): Price as people should read it ($40, From $120, Free)<br>action (string): Button words (Book, Order, Open). Default: an arrow<br>tag (string): A small label (New, Popular, Team only)Ready
chatsThe full-screen chat list of a messaging app: every direct chat, group, channel and case with the newest message, unread counts, pinned on top, search, filters and New chat. Put it alone on a page that is a tab. Its children are custom rows for pages when the app has no tab bar: a lobby.row with href '#games' draws the games row with poster art. Holds children.title (string): Title, default 'Chats'<br>show (string[]): Kinds to list: direct, group, stream, case. Default all<br>empty (string): Words when there are no chats yet<br>search (string): 'header' (default: a search button in the bar opens a search line), 'field' (always shown) or 'off'<br>filters (boolean): Filter chips (All, Unread, Groups, Channels…), default true<br>compose (boolean): A New chat button in the bar, default true<br>rowsTop (string[]): Page ids (or 'ai' for the AI chat) shown as rows above the chats, like HQ in the chat app. Only when the app has no tab bar (dashboard.nav 'list')<br>rowsUnder (string[]): Page ids shown as rows under the first chat (services, apps, games…). Only when the app has no tab bar. Leave both out to list every page of the dashboardReady
calls.recentThe call log of a phone app: recent calls in and out (missed in red), tap to call back. Its children are call blocks shown as the buttons on top (Call us, Video, New call); calling back goes through whichever of them can reach that person. Holds children.title (string): Section title, default 'Recent'<br>empty (string): Words when there are no calls yetReady
hq.overviewHQ: the space at a glance for people who manage it. Members, new members, active people, messages, page views and plays over the last days, each with the change from the days before.days (number): How many days, 7 (default), 14 or 30<br>title (string): Heading, default 'Overview'Ready
hq.navigationHQ: how people move around the app on a phone. Off (the chat app's way): the home is the chat list, and the other pages are rows in it. On: a bottom tab bar with the first five pages. Also orders the pages. Only people who manage the space see it.title (string): Heading, default 'Navigation'Ready
hq.startersHQ: the starter templates (Business, Personal…) with a button to switch the space to one. Switching adds the missing kits, puts the template's pages in place and sets the tabs and look, as one version that can be undone. Only people who manage the space see it.title (string): Heading, default 'Starters'Ready
switcherA segmented control that shows one of its child blocks at a time: For you / Following over two timelines, Posts / Photos on a profile, Activity / Saved, Menu / Reviews. Each child is one segment, named by labels in the same order. Only the open one is drawn. With one child left it shows that child without the control. Holds children.labels (string[]): The segments' names, one per child in order. A missing one uses the child's title prop, else 'Part 2'<br>look (string): 'segments' (default, a rounded segmented control), 'tabs' (words with an underline, like a profile) or 'pills' (separate rounded chips)<br>start (number): Which segment is open first, counting from 0. Default 0Ready
posterOne bright game card: art on a gradient, the name in big letters, a badge, a corner chip and a line under the name. Tap opens a sheet with how to play and a big Play button (the game opens full screen), or goes to href. Put posters in posters, showcase or lobby.row.label* (string): The name on the card<br>game (string): A blueprint.games id: Play starts or joins it, and the card shows how many are playing<br>href (string): Instead of a game: where the card goes ('#page-id', https link, chat:<key>, ai)<br>line (string): A short line under the name (Rounds ~20 s, Teams of 2+, New this week)<br>about (string): One or two sentences on the sheet. Default: the game's about<br>art (string): The picture: an art name (trophy, board, survey, mask, sketch, bubble, dice, wheel, bingo, cards, bomb, gift, detective, number, poll, buzzer, crown, mic, tv, rocket), an emoji, or an https picture. Default: art that fits the game<br>palette (string): The colours: sunset, ocean, grape, lagoon, ember, lime, candy, night, gold, mint, berry, sky. Default: one picked for the game<br>colors (string[]): Your own 2 or 3 colours instead of a palette: colours (#ff6b4a) or style colour roles (accent, gold)<br>badge (string): A small label top-left: HOT, NEW, LIVE (pulses) or any short word. A game being played shows LIVE by itself<br>corner (string): A chip top-right: the hook (x2 points, 2-20 players, 500 coins)<br>steps (string[]): How to play, up to 3 short steps, on the sheet. Default: from the game's rounds<br>tip (string): One useful tip on the sheet and the intro<br>opens (string): 'sheet' (default: details first), or 'play' (straight into the game)Ready
postersA grid of poster cards, the main shelf of a games page, with a switch for small, medium or large cards. Cards pop in one after another. Holds children.title (string): Section title<br>note (string): A line under the title<br>size (string): 'small' (3 across), 'medium' (2 across, default) or 'large' (1 across, wide)<br>sizes (boolean): Show the size switch (default true)Ready
showcaseA featured carousel of poster cards as big wide cards with a PLAY button. Swipes, and moves on by itself every few seconds. Holds children.title (string): Section title (default none)<br>every (number): Seconds before it moves on by itself, 0 to stay still. Default 5Ready
game.liveGames people have started and others can still join, with how many are in and a Join button. Hidden when nothing is on.title (string): Section title, default 'Live now'<br>games (string[]): Only these blueprint.games ids. Default: every game on the page's posters, or all gamesReady
game.winnersThe latest winners scrolling by on their own: who won which game, their points, when.title (string): Section title, default 'Big wins'<br>games (string[]): Only these blueprint.games ids. Default all<br>max (number): How many winners, 3 to 30. Default 12Ready
game.recordEach person's own record per game: games played, games won and best score. Everyone sees only their own.title (string): Section title, default 'Your record'<br>games (string[]): Only these blueprint.games ids. Default allReady
lobby.headerThe top of a games page: a logo square, the page's big name, a line under it, and the person's coins (Ledger) counting up.title (string): Big name, when it differs from the page title (the page title already shows above). Default none<br>tagline (string): A line under the name<br>image (string): https URL of a square logo<br>icon (string): An art name, icon name or emoji in the logo square when there's no image. Default sparkle<br>palette (string): Colours of the logo square (a palette name). Default the accent<br>unit (string): A ledger unit id to show the person's balance; 'none' to hide. Default the space's first unitReady
lobby.rowA row for a chat list or a menu that opens a games page: a 2×2 mosaic of the page's poster art, the name, the games' names and a count. Put it at the top of a chat list page.title* (string): Name on the row (e.g. 'Game night')<br>href* (string): '#page-id' of the games page<br>line (string): Line under the name. Default the posters' names<br>count (boolean): Show the number of games (default true)Ready
game.frameA game in its own full play screen: a branded intro, a header with the round and timer, a progress bar, your results as chips, the game in the middle and one big button. Posters open this by themselves; put it on a page to give one game its own page.game* (string): A blueprint.games id<br>label (string): Name shown. Default the game's name<br>line (string): Line under the name on the intro<br>art (string): The picture: an art name (trophy, board, survey, mask, sketch, bubble, dice, wheel, bingo, cards, bomb, gift, detective, number, poll, buzzer, crown, mic, tv, rocket), an emoji, or an https picture. Default: art that fits the game<br>palette (string): The colours: sunset, ocean, grape, lagoon, ember, lime, candy, night, gold, mint, berry, sky. Default: one picked for the game<br>colors (string[]): Your own 2 or 3 colours instead of a palette: colours (#ff6b4a) or style colour roles (accent, gold)<br>tip (string): One tip on the intro<br>intro (boolean): Play the short branded intro (default true)Ready
records.composerA writing card: a question, a quick row of the chip field's options (tap a mood) and a big button that opens a full-screen writing sheet for a new record (title, body, chip, day, tags). A journal's 'How was today?', a gratitude log, a quick note, a workout log.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>icons (string[]): An emoji or icon name for each option of the chip field, in order (😄 🙂 😐 😔)<br>tones (string[]): A colour for each option of the chip field, in order: style colour roles (tint1, success…) or colours. Default tint1, tint2…<br>write (string): Words on the button that opens the writing sheet, e.g. 'Write'. Empty = no button<br>placeholder (string): Grey words in the empty body, e.g. 'Dear diary…'<br>fields (string[]): Fields the writing sheet asks for, in order. Default all<br>defaults (string): JSON object of values set on every new record<br>saved (string): Words shown after saving, e.g. 'Saved. {streak} days in a row!' ({streak} is the current streak)<br>question (string): The card's question, e.g. 'How was today?'<br>note (string): A line under the question<br>quick (boolean): Show the chip field's options to tap on the card. Default trueReady
records.timelineA collection's records as a timeline like a diary: grouped under day or month headers, each with its date, title, a few lines, chip and tags. Search box, tap to read in full, edit, delete or share, and a Write button. Journals, notes, logs, changelogs, a reading list.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>icons (string[]): An emoji or icon name for each option of the chip field, in order (😄 🙂 😐 😔)<br>tones (string[]): A colour for each option of the chip field, in order: style colour roles (tint1, success…) or colours. Default tint1, tint2…<br>write (string): Words on the button that opens the writing sheet, e.g. 'Write'. Empty = no button<br>placeholder (string): Grey words in the empty body, e.g. 'Dear diary…'<br>fields (string[]): Fields the writing sheet asks for, in order. Default all<br>defaults (string): JSON object of values set on every new record<br>saved (string): Words shown after saving, e.g. 'Saved. {streak} days in a row!' ({streak} is the current streak)<br>group (string): 'month' (default) or 'day' headers<br>search (boolean): Show a search box. Default true<br>lines (number): Lines of body shown per record, 0 to 8. Default 3<br>limit (number): How many to show before 'Show more', 5 to 100. Default 30<br>empty (string): Words when there are no records yet<br>heading (string): Heading over the timelineReady
records.calendarA month calendar of a collection: each day with records is filled with the colour of its chip (a mood calendar, a habit tracker, a booking or workout calendar). Swipe or tap the arrows for other months; tap a day to see and edit its records, or write one for that day.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>icons (string[]): An emoji or icon name for each option of the chip field, in order (😄 🙂 😐 😔)<br>tones (string[]): A colour for each option of the chip field, in order: style colour roles (tint1, success…) or colours. Default tint1, tint2…<br>write (string): Words on the button that opens the writing sheet, e.g. 'Write'. Empty = no button<br>placeholder (string): Grey words in the empty body, e.g. 'Dear diary…'<br>fields (string[]): Fields the writing sheet asks for, in order. Default all<br>defaults (string): JSON object of values set on every new record<br>saved (string): Words shown after saving, e.g. 'Saved. {streak} days in a row!' ({streak} is the current streak)<br>heading (string): Heading over the calendar<br>week (string): First day of the week: 'mon' (default) or 'sun'<br>empty (string): Words under a day with no recordsReady
records.streakDays in a row with at least one record, with a flame, the longest streak, how many in total and this week as dots. Brings people back every day: journals, habits, workouts, practice, reading.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>label (string): What a day counts as, e.g. 'days of writing'. Default 'days in a row'<br>icon (string): Emoji or icon name, default 🔥<br>goal (number): A goal in days (7, 30, 100…): shows a progress bar towards it<br>nudge (string): Words shown while today is still empty, e.g. 'Write today to keep it going'<br>done (string): Words shown once today has a recordReady
records.memories'On this day': records from a week, a month, six months and every year ago today, as cards to open. Hidden when there are none (or shows empty). Journals, photo diaries, logs.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>icons (string[]): An emoji or icon name for each option of the chip field, in order (😄 🙂 😐 😔)<br>tones (string[]): A colour for each option of the chip field, in order: style colour roles (tint1, success…) or colours. Default tint1, tint2…<br>heading (string): Heading, default 'On this day'<br>empty (string): Words when there's nothing from before. Unset = the block hides itselfReady
records.promptA daily writing prompt on a card: the same question all day, a new one tomorrow, a button for another one, and Write, which opens the writing sheet with the prompt saved on the record. Journals, reflection, team check-ins, kids' diaries.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>write (string): Words on the button that opens the writing sheet, e.g. 'Write'. Empty = no button<br>placeholder (string): Grey words in the empty body, e.g. 'Dear diary…'<br>fields (string[]): Fields the writing sheet asks for, in order. Default all<br>defaults (string): JSON object of values set on every new record<br>saved (string): Words shown after saving, e.g. 'Saved. {streak} days in a row!' ({streak} is the current streak)<br>prompts (string[]): The prompts to rotate through. Default a set of everyday journal prompts<br>label (string): Small heading over the prompt, default 'Today's prompt'<br>shuffle (string): Words on the 'another one' button. Empty = no buttonReady
records.statsInsights about a collection over the last days: how many records, words written, best streak, and a bar for each option of the chip field (how your moods add up). Journals, habits, feedback, support tickets.collection* (string): A blueprint.collections id<br>title (string): Field id drawn as the title (a text field). Default: a field called title. 'none' for no title<br>body (string): Field id drawn as the body (a longtext field). Default: the first longtext<br>chip (string): Field id drawn as a coloured chip (a choice field: mood, status, rating). Default: the first choice. 'none' for no chip<br>date (string): Field id of the record's day (a date field). Default: the first date field, else the day it was written<br>tags (string): Field id of #tags (a text field). Default: a field called tags. #tags written in the body count too<br>field (string): A text field that holds the prompt a record was written from (records.prompt fills it; others show it when there's no title)<br>icons (string[]): An emoji or icon name for each option of the chip field, in order (😄 🙂 😐 😔)<br>tones (string[]): A colour for each option of the chip field, in order: style colour roles (tint1, success…) or colours. Default tint1, tint2…<br>days (number): How many days back, 7 to 365. Default 30<br>heading (string): Heading, default 'Insights'Ready
photobook.bookA photo book from blueprint.books: its cover, then pages people flip through sideways (or scroll), each laying out photos from the book's feed. People who manage the space can arrange pages, change layouts, swap photos and write on pages right there; saving is one version.book* (string): A blueprint.books id<br>view (string): 'flip' (default: one page at a time, swipe sideways like a real book) or 'scroll' (pages one under another)<br>start (string): 'cover' (default) or 'first' (open on the first page)<br>thumbs (boolean): Show a strip of small pages to jump around, default true<br>edit (boolean): Show the Edit book button to people who manage the space, default trueReady
photobook.shelfA shelf of photo book covers that open full screen: the space's books, and (albums) one book for every #tag in a feed, so each Gallery album is a book by itself.title (string): Heading<br>books (string[]): blueprint.books ids to show, in order; default all of them<br>albums (boolean): Also show a book for each #tag of the feed, default true<br>feed (string): The feed albums come from, default 'gallery'<br>columns (number): Covers per row, 2 to 4, default 2<br>empty (string): Words when there are no books or albumsReady
searchA search box with results as you type, grouped by what they are, each one opening where it lives. Looks across the space (pages, records, messages, feed posts, people, files) or only some of it: one collection makes a record finder, one stream a chat search, sources ['people'] a people finder. Only shows what the viewer may see.sources (string[]): What to look in, some of pages, records, messages, posts, people, files; default all<br>collection (string): Only records of this collection (a /collections id)<br>stream (string): Only messages in this conversation (a /streams id)<br>feed (string): Only posts in this feed (a /feeds id)<br>limit (number): Results per kind, 1 to 25, default 5<br>title (string): Heading above the box<br>placeholder (string): Words in the empty box, default 'Search'<br>empty (string): Words when nothing is found<br>groups (boolean): Show a small heading for each kind of result, default trueReady
miniapps.libraryThe public mini-app library: browse and search mini-apps people published, try one, add it to this space or make your own copy (remix).category (string): Start on one category: games, tools, party, kids, learning, business, health, social, creative, info<br>title (string): Heading wordsReady
miniapps.mineFor people who manage the space: this space's mini-apps, with publish to the library, updates from the library, and stats.title (string): Heading wordsReady
miniapps.reviewFor Zvessa admins only: published mini-apps waiting for review, and reports. Shows nothing to anyone else.noneReady
safety.reportA Report button for one thing: the space itself (default), a person, a post or a record. People pick a reason and it goes to the space's moderators (and to Zvessa's team for serious reasons). Posts and people already have Report in their menus; use this for a 'Report this space' link in a footer, a help page or a profile.target (string): What it reports: post, feedPost, record, person, space (default space)<br>id (string): The id of the post, record or person; leave out for this space<br>label (string): Button words, default 'Report this space'Ready
safety.blockA Block / Unblock button for one person (by user id). Blocking works everywhere: neither sees the other's posts, and neither can message, call, friend or group the other.person* (string): The person's user id<br>label (string): Button words, default 'Block {name}'Ready
safety.queueThe review queue for the space's moderators: reported posts, records and people, and posts the word filter held, grouped by what they're about, with Dismiss, Hide, Let through, Warn, Mute, Ban and Send to zvessa. Shows nothing to people who don't moderate. quiet hides it entirely while nothing waits (for HQ).title (string): Heading, default 'Reports'<br>quiet (boolean): Show nothing while the queue is empty<br>log (boolean): Also list what moderators did lately (default true)Ready
safety.filtersThe space's safety settings for people who manage it: filter words, ready word lists, catching links and contact details, what happens to caught words (mask, hold, refuse), report reasons, who moderates, auto-hide, with a box to try a sentence. Saves blueprint.safety as a version (undo from History).title (string): Heading, default 'Word filter'Ready
safety.blockedThe person's own blocked people, with Unblock. Works in any space (blocks follow the person).title (string): Heading, default 'Blocked people'Ready
safety.adminZvessa's admins only: reports that reached Zvessa from every space, the spaces with the most open reports, suspended accounts and locked spaces, with Suspend, Lock and their undo. Shows nothing to anyone else. Pair it with miniapps.review for the mini-app library.title (string): Heading, default 'Safety across Zvessa'Ready
account.emailThe viewer's email, and a form to change it: their password, the new email, then a code sent to the new email.title (string): Heading, e.g. 'Email'<br>change (string): Button words to start, e.g. 'Change email'<br>sent (string): Words after the code was sent, e.g. 'We sent a code to your new email.'<br>done (string): Words after the change, e.g. 'Your email is changed.'Ready
account.passwordA form to change the viewer's password (current one, then the new one). Signs them out on their other devices.title (string): Heading, e.g. 'Password'<br>button (string): Button words, e.g. 'Change password'<br>done (string): Words after the changeReady
account.sessionsSign out here, or sign out on every other device.signOut (string): Button words, e.g. 'Sign out'<br>others (string): Button words, e.g. 'Sign out on other devices'<br>done (string): Words after signing out the other devicesReady
account.deleteDelete the viewer's account and everything that belongs to it: their own spaces (named, with how many people are in each) and what they posted or uploaded in other spaces. Asks for their password, or a code sent to their email. Can't be undone.title (string): Heading, e.g. 'Delete my account'<br>about (string): What it does, in the space's words<br>button (string): Button words, e.g. 'Delete my account'<br>confirm (string): Final button words, e.g. 'Delete forever'Ready
notify.settingsThe viewer's own notification controls: pause, quiet hours, daily digest time, and on / digest / off for each kind of notification (per kit and topic) here or in every space, and per space. Each person sees and changes only their own.title (string): A heading above it<br>sections (string[]): Which parts show, in order: pause, quiet, digest, topics, spaces. Default all<br>topics (string[]): Only these topics or groups ("talk", "social.like"); default every topic the space usesReady
notify.inboxThe viewer's notifications, newest first; tapping one opens the exact page it's about (switching space if needed). Shows what quiet hours or the digest are holding.title (string): A heading above it<br>scope (string): 'all' (every space, default) or 'space' (only this space)<br>limit (number): How many, default 30, up to 100<br>topics (string[]): Only these topics or groupsReady
notify.bellA small button with the viewer's unread count that opens their notifications.label (string): Words next to the bell; default none<br>page (string): A page to open (one with a notify.inbox block); default the built-in notifications screen<br>scope (string): Count 'all' spaces (default) or this 'space'Ready
notify.sendA form for the space's managers to send a notification to members (everyone, some roles); shows only to people who can manage. Ten an hour per space.title (string): A heading above it<br>topic (string): space.announce (default) or one of notifications.topics, so people can choose to get it<br>to (string[]): Role ids it goes to; default every member<br>link (string): Where a tap goes: page:<pageId> or an app path; default noneReady
share.saveFor people who manage the space: save the whole space as a template, or pages they pick as a kit. Shows what's inside and every private thing taken out (keys, emails, phone numbers, signed links, uploaded photos, outside accounts) before saving. Saved ones are private until the person publishes them.title (string): Heading words<br>kind (string): 'template' or 'kit' to offer only one; default bothReady
share.libraryBrowse templates and kits people published (each accepted by a Zvessa admin), see what's inside, add one to the space or switch to a template, rate and report.title (string): Heading words<br>kind (string): 'template' or 'kit' to show only one; default both<br>category (string): Start on one category: business, personal, community, creator, games, party, kids, learning, work, health, tools, otherReady
share.mineFor people who manage the space: their own templates and kits (publish, new versions, unpublish, delete) and the ones this space added (newer versions, take out).title (string): Heading wordsReady
share.reviewFor Zvessa's admins only (shows nothing to anyone else): published templates and kits waiting for review, with what's inside and what was taken out, and reported ones.noneReady
web.shareThis space's web address (or one page's), with Copy and Share. Hides itself while the space isn't on the web.page (string): A page id; default the address itself (the web home page)<br>label (string): Words before the address, e.g. 'Find me at'Ready
hq.webHQ: the space's web address, handle, own domains with their DNS steps and status, which pages are on the web, share card and embed code.noneReady

Kits #

94 kits, 87 ready.

Build #

KitIdWhat it doesEnginesAddsStatus
FormsformsA form people fill in, and a list of what came in. Sign-ups, feedback, applications.collectionspage forms, collection forms-responsesReady
ConnectionsconnectionsUse your own AI key, connect any MCP server or API with keys the AI uses but never sees, and build this space from any MCP client.capabilitiespage connectionsReady
Web researchweb-researchThe AI can search the web and read any page, then report back or build from it. Save what you find here.capabilities, collectionspage web-research, collection web-research-notesReady
AI helperai-helperPick a fast or careful AI, see and stop what it's working on, and let it remember how you like things built.aipage ai-helperReady
Media librarymediaPhotos, videos, audio and files in folders, with a gallery and a player. Big videos go to Cloudflare R2.filespage mediaReady
Mini-app libraryapp-libraryBrowse, try and add mini-apps other people made, and publish your own for everyone.appspage app-libraryReady
Templates and kitstemplates-librarySave your space as a template or pages as a kit, publish them for everyone, and add ones other people made.appspage templates-libraryReady
GallerygalleryA grid of photos and videos that opens full screen. Add #tags to sort them into albums.spacespage galleryReady
Live infoliveinfoShows live information from any MCP server or API the space is connected to, with an optional AI summary.apps, capabilitiespage liveinfoReady
Photo bookphoto-bookTurn your gallery into a photo book you flip through: a cover, chapters by month, layouts picked for each photo, and every album as a book of its own. Arrange pages by hand or ask the AI.spacespage photo-bookReady

Talk #

KitIdWhat it doesEnginesAddsStatus
Group chatgroup-chatOne conversation for everyone in the space, and smaller groups people make themselves.spacespage chats, stream group-chatReady
ChannelschannelsTopics to talk in, and an announcements channel only the owner posts in, with replies in threads.spacespage chats, stream announcements, stream general, stream channels-randomReady
Direct chatdirect-chatOne-to-one conversations with friends and people in your spaces, with reactions, replies and read receipts.spacespage chatsReady
TeamspaceteamspaceSlack-style for a team or org: rooms with threads and @mentions, direct chats, groups, tasks and an invite link.spaces, collectionspage chats, page teamspace, stream general, stream announcementsReady
Support desksupportPeople ask for help in private; your team answers, assigns and closes each request. Works for applications and orders too.spaces, lifecyclepage support, page support-desk, stream supportReady
Posts and threadsfeedShort posts with photos and videos, replies in threads, likes, reposts, quotes and follows. Your own X or Threads.spacespage feed, page feed-following, page explore, page profile, page activityReady
Photo feedphotosPhotos and videos with captions, likes, comments and saves, and a profile grid. Your own Instagram.spacespage photos, page profile, page exploreReady
StoriesstoriesPhotos and videos that disappear after a day, shown as a row at the top of a page.spacespage storiesReady
ForumforumTopics with titles and long threaded discussions, the most active on top.spacespage forumReady

People #

KitIdWhat it doesEnginesAddsStatus
ContactscontactsPeople you know or work with, with their details and notes.collectionspage contacts, collection contacts-peopleReady
Teams and hierarchyhierarchyOrganise people into any structure: teams, departments, classes, squads, branches, households. Units can have leads, titles and their own rooms.structurepage structureReady
TierstiersRanked levels people climb: Bronze, Silver and Gold, bought with coins each month or given by you. Pages can be for a tier and up.ledgerpage tiersReady
VIPvipA top level you hand out yourself, with a mark by the person's name. Pages and blocks can be VIP only.ledgerpage vipReady
VerifiedverifiedA check mark you give people after you've confirmed who they are. Shown by their name; pages can be for verified people only.ledgerpage verifiedReady
Profile and followersprofilesYour profile with photo, bio, link and follower counts, who to follow, and your activity.spacespage profile, page activityReady
Welcome messagewelcome-botGreets each new member in General with a message you write.automations, spaces–Ready

Money #

KitIdWhat it doesEnginesAddsStatus
CatalogcatalogProducts, services or a menu, with prices. Taking payments comes with the Payments kit.collectionspage catalog, collection catalog-itemsReady
CoinscoinsYour own currency: everyone who joins gets some, people send them to each other, and you give more out.ledgerpage coinsReady
MembershipsmembershipsA membership with perks, renewed each month. Paid in coins for now; card payments plug in later without changing it.ledgerpage membershipsReady
Tip and bill splittersplitWork out the tip and what each person pays.appspage splitReady
PaymentspaymentsTake card payments and subscriptions with Stripe.ledger–Coming
TipstipsLet people tip in coins or money.ledger–Coming

Play #

KitIdWhat it doesEnginesAddsStatus
LeaderboardsleaderboardsRank people by coins or any unit, or by what they do: most coins this week, most held overall, most active.ledger, eventspage leaderboardsReady
PollspollsAsk a question, people vote, results live.roundspage pollsReady
WheelwheelSpin for a random pick or prize that everyone sees, or take turns spinning for dares and tasks.roundspage wheelReady
Hot Potatohot-potatoPass it before the timer runs out.roundspage hot-potatoReady
High Cardhigh-cardEveryone draws; the highest card wins.roundspage high-cardReady
ScorekeeperscorekeeperKeep score for any game: players, plus and minus, a target to win, undo.appspage scorekeeperReady
Dice and coindiceRoll dice, flip a coin or pick a random number. Fair randomness.appspage diceReady
PuzzlespuzzlesTic-tac-toe (with a friend or the phone), a sliding puzzle and a memory match.appspage puzzlesReady
Point systempointsGive people points for anything (chores, wins, help) and show who's ahead this week and overall.ledger, eventspage pointsReady
Quests and achievementsquestsMissions, streaks, badges and levels.events, structure, ledger–Coming

Party #

KitIdWhat it doesEnginesAddsStatus
Trivia nighttriviaRounds of questions, a timer and a live scoreboard. Make your own or let the AI write them.roundspage triviaReady
Quiz boardquiz-boardA board of categories and points, Jeopardy style, with buzzers on everyone's phone.roundspage quiz-boardReady
Survey showdownsurvey-showdownTwo teams guess the top answers, Family Feud style.roundspage survey-showdownReady
CharadescharadesPrompts on one phone, a timer and team scores on the TV.roundspage charadesReady
Party packparty-packMore group games: drawing, would you rather, two truths and a lie, most likely to, bingo and hidden roles.roundspage party-packReady
Game makergame-makerDescribe any party or board game and the AI builds it from rounds, teams, timers and scores.roundspage game-makerReady

Plan #

KitIdWhat it doesEnginesAddsStatus
Group plansgroup-planPlan a picnic, Thanksgiving or a trip: who's coming, who brings what, a vote on the date and shared costs.collections, roundspage group-plan, collection group-plan-guests, collection group-plan-bring, collection group-plan-costsReady
Secret Santasecret-santaDraw names fairly, keep them secret, share wish lists and a budget.rounds, collectionspage secret-santa, collection secret-santa-wishesReady
Habit trackerhabitsTick off habits each day and keep your streaks going.appspage habitsReady
JournaljournalA private diary: write each day with a mood, daily prompts, a streak, a mood calendar and 'on this day'. Only you see it unless you change who sees it.collectionspage journal, page journal-calendar, collection journalReady

Live #

KitIdWhat it doesEnginesAddsStatus
CallscallsVoice and video calls, one-to-one or in groups, with screen share.roomspage callsReady
Live streamsliveGo live to many viewers. Hosts are on stage, everyone else watches and reacts, and you can bring people up to speak.roomspage liveReady
Show on TVtvPut any page, game or scoreboard on a TV with a TV link, AirPlay or Chromecast; phones become controllers.screenspage tvReady

Time #

KitIdWhat it doesEnginesAddsStatus
AppointmentsappointmentsPeople book a time with you: set your days, hours and how long each booking is.timepage appointmentsReady
SchedulerschedulerWrite posts now and have them go out later in your chats, channels or feed.time, spacespage schedulerReady
TimertimerA countdown timer with presets that rings when time is up. Can run cycles, like focus and break.appspage timerReady
StopwatchstopwatchA stopwatch with laps that keeps counting while you're away.appspage stopwatchReady
CountdowncountdownDays, hours and minutes until a date: a launch, a trip, a birthday.appspage countdownReady
Focus timerfocusWork in focused blocks with short breaks in between (25 and 5 minutes, four rounds).appspage focusReady
Service pageservice-pageYour services with prices, booking and payment.time, collections, ledger–Coming
Events and ticketsevents-ticketsRSVPs, tickets and check-in by QR.time, ledger–Coming

Work #

KitIdWhat it doesEnginesAddsStatus
Boards and taskstasksA board with columns you move things across. Tasks, orders, a pipeline.collectionspage tasks, collection tasks-itemsReady
Drafts and approvalsdraftsWrite now and send later, keep drafts, and hold posts from chosen roles until a moderator approves them.spaces, lifecyclepage draftsReady
BotsbotsAI teammates with their own role, tools and approval rules. Ask the AI for one: a helper, a greeter, a reporter, a moderator.automations, spacespage botsReady
AutomationsautomationsWhen something happens, do something: on a schedule, when a record, post or member arrives, or when an outside service calls in.automations, events, timepage botsReady
Helper bothelper-bot@mention the helper in any chat and it answers, in context. Its answers wait for your OK until you let it act on its own.automations, spaces–Ready
Reply draftsreply-draftsWhen someone writes to your help desk, a bot drafts the answer. Your team edits it or sends it as is, as themselves.automations, spaces–Ready
Daily digestdaily-digestEvery morning a bot reads what happened in your chats and lists, and sends you a short summary.automations, spaces, time–Ready
Docs and wikidocsPages with sections, search and versions.collections–Coming

Grow #

KitIdWhat it doesEnginesAddsStatus
AnalyticsanalyticsCounts page views, posts, records, joins and plays per day, as charts only you see.eventspage analyticsReady
GuestbookguestbookVisitors leave a short note on your page.spacespage guestbookReady
Outside feedsoutside-feedsPull posts from X, Bluesky, Mastodon, Instagram, Threads, YouTube or any RSS feed into your space, with your own keys.spaces, capabilitiespage outsideReady
Reviews and ratingsreviewsStar ratings with words and photos for anything: services, products, places, games, people. Helpful votes, verified reviewers, your answers, reports and spam limits.spacespage reviewsReady
Coins for postspost-rewardsMembers earn a coin each time they post in a chat. Coins only, never real money.automations, ledger, spaces–Ready
Public linkspublic-linksYour pages on the web without the app: your own address (handle.zvessa.com), your own domain, link previews and embeds.webpage public-linksReady
Invites and referralsinvitesEveryone gets their own invite code and QR. When someone they invite stays a day, both get coins. See who invited whom and the top inviters.structure, ledger, eventspage invitesReady
Auto-post schedulerauto-postWrite once, schedule posts to your social accounts, track how they do.time, capabilities, events–Coming

Tools #

KitIdWhat it doesEnginesAddsStatus
NotificationsnotificationsA page with everyone's notifications and their own settings: per kit, per space, quiet hours, a daily digest.notifypage notificationsReady
AnnouncementsannouncementsManagers send a notification to members, or to some roles; members choose how they get them.notifypage announceReady
CalculatorcalculatorA calculator with keyboard support.appspage calculatorReady
Drawing boarddrawingDraw and sketch with the space's colours; undo, eraser, and it remembers your drawing.appspage drawingReady
Unit converterconverterConvert length, weight, temperature, volume, area, speed, time and data.appspage converterReady
FlashcardsflashcardsStudy with cards that flip; shuffle, again or got it. Edit the deck yourself.appspage flashcardsReady
MetronomemetronomeA steady beat with an accent on the first beat; tap to set the tempo.appspage metronomeReady
Colour pickercolorsPick a colour, get its HEX, RGB and HSL, shades, and this space's own colours.appspage colorsReady
QR makerqrTurn a link, text or Wi-Fi login into a QR code to scan.appspage qrReady
CompasscompassA compass that shows which way you're facing, and can point out a direction.appspage compassReady
WeatherweatherToday's weather, the next hours and the week, for a place you pick or where you are. Free data from Open-Meteo.apps, capabilitiespage weatherReady
Pocket toolstoolboxCalculator, unit converter, tip splitter, timer and stopwatch, together.appspage toolboxReady
SearchsearchOne search box for the whole space: pages, records, messages, posts, people and files. Everyone only finds what they're allowed to see.searchpage searchReady

Safety #

KitIdWhat it doesEnginesAddsStatus
Kids spacekidsMade for kids: private and invite-only, grown-up and kid roles, and a kids' chat only grown-ups can moderate.audiences, structure, spacespage kids, stream kids-chatReady
Moderation and safetymoderationWord filters, a review queue for reports, auto-hiding and who moderates. Reporting and blocking work in every space anyway.spaces, lifecyclepage moderationReady

Permissions #

VerbWhat it allows
viewSee the space's pages
postWrite in chats and streams
playVote, play games and join rounds
addAdd records (forms, lists, boards) and change their own
editChange or delete anyone's records
inviteInvite people
manageChange the space: pages, styles, kits, roles; approve the AI's changes

Default roles #

RoleIdCan
Ownerownerview, post, play, add, edit, invite, manage
Membermemberview, post, play, add
Guestguestview, play
Visitorvisitorview

Server functions #

Public queries and mutations (call them with useQuery / useMutation or the Convex client). Internal functions are left out. Who may call each: API.

FunctionKindAbout
account.account.mequeryThe person's account as their own account blocks show it.
account.account.startEmailChangeactionStep 1: your password and the new address. A code goes to the new address.
account.account.confirmEmailChangeactionStep 2: the code from the new address. The old address gets a note that it changed.
account.account.changePasswordactionYour current password and a new one (8+ characters). Other devices are signed out.
account.account.signOutOthersactionSigns the person out on every other device.
account.account.startDeletionaction
account.account.deleteMeactionDeletes the account. Give the password, or the code from startDeletion. The person is signed out everywhere at once; the rest of their data goes over the next moments.
ai.messagesquery
ai.sendmutationSends the person's message and starts the AI on it. A limit hit comes back as { ok: false, limit }.
ai.stopmutationStops an AI job in this space: the one given, or the chat's current one.
ai.jobsqueryThe space's latest AI jobs (the ai.jobs block).
aiNotes.minequery
aiNotes.addmutation
aiNotes.removemutation
blueprint.ensuremutationCreates the person's workspace on first sign-in, in the starter style they picked.
blueprint.onboardmutationOnboarding in one step: the person's name, and (unless they only joined someone else's space) their own space with a name, a look and the kits they picked. Saved as one version, so the first undo point is the finished setup.
blueprint.mequeryWhere the person is in onboarding, for the screens before a space opens.
blueprint.changemutationA change the person makes themselves (HQ controls, installing a kit): same checks as an AI proposal, applied at once, saved as a version so it can be undone.
blueprint.getquery
blueprint.historyquery
blueprint.pendingquery
blueprint.approvemutationA person approves an AI proposal: apply it to the current blueprint, check it, save a version.
blueprint.discardmutation
blueprint.restoremutationUndo = restore an earlier version as a new version, so undo itself can be undone.
blueprint.addKitmutationAdds a kit (docs/KITS.md) to the space, as one undoable version.
blueprint.removeKitmutationTakes a kit out again: its pages and collection shapes. Records stay, so adding it back restores them.
bookings.slotsquerySlots on a day (in the block's time zone), with which are taken.
bookings.daysqueryThe days people can book, in the block's time zone, starting today.
bookings.bookmutation
bookings.cancelmutation
bookings.upcomingqueryUpcoming bookings on a block: everyone's for managers, your own otherwise.
calls.targetsqueryWho the viewer can ring from a call block (for 'pick', the list to choose from).
calls.startmutationRings people. From a call block, whoever can see the block can ring its targets (an owner's "Call us" button), and 'pick' needs "post". Without a block (a members list, a direct conversation) it needs "post", everyone rung must be in the space, and each must be a friend unless the caller may invite. Kids only ring and get rung within their kids spaces.
calls.incomingqueryCalls ringing the signed-in person right now, in any space.
calls.currentqueryThe call the signed-in person is on (placed, or answered), if any.
calls.answermutation
calls.declinemutation
calls.hangUpmutation
capabilities.connections.testactionHQ: checks a connection works and lists what it offers.
capabilities.tokens.listquery
capabilities.tokens.createactionMakes a token and returns it. This is the only time anyone sees it.
capabilities.tokens.revokemutationStops a token working at once.
capabilities.vault.listqueryThe keys in the open space, without their values.
capabilities.vault.saveactionAdds a key, or replaces the value of one with the same name. The value is never returned.
capabilities.vault.setScopesmutationNarrows where a key may be sent and what it's for, without touching its value. Widening needs the key pasted again (save), so nobody can send a key they don't have somewhere new.
capabilities.vault.removemutationRemoves a key from the vault. Connections that use it stop working until it's added again.
dms.listqueryOne direct conversation, oldest first; null when these two can't talk and have nothing yet.
dms.sendmutation
dms.removemutationThe writer takes a message back.
dms.conversationsqueryThe person's direct conversations, newest first.
events.trackmutationCounts something from the app: a page view, or a custom event a block or mini-app sends ("tap-buy", "finished-level"). Anyone who can see the space may send them.
events.summaryqueryDaily totals for the last days days, per event name. For people who manage the space.
events.leadersqueryPeople ranked by how often they did something over the last days days (or all time). The data source for leaderboards: anyone who can see the space can read it.
friends.listqueryFriends, requests to me, and requests I sent.
friends.statusqueryHow I stand with one person: none, asked (I asked), asking (they asked), friends, or me.
friends.askmutationAsks someone to be friends; if they already asked me, we become friends.
friends.answermutation
friends.removemutationUnfriends, or takes back a request.
friends.spacesquerySpaces my friends own that I'm allowed to look at (friends, link or public).
kits.ailimits.limits.allowancequeryWhat the signed-in person has left today in the space they have open. For the chat and "ai.allowance".
kits.ailimits.limits.usagequeryToday's AI use in the open space, for people who manage it (the "hq.aiUsage" block).
kits.bots.engine.runmutationStarts a manual automation (the bots.run block). Who may: when.who, else people who manage.
kits.bots.engine.askmutationAsk a bot from the app (people who manage, or the roles a bots.ask block is for).
kits.bots.engine.waitingqueryActions waiting for this person to approve.
kits.bots.engine.decidemutationApprove (optionally with changed words) or discard a waiting action.
kits.bots.engine.runsqueryRecent runs, for people who manage (the bots.runs block).
kits.bots.engine.overviewqueryThe space's bots and automations with today's use, for the bots.list block.
kits.bots.engine.canRunqueryWhether a manual automation can be run by this person (the bots.run block shows itself only then).
kits.bots.engine.runOfqueryOne run (to follow an answer while a bot thinks).
kits.bots.hooks.createmutationMakes a webhook address for an automation. The secret is shown once.
kits.bots.hooks.listquery
kits.bots.hooks.revokemutation
kits.invites.referrals.myCodequeryThe viewer's own code in the open space, and whether they can get one.
kits.invites.referrals.getCodemutationMakes (or returns) the viewer's own invite code for the open space.
kits.invites.referrals.minequeryPeople the viewer invited to the open space.
kits.invites.referrals.allqueryEvery referral in the open space, for people who may invite or manage.
kits.invites.referrals.recheckmutationChecks pending referrals now, e.g. after changing what qualifies. Managers only.
kits.ledger.ledger.balancesqueryThe signed-in person's balance in every unit of the space (or one unit).
kits.ledger.ledger.historyqueryThe signed-in person's latest movements in a unit (or all units).
kits.ledger.ledger.leaderboardqueryA ranking of holders of one unit: by balance now, by everything ever received, or by what was received in a recent window (day, week, month, year).
kits.ledger.ledger.levelsqueryThe levels of a space, with whether the signed-in person holds each and until when.
kits.ledger.ledger.marksqueryThe public marks (top level and badges) of a person in the open space, to show beside their name.
kits.ledger.ledger.rightsqueryWhat the signed-in person may manage here, so blocks only show tools that will work.
kits.ledger.ledger.holdersqueryEveryone holding a level or badge, for whoever may give it.
kits.ledger.ledger.openmutationOpens the signed-in person's accounts in the open space, giving each unit's welcome amount once. Visitors who haven't joined don't get accounts.
kits.ledger.ledger.sendmutationSend units to another member, when the unit allows it.
kits.ledger.ledger.issuemutationCreate units and give them to someone (or to the space's purse). Needs the unit's issue permission.
kits.ledger.ledger.takemutationTake units back from someone. Needs the unit's issue permission.
kits.ledger.ledger.buyLevelmutationBuy (or renew) a level with its price, paid to the space's purse. Renewing adds a period to the time left.
kits.ledger.ledger.grantmutationGive a level or a badge by hand (verified, VIP, staff…). Needs its grant permission.
kits.ledger.ledger.revokemutation
kits.lobby.lobby.summaryquery
kits.photobook.books.readquery
kits.photobook.books.photosqueryPhotos people who manage the space can put in a book: the feed's images, newest first.
kits.photobook.books.shelfqueryA shelf's covers: the space's books, then one book per #tag of the feed (most photos first).
kits.records.views.daysqueryEvery day that has records: how many, and the chip value of the newest one that day (to colour a calendar). Small enough to send whole; a streak, a calendar and insights all read it.
kits.records.views.onDaysqueryThe records on some days (a calendar's day, "on this day"), newest first.
kits.records.views.searchqueryRecords whose words (any text field) or #tags match, newest first.
kits.records.views.onequeryOne record (a reader opened from a link or after an edit).
kits.reviews.reviews.summaryqueryThe rating at a glance, the person's own review, and whether they may write.
kits.reviews.reviews.starsqueryJust the average and count, for a small star line (one read).
kits.reviews.reviews.listqueryA page of live reviews. Sorts by helpful, newest, highest or lowest; filters by stars, photos, verified.
kits.reviews.reviews.topqueryThe board's subjects ranked by rating (or by how many reviews).
kits.reviews.reviews.subjectsqueryWhat someone can pick to review when a block doesn't say: the board's list, its collection's records, and subjects pages name.
kits.reviews.reviews.queuequeryReviews waiting for approval and reported ones, for people who manage.
kits.reviews.reviews.writemutationWrites this person's review of a subject, or changes the one they wrote.
kits.reviews.reviews.removemutationDeletes a review: your own, or anyone's for people who can edit or manage.
kits.reviews.reviews.votemutationHelpful (true), not helpful (false), or take the vote back (left out). Not on your own review.
kits.reviews.reviews.replymutationThe public answer to a review. Empty words take it away.
kits.reviews.reviews.reportmutationReports a review once. Enough reports hide it until someone who manages looks.
kits.reviews.reviews.moderatemutationFor people who manage: approve a waiting review, hide one, or keep a reported one (clears its reports).
kits.safety.safety.reportmutation
kits.safety.safety.blockmutation
kits.safety.safety.unblockmutation
kits.safety.safety.blockedqueryThe people I blocked, to unblock.
kits.safety.safety.isBlockedqueryWhether I blocked someone (for a Block / Unblock button).
kits.safety.safety.mequery
kits.safety.safety.queuequeryThe open space's review queue: open cases and what moderators did lately. Null for people who don't moderate.
kits.safety.safety.waitingqueryHow many open cases wait in the open space (for a badge). Null for people who don't moderate.
kits.safety.safety.actmutation
kits.safety.safety.setSettingsmutation
kits.safety.safety.settingsqueryThe space's safety settings as they apply, and the ready lists, for the settings block.
kits.safety.safety.tryFilterqueryWhat the open space's filter would do to some words (to try settings out).
kits.safety.safety.adminqueryEverything that reached Zvessa's admins, across spaces, and the suspended accounts and locked spaces. Null for everyone else.
kits.search.search.everywherequerySearch as the signed-in person, in the space they have open.
kits.sharing.library.previewqueryWhat would be shared, before saving: what's inside, what was taken out, and any problems.
kits.sharing.library.saveMinemutationSaves a page, some pages or the whole space as the person's own template or kit (private until they publish).
kits.sharing.library.publishmutationPublishing: the person's own tap, never the AI's. The version (default the newest) waits for a Zvessa admin; other spaces can add it once accepted.
kits.sharing.library.unpublishmutationTakes a published one out of the library again (spaces that added it keep their copy).
kits.sharing.library.forgetmutationDeletes one of the person's own templates or kits that was never accepted into the library.
kits.sharing.library.minequeryThe person's own templates and kits, with where each one is in the library.
kits.sharing.library.browsequery
kits.sharing.library.detailsquery
kits.sharing.library.addmutationAdds a template or kit to the open space: the person's tap, saved as one version.
kits.sharing.library.addedqueryWhat this space added from the library, with newer versions where there are some.
kits.sharing.library.takeOutmutationTakes out a kit added from the library: its pages and parts (records are kept). One version, so it can be undone.
kits.sharing.library.ratemutation
kits.sharing.library.reportmutation
kits.sharing.library.queuequery
kits.sharing.library.sourcequeryThe whole piece of a waiting version, for an admin to read before accepting.
kits.sharing.library.acceptmutation
kits.sharing.library.rejectmutation
kits.sharing.library.removemutationTakes one out of the library for everyone. Spaces that added it keep their copy: it's their blueprint now.
kits.sharing.library.restoremutation
kits.sharing.library.dismissReportsmutation
kits.social.activity.listquery
kits.social.activity.unseenquery
kits.social.activity.markSeenmutation
kits.social.people.mequeryThe signed-in person's profile. handle is unset until they pick one or first post.
kits.social.people.byHandlequeryAnyone's profile by @handle.
kits.social.people.viewqueryA profile to show: by @handle, the open space's owner, or (neither) the person looking.
kits.social.people.handleFreequeryWhether a handle can be taken.
kits.social.people.saveProfilemutationSaves the person's profile. Also used by onboarding.
kits.social.people.followmutationFollows someone, or stops following them.
kits.social.people.listqueryFollowers or following of a person, newest first.
kits.social.people.suggestedqueryPeople in this space the person doesn't follow yet, most followed first.
kits.social.posts.timelinequeryA page of posts, newest first. next is passed back as before for the next page.
kits.social.posts.threadqueryOne post with the posts above it (what it replies to) and its replies.
kits.social.posts.pendingqueryPosts waiting for approval, for people who manage the space.
kits.social.posts.createmutation
kits.social.posts.editmutation
kits.social.posts.removemutationDeletes a post. One with replies stays as a "deleted" marker so its thread keeps its shape.
kits.social.posts.moderatemutationApprove a waiting post, hide one, or show a hidden one again.
kits.social.reactions.reactmutationAdds or takes back one reaction. The feed's first reaction is the main one (likes).
kits.social.reactions.reactorsqueryWho reacted to a post, newest first.
kits.social.reactions.repostmutationReposts a post into its feed, or takes the repost back.
kits.social.reactions.savemutationSaves a post for later, or un-saves it. Saves are private.
kits.social.reactions.savedqueryThe person's saved posts in this space, newest save first.
kits.social.search.postsquery
kits.social.search.trendingquery
kits.social.sources.statusqueryThe sources of the open space and how their last pull went (for people who manage it).
kits.social.sources.pullNowmutationPulls one source now (and sets up timers for sources added since the last save).
kits.structure.structure.placementsqueryEveryone placed in the space's units, with names, titles and leads, and what this person may change.
kits.structure.structure.placemutationPlaces someone in a unit, or changes their title or lead mark there.
kits.structure.structure.unplacemutationTakes someone out of a unit. People can always take themselves out.
kits.structure.structure.joinmutationJoins a unit whose join setting is "open".
kits.structure.structure.minequeryThe units this person is in.
kits.talk.talk.conversationqueryA conversation's header: title, what this person may do, pinned posts, who's in it, read marks.
kits.talk.talk.postsqueryPosts in a conversation (or in one post's side thread), newest first, a page at a time.
kits.talk.talk.postqueryOne post, for the top of its side thread.
kits.talk.talk.typingqueryWho else is typing here now.
kits.talk.talk.inboxqueryEvery conversation this person has in the open space (and their direct chats), pinned first, then newest.
kits.talk.talk.sendmutation
kits.talk.talk.editmutation
kits.talk.talk.removemutationThe writer takes a post back; a moderator hides someone else's.
kits.talk.talk.reviewmutationA moderator lets a waiting post through, or keeps it out.
kits.talk.talk.reactmutation
kits.talk.talk.reactorsqueryWho reacted with what on one post.
kits.talk.talk.pinmutation
kits.talk.talk.readmutationMarks the conversation read up to now.
kits.talk.talk.setSeatmutationThis person's own settings for a conversation: mute it, pin it to the top.
kits.talk.talk.setTypingmutation
kits.talk.talk.openDirectmutationThe key of a direct chat with someone (it starts on its first post).
kits.talk.talk.peoplequeryPeople in the open space, to start a chat or a group with.
kits.talk.talk.createGroupmutation
kits.talk.talk.addToGroupmutation
kits.talk.talk.leaveGroupmutation
kits.talk.talk.renameGroupmutation
kits.talk.talk.setGroupAdminmutation
kits.talk.talk.openCasemutationA person opens a case in a queue with a short title and their first words.
kits.talk.talk.casesqueryA queue's cases for its team: one status at a time (or the ones given to me), newest first.
kits.talk.talk.myCasesqueryA person's own cases in a queue.
kits.talk.talk.setCasemutationThe team picks who answers, or moves the case on.
kits.talk.talk.teamqueryPeople who answer a queue, to give cases to.
kits.talk.talk.draftqueryThe words someone left in a conversation's message box.
kits.talk.talk.saveDraftmutation
kits.talk.talk.schedulemutationWrites now, sends at at.
kits.talk.talk.cancelScheduledmutation
kits.talk.talk.sendNowmutation
kits.talk.talk.draftsqueryA person's drafts and scheduled posts, and for moderators the posts waiting for them.
kits.templates.templates.applymutationSwitches the open space to a template: adds its kits, puts its pages, tabs and look in place.
kits.templates.templates.overviewqueryHQ's overview: the space at a glance over the last days days, each number with the same number of days before it, so the owner sees what's going up and what's going down.
kits.templates.templates.recentCallsqueryThe person's latest calls in the open space, in and out, newest first.
livekit.joinactionA token to join a room block's room.
livekit.joinCallactionA token to join a call you placed or answered.
livekit.moderateactionHosts: bring someone on stage, send them back, mute them or remove them.
livekit.recordactionHosts: start or stop recording a room into the media library's "recordings" folder.
media.listqueryThe items a gallery block shows.
media.latestqueryThe newest item of the block's kind in its folder (the media.player block).
media.uploadTargetmutationWhere to upload a file of this size: Convex storage, or R2 for big files when it's set up. An R2 link only accepts this exact size and type, and works for 10 minutes.
media.savemutationAfter the upload finishes: put the file in the library.
media.removemutation
media.renamemutation
media.canqueryWhat the viewer may do in the library (the gallery hides upload for people who can't add).
media.byIdsqueryLibrary items by id, for other kits that point at media (a post's photos, a profile picture). Ids from another space, or deleted, come back as null in their place.
members.listquery
members.mySpacesqueryEvery space the person is in, for the space switcher.
members.openmutation
members.setNamemutation
members.setRolemutation
members.removeMembermutation
members.createInvitemutation
members.invitesquery
members.revokeInvitemutation
members.peekqueryWhat an invite link opens, shown before joining.
members.joinmutation
members.visitmutationOpens another space: as a member, or as a visitor when its visibility allows.
members.homemutationGoes back to the person's own space.
members.explorequeryPublic spaces anyone can look at (Explore).
members.joinOpenmutationJoins the open space as a member, when its join rule is "open"; otherwise asks to join.
members.requestsquery
members.answerRequestmutation
miniapps.bridge.mequery
miniapps.bridge.membersquery
miniapps.bridge.storageGetquery
miniapps.bridge.storageListquery
miniapps.bridge.storageSetmutation
miniapps.bridge.storageDeletemutation
miniapps.bridge.recordsListquery
miniapps.bridge.recordsAddmutation
miniapps.bridge.recordsUpdatemutation
miniapps.bridge.recordsDeletemutation
miniapps.bridge.scoresSubmitmutation
miniapps.bridge.scoresTopquery
miniapps.bridge.trackmutation
miniapps.bridge.channelSendmutation
miniapps.bridge.channelquery
miniapps.bridge.heremutationThe device says "still here" every 20 s while the mini-app shows.
miniapps.bridge.presencequery
miniapps.bridge.notifyMembersmutation
miniapps.library.isAdminquery
miniapps.library.publishmutation
miniapps.library.minequeryThis space's mini-apps with their library state: published, waiting, updates to take.
miniapps.library.browsequery
miniapps.library.detailsquery
miniapps.library.previewqueryThe HTML to try a mini-app before adding it. It runs in preview: no space data, nothing saved. Anyone signed in gets the live version; admins and the author can try any version.
miniapps.library.takenqueryWhether a mini-app added from the library was taken down.
miniapps.library.addmutation
miniapps.library.remixmutation
miniapps.library.updatemutationTakes the library's newest accepted version. If it asks for more, the person saw that before tapping.
miniapps.library.ratemutationRate a library mini-app, with words if you like. Rating again changes yours.
miniapps.library.reviewsqueryA library mini-app's rating summary, its newest reviews, and yours.
miniapps.library.replyReviewmutationThe author answers a review in public (empty text takes the answer away).
miniapps.library.reportReviewmutationReport a review; an admin decides.
miniapps.library.moderateReviewmutationAdmins: hide a review (it stops showing and counting) or keep it.
miniapps.library.reportmutation
miniapps.library.queuequery
miniapps.library.acceptmutation
miniapps.library.rejectmutation
miniapps.library.removemutationTakes a mini-app down: out of the library, and it stops running in every space that added it.
miniapps.library.restoremutation
miniapps.library.dismissReportsmutation
miniapps.outside.connectionsCallaction
miniapps.outside.connectionsDescribeaction
miniapps.outside.aiAskaction
notify.settingsquery
notify.changemutation
notify.zonemutationThe phone's time zone (sent when the app opens); writes only when it moved.
notify.undomutation
notify.inboxquery
notify.unreadquery
notify.markReadmutation
notify.openmutationA tap on a notification (on the phone or in the inbox): marks it read, opens its space if it's another one the person is in, and answers the path to open.
notify.sendmutation
notify.sentquery
push.registermutationSaves this phone's push token for the signed-in person (moves it if someone else had it).
push.unregistermutationStops pushes to this phone (on sign out).
records.listquery
records.countquery
records.addmutation
records.updatemutation
records.removemutation
rooms.statusqueryWhat a room block shows: is it live, how many are in, and what the viewer may do.
rounds.quick.votemutation
rounds.quick.pollquery
rounds.quick.spinmutation
rounds.quick.wheelquery
rounds.sessions.createmutationStarts a new game from one of the space's game definitions. The caller hosts it.
rounds.sessions.joinmutationJoins a game by its code. The code is the invite, so people outside the space can join, except in a kids space. Wrong codes are counted and joining pauses after a few, so codes can't be guessed; a wrong code returns { error } instead of throwing so the count is saved.
rounds.sessions.leavemutation
rounds.sessions.setPlayermutationHost only: move a player to a team, rename them, or take them out of the game.
rounds.sessions.setOpenmutationHost only: stop taking new players, or open the game again.
rounds.sessions.actmutationEvery move in every game goes through here.
rounds.sessions.viewqueryThe game as the signed-in person may see it.
rounds.sessions.screenqueryThe big-screen view: public parts only (no secret words, hidden answers or gift names). For anyone who can see the game's space, including a TV paired to it.
rounds.sessions.livequeryThe game of this kind on now in the space (newest, ended under 6 hours ago), for big screens.
rounds.sessions.currentqueryThe newest game of this kind in a space that the caller can still join or is in.
screens.openmutationA screen opens the TV link: it gets a code to show and a secret to keep. No sign-in needed.
screens.pendingqueryWhat a screen that isn't signed in yet shows: its code, until someone connects it.
screens.pairmutationSomeone in a space types the code shown on a screen.
screens.minequeryFor the screen itself, once signed in: which page to show. Null when it's been disconnected.
screens.pingmutationThe screen says it's still on (every minute), so remotes can show it as connected.
screens.listqueryThe space's connected screens, for remotes: members who can use some remote block.
screens.showmutationA remote puts a page on a screen. Only pages the block allows and the screen's role can see.
screens.disconnectmutationDisconnects a screen: it leaves the space and goes back to showing a code.
streams.listqueryThe newest posts of a stream, oldest first, with who wrote them.
streams.sendmutation
streams.removemutationThe writer takes a post back; a moderator hides someone else's.
streams.schedulemutationSets a post to go out at a time. It's checked again when it goes out.
streams.cancelScheduledmutation
streams.scheduledListqueryPosts waiting to go out (and the last few that went), yours or, for managers, everyone's.
streams.writablequeryStreams the person may write in, for a "post later" picker.
web.addresses.minequeryThe open space's web addresses and pages (HQ's Web block). Visitors get only the public parts.
web.addresses.linkqueryThe web address of one page of the open space (the share block), or null when it isn't on the web.
web.addresses.availablequeryWhether a handle is free for the open space.
web.addresses.checkNowmutationChecks an own domain again now (after the person added the DNS records).

Field types #

text, longtext, number, money, date, choice, checkbox, email, phone, url