# The docs folder

## What goes in it

| File | What it becomes |
| --- | --- |
| Any `.md` file | A page. |
| A `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp` or `.svg` file | An image pages can show. Its contents must match its extension. |
| `latitude10.docs.json` | The site's settings, below. Optional. |
| `skill.md` | Your own agent skill, in place of the one we write. |

Anything else is left out with a warning. macOS's `.DS_Store`, `._` files and `__MACOSX/` are left out silently.

## latitude10.docs.json

| Key | What it sets |
| --- | --- |
| `title` | The site's name. Without it, the project's name. |
| `description` | One line about the site, for `llms.txt` and `skill.md`. |
| `logo` | The path of an image in the folder. If it isn't there, a warning. |
| `accent` | A colour for links and highlights. If it's too faint to read on the light or dark theme, that theme keeps the default, with a warning. |
| `nav` | The sidebar: a list of groups, each `{ "group": "Name", "pages": ["path/without/md"] }`. |
| `reference` | `{ "title": "…" }`, the name of the reference's section. |

An unknown key gets a warning. A key of the wrong type, or a file that isn't JSON, refuses the push.

With `nav`, every page that isn't hidden should be in it: one that's left out gets a warning, and so does a name with no page. Without `nav`, pages are grouped by their top folder, each group with its `index` first, then by `order`, then by path.

## Front matter

A page may start with front matter between two `---` lines:

| Field | What it does |
| --- | --- |
| `title` | The page's title. Without it, the page's first `#` heading, or else its file name. |
| `description` | The page's summary, for search engines and `llms.txt`. |
| `order` | A whole number that sorts the page within its group when there's no `nav`. |
| `hidden` | `true` serves the page but leaves it out of the sidebar. |

Other fields are ignored.

## Page addresses

A page's address is its path without `.md`, in lowercase, with spaces as dashes: `Guides/Web Hooks.md` is `/guides/web-hooks`. An `index.md` is its folder's address, and the root `index.md` is the home page. Two files that would share an address refuse the push.

The site serves these paths itself, so a page there would never show, and gets a warning: `mcp`, `reference`, `_search`, `_theme.css`, `llms.txt`, `llms-full.txt`, `sitemap.xml` and `robots.txt`, and anything under `v/`, `preview/`, `_assets/`, `.well-known/` or `mcp/`.

## What refuses a push

| Refusal | Status | Why |
| --- | --- | --- |
| Not gzip | `422` | The body isn't a `.tar.gz` archive. |
| Too large | `413` | The folder, unpacked, is over your plan's bundle size. |
| Too many pages | `413` | It has more pages than your plan builds. |
| Bad path | `422` | A path leaves the folder, or an entry is a link or a special file. |
| Collision | `422` | Two files would be the same page. |
| Bad config | `422` | `latitude10.docs.json` isn't valid. |

The sizes and page counts per plan are in [Plans and limits](../get-started/plans-and-limits#docs).

## Where this comes from

- `app/docs/_lib/bundle.ts`
- `app/docs/_lib/build.ts`
- `app/api/registry/v1/docs/route.ts`
