# Set up your public site

A public help center, support chat and feedback board at your median.website address or your own domain.

Every organization gets a public site at `https://<slug>.median.website`.
`<slug>` is the **Slug** under **Settings → General**. To serve it from
your own address, connect a [custom domain](/articles/use-your-own-domain).

| Section | Public address | Dashboard page |
| --- | --- | --- |
| Help center | `/`, `/collections/<name>`, `/articles/<name>`, `/search` | [Knowledge](/articles/build-your-knowledge-base) |
| API reference | `/api-reference/<api>`, `/api-reference/<api>/<endpoint>` | **Knowledge → API reference** |
| Support | `/support` | **Site → Overview** |
| Feedback | `/feedback`, `/feedback/<id>` | **Signal → Board** |

`/` opens the help center. With the help center off, it opens the first
section that is on.

## Publish the site

1. **Open the overview**

   Go to **Site → Overview**. Only admins and owners can change it.

2. **Turn on sections**

   Under **Sections**, turn on **Help center**, **Support** and **Feedback**.

3. **Publish**

   Turn on **Public**. **Open** goes to the address, and **Copy** copies it.

Every switch starts off. A section is public only while **Public** and
its own switch are both on.

## Help center

Articles are [knowledge](/articles/build-your-knowledge-base) documents you publish. Nothing
is public until you publish it.

