diff --git a/access-policies.md b/access-policies.md
index 76fe406..b52328f 100644
--- a/access-policies.md
+++ b/access-policies.md
@@ -1,5 +1,7 @@
 ---
 id: access
+title: Access Policies & Authorization
+description: Learn how to implement API policies to restrict resource access for CRUD operations and endpoints.
 ---
 
 # Access policies
@@ -67,7 +69,7 @@ By default, all rules have the [admin access type](#access-types)
 
 ## Ownership-based access
 
-Above rules are based on predefined roles, but you many want to grant user access only to their own records. For example, a platform like _Craiglist_ allows its users to create and manage classified ads only for them, not letting users edit others' content.
+Above rules are based on predefined roles, but you many want to grant user access only to their own records. For example, a platform like _Craigslist_ allows its users to create and manage classified ads only for them, not letting users edit others' content.
 
 In Manifest, this is done simply by adding the `{condition: 'self'}` to a restricted policy:
 
@@ -87,9 +89,9 @@ Project:
       - { access: restricted, allow: User, condition: self }
 ```
 
-See ? Just adding the `self` condition prevent creating projects for other users than themselves.
+See? Just adding the `self` condition prevent creating projects for other users than themselves.
 
-Even if it looks very simple, it has slighlty different impact based on rule where it is added. See the following example:
+Even if it looks very simple, it has slightly different impact based on rule where it is added. See the following example:
 
 ```yaml
 policies:
diff --git a/angular.md b/angular.md
index 8221388..8b538b2 100644
--- a/angular.md
+++ b/angular.md
@@ -1,5 +1,7 @@
 ---
 id: angular
+title: Create a Full-Stack app with Angular and Manifest
+description: Quick start guide to create a full-stack app using Angular as a frontend and Manifest as a backend.
 ---
 
 # Quick start with Angular
@@ -12,7 +14,7 @@ This quick start guide focuses exclusively on the **frontend**. To ensure the fu
 
 :::
 
-# 1. Create a Angular app
+## 1. Create a Angular app
 
 If you already have your Angular app up and running, skip this step.
 
@@ -24,7 +26,7 @@ cd my-client
 ng serve
 ```
 
-# 2. Install Manifest SDK
+## 2. Install Manifest SDK
 
 Install the JS SDK from the root of your Angular app.
 
@@ -32,7 +34,7 @@ Install the JS SDK from the root of your Angular app.
 npm i @mnfst/sdk
 ```
 
-# 3. Use it in your app
+## 3. Use it in your app
 
 In that example we are using a Cat entity [created previously](entities.md). Replace it by your own entity.
 
diff --git a/astro.md b/astro.md
index 4ec5d34..c1b1c0d 100644
--- a/astro.md
+++ b/astro.md
@@ -1,5 +1,7 @@
 ---
 id: astro
+title: Create a Full-Stack app with Astro and Manifest
+description: Quick start guide to create a full-stack app using Astro as a frontend and Manifest as a backend.
 ---
 
 # Quick start with Astro
@@ -12,7 +14,7 @@ This quick start guide focuses exclusively on the **frontend**. To ensure the fu
 
 :::
 
-# 1. Create a Astro app
+## 1. Create a Astro app
 
 If you already have your Astro app up and running, skip this step. Replace `my-astro-app` by the name of the Astro app created.
 
@@ -22,7 +24,7 @@ cd my-astro-app
 npm run dev
 ```
 
-# 2. Install Manifest SDK
+## 2. Install Manifest SDK
 
 Install the JS SDK from the root of your Astro app.
 
@@ -30,7 +32,7 @@ Install the JS SDK from the root of your Astro app.
 npm i @mnfst/sdk
 ```
 
-# 3. Use it in your app
+## 3. Use it in your app
 
 In that example we are using a Cat entity [created previously](entities.md). Replace it by your own entity.
 
diff --git a/auth.md b/auth.md
index 69b8828..e48509c 100644
--- a/auth.md
+++ b/auth.md
@@ -1,5 +1,7 @@
 ---
 id: authentication
+title: Authentication
+description: Implement Authentication quickly with Manifest built-in Auth component. Manage log in, sign up and admin roles.
 ---
 
 import Tabs from '@theme/Tabs';
diff --git a/config.md b/config.md
index ac10a56..51e8444 100644
--- a/config.md
+++ b/config.md
@@ -1,5 +1,7 @@
 ---
 id: config
+title: Manifest Configuration
+description: Configure Manifest Database (PostgreSQL, MySQL or SQLite), Port, OpenAPI and environments with a simple config.
 ---
 
 import Tabs from '@theme/Tabs';
diff --git a/crud.md b/crud.md
index 80cb0db..aa68dea 100644
--- a/crud.md
+++ b/crud.md
@@ -1,5 +1,7 @@
 ---
 id: crud
+title: CRUD Operations
+description: Documentation for out-of-the-box CRUD endpoints with Manifest. Paginated lists, detail views, creating and updating single or collection entities.
 ---
 
 import Tabs from '@theme/Tabs';
diff --git a/deploy.md b/deploy.md
index ec432ab..baae712 100644
--- a/deploy.md
+++ b/deploy.md
@@ -1,5 +1,7 @@
 ---
 id: deploy
+title: Deploy to Production
+description: Deploy your Manifest backend to production in no time. Server, Databases and Storage options. Deploy on popular cloud providers and use Docker image.
 ---
 
 # Deploy Manifest
@@ -67,16 +69,16 @@ See more [environment variables](./config.md#general-variables) you may need.
 
 The `npm run start` script should only be used for **development** as it watches file changes.
 
-Go back to your codebase and open the `package.json` file and add a new **start** script on the scripts list with the value `node node_modules/manifest/dist/manifest/src/main.js` as following:
+Go back to your codebase and open the `package.json` file and add a new **start:prod** script on the scripts list with the value `node node_modules/manifest/dist/manifest/src/main.js` as following:
 
 ```json title="package.json"
 "scripts": {
-    "start": "node node_modules/manifest/dist/manifest/src/main.js"
+    "start:prod": "node node_modules/manifest/dist/manifest/src/main.js"
     [...]
 }
 ```
 
-After that you will be able to run Manifest for production with `npm run start`.
+After that you will be able to run Manifest for production with `npm run start:prod` without watching file changes.
 
 ## Docker
 
@@ -84,7 +86,7 @@ After that you will be able to run Manifest for production with `npm run start`.
 
 ```dockerfile title="Dockerfile"
 # Use the official Node.js image as a base
-FROM node:18-slim
+FROM node:22-slim
 
 # Copy package.json and package-lock.json (if available)
 COPY package*.json ./
@@ -102,7 +104,7 @@ ENV NODE_ENV=production
 EXPOSE 1111
 
 # Start the application
-CMD ["npm", "run", "start"]
+CMD ["npm", "run", "start:prod"]
 ```
 
 ## Guides for popular app platform services
diff --git a/endpoints.md b/endpoints.md
index e4996cf..97bcb0d 100644
--- a/endpoints.md
+++ b/endpoints.md
@@ -1,6 +1,7 @@
 ---
 id: endpoints
-title: Endpoints
+title: Custom Endpoints
+description: Add your own endpoints for your custom logic with Manifest. Each endpoint triggers a handler file that has access to Manifest logic and data.
 ---
 
 # Endpoints
@@ -59,7 +60,7 @@ Each endpoint can be defined in the YAML file with the following values:
 
 ## Manipulate data with the backend SDK
 
-The next thing you may want to do is to **read and write data from your app**. This can be done using the Manifest backend SDK that shares the same CRUD and upload functions as the [JS SDK](http://localhost:3000/docs/javascript-sdk) for the front-end.
+The next thing you may want to do is to **read and write data from your app**. This can be done using the Manifest backend SDK that shares the same CRUD and upload functions as the [JS SDK](./crud.md#using-the-javascript-sdk) for the front-end.
 
 Take the following example of a `manifest.yml` file of a **leaderboard**:
 
diff --git a/entities.md b/entities.md
index bcd5a94..2367641 100644
--- a/entities.md
+++ b/entities.md
@@ -1,6 +1,7 @@
 ---
 id: entities
 title: Entities
+descriptions: Entities are the foundation of Manifest. Define your data structure in few lines and use 15+ real-world types for your properties.
 ---
 
 import Tabs from '@theme/Tabs';
@@ -116,7 +117,7 @@ entities:
 | Option           | Default                    | Type     | Description                                                                 |
 | ---------------- | -------------------------- | -------- | --------------------------------------------------------------------------- |
 | **nameSingular** | _singular lower case name_ | string   | The singular lowercase name of your entity. Used widely on the admin panel. |
-| **policies**     | -                          | Policies | The [access control policies](./auth.md#access-policies) of your entity     |
+| **policies**     | -                          | Policies | The [access control policies](./access-policies.md) of your entity          |
 | **properties**   | `[]`                       | Array    | The [properties](./entities.md#properties) of your entity                   |
 | **slug**         | _plural dasherized name_   | string   | The kebab-case slug of the entity that will define API endpoints.           |
 
@@ -162,6 +163,7 @@ You can pass arguments using the long syntax:
 | **hidden**     | `false`  | boolean    | If the property should be hidden in the API response                                                      |
 | **options**    | -        | Object     | Specific options depending on [property type](#property-types)                                            |
 | **validation** | -        | Object     | The [property validators](./validation.md) that each request compares against                             |
+| **helpText**   | -        | string     | Optional help text to display in admin UI                                                                 |
 | **default**    | -        | any        | The default value. When creating an item, if the property is not specified it will default to this value. |
 
 ### Property types
@@ -395,8 +397,9 @@ When you define a **belongsTo** relationship, it implicitly set the opposite _ha
 
 You can pass arguments using the long syntax:
 
-| Option     | Default     | Type    | Description                                                                                                                      |
-| ---------- | ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- |
-| **name**   | Entity name | string  | The name of the relation                                                                                                         |
-| **entity** | -           | string  | The class name of the entity that the relationship is with                                                                       |
-| **eager**  | `false`     | boolean | Whether the relationship should be eager loaded. Otherwise, you need to explicitly request the relation in the client SDK or API |
+| Option       | Default     | Type    | Description                                                                                                                      |
+| ------------ | ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| **name**     | Entity name | string  | The name of the relation                                                                                                         |
+| **entity**   | -           | string  | The class name of the entity that the relationship is with                                                                       |
+| **helpText** | -           | string  | Optional help text to display in admin UI                                                                                        |
+| **eager**    | `false`     | boolean | Whether the relationship should be eager loaded. Otherwise, you need to explicitly request the relation in the client SDK or API |
diff --git a/groups.md b/groups.md
new file mode 100644
index 0000000..3d5668d
--- /dev/null
+++ b/groups.md
@@ -0,0 +1,85 @@
+---
+id: groups
+title: Groups (nested entities)
+slug: groups
+description: TODO
+---
+
+# Groups (nested entities)
+
+A group is a **reusable set of properties** that you can attach to your entities: whether they are [single](./entities.md#singles) or [collections](./entities.md#collections). They help you structure your nested data without having to repeat yourself. Some common use cases for groups are:
+
+- Testimonials
+- FAQs
+- Widgets (CTA, UI elements like cards, blocks etc.)
+
+Groups are automatically loaded when you fetch a list or a detail version of the parent entity (using both REST API and SDK).
+
+## Syntax
+
+Define your groups in the `manifest.yml` file to use it in entities as a property.
+
+```yaml title="manifest.yml"
+entities:
+  Service:
+    properties:
+      - name
+      - { name: description, helpText: 'Description of the service' }
+      - {
+          name: testimonials,
+          type: group, # Group type indicates that it is a group.
+          helpText: 'Add some testimonials for the service',
+          options: { group: Testimonial } # Pass the name of the group in the "group" option
+        }
+
+groups:
+  Testimonial: # We create a testimonial group with 3 properties.
+    properties:
+      - { name: author, type: text }
+      - { name: content, type: text }
+      - { name: rating, type: number, helpText: '1 to 5 stars' }
+    validation:
+      rating: { isNotEmpty: true }
+```
+
+The code above will add testimonials to service. Once the `Testimonial` group is created, you can add it in as many entities as you want.
+
+## Non-multiple groups
+
+In the example above, each service can have several testimonials, but you can also have non-multiple groups.
+
+This example shows a backend for a website where each page has a single "call to action" element that can be used as widget UI.
+
+```yaml title="manifest.yml"
+  Homepage:
+    single: true
+    properties:
+      - { name: title, type: text }
+      - {
+          name: callToAction,
+          type: group,
+          options: { group: CallToAction, multiple: false }
+        }
+
+  AboutPage:
+    single: true
+    properties:
+      - { name: title, type: text }
+      - { name: description, type: text }
+      - {
+          name: callToAction,
+          type: group,
+          options: { group: CallToAction, multiple: false }
+        }
+
+groups:
+  CallToAction:
+    properties:
+      - { name: title, type: string }
+      - { name: description, type: text }
+      - { name: buttonText, type: string, helpText: "Text for the button" }
+      - { name: buttonLink, type: link }
+    validation:
+      title: { isNotEmpty: true }
+      description: { isNotEmpty: true }
+```
diff --git a/introduction.md b/introduction.md
index 5c3822a..327b2e0 100644
--- a/introduction.md
+++ b/introduction.md
@@ -1,25 +1,27 @@
 ---
 id: get-started
-title: Get started
+title: Get Started
 slug: /
+description: Manifest is an Open Source backend that fits in a single YAML file. Easy to edit, validate and version for humans and LLMs.
 ---
 
 # Manifest Documentation 👋
 
 ## Introduction
 
-Manifest is a **backend** designed for developers using **AI coding tools** like [Cursor](https://www.cursor.com/), [Copilot](https://github.com/features/copilot) or [Windsurf](https://windsurf.com/).
+Manifest is a **1-file backend** for prototypes and MVPs.
 
-If you’ve been using AI tools to build your app or website, you already know the truth: Generating a frontend is easy, but building the backend is still a mess.
+Most backend tools feel too heavy for simple apps. They force you to use bloated configuration UIs. Even with AI tools that generate frontend code, the backend remains a pain to set up and validate. It slows you down when you just want to test an idea or build something simple..
+The solution
 
-With **Manifest**, you define your entire backend in a single YAML file. It can be generated and edited by both humans and LLMs.
+Manifest is an open source backend that fits in only 1 file. You define it in a simple yaml language to get data, auth, storage, logic and an admin panel.
 
-Key advantages:
+**Key advantages:**
 
-- 🤖 Fits naturally into AI-assisted coding
-- 🔒 Easy to edit, validate and version.
-- 🗄️ Data, logic, storage, essentials features and an admin panel
-- 🧠 Reduce LLM token usage by up to 90%
+- 🧠 Zero friction setup
+- 🚀 Ship your backend fast and stay focused on building your app. 
+- 🤖 Easy for LLMs to generate
+- 💻 Can run everywhere
 
 ## Install Manifest
 
@@ -34,6 +36,10 @@ Follow the steps below to install Manifest in your local machine.
 Run this command to create a Manifest project ready to use with Cursor IDE.
 
 ```bash
+# NPX
+npx create-manifest@latest my-project --cursor
+
+# Yarn
 yarn create manifest my-project --cursor
 ```
 
@@ -45,12 +51,6 @@ You can replace `--cursor` with another option if you're using a different AI to
 - `--windsurf` for **Windsurf**
 - or remove it entirely if you're not using any AI coding tool
 
-:::note
-
-You can also use `npm create` instead of `yarn create`.
-
-:::
-
 To start the Manifest backend, run the following command in the new project folder:
 
 ```
@@ -70,7 +70,7 @@ If you already have a frontend app, you can run the `npx add-manifest` command f
 
 #### Note with PNMP
 
-As [PNPM](https://pnpm.io/fr/) blocks postinstall scripts, we have to adapt the `þackage.json`. Add this to your `package.json` file before doing `pnpm install`:
+As [PNPM](https://pnpm.io/fr/) blocks postinstall scripts, we have to adapt the `package.json`. Add this to your `package.json` file before doing `pnpm install`:
 
 ```json
   "pnpm": {
diff --git a/llm-rules.md b/llm-rules.md
new file mode 100644
index 0000000..e5c2c74
--- /dev/null
+++ b/llm-rules.md
@@ -0,0 +1,47 @@
+---
+id: llm-rules
+title: LLM Rules
+descriptions: Use Manifest rules in your AI Code Editor to improve your LLM understanding of Manifest backend.
+---
+
+# LLM rules
+
+Rules are predefined guidelines and constraints that steer an AI assistant’s behavior. They specify the style, conventions, best practices, or security policies to follow. Rules ensure consistency, quality, and compliance of the generated suggestions.
+
+## Usage
+
+Running the install command above will add the rules to the Manifest rules in your project.
+
+```bash
+npx create-manifest --cursor
+```
+
+You can replace `--cursor` with another option if you're using a different AI tool;
+
+- `--copilot` if you're using GitHub Copilot
+- `--windsurf` for Windsurf
+
+If you need to install rules manually, download the file below and add it to your AI code editor:
+
+<a href="https://raw.githubusercontent.com/mnfst/rules/refs/heads/main/src/rules.md" download>
+  ⬇️ Download Manifest Rules
+</a>
+
+## Integration with Lovable, Bolt.new and vibe coding tools
+
+<div style={{ backgroundColor: '#d6ffee', padding: '1em 1em 0.1em 1em', borderRadius: '12px' }}>
+
+Manifest already works with ❤️ [Lovable](https://lovable.dev) and [Bolt.new](https://bolt.new) if you clone the project and run it locally. However it is still hard to convince those LLM to use manifest as a backend as they have been programmed to do otherwise. With a native integration, you could launch Manifest directly inside them.
+
+Want to see Manifest inside **Lovable** ? ⬆️ **[Upvote the idea](https://lovable.featurebase.app/fr/p/manifestbuild-integration?slug=manifestbuild-integration)**.
+
+</div>
+
+## Types and OpenAPI Generation
+
+When you run Manifest, it generates 2 key context files in the **/.manifest** folder:
+
+- **openapi.yml**: [OpenAPI](https://www.openapis.org/) spec for the available endpoints, schemas, and the API base URL of your backend.
+- **types.ts**: type file with typings and DTOs (Data Transfer Object) for each entity.
+
+By including these context files, Manifest ensures your AI code editor understands your API, enabling smarter and more reliable code generation,especially when you want to connect a frontend to your Manifest backend.
diff --git a/middlewares.md b/middlewares.md
index a42c3b3..2818731 100644
--- a/middlewares.md
+++ b/middlewares.md
@@ -1,6 +1,7 @@
 ---
 id: middlewares
 title: Middlewares
+description: Add middlewares to trigger custom logic at defined lifecycle events of your Manifest backend. 6 available events related to entities.
 ---
 
 ## Introduction
diff --git a/react.md b/react.md
index f80ec80..2b19162 100644
--- a/react.md
+++ b/react.md
@@ -1,5 +1,7 @@
 ---
 id: react
+title: Create a Full-Stack app with React and Manifest
+description: Quick start guide to create a full-stack app using React as a frontend and Manifest as a backend.
 ---
 
 # Quick start with React
@@ -12,7 +14,7 @@ This quick start guide focuses exclusively on the **frontend**. To ensure the fu
 
 :::
 
-# 1. Create a React app
+## 1. Create a React app
 
 If you already have a React app, you can skip this step.
 
@@ -24,7 +26,7 @@ cd my-client
 npm start
 ```
 
-# 2. Install Manifest SDK
+## 2. Install Manifest SDK
 
 Install the JS SDK from the root of your React app.
 
@@ -32,7 +34,7 @@ Install the JS SDK from the root of your React app.
 npm i @mnfst/sdk
 ```
 
-# 3. Use it in your app
+## 3. Use it in your app
 
 In that example we are using a Cat entity [created previously](entities.md). Replace it by your own entity. This example uses TypeScript, you can remove the typing to have plain JS.
 
diff --git a/s3-storage.md b/s3-storage.md
index f0a2670..d684494 100644
--- a/s3-storage.md
+++ b/s3-storage.md
@@ -1,3 +1,9 @@
+---
+id: s3-storage
+title: S3 Storage
+description: Use any S3-compatible storage to store your user assets in your Manifest backend. Images, videos, documents...
+---
+
 # S3 Storage
 
 ## Introduction
@@ -19,6 +25,21 @@ S3_ACCESS_KEY_ID=XXX
 S3_SECRET_ACCESS_KEY=XXX
 ```
 
+Optionally, you can set a folder prefix to prepend your object path:
+
+```
+S3_FOLDER_PREFIX=development/manifest
+```
+
 :::note  
-S3 storage in Manifest has been **validated** with **AWS S3** and **DigitalOcean Spaces**. Other S3-compatible providers may work, but they have not been officially tested.  
+S3 storage in Manifest has been **validated** with **AWS S3** and **Digital Ocean Spaces**. Other S3-compatible providers may work, but they have not been officially tested.  
 :::
+
+## Manifest guides
+
+<a href="https://manifest.build/integrations/s3-storage" download>
+AWS S3 Storage guide
+</a>
+<a href="https://manifest.build/integrations/digital-ocean-spaces" download>
+Digital Ocean Spaces guide
+</a>
diff --git a/security.md b/security.md
new file mode 100644
index 0000000..5471156
--- /dev/null
+++ b/security.md
@@ -0,0 +1,24 @@
+---
+id: security
+title: Security
+description: Implement Security in your Manifest backend and make sure that your app is protected.
+---
+
+# Security
+
+Implement security measures in your Manifest backend.
+
+## Rate limiting
+
+Rate-limiting can protect your backend from **brute-force attacks** by blocking requests after reaching a limit.
+
+You can implement one or several throttler definitions to limit API calls in the `manifest.yml` file. The following example allow no more than 2 calls per second, and 50 calls per minute:
+
+```yaml title="manifest.yml"
+name: my app
+
+settings:
+  rateLimits:
+    - { name: 'short', limit: 2, ttl: 1000 } # 2 requests per second
+    - { name: 'medium', limit: 50, ttl: 60000 } # 50 requests per minute.
+```
diff --git a/svelte.md b/svelte.md
index 1e53597..e4543f6 100644
--- a/svelte.md
+++ b/svelte.md
@@ -1,5 +1,7 @@
 ---
 id: svelte
+title: Create a Full-Stack app with Svelte and Manifest
+description: Quick start guide to create a full-stack app using Svelte as a frontend and Manifest as a backend.
 ---
 
 # Quick start with Svelte
@@ -12,7 +14,7 @@ This quick start guide focuses exclusively on the **frontend**. To ensure the fu
 
 :::
 
-# 1. Create a Svelte app
+## 1. Create a Svelte app
 
 If you already have a Svelte app running, you can skip this step.
 
@@ -25,7 +27,7 @@ npm install
 npm run dev -- --open
 ```
 
-# 2. Install Manifest SDK
+## 2. Install Manifest SDK
 
 Install the JS SDK from the root of your Svelte app.
 
@@ -33,7 +35,7 @@ Install the JS SDK from the root of your Svelte app.
 npm i @mnfst/sdk
 ```
 
-# 3. Use it in your app
+## 3. Use it in your app
 
 In that example we are using a Cat entity [created previously](entities.md). Replace it by your own entity. This example uses TypeScript, you can remove the typing to have plain JS.
 
diff --git a/telemetry.md b/telemetry.md
new file mode 100644
index 0000000..4eae86f
--- /dev/null
+++ b/telemetry.md
@@ -0,0 +1,30 @@
+---
+id: telemetry
+title: Telemetry
+description: Manifest collects a tiny amount of anonymous data to help us improve the product. See how and what data, and eventually opt out.
+---
+
+# Telemetry
+
+Telemetry is the process of collecting data from remote sources to improve a software.
+
+At Manifest, we believe that we should only collect the minimum amount of data to help us improving our product. Participation is optional.
+
+## What is being collected ?
+
+When checking for a new version available in the admin panel, we log the following information:
+
+- Current version of Manifest
+- Anonymous IP
+- Origin (URL)
+- Environment (development/production)
+
+Information is not logged more than once every 24 hours.
+
+## Opting out
+
+That tiny amount of data we collect helps us a lot to make Manifest a better product. Nevertheless you can opt-out anytime adding this to your `.env` file.
+
+```
+MANIFEST_TELEMETRY_DISABLED=true
+```
diff --git a/upload.md b/upload.md
index 6b7d620..71f4779 100644
--- a/upload.md
+++ b/upload.md
@@ -1,5 +1,7 @@
 ---
 id: upload
+title: File and Image Uploads
+description: Upload files and images with Manifest built-in storage system to upload assets in the file storage or any S3-compatible storage.
 ---
 
 import Tabs from '@theme/Tabs';
diff --git a/validation.md b/validation.md
index 188f4b7..225dbf4 100644
--- a/validation.md
+++ b/validation.md
@@ -1,5 +1,7 @@
 ---
 id: validation
+title: Validation
+description: Server-side validation for your user-generated content. Use many validators like "required", "minLength", "contains" or "matches" for every property.
 ---
 
 # Validation
diff --git a/vue.md b/vue.md
index 7d061df..5641640 100644
--- a/vue.md
+++ b/vue.md
@@ -1,5 +1,7 @@
 ---
 id: vue
+title: Create a Full-Stack app with Vue and Manifest
+description: Quick start guide to create a full-stack app using Vue as a frontend and Manifest as a backend.
 ---
 
 # Quick start with Vue
@@ -12,7 +14,7 @@ This quick start guide focuses exclusively on the **frontend**. To ensure the fu
 
 :::
 
-# 1. Create a Vue app
+## 1. Create a Vue app
 
 If you already have a Vue app running, you can skip this step.
 
@@ -25,7 +27,7 @@ npm install
 npm run dev
 ```
 
-# 2. Install Manifest SDK
+## 2. Install Manifest SDK
 
 Install the JS SDK from the root of your Vue app.
 
@@ -33,7 +35,7 @@ Install the JS SDK from the root of your Vue app.
 npm i @mnfst/sdk
 ```
 
-# 3. Use it in your app
+## 3. Use it in your app
 
 In that example we are using a Cat entity [created previously](entities.md). Replace it by your own entity. This example uses TypeScript, you can remove the typing to have plain JS.
 
diff --git a/webhooks.md b/webhooks.md
index a855551..73c19d9 100644
--- a/webhooks.md
+++ b/webhooks.md
@@ -1,5 +1,7 @@
 ---
 id: webhooks
+title: Webhooks
+description: Send requests to third-party applications using Manifest webhooks. Choose URL, method and send custom headers.
 ---
 
 # Webhooks
