Create Custom Interfaces For Your Project
Interfaces is a no-code app builder that lets project admins create custom, multi-page applications on top of existing project resources β agents, chats, smart tables, dashboards, knowledge bases, actions, workflows, documents, and meetings. Instead of the default chat experience, you can build purpose-built interfaces with multiple pages, drag-and-drop widgets, custom branding, and a shareable public URL.
Create interfaces with multiple pages, each serving a different function, organized in a custom navigation.
Build pages using a 12-column grid with a library of AI, data, action, and content widgets.
Customize logos, colors, navigation layout, favicon, and CSS to match your brand.
Publish interfaces via a public URL, control member access, and optionally allow iframe embedding.
Key Conceptsβ
Interface
An interface is a collection of pages that together form a complete user experience for a project. Each project can have multiple interfaces.
| Property | Description |
|---|---|
| Name | Display name for the interface |
| Published | Whether the interface is available to end users via a public URL |
| Branding | Custom logo, colors, navigation layout, favicon, and CSS |
Page
A page is a single screen within an interface. Each page has a name, icon, and position in the navigation. Pages are built by dragging widgets onto a canvas and can be created from pre-built templates.
Widget
Widgets are the building blocks of a page, placed on a 12-column drag-and-drop grid. See the Widget Library section below for the full list.
Widget Libraryβ
- AI
- Data
- Actions
- Content
| Widget | Description |
|---|---|
| Chat | AI chat with your agents. For signed-in users, enable Show chat history sidebar so previous conversations stay available. Chat supports images in the conversation alongside text. |
| Agent Card | Agent selection card |
| Widget | Description |
|---|---|
| Smart Table | Table, review, kanban, or dashboard view. Enable Read only when visitors should browse data without editing rows. |
| Dashboard | Smart Table analytics dashboard |
| Knowledge Base | Browse and search knowledge |
| Analytics | Usage analytics and feedback |
| Chart | Data visualization chart |
| Data Grid | Tabular data from a Smart Table |
| Filter | Dropdown or search filter |
| Form Field | Text, number, date, or checkbox input |
| Record Picker | Select records from a Smart Table |
| Widget | Description |
|---|---|
| Actions | List of available actions |
| Action Form | Single action as a form. Submissions run in place on the page so visitors can complete the form without leaving the interface. |
| Workflow Runs | Workflow run status and history |
| Execution History | Workflow execution history |
| Widget | Description |
|---|---|
| Document | Document viewer and editor. Enable Read only when the document should be view-only. |
| Meetings | Meeting transcripts and notes |
| JSON Builder | Structured JSON editor |
| Text | Rich text content |
| Button | Interactive button with actions |
| Image | Display an image from a URL (fit and alt text configurable) |
| Number / KPI | Display a metric or KPI |
Widget configuration tipsβ
| Widget | Configuration to know |
|---|---|
| Chat | Enable Show chat history sidebar for signed-in users who return to prior threads. Images in chat are supported alongside text. |
| Smart Table | Enable Read only for browse-only visitors; optionally hide the toolbar. |
| Document | Enable Read only for view-only documents. |
| Action Form | Submissions run in place on the page so visitors are not navigated away. |
| Image | Provide an image URL; configure fit and alt text in the right panel. |
Actions, Action Form, Workflow Runs, and Execution History widgets are subject to platform-wide workflow execution limits. The entire workflow is capped at 3,600 seconds (1 hour). Individual steps default to 1,800 seconds (30 minutes) if left blank, but each can be configured up to 3,600 seconds β the same ceiling that applies to the workflow as a whole.
Getting Startedβ
Creating an Interfaceβ
- Navigate to Interfaces
Click Interfaces in the project sidebar.
- Create a new interface
- If no interfaces exist yet, click + Create Your First Interface in the center of the page.
- If interfaces already exist, click + New Interface in the top right.
- Name your interface
A New Interface modal will appear. Enter a name and click Create. You will be taken to the Interface Builder.
Interface Builder Layoutβ
Once inside the Interface Builder, you'll see three main areas:
| Area | Description |
|---|---|
| Left Sidebar | Page list and Widgets panel |
| Canvas | The page editing area β drag widgets here to build |
| Right Panel | Configuration settings for the selected widget |
The top bar contains the following controls:
Step backward or forward through your changes.
Toggle between Desktop, Tablet, and Mobile previews.
Switch between editing mode and an in-builder preview.
Open the interface in a new tab as end users will see it.
Quick access to builder actions via keyboard.
Save your work or publish the interface to a public URL.
Building Pagesβ
Adding a Pageβ
- Open the New Page modal
Click + next to PAGES in the left sidebar.
- Choose a template
Filter by category (All Templates, Start, Starter, Advanced) and select one of the available templates.
Blank PageStart from scratch with an empty canvas.
Analytics DashboardKPI cards, charts, and a recent-activity table.
Action FormCentered form for triggering an action.
Table ViewFull-width data table with header.
Chat WorkspaceEmbedded chat with sidebar context.
Agents HubGrid of agent cards with header and filters.
Actions PanelSearchable grid of all available actions.
Chat + TableSide-by-side chat and data view.
- Name the page
Enter a page name at the bottom of the modal (defaults to the template name).
- Create the page
Click Create Page. The page will be added to your interface and opened on the canvas.
Adding Widgetsβ
- Find a widget
In the Widgets panel on the left, browse by category or use the search bar.
- Add to canvas
Drag the widget onto the canvas, or click it to place it automatically.
- Position and resize
Move and resize widgets on the 12-column grid to achieve your desired layout.
- Configure the widget
Select a widget to open its settings in the right panel.
Managing Pagesβ
To access page options, hover over a page in the sidebar and click the β― (three-dot menu) that appears. This gives you the following options:
Rename
Click Rename to turn the page name into an inline editable text field directly in the sidebar. Type the new name and confirm.
Change icon
Click Change icon to open an icon picker below the page name. Click any icon to apply it immediately β no save step required.
Add to group
Click Add to group to open an inline panel with a text input. Enter a group name (e.g. "Admin", "Reports") and click Save to organize pages under a labeled group in the navigation. To remove a page from its group, leave the field empty and click Save.
Reorder pages
Click and drag pages in the page list to reorder them. The order determines the navigation order in the published interface.
Delete
Click Delete to trigger a browser confirmation dialog: "Delete this page? This cannot be undone." Click OK to confirm or Cancel to abort. An interface must always have at least one page.
Previewing Your Interfaceβ
- Edit / Preview Toggle
- Full Preview
Use the Edit / Preview toggle in the top bar to switch between editing mode and an in-builder preview of the current page. This is useful for checking your layout as you build without leaving the builder.
Click Full Preview in the top right to open the interface in a new browser tab exactly as end users will see it. This renders the full interface β including sidebar navigation, branding, and all pages β outside the builder environment.
Interface Brandingβ
Click the palette icon next to the interface name in the top bar to open the Interface Branding modal.
- General
- Navigation
- Colors
- Advanced
| Setting | Description |
|---|---|
| Display title | Text shown in the sidebar header |
| Logo URL | Square image, recommended 256Γ256 PNG |
Navigation layout β controls how end users move between pages:
| Layout | Description |
|---|---|
| Sidebar | Vertical menu on the left β best for apps with many pages |
| Top bar | Horizontal nav above content β great for a landing-page feel |
| Floating | Hamburger menu in a drawer β maximizes canvas space |
| No nav | Single-page mode β use buttons inside the page to navigate |
Initial state β whether the sidebar starts Expanded or Collapsed.
Active page indicator β visual style for the selected page:
- Pill: filled background
- Soft: tinted background
- Bar: left accent line
| Setting | Description |
|---|---|
| Primary color | Used for buttons, links, and active states β enter a hex value or pick from preset swatches |
| Accent color (optional) | Sidebar accent color; defaults to the primary color |
A Live Preview updates in real time as you make changes.
| Setting | Description |
|---|---|
| Favicon URL | Browser tab icon β ICO or PNG format |
| Custom CSS | Applied to the runtime root for advanced styling |
Click Save Branding to apply your changes.
Publishingβ
Saving and publishing are separate actions. Always save your changes before publishing. If you open the Publish modal with unsaved changes, a warning banner will prompt you to save first.
- Open the Publish modal
Click Publish in the top right of the Interface Builder.
- Set your Public URL
Enter the URL slug for your interface. Lowercase letters, numbers, and hyphens only.
- Manage member access
Under Manage Member Access, review or add the users who should have access to this interface.
- Publish to web
Click Publish to web. Your interface is now live and accessible at the public URL.
To make an interface unavailable, open the Publish modal and use the unpublish option.
Not every widget supports anonymous, unauthenticated viewing. Chat and Knowledge Base widgets rely on an authenticated EKB session, so they won't work for visitors who haven't signed in β even though the published link itself requires no sign-in. Anonymous visitors attempting to use Chat will see a "ChatSDK not initialized" error, and Knowledge Base widgets will show no data. If you need a chat experience for unauthenticated, public visitors, use Public Chatbot instead.
Embed in an iframeβ
Published interfaces can run inside an iframe on another site. Embedding uses two layers of control:
| Layer | Who | What it controls |
|---|---|---|
| Platform policy | Super Admin | Whether framed rendering is allowed at all, and which surfaces (including published interfaces) may appear in an iframe |
| Per-interface opt-in | Interface owner | Whether this published interface may be framed β so widening the platform allowlist does not silently embed every interface |
Platform policy (Super Admin)β
- Open Super Admin β Platform Settings.
- Find Iframe Embedding.
- Turn on Allow framed rendering. When this is off, the app refuses to render in any iframe.
- Optionally set Embeddable surfaces to a comma-separated list. Recognised values:
interface,app_mode,forms,automator_forms,chatbot. Leave blank to allow all of them. Includeinterface(or leave blank) so published interfaces are an allowed surface. Each interface still needs its own opt-in below. - Click Save Embedding Settings.
Which parent sites may frame the app is a separate deploy-time setting (FRAME_ANCESTORS / equivalent frontend frame-ancestors configuration). Browsers enforce that list from the response CSP header; changing it typically requires a restart of the web tier. Platform Settings above control what may render when framing is already permitted.
Full-app embedding (when enabled for the deployment) can allow framing beyond published-interface opt-in. Unpublished interfaces stay blocked from iframe use unless that full-app embedding path is enabled.
Allow embedding for one interfaceβ
- Publish the interface (or open Publish on an already published interface).
- In the Publish modal, enable Allow embedding in another site.
- Copy the public URL shown in the modal (shaped like
https://<your-host>/i/<slug>).
Example embed snippetβ
<iframe
src="https://<your-host>/i/<your-slug>"
title="My interface"
style="width: 100%; height: 800px; border: 0;"
></iframe>
Replace the host and slug with your published URL. If the parent origin is not on the deploymentβs frame-ancestors allowlist, or embedding is disabled at the platform or interface level, the framed page shows that it canβt be embedded and offers Open in a new tab.
Checklist before go-liveβ
- Interface is published to a public URL (
/i/<slug>). - Allow embedding in another site is enabled on that interface.
- Super Admin Allow framed rendering is on, and embeddable surfaces include
interface(or are blank). - The parent pageβs origin is on the deployment frame-ancestors allowlist.
- Widgets that need sign-in (Chat, Knowledge Base) are either unused for anonymous visitors or your users will authenticate inside the frame.
Surfaces referenceβ
| Surface id | What it allows in an iframe |
|---|---|
interface | Published interfaces (/i/...) β still requires per-interface opt-in |
app_mode | Interface app mode under a project |
forms | Public tool forms |
automator_forms | Automator flow forms |
chatbot | Embeddable chat widget routes |
Blank Embeddable surfaces = all of the above. A list with no recognised names embeds nothing.
Command Paletteβ
Press βK (Mac) or Ctrl+K (Windows) β or click the βK button in the top bar β to open the command palette.
Available commands
| Command | Shortcut |
|---|---|
| Save changes | βS |
| Publish to web | β |
| Toggle preview | β |
| Open branding settings | β |
| New page from template | β |
| Undo | βZ |
| Redo | ββ§Z |
| Switch to page | Lists all pages for quick navigation |
Type a command, page name, or widget name to search. Press Esc to close.
Use Casesβ
Chat Workspace β support chat with agent context
Knowledge Base β help articles and documentation
Action Form β submit a ticket or request
Analytics Dashboard β KPI cards and charts
Table View β full data table for reviewing records
Custom Page β charts and KPI widgets for reporting
Actions Panel β browse and execute workflows
Workflow Runs β track run status and history
Analytics Dashboard β key metrics and execution history
Troubleshootingβ
Interface not appearing
Possible causes:
- The interface has not been published yet
- You are viewing the wrong project
- You do not have the required permissions
Check the interface publish status and verify you are in the correct project.
Page not loading
Possible causes:
- A widget is misconfigured
- A referenced resource (agent, table, action, etc.) no longer exists or is inaccessible
Review widget settings in the right panel and verify all referenced resources are available.
Unsaved changes warning
The Unsaved changes indicator appears in the top bar and the Save button turns orange when you have pending changes.
Click Save before previewing or publishing to ensure your latest changes are applied.
Warning banner in Publish modal
This appears when you attempt to publish with unsaved changes.
Close the modal, click Save, then re-open the Publish modal and proceed.
Page says it can't be embedded
Possible causes:
- Allow framed rendering is off under Super Admin β Platform Settings β Iframe Embedding
- Embeddable surfaces omit
interface(and are not blank) - This interface does not have Allow embedding in another site enabled in Publish settings
- The parent siteβs origin is not on the deploymentβs frame-ancestors allowlist
Confirm platform policy, the per-interface checkbox, and the parent origin allowlist, then reload the host page.