AI features#
1. Principles#
- Bring your own provider and key. Whoobe has no AI of its own and no default account. Without a configured key the functions answer "AI is not configured".
- Nothing automatic. AI runs only when a signed-in person uses a function. There is no background AI and no training on your content by Whoobe.
- The output is a draft. Generated pages, snippets, text, images and translations are inputs for a human to review; nothing is published by AI.
- Keys stay on the server and are never returned by the API (only a flag that one is set). They are encrypted at rest when
INTEGRATION_SECRETS_ENCRYPTION_KEYis set; without it they are stored in clear text and a warning is logged (secrets and keys).
2. What it does#
| Function | Where | What happens |
|---|---|---|
| Generate a page or a snippet | the editor's composer | You describe it; the provider returns a tree of elements, which is validated structurally and inserted into the editor. The exchange is recorded in whoobe_ai_generated |
| Generate text | the editor | Plain text for a text element |
| Generate an image | the editor, and Assets > Generate with AI in the dashboard | The provider returns an image, which is stored in the media library like any asset |
| Translate | the page and snippet editor, Translate | The content is translated into another language as a new, linked translation (same translation group), in batches; a human reviews it |
| AI Website Wizard | the website settings in the dashboard | Proposes a website structure (pages and sections) from a description |
| Figma import (beta) | the editor | Converts a Figma frame into a page or a snippet, either through the Figma API (token in Settings > Figma) or from an exported JSON file |
3. Providers and configuration#
Three independent settings, each in its own card of the AI entry:
| Card | Used for | Providers |
|---|---|---|
| AI Agent | pages, snippets, text, website structure | openai, anthropic, google, openrouter, zen (OpenCode Zen) and custom (any OpenAI-compatible endpoint, for example a model you host) |
| AI Image Generation | images | openai, openrouter, google, custom; if left empty, the Agent configuration is used |
| AI Translation | translating pages and snippets | the same list as the Agent; if left empty, the Agent configuration is used |
Each card takes the provider, the model, an optional endpoint and the key. Keys are per user: each person who uses AI configures their own, so cost
and access follow the person. A custom endpoint lets you point at a model you run yourself, which keeps content inside your network.
4. Permissions and limits#
| Rule | Value |
|---|---|
| Configure the providers | the settings:manage permission |
| Use the functions | the objects write permission, the same that lets a person edit pages |
| Rate limit | AI_RATE_LIMIT_PER_MINUTE calls per user per minute (default 20; 0 turns the limit off) |
| Outbound calls | go through the SSRF guard, which refuses loopback, link-local and metadata addresses |
| The public sandbox | AI is switched off |
5. Data protection#
When someone uses a function, the prompt and the content they chose to send leave your installation for the provider they configured (for
translation, the text of the page). Nothing else is sent. Whether that is acceptable depends on the provider's terms: choose one that suits
your data, use a self-hosted custom endpoint, or do not configure a key. See data protection, section 4.
6. What AI does not do#
- It does not publish, delete or change anything without a person saving it.
- It does not read your data objects, assets or integrations on its own: it receives only what the person sends in the prompt or the selected content.
- Translations and generated text are not proofread; a human must review them.
- There is no cost control per provider beyond the rate limit: spending is governed by your account at the provider.
- Figma import is in beta: complex frames need clean-up in the editor.
7. Related#
Content pillar, secrets and keys, API reference (/ai/*).
Last updated