foomchat Docs

Product guide for using foomchat end-to-end: chat, features, installs, slots, account, and troubleshooting.

1. Introduction

foomchat is a chat app whose interface you can reshape by asking — the assistant writes installable features (HTML/CSS/JS modules) that change the app you're chatting in, from small styling tweaks to total redesigns.

The core app handles authentication, conversations, billing, and feature lifecycle; installed features layer behavior and visuals on top. Features can be submitted for review and, once approved, published for others to install.

2. Getting Started

Chat tab: send messages and manage conversations.

Browse tab: discover and install public features.

Account tab: credits, API key, username, and subscription controls.

Use the Features button in the top tab bar (or the Manage Features button in the sidebar) to enable/disable installed features and inspect versions. The tab-bar button is always available, even if a custom sidebar feature is broken or disabled.

3. Chat Workflow

Start a new chat from the sidebar, send messages in the input area, and revisit past conversations from the conversation list.

The environment toggle near the input controls whether installed-feature context is included in the model prompt for feature generation tasks.

4. Feature System

Feature: a package of HTML/CSS/JS + install_config.

Install ID: stable identity in install_config.id — the feature's permanent name across revisions, used for dependency matching and upgrades.

Slot: the only mount points. Multi slots (like app.root or chat.feature-container) accept many features ordered by order. Single slots (chat.sidebar, chat.window, chat.input) are claimed by one feature at a time — claiming hides the built-in UI and disabling the feature restores it automatically.

Status: every installation is exactly one of enabled, disabled, or uninstalled. Enabled features are mounted live; disabled features keep their saved state; uninstalled features disappear from your list but can be reinstalled from Browse.

Exclusive groups: features can declare exclusive_group (all themes use "theme") — enabling one automatically disables the others in the group, so themes never stack.

JavaScript lifecycle: feature JS registers via FeatureAPI.defineFeature({ id, mount, unmount }). The runtime mounts it when everything it needs exists and fully cleans up on disable. A feature that throws during mount gets an Errored badge in Manage Features instead of breaking the page.

Versions: semver in install_config.version. Updating a feature bumps the version and the runtime remounts it live; old versions stay in History for one-click rollback.

Dependencies: features can require other features by install ID + optional version range. Validated when the feature is saved and resolved (with a confirmation) when installed.

5. My Features Modal

List: one feed of all your features.

By slot: groups by mount location to debug overlap/conflicts.

Badges: category, slot, system/prototype, and semantic version.

Status: enabled features are mounted live; disabled features remain saved but inactive.

Actions: enable/disable, submit for review (publishing is hand-reviewed; approved features go live in Browse), unpublish, history (owned features), uninstall for non-owned installs.

6. Browse and Install

Browse shows public features, including system features. Installation status and dependency intent are shown before install.

If a feature is disabled (not uninstalled), you can re-enable it without reinstalling. If fully uninstalled, install again from Browse.

Some uninstall operations can require a cascade when other installed features depend on the selected feature.

7. Account and Billing

Account includes username management, API key management, and subscription/top-up controls.

If your own API key is configured, chat can run against that key rather than system credits.

8. Troubleshooting

Sidebar looks wrong: the default sidebar is built in — if a custom sidebar feature took it over, disable that feature from the tab bar's Features button and the default returns automatically.

Feature not visible: confirm it is enabled and mounted to the expected slot. Features with an Errored badge failed to mount — use Ask AI to fix on the card.

Install blocked: check dependency requirements and install missing dependencies first.

Unexpected layout behavior: switch My Features to By slot and inspect competing features in the same slot.

Broken UI after experimenting: reload with ?safe=1 in the URL to mount only system features, then disable the culprit.