# What Is Editable In Sanity

## What Is Editable In Sanity

**Files:** `sanity.config.ts`, `sanity/`, `src/config/config.toml` · **Skill level:** Beginner

Run `npm run dev:all`, open the Studio at `http://localhost:3333`, and log in with your Sanity account. **Content** has one entry per language, then **Site settings**. [Sanity](../sanity/) has the full guide, including `npm run setup` for your first project. Everything below exists in English, French, and Arabic, and each language has its own documents.

### Where Each Page Is Edited
All locations are under Content, then your language. A row under **Sections on this page** changes a section on that page only, and a field you leave empty keeps the section's own content. Everything else on the page comes from the section's document under **Sections**.

| Address | Studio location | Rows under **Sections on this page** |
| ------- | --------------- | ------------------------------------ |
| `/` | **Homepages > Home 1** | Services Section and CTA Section. See below |
| `/home-two/` | **Homepages > Home 2** | Team Section |
| `/home-three/` | **Homepages > Home 3** | None. It has **Has Footer Dark Background** |
| `/about/` | **Main pages > About page** | Team Section, Solutions Section |
| `/services/` | **Main pages > Services page** | Services Section |
| `/services/{slug}/` | **Services**, one document per entry | None |
| `/projects/`, `/projects/grid/`, `/projects/page/...` | **Main pages > Projects page**, and **Projects** | None |
| `/projects/{slug}/` | **Projects**, one document per entry | None |
| `/team/` | **Main pages > Team page** | Team Section. A title here doesn't show |
| `/team/{slug}/` | **Team members**, one document per entry | None |
| `/pricing/` | **Main pages > Pricing page**, **Pricing section**, and **FAQ section** | None |
| `/faq/` | **Main pages > FAQ page** | FAQ Section |
| `/testimonials/` | **Main pages > Testimonials page** | Testimonial Section |
| `/contact/` | **Main pages > Contact page** | Contact Section. The form itself comes from **Contact section** |
| `/blog/`, `/blog/creative/`, `/blog/page/...` | **Main pages > Blog page**, and **Blog posts** | None |
| `/blog/{slug}/` | **Blog posts**, one document per post | None |
| `/blog/category/...`, `/blog/tag/...` | Made from the categories and tags on **Blog posts** | None |
| `/privacy-policy/`, `/terms-conditions/`, `/components/` | **Other pages** | None |
| 404 | **Interface labels**, under **Not Found** | None |

On **Home 1**, the **Services Section** row doesn't change the page: edit **Services section** instead. The **CTA Section** row changes Home 1's closing call to action.

Pages also have **SEO and page options**, folded under their other fields: a meta title and description, a preview image (a post or project uses its main image), keywords, robots, whether the page goes in the sitemap and the AI files, draft (except the three homepages), and on entries a custom address.

### New Entries
Use the **+** button to add a service, project, team member, post, author, or other page. The Studio also asks for a **File name**. **Authors** holds the author shown on blog posts.

A new entry with only a title won't break the site, and it builds. Its card or page shows what you filled in, and images and other fields stay empty until you add them, so fill them in before you publish. We tested this in the bundled demo content, not on a real project.

### Sections
Each section is under **Sections**, in each language. A change there shows everywhere the section is used. Pricing plans are in **Pricing section**, and the contact form's fields are in **Contact section**.

| Section | Where it appears |
| ------- | ---------------- |
| **Banner** | `/` |
| **Banner two** | `/home-two/` |
| **Banner three** | `/home-three/` |
| **Customers** | `/`, inside the banner |
| **Features** | `/` |
| **About section** | `/`, `/about/` |
| **Skill section** | `/` |
| **Startup skill section** | `/home-two/`, `/home-three/` |
| **Services section** | `/`, `/home-two/`, `/home-three/`, `/services/` |
| **Working process** | `/home-three/`, `/services/` |
| **Projects section** | `/`, `/home-two/`, `/home-three/` |
| **Pricing section** | `/home-two/`, `/pricing/` |
| **Team section** | `/`, `/home-two/`, `/home-three/`, `/about/`, `/team/` |
| **Testimonial** | `/`, `/home-three/`, `/testimonials/` |
| **FAQ section** | `/home-two/`, `/pricing/`, `/faq/` |
| **Blog section** | `/`, `/home-two/`, `/home-three/` |
| **Stats section** | `/about/` |
| **Contact section two** | `/about/`, `/home-three/` |
| **Contact section** | `/contact/` |
| **CTA section** | Every page, above the footer |
| **CTA widget section** | Service and project detail pages |

