> ## Documentation Index
> Fetch the complete documentation index at: https://docs.haloagents.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Articles

> The block-style editor, AI-assisted writing, SEO, versioning, scheduling, and translations.

## The article editor

Halo's help center editor is a block-style rich text editor (TipTap-based) with:

* **Slash commands** — type `/` to insert headings, lists, code blocks, images, callouts, and more
* **Bubble menu** — formatting controls (bold, italic, link, alignment) above selected text
* **Slash command palette** — quickly insert blocks
* **Image upload** with optional AI alt-text generation
* **Embed support** for trusted hosts (YouTube, Loom, Vimeo)
* **Code blocks** with syntax highlighting and a configurable theme
* **Link tools** with URL validation

Content is saved as **HTML** (sanitized with DOMPurify) so it renders consistently across browsers and stays safe even with custom CSS.

Open the editor at **Help Center > Articles** and click any article (or **New Article**).

## AI assistance

Two flavors of AI inside the editor:

### AI Write

A side panel with "Tell AI what to write..." that streams text into the document. Use it for:

* Drafting a first pass from a prompt ("Write an article about how to set up SSO with Okta")
* Expanding on a heading you've added
* Generating a list of FAQs from a topic
* Rewriting in a different tone

### AI SEO

Auto-generate SEO title, meta description, and OG image:

* **Generate SEO** runs your content through an AI pass that suggests title and description
* **Generate OG image** creates a branded social preview image automatically

Both are buttons in the article's SEO sidebar. You can edit the AI's output before saving.

## Status lifecycle

Articles move through four statuses:

| Status        | Behavior                                                              |
| ------------- | --------------------------------------------------------------------- |
| **Draft**     | Not visible publicly. Edits don't affect knowledge ingest.            |
| **Scheduled** | Goes live at `scheduled_at`. Cron flips status to published.          |
| **Published** | Visible publicly (subject to visibility), auto-ingested as knowledge. |
| **Archived**  | Hidden from public, removed from knowledge.                           |

Toggle status via the dropdown in the article header or via bulk actions on the article list.

## Auto-save and versioning

Articles auto-save as you edit. Every save creates a version snapshot you can roll back to:

* **Version history** is at `/api/help-center/articles/[id]/versions`
* Open the version drawer to see snapshots with timestamps
* Restore a previous version with one click

Use this when an edit goes sideways or when collaborating with teammates.

## SEO

Each article has its own SEO fields:

| Field             | Default                                                              |
| ----------------- | -------------------------------------------------------------------- |
| `seo_title`       | Article title + help center name (template configurable in Settings) |
| `seo_description` | Article description or empty                                         |
| `og_image_url`    | Help center default OG image                                         |

The defaults come from **Settings > Defaults** so you don't have to set them on every article. Override per article when needed.

`robots` indexing is gated on `is_live AND !disable_search_indexing` — if your help center isn't live or indexing is disabled, articles get `noindex, nofollow`.

## Scheduling

Set `scheduled_at` to publish an article at a specific date and time. Useful for:

* Coordinating release announcements with engineering shipping the feature
* Time zone-friendly launches
* Preparing seasonal content in advance

Scheduled articles are flipped to `published` by a background job at the scheduled time.

## Translations

Articles can be linked across languages. Set `translation_of` to the original article's ID and pick a target language. The help center renders the right translation based on the URL prefix:

* `/hc/{slug}/article-name` — default language
* `/hc/{slug}/es/article-name` — Spanish translation
* `/hc/{slug}/fr/article-name` — French translation

Configure default and supported languages in **Settings**.

## Bulk actions

The article list supports bulk operations:

* **Publish** selected drafts
* **Move to draft**
* **Archive**
* **Delete**

Use checkboxes to select multiple articles, then pick an action from the menu.

## Article visibility

Each article has a **visibility** field:

| Visibility           | Who can see it                                                                     |
| -------------------- | ---------------------------------------------------------------------------------- |
| **Public**           | Anyone with the URL                                                                |
| **Authenticated**    | Requires help center auth (SSO/JWT)                                                |
| **Company-specific** | Visible only to users from specific allowed companies (uses `allowed_company_ids`) |

For non-public visibility, configure auth at **Settings > Auth**.

## Include in training

Each article has **`include_in_training`** (default: on). When on:

* The article is chunked, embedded, and indexed in your AI's knowledge base
* Edits trigger re-ingestion automatically
* Status changes (publish/archive) update knowledge accordingly

When off, the article is excluded from AI knowledge but stays visible publicly. Use this when you want a public article that doesn't influence AI responses (e.g. legal pages).

## Where to go next

<CardGroup cols={2}>
  <Card title="Collections" icon="folder" href="/help-center/collections">
    Organize articles into navigable categories.
  </Card>

  <Card title="Design" icon="paintbrush" href="/help-center/design">
    Theme the public site.
  </Card>

  <Card title="Migrating" icon="arrows-rotate" href="/help-center/migrating">
    Import existing articles from a URL crawl or Intercom.
  </Card>
</CardGroup>