| Fact | Detail |
| --- | --- |
| Publish | In [Knowledge](/articles/build-your-knowledge-base). The **Help center** switch on a [document](/articles/build-your-knowledge-base#documents), **Publish to help center** in its menu, **Help center** on a selection, or **Publish all to help center** in a folder's menu. A globe marks published documents in the library |
| Collections | Each top-level folder is a collection. A folder inside it is a section of that collection |
| Not in a folder | Listed on the home page under **Articles** |
| Address | Set from the title when first published. Renaming the document keeps the address |
| Edits | Show on the site as soon as they save. There is no second publish |
| Front matter | Taken off the page. Its `description` shows under the title |
| MDX | Components like `<Steps>` show their contents, with a `title` as a bold line. `<TypeTable>` becomes a table. Previews and other self-closing embeds are left out |
| Links | Relative links and images point at the page the document is published on |
| Code | Each block has a copy button. A fence's `title="..."` shows over it |
| Search | By meaning, from the knowledge base's index, plus titles and words that match. Each search embeds the query, billed as **Help center search** |
| Ask | The search box's other mode, when **Support** is on. Sending opens the support page and the question becomes a message there, with any attached files |
| Popular articles | The articles opened most. Until there are reads, the first ones in your library |
| Icons | Every article, and every collection with no uploaded icon, gets an icon picked by AI from its words. A new title or folder name picks again. Billed as **Help center icons** |

## API reference

OpenAPI specs from your [connected repositories](/articles/connect-knowledge-sources#api-specs)
as browsable references. Nothing is public until you publish it.

| Fact | Detail |
| --- | --- |
| Publish | **Knowledge → API reference**. One switch per spec. Needs the help center on |
| Navigation | **API reference** joins the site's sections. Its endpoints sit under their tags, folded, with the open endpoint's tag expanded. **Filter endpoints** matches names, paths and methods |
| Groups | Each tag is a group, in the order the spec lists its tags. An endpoint with no tag goes under the first word of its path |
| Front page | The spec's description, **Base URL**, **Authentication**, and every endpoint by group |
| Endpoint page | Parameters by where they go, the body, and each response, with nested fields folded. A request in cURL, JavaScript and Python, and an example per response |
| Examples | The spec's own. Without one, a body example is built from the schema. `x-codeSamples` show as extra tabs |
| Address | Set from the spec's title when first found. An endpoint's comes from its `operationId`, or its method and path |
| Updates | Every sync that changes the spec file updates the reference. A removed file takes it off the site |
| Endpoint documents | The per-endpoint knowledge documents are covered by the reference, so there is no need to publish them one by one |

## Support

A full-page chat with your [agent](/articles/set-up-your-agent). Conversations land in the
[inbox](/articles/work-the-inbox) with a globe next to them, as the **Help center**
channel.

| Fact | Detail |
| --- | --- |
| Agent | The same agent, knowledge and tools as the widget |
| Composer | The same box as the help center's. It asks by default, and searches articles when the help center is on |
| Replies | The agent's are formatted text without a bubble, with a copy button. People on your team reply in bubbles |
| Email | Asked for before the first message when **Ask for an email** is on, unless the visitor is signed in |
| Signed in | The chat follows them across devices. See [Choose how visitors sign in](/articles/choose-how-visitors-sign-in) |
| Screenshots and page directions | Not offered. The agent knows it is on the help center |
| Starting | **Ask a question**, **Report a bug** and **Make a suggestion** start the first message |
| Tickets | Each conversation is its own ticket with an id. **Your conversations** lists the visitor's earlier ones, and **New conversation** starts another |
| Coming back | **Find a conversation by email** sends a 6-digit code to the address, which brings their conversations to this browser |
| Rating | A finished conversation asks **How did we do?** |

## For AI agents

Your help center is readable by AI assistants and coding agents, with nothing
to set up.

| Address | Holds |
| --- | --- |
| `/llms.txt` | Every collection and article, with a line about each |
| `/llms-full.txt` | Every article in full, in one file |
| `.md` after any article or collection address | That page as markdown. Sending `Accept: text/markdown` works too |
| `/mcp` | An MCP server that searches and reads your articles |
| `/skill.md` | A skill an agent can install to answer from your help center |
| `/sitemap.xml`, `/robots.txt` | For search engines |

Every article also has **Copy for LLM**, with links to open it in ChatGPT,
Claude or Perplexity.

## Feedback

A board where customers post ideas, vote and comment. Turn it on under
**Site → Overview → Sections**. The team's side is in the Signal tab:
**Signal → Board** for the posts and **Signal → Board settings** for how
the board works. Customers [sign in](/articles/choose-how-visitors-sign-in) before they
post, vote or comment.

### Posts

**Signal → Board** lists the posts. **On the board** holds the public ones.
**Waiting** holds posts waiting for approval and posts held back as possible
spam, with a count. Filter by board, status or words. **New post** adds one,
and **View board** opens the public board.

| On a post's page | Does |
| --- | --- |
| **Approve** | Puts a waiting post on the board |
| **Status**, **Board**, **Tags**, **Pinned** | Change them. Pinned posts sit at the top |
| **Open in Signal** | Opens the signal it was filed under |
| **Merge into another post** | Moves its votes and followers to the post you pick, and deletes it |
| **Delete** | Asks **Delete this post?** Its votes and comments go with it |

### Board settings

**Signal → Board settings** has three tabs. Only admins and owners can
change them. **View board** opens the public board, and a notice offers
**Turn on** while the board is off.

| Tab | Settings |
| --- | --- |
| **General** | **Title**, **Description**, **Order** (**Trending**, **Most votes** or **Newest**) and a Markdown **Notice** over the posts. Under **Posting**: **Customers can post**, **Approve posts first**, **Comments** and **Show vote counts**. Under **Signal**: **File new posts in Signal** and **Move posts with their signal** |
| **Boards and statuses** | Up to 12 boards, 12 statuses and 40 tags. Each status **Counts as** Open, Planned, In progress, Done or Closed, and can **Show on the roadmap**. **Show the roadmap** with its **Title** and **Description** |
| **Emails** | To customers following a post: **Status changes**, **Team replies**, and **Votes follow the post**. To your team: **New posts** and **New comments**, sent to **Admins and owners** or up to 25 people you pick |

### With Signal

With **File new posts in Signal** on, the agent reads each new post, files it
as a bug or a suggestion, and holds back spam. It uses AI credits. The
signal's page lists its posts under **On the board**.

With **Move posts with their signal** on, a post moves to the first status
that counts as the signal's:

| Signal status | Post moves to |
| --- | --- |
| Open | Stays where it is |
| Planned | Planned |
| In progress, In review | In progress |
| Done | Done |
| Declined | Closed |

| Case | Result |
| --- | --- |
| Post already at a status of that kind | Stays put, so a status picked by hand is kept |
| Merged signals | Posts follow the signal that stays |
| Deleted signal | Posts stay on the board, no longer filed |

## Customize

**Site → Customize** edits a draft of the site's look, with a live preview
beside it. Fields save to the draft as you type. The site keeps its current
look until you publish. **Customize** on the overview's **Look** row, or a
click on its preview, opens it too.

| Control | Does |
| --- | --- |
| Preview | The draft on the site's home page. **Desktop** or **Phone**, **Light** or **Dark**. The arrow opens it in a new tab |
| Status | **Published**, or how many changes are waiting. The overview's **Look** row shows the same count |
| **Discard** | Asks **Discard changes?**, then puts every field back to what the site shows now |
| **Publish changes** | Puts the draft on the site |

The fields come in groups. Each group's closed row sums up what is set.

| Group | Fields |
| --- | --- |
| **Brand** | **Name**, up to 60 characters, for the header and the browser tab. Empty uses the organization's name. **Logo**, **Logo on dark pages** and **Favicon**. Without a logo, the organization picture from **Settings → General** shows. Without a favicon, the logo does |
| **Colors and layout** | **Brand color**, a hex color. **Reset** goes back to the theme's own. **Opens in** sets what a first visit opens in: **Match the visitor**, **Light** or **Dark**. Visitors can switch. **Navigation** is **Top bar**, **Sidebar**, or **Sidebar, topics only**. The sidebars list your topics, and **Sidebar** nests their articles under them |
| **Header** | Up to 5 **Links**. A **Button** at the end, when switched on |
| **Footer** | Up to 4 columns, each with a heading and up to 6 links. **Social links** for X, GitHub, Discord, LinkedIn and YouTube |
| **Home page** | **Headline**, up to 80 characters, and **Subtitle**, up to 160 |
| **Section names** | New names for **Help center**, **Support** and **Feedback**, up to 24 characters each. Empty keeps the default |
| **Custom CSS** | Loaded after the theme. See [Site themes](https://docs.median.sh/site/themes) |

| Rule | Detail |
| --- | --- |
| Links | A label up to 40 characters and an address. `https://` is added when missing. `mailto:` works too |
| Unfinished links | A link without both a label and an address stays off the site. A footer column needs a heading and one finished link |
| Images | Logos take PNG, SVG, JPEG or WebP. The favicon takes PNG, SVG or ICO |
| Sidebar navigation | Header links and the button move to the foot of the sidebar |
| Preview links | A preview opened in a new tab works for 2 hours, then asks you to reload the dashboard. The one beside the fields renews itself |

The API and CLI change the published look directly. A draft only holds the
fields you changed, so publishing it keeps their changes to the rest.

## Plan and access

| Requirement | Detail |
| --- | --- |
| Plan | The Site add-on on Standard, or Pro. See [Plans](/articles/manage-your-plan-and-credits#plans) |
| Role | Admins and owners change switches, articles, API references, the board, the look, the domain and sign-in |
| Branding | "Powered by Median" shows in the footer unless your plan hides branding |

## Address rules

| Case | Result |
| --- | --- |
| Slug changed | The site moves to the new address at once. The old address returns 404. A custom domain keeps working |
| Custom domain live | `<slug>.median.website` sends visitors on to it in the browser, keeping the path, query and heading |
| Any other host | 404, unless it is a live custom domain |
| Site off, or plan without Site | The page reads "This site is not available." |
| Section off | 404 |
| The site cannot be reached | Pages read "This page could not be loaded. Please try again shortly." The files for AI agents answer 503 with "The help center could not be loaded. Please try again shortly." |

Changes to switches, articles, the board, the look, the domain and sign-in show in
[Logs](/articles/search-your-logs) as **Help site changed**.