**About one**, **About two**, **Awards**, **Clients**, **Personal portfolio banner**, **Portfolio section**, **Skills**, and **Video section** are also in the list, but no page shows them. They are there for you to build on with a developer.

Services, projects, team, blog, and testimonial sections have more than one layout: set **Options > Layout** on the section or on a page's row. The layouts and item limits the homepages set stay in code, and they win over **Options**.

### Site-Wide Content
| Location | What's in it |
| -------- | ------------ |
| **Menus** | **Header menu**, with dropdowns and mega menus, and **Footer menu**, with a **Column heading** and **Column links** for each column. Each language has its own. See [Menus](../../customization/menus/) |
| **Interface labels** | Buttons, labels, form messages, and footer copy (**Footer > Copyright** and the description). Each language has its own. French and Arabic also have their own tagline, description, and office hours |
| **Site settings** | One for the whole site, below the languages: site title, Base URL, logo, SEO, AI files, form endpoint, navigation button, contact details, smooth scroll, the theme credit, social links, and analytics tags |

In **Menus**, **Show** hides an item without deleting it. Items appear in the order of the list.

**Site settings** apply when the site builds. While `npm run dev:all` runs, they apply when you publish them. They don't change as you type, and click-to-edit doesn't reach them, so change them in their form. **Subscription** has settings there, but no page shows that form as it ships. See [Subscription](../../customization/subscription/).

### Plans And Attributes
At the time of writing, Sanity's free plan allows 2,000 attributes, one for each distinct field path in your content. A test project holding all the sample content and images measured 895, by Sanity's own count, so it fits. Your own fields and content add to that. [Sanity's pricing page](https://www.sanity.io/pricing) has the current limits.

### Online Preview
Click-to-edit and draft preview are set up for your own computer, with `npm run dev:all`. To use them online, your editors need a second copy of the site running as a small **Node.js server**, because drafts can't be shown from static files. A static host can't do this. See [Sanity](../sanity/) for the steps. Without a preview server, editors online can still edit in the Studio's forms and publish.

### What We Tested
**On this theme with no Sanity project, in Chromium:** building and serving the static site from the bundled sample content, in all three languages.

**On this theme with a real Sanity project, in Chromium, on `localhost`:**

- `npm run import-seed` with all the sample content and images, and `npm run setup` run again on that project. The project and its token were made with the same Sanity commands by hand, not by `npm run setup`.
- The Studio and Live preview, with `npm run dev:all`. Clicking a heading on the page opens its field. Text was changed in English, French, and Arabic, showed as a draft in the preview only, and was published with **Publish**.
- Typing and publishing in the **Site settings**, **Menus**, and **Interface labels** forms.
- A static build from the project, with its images served by Sanity's CDN.
- The preview server (`npm run build:preview`, `npm run start:preview`) on `localhost`: all 300 pages, published and in draft.
- Adding a language with `npm run generate-multilingual-content` on the project. Removing languages was tried on the sample content only.

**Not tested on this theme:**

- `npm run setup` creating a brand-new project.
- A deployed Studio, any online host, an online preview server, and webhooks.
- In the Studio: creating a new document, uploading an image, and clicking an image on the page.

Try these on your own project before you rely on them.

### What Stays In Code
These change how the site is built, not what it says:

- The page routes and the order of sections on a page: `src/pages/[...lang]/`.
- Which header a page uses, and whether its footer is dark: the route files, such as `index.astro`, `home-two.astro`, and `home-three.astro`. Home 3's footer has a switch in its form.
- The layouts and item limits the homepages set for services and projects: the same route files.
- Section and component design, colors, type scale, and fonts.
- The list of languages: `src/config/language.json`.
- Favicons, and the language settings and collection folder names in `config.toml`.
- Which sections and fields exist. To add one, see `SKILLS.md`.

### Do It With AI
```text
I use the Sanity edition. Tell me where to edit [TEXT OR SETTING] in the Studio: the language entry,
the document, and the field. If it comes from a section document, say which pages will change.
Don't change any files, and don't print anything from .env.
```