diff --git a/.vitepress/version-configs/2.0.ts b/.vitepress/version-configs/2.0.ts
index ffd99f14..33b7f7cf 100644
--- a/.vitepress/version-configs/2.0.ts
+++ b/.vitepress/version-configs/2.0.ts
@@ -67,12 +67,38 @@ export default [
text: 'Magic AI',
link: `/${version}/magic/magic-ai`,
collapsed: false,
- items: setVersionPrefix([
- ['magic-ai/platforms', 'Platforms'],
- ['magic-ai/settings', 'Settings'],
- ['magic-ai/prompts', 'Prompts'],
- ['magic-ai/system-prompts', 'System Prompts'],
- ])
+ items: [
+ {
+ text: 'Platforms',
+ link: `/${version}/magic-ai/platforms`,
+ collapsed: true,
+ items: [
+ {
+ text: 'Providers',
+ link: `/${version}/magic-ai/providers/`,
+ collapsed: true,
+ items: setVersionPrefix([
+ ['magic-ai/providers/openai', 'OpenAI'],
+ ['magic-ai/providers/anthropic', 'Anthropic'],
+ ['magic-ai/providers/gemini', 'Google Gemini'],
+ ['magic-ai/providers/groq', 'Groq'],
+ ['magic-ai/providers/ollama', 'Ollama'],
+ ['magic-ai/providers/xai', 'xAI (Grok)'],
+ ['magic-ai/providers/mistral', 'Mistral'],
+ ['magic-ai/providers/deepseek', 'DeepSeek'],
+ ['magic-ai/providers/azure', 'Azure OpenAI'],
+ ['magic-ai/providers/openrouter', 'OpenRouter'],
+ ['magic-ai/providers/custom', 'Custom (OpenAI-compatible)'],
+ ])
+ }
+ ]
+ },
+ ...setVersionPrefix([
+ ['magic-ai/settings', 'Settings'],
+ ['magic-ai/prompts', 'Prompts'],
+ ['magic-ai/system-prompts', 'System Prompts'],
+ ]),
+ ]
},
{
diff --git a/src/2.0/dashboard/index.md b/src/2.0/dashboard/index.md
index eb9a64dd..80212169 100644
--- a/src/2.0/dashboard/index.md
+++ b/src/2.0/dashboard/index.md
@@ -2,48 +2,23 @@
The **Dashboard** is the landing page you see immediately after logging in to [UnoPim](https://unopim.com/). It's designed as a single-screen command center: in under a second you should be able to tell *how big* your catalog is, *how healthy* it is, *what your team has been doing*, and *what needs attention next* — without clicking into any other page.
-
+## How the Dashboard is organised
-## What is the Dashboard for?
+The Dashboard is split into **three vertical bands**, each answering a different question:
-The Dashboard exists to answer four questions the moment you log in:
+| Band | Question it answers | What's in it |
+|---|---|---|
+| **1. Overview** | *How big is my catalog and what needs attention right now?* | Welcome banner, Catalog Overview cards, Catalog Structure cards, Needs Attention alerts |
+| **2. Analytics** | *How healthy is my data?* | Product Statistics, Product Activity chart, Completeness, Channel Readiness |
+| **3. Operations** | *What has the team been doing?* | Recent Activity feed, Data Transfer panel |
-| Question | Where the answer lives |
-|---|---|
-| **How big is my catalog?** | Catalog Overview + Catalog Structure cards |
-| **How healthy is my data?** | Needs Attention, Completeness, Channel Readiness |
-| **What has the team been doing?** | Product Statistics, Product Activity chart, Recent Activity |
-| **What do I do next?** | Welcome Banner quick actions, Needs Attention alerts, Data Transfer panel |
-
-It's deliberately read-heavy — the Dashboard reports state, then points you at the right page to act. Every card and panel is either clickable (to jump to the relevant listing) or paired with a quick-action button.
-
-## How the Dashboard works
-
-The page is composed of independent **widgets**, each sourced from a different part of UnoPim:
-
-```
-┌───────────────────────────────────────────────────┐
-│ Welcome Banner (user greeting + quick actions) │
-├───────────────────────────────────────────────────┤
-│ Catalog Overview ← products + categories tables │
-│ Catalog Structure ← attributes, locales, channels│
-├───────────────────────────────────────────────────┤
-│ Needs Attention ← completeness engine │
-├───────────────────────────────────────────────────┤
-│ Analytics ← product stats + 7-day chart │
-│ Completeness ← per-channel completeness │
-│ Channel Readiness ← per-channel ready counts │
-├───────────────────────────────────────────────────┤
-│ Operations ← activity log + Job Tracker │
-├───────────────────────────────────────────────────┤
-│ AI Agent button (floating, bottom-right) │
-│ Theme toggle (top-right, next to bell) │
-└───────────────────────────────────────────────────┘
-```
-
-Counts and charts are computed on page load (no scheduled jobs), so the Dashboard always reflects the current state of the database.
-
-## Widgets
+Counts and charts are computed on page load (no scheduled jobs), so the Dashboard always reflects the current state of the database. The rest of this page walks through the three bands, explains every widget, and shows the corresponding screenshot.
+
+---
+
+## 1. Overview
+
+The Overview band is the first thing you see after login. It greets you, summarises the size of the catalog, exposes the structural building blocks, and surfaces any items that need attention right now.
### Welcome Banner
@@ -87,9 +62,15 @@ Surfaces items that need admin action **right now**. The most common alert is **
Unenriched products may not be ready for distribution to your sales channels. Review this section regularly to keep the catalog shippable.
:::
-### Analytics
+
+
+---
+
+## 2. Analytics
+
+The Analytics band answers *how healthy is my data?*. It shows the size and shape of the catalog over time, plus the per-channel completeness picture so you can decide where to focus enrichment work.
-#### Product Statistics
+### Product Statistics
A numerical breakdown of the catalog — the quickest way to judge health over time.
@@ -103,7 +84,7 @@ A numerical breakdown of the catalog — the quickest way to judge health over t
| **Avg Completeness** | Average completeness score across all products. |
| **Enriched** | Number of products flagged as fully enriched. |
-#### Product Activity (Last 7 Days)
+### Product Activity (Last 7 Days)
A two-line chart plotting **Created** vs. **Updated** products per day for the last seven days. Flat lines at zero are a cue that the catalog has gone quiet; spikes usually mean a bulk import or enrichment run just finished.
@@ -128,40 +109,54 @@ Work on the lowest-scoring channel-locale pair first. A product can be ready for
### Channel Readiness
-A horizontal **progress bar per channel** reading *"X of Y products ready"* with a percentage (e.g., *"2 of 3 products ready — 67%"*). Where the Completeness widget shows *average quality*, Channel Readiness shows *shippable count* — the number of products that clear that channel's required-field bar.
+A horizontal **progress bar per channel** reading *"X of Y products ready"* with a percentage (e.g., *"1 of 12 products ready — 8%"*). Where the Completeness widget shows *average quality*, Channel Readiness shows *shippable count* — the number of products that clear that channel's required-field bar.
-### Operations
+
-#### Recent Activity
+---
+
+## 3. Operations
+
+The Operations band sits at the bottom of the Dashboard and answers *what has the team been doing?*. It pairs a chronological activity feed with the latest import / export job statuses so you can spot anomalies at a glance.
+
+### Recent Activity
A chronological feed of changes across the system. Every entry captures:
| Field | Meaning |
|---|---|
| **Action type** | Created, updated, or deleted. |
-| **Entity type** | Family, Attribute, Product, Category, Channel, etc. |
+| **Entity type** | Family, Attribute, Product, Category, Channel, Job, etc. |
| **User name** | Who performed the action. |
| **Timestamp** | When it happened. |
This is the fastest way to answer *"did someone change X recently?"* without opening the history tab on each entity.
-#### Data Transfer
+### Data Transfer
-Status panel for your most recent import and export jobs. Each job shows one of five states:
+Status panel for your most recent import and export jobs. Each row shows the profile code, type (Import / Export / System), rows processed, and one of five states:
| Status | Meaning |
|---|---|
| **Completed** | The job finished successfully. |
+| **Validated** | The job passed validation but hasn't been imported yet. |
| **Processing** | The job is currently running. |
| **Pending** | The job is queued and waiting to start. |
| **Failed** | The job encountered errors. |
-| **Cancelled** | The job was manually cancelled. |
-Click **"View All Jobs"** to open the full **Job Tracker** with per-step progress bars and pause/resume/cancel controls.
+Click **"View All Jobs"** at the bottom of the panel to open the full **Job Tracker** with per-step progress bars and pause / resume / cancel controls.
+
+
+
+---
+
+## Always-on controls
+
+Two controls live on the Dashboard chrome (and every other admin page) rather than inside one of the three bands.
### AI Agent
-A floating **"Open Agenting PIM"** button sits in the bottom-right corner of the Dashboard (and every other admin page). Clicking it opens the conversational AI Agent — type what you need in plain English and it calls the right PIM tool on your behalf.
+A floating **"Open Agentic PIM"** button sits in the bottom-right corner. Clicking it opens the conversational AI Agent — type what you need in plain English and it calls the right PIM tool on your behalf.
::: tip
The AI Agent can create products, enrich content, run data-quality scans, and answer questions about your catalog without you navigating the sidebar. See **[AI Agent Chat](../ai-agent/ai-agent-chat.md)** for the full list of 30+ tools.
@@ -177,14 +172,16 @@ UnoPim supports a **Dark / Light Theme** toggle. Click the sun/moon icon in the
The theme toggle is global. Whichever mode you choose applies everywhere in the admin, not just the Dashboard.
:::
+---
+
## Typical Dashboard workflow
A common way admins use the Dashboard at the start of a shift:
-1. **Check Needs Attention** — clear any urgent alerts (e.g., unenriched products).
-2. **Scan Completeness and Channel Readiness** — pick the weakest channel/locale and plan a cleanup.
-3. **Skim Recent Activity** — confirm overnight jobs finished and teammates' changes make sense.
-4. **Open Data Transfer** — watch any running imports/exports, or click through to the Job Tracker for detail.
+1. **Check Needs Attention** (Overview band) — clear any urgent alerts (e.g., unenriched products).
+2. **Scan Completeness and Channel Readiness** (Analytics band) — pick the weakest channel/locale and plan a cleanup.
+3. **Skim Recent Activity** (Operations band) — confirm overnight jobs finished and teammates' changes make sense.
+4. **Open Data Transfer** (Operations band) — watch any running imports/exports, or click through to the Job Tracker for detail.
5. **Launch work** — use a Welcome Banner quick action or the AI Agent button to start the day's tasks.
Following this flow turns the Dashboard into a daily triage screen rather than just a landing page.
diff --git a/src/2.0/magic-ai/platforms.md b/src/2.0/magic-ai/platforms.md
index 2cddaf3f..09a36b97 100644
--- a/src/2.0/magic-ai/platforms.md
+++ b/src/2.0/magic-ai/platforms.md
@@ -39,7 +39,7 @@ You can register **as many Platforms as you like**. A common setup is one premiu
Click the **Add Platform** button in the top-right corner. A modal opens with the following fields:
-1. **Provider** — Select from the dropdown (OpenAI, Anthropic, Gemini, Ollama, Groq, etc.).
+1. **Provider** — Select from the dropdown. UnoPim supports 11 providers (see [Supported Providers](#supported-providers) below).
2. **Label** — A descriptive name such as *"OpenAI Production"* or *"Gemini Translation"*. This is what you'll see in the Settings dropdowns.
3. **API Key** — Paste the key from your provider account. It's encrypted before it hits the database.
4. **Models** — Multi-select the models you want to expose. Only the models you tick here appear in the downstream Text / Image / Translation / Agentic PIM dropdowns on the Settings page.
@@ -51,6 +51,56 @@ Click the **Add Platform** button in the top-right corner. A modal opens with th
API credentials are stored with encrypted credential storage for security. Your API keys are never stored in plain text.
:::
+## Supported Providers
+
+The **Provider** dropdown in the Add / Edit Platform modal exposes these 11 options. Each one is a distinct integration with its own credential format, model catalogue, and capability set (text-only vs. text + image, hosted vs. self-hosted, etc.). Click any row for the full per-provider page (models confirmed working with UnoPim, how to get the key, step-by-step configuration, capability routing, tips and limits).
+
+| # | Provider | ID | What it is | Typical use |
+|---|----------|----|------------|-------------|
+| 1 | **[OpenAI](./providers/openai.md)** | `openai` | OpenAI's hosted models — GPT-4o family for text, DALL-E 2/3 for images. | Default choice when you want best-in-class quality for both content generation and image generation in one place. |
+| 2 | **[Anthropic](./providers/anthropic.md)** | `anthropic` | Claude model family (Opus, Sonnet, Haiku). Text generation and reasoning only — no image generation. | High-quality long-form descriptions, careful reasoning, agentic workflows. Pair with another provider for images. |
+| 3 | **[Google Gemini](./providers/gemini.md)** | `gemini` | Google's Gemini family — `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.0-flash`, `gemini-1.5-flash-latest`, `gemini-1.5-pro`. Supports text and image generation. | Cost-efficient translation and bulk content; the `flash` tiers are popular for translation workloads. |
+| 4 | **[Groq](./providers/groq.md)** | `groq` | Groq-hosted open-source models running on custom inference hardware — DeepSeek-R1 distill, Llama 3.1, Qwen 3, Kimi K2, GPT-OSS, and Groq Compound. Text only. | Very fast, low-latency text generation when speed matters more than absolute quality. |
+| 5 | **[Ollama](./providers/ollama.md)** | `ollama` | Local / self-hosted runner for open-source models — Llama 2/3, Mistral, Qwen, DeepSeek-Coder, Phi, LLaVA. | Air-gapped or privacy-sensitive deployments where data must not leave the network. Requires a running Ollama server. |
+| 6 | **[xAI (Grok)](./providers/xai.md)** | `xai` | xAI's Grok models. Supports text and image generation. | Alternative to OpenAI / Anthropic with its own personality; useful as a fallback or A/B option. |
+| 7 | **[Mistral](./providers/mistral.md)** | `mistral` | Mistral AI's hosted models (Mistral Large, Mistral Small, Codestral, etc.). Text only. | European-hosted alternative; strong multilingual performance, useful for translation into European locales. |
+| 8 | **[DeepSeek](./providers/deepseek.md)** | `deepseek` | DeepSeek's hosted models (`deepseek-chat`, `deepseek-reasoner`). Text only, strong on reasoning and code-style tasks. | Cost-aggressive option for bulk text generation and reasoning-heavy prompts. |
+| 9 | **[Azure OpenAI](./providers/azure.md)** | `azure` | OpenAI models served through Microsoft Azure with an enterprise SLA, regional hosting, and Azure-managed keys. | Enterprises that already standardise on Azure for compliance and billing. |
+| 10 | **[OpenRouter](./providers/openrouter.md)** | `openrouter` | A meta-provider that proxies to 100+ models behind a single API key. | One-stop access when you want to experiment across many models without registering each provider individually. |
+| 11 | **[Custom (OpenAI-compatible)](./providers/custom.md)** | `custom` | Any third-party endpoint that speaks the OpenAI Chat Completions API — vLLM, LM Studio, LiteLLM proxy, in-house gateways, etc. | Bring-your-own infrastructure. Enter the base URL and the API key; UnoPim treats it like any other OpenAI-style provider. |
+
+> **Want a deep dive?** The [Providers index](./providers/) page has a capability matrix and a decision guide for choosing between them.
+
+### Choosing a provider
+
+Three questions narrow the choice:
+
+- **Do you need image generation?** Only **OpenAI**, **Gemini**, and **xAI (Grok)** generate images. For Magic AI → Settings → **Image Generation**, pick one of those.
+- **Does data have to stay on-prem?** Use **Ollama** (local model server) or a **Custom (OpenAI-compatible)** endpoint pointed at your own gateway.
+- **What capability is the bottleneck — quality, speed, or cost?** Quality → OpenAI / Anthropic / Gemini-Pro. Speed → Groq, Gemini-Flash. Cost → DeepSeek, Gemini-Flash, Mistral-Small.
+
+You don't have to commit to one. Register multiple Platforms and route each capability separately under **Magic AI → Settings**:
+
+- **Text Generation** → e.g. Anthropic `claude-sonnet`
+- **Image Generation** → e.g. OpenAI `dall-e-3`
+- **Translation** → e.g. Gemini `gemini-1.5-flash`
+- **Agentic PIM** → e.g. OpenAI `gpt-4o`
+
+::: tip
+Register a cheap, fast provider (Gemini Flash, Groq, DeepSeek) for translation and a premium provider (Claude, GPT-4o) for content generation. The split typically cuts translation cost by 80–95% with no quality drop on short locale-string tasks.
+:::
+
+### Credentials by provider
+
+Different providers expect different fields. Most need just an **API Key**, but a few have extras:
+
+- **OpenAI / Anthropic / Gemini / Groq / xAI / Mistral / DeepSeek / OpenRouter** — single **API Key** field.
+- **Azure OpenAI** — API Key plus the **Azure endpoint URL** and the **deployment name** you created in the Azure portal.
+- **Ollama** — usually no API key; you supply the **Base URL** of your Ollama server (e.g. `http://localhost:11434`).
+- **Custom (OpenAI-compatible)** — **Base URL** of your endpoint plus an **API Key** if your gateway requires one.
+
+The Add / Edit Platform modal renders only the fields relevant to the selected Provider, so you won't be prompted for an Azure deployment name when you pick OpenAI, for example.
+
## Platform Actions
- **Star icon** — Sets the platform as the **default**. Anywhere the Settings page shows *"Use Default Platform"*, it resolves to the starred platform. Only one can be the default at a time.
diff --git a/src/2.0/magic-ai/providers/anthropic.md b/src/2.0/magic-ai/providers/anthropic.md
new file mode 100644
index 00000000..f139f2b1
--- /dev/null
+++ b/src/2.0/magic-ai/providers/anthropic.md
@@ -0,0 +1,64 @@
+# Anthropic (Claude)
+
+> **Provider ID:** `anthropic`
+> **Hosted by:** Anthropic (api.anthropic.com)
+> **Best for:** Long-form, careful prose. Best-in-class for the AI Agent because of strong tool-use and reasoning.
+
+## What is Anthropic?
+
+Anthropic builds the **Claude** family of LLMs. UnoPim integrates Claude via the unified adapter so the wand icons, auto-translation, and the AI Agent can all route through it. Claude is **text-only** in UnoPim — it does not generate images.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `claude-sonnet-4-x`, `claude-opus-4-x` |
+| Image Generation | ✗ | — (use OpenAI / Gemini / xAI for images) |
+| Translation | ✓ | `claude-haiku-4-x` |
+| Agentic PIM | ✓ | `claude-sonnet-4-x` |
+
+## Supported models
+
+The Claude family is organised by tier and version. UnoPim dynamically lists whatever your account is entitled to. The three tiers, from largest to fastest:
+
+- **Opus** — flagship tier. Best long-form descriptions, complex reasoning, the best agent quality. Most expensive.
+- **Sonnet** — balanced tier. Production sweet spot for content and the AI Agent.
+- **Haiku** — fast, cheap. Best fit for translation and short copy.
+
+::: tip
+Always include the version suffix when you select a model (e.g. `claude-sonnet-4-6`, `claude-opus-4-7`). Anthropic deprecates older versions on a published schedule, so anchor the Platform on the latest version your account has access to.
+:::
+
+## Get the credentials
+
+1. Sign in at [https://console.anthropic.com/](https://console.anthropic.com/).
+2. Open **Settings → API Keys**.
+3. Click **Create Key**, label it (e.g. `unopim-prod`), and copy the secret — shown once.
+4. Make sure your workspace has billing enabled and a usage cap set, otherwise Claude calls return a 402.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Anthropic`
+ - **Label** = e.g. *"Claude Content"*
+ - **API Key** = paste the key
+ - **Models** = tick the Sonnet and Haiku versions you plan to use; add Opus only if you actually need flagship quality.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Anthropic, Model = a Sonnet version. Claude Sonnet writes notably better long-form descriptions than equivalently priced GPT models — worth A/B-testing if your catalogue is description-heavy.
+- **Image Generation** → **Not supported.** Leave this routed to OpenAI / Gemini / xAI.
+- **Translation** → Platform = Anthropic, Model = a Haiku version. Cheapest Claude tier, plenty good for short locale strings.
+- **Agentic PIM** → Platform = Anthropic, Model = a Sonnet version. Sonnet has very reliable tool-use and follows the Agentic PIM safety constraints well.
+
+## Tips and limits
+
+- **Token-budget aware.** Claude responses are charged per input + output token. For the AI Agent, lower **Max Agent Steps Per Turn** and **Token Budget** if costs creep.
+- **No image generation.** Pair Anthropic for text with another provider for images. UnoPim has no problem mixing — they're independent settings.
+- **Strong refusal behaviour.** Claude is more likely than other models to push back on borderline marketing copy. If a prompt keeps getting refused, soften the wording in your Custom Prompt under **Magic AI → Prompts**.
+- **Region.** All calls go through `api.anthropic.com`. For EU-residency Claude, use Anthropic's AWS Bedrock route via a [Custom (OpenAI-compatible)](./custom.md) gateway that fronts Bedrock.
diff --git a/src/2.0/magic-ai/providers/azure.md b/src/2.0/magic-ai/providers/azure.md
new file mode 100644
index 00000000..010d9e53
--- /dev/null
+++ b/src/2.0/magic-ai/providers/azure.md
@@ -0,0 +1,73 @@
+# Azure OpenAI
+
+> **Provider ID:** `azure`
+> **Hosted by:** Microsoft Azure (your-resource.openai.azure.com)
+> **Best for:** Enterprises already standardised on Azure. Same OpenAI models as the OpenAI provider, but with Azure billing, regional residency, and enterprise SLAs.
+
+## What is Azure OpenAI?
+
+**Azure OpenAI** is Microsoft's hosted version of OpenAI's models. You create an Azure OpenAI resource, deploy specific models inside it, and call them through your Azure endpoint. Quality matches the equivalent OpenAI model; the difference is Azure-managed infrastructure: you pick a region (e.g. `eastus`, `westeurope`), use Azure billing, and inherit Azure AD / private endpoints if you need them.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended deployments |
+|------------|:---------:|-------------------------|
+| Text Generation | ✓ | `gpt-4o`, `gpt-4o-mini` deployments |
+| Image Generation | ✓ | `dall-e-3` deployment |
+| Translation | ✓ | `gpt-4o-mini` deployment |
+| Agentic PIM | ✓ | `gpt-4o` deployment |
+
+## Supported models (deployments)
+
+Azure doesn't expose models directly — you create **deployments** of OpenAI models in your Azure resource, each with a deployment name you choose. UnoPim sends requests to the deployment name, not the model name. Common deployments:
+
+- A **`gpt-4o`** deployment for content generation and the AI Agent.
+- A **`gpt-4o-mini`** deployment for translation and bulk content.
+- A **`dall-e-3`** deployment for image generation (only available in select regions).
+
+::: tip
+Match Azure region to your data-residency requirement. For EU residency, deploy in `francecentral`, `northeurope`, `swedencentral`, or `westeurope`. DALL-E availability is regional and changes — check the Azure region table before you commit.
+:::
+
+## Get the credentials
+
+In the [Azure portal](https://portal.azure.com/):
+
+1. Create or open an **Azure OpenAI** resource.
+2. Note the **Endpoint URL** — looks like `https://my-unopim.openai.azure.com/`.
+3. Open **Keys and Endpoint** → copy `KEY 1` (or `KEY 2`).
+4. Open **Model deployments** in the resource (or in [Azure AI Studio](https://oai.azure.com/)) and **Create new deployment** for each model you need (`gpt-4o`, `dall-e-3`, etc.). Note the **Deployment name** — that's what UnoPim calls.
+5. Note the **API version** you want to pin (e.g. `2024-08-01-preview`). Azure ties feature support to API versions.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Azure OpenAI`
+ - **Label** = e.g. *"Azure EU Production"*
+ - **API Key** = paste `KEY 1`
+ - **Endpoint URL** = `https://my-unopim.openai.azure.com/` (no trailing path)
+ - **API Version** = e.g. `2024-08-01-preview`
+ - **Models / Deployments** = enter each deployment name you created in Azure (these are *deployment* names, not model names).
+ - **Status** = `Enabled`
+3. **Save**.
+
+::: tip
+If a UnoPim feature returns *"deployment not found"*, the deployment name in UnoPim doesn't match the deployment name inside the Azure resource. Names are case-sensitive.
+:::
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Azure OpenAI, Model = your `gpt-4o` deployment name.
+- **Image Generation** → Platform = Azure OpenAI, Model = your `dall-e-3` deployment name (only if that deployment exists in your region).
+- **Translation** → Platform = Azure OpenAI, Model = your `gpt-4o-mini` deployment name.
+- **Agentic PIM** → Platform = Azure OpenAI, Model = your `gpt-4o` deployment name.
+
+## Tips and limits
+
+- **Quotas are per-deployment.** Azure caps tokens-per-minute and requests-per-minute per *deployment*, not per *resource*. If you hit 429, raise quota in the Azure portal or create a second deployment in another region.
+- **Private endpoints.** For locked-down VNets, configure a private endpoint on the Azure OpenAI resource and put UnoPim's app server inside the same VNet — UnoPim doesn't need any code changes.
+- **DALL-E availability.** DALL-E 3 is region-restricted on Azure. If your tenant region doesn't have it, route image generation to the public OpenAI provider or Gemini / xAI.
+- **Versioning.** Pin the API version. Azure occasionally retires preview API versions; if Magic AI suddenly errors after weeks of working, the version may have been deprecated — bump it on the Platform page.
diff --git a/src/2.0/magic-ai/providers/custom.md b/src/2.0/magic-ai/providers/custom.md
new file mode 100644
index 00000000..5329e590
--- /dev/null
+++ b/src/2.0/magic-ai/providers/custom.md
@@ -0,0 +1,85 @@
+# Custom (OpenAI-compatible)
+
+> **Provider ID:** `custom`
+> **Hosted by:** You (any endpoint that speaks the OpenAI Chat Completions API)
+> **Best for:** Bring-your-own gateways — vLLM, LM Studio, LiteLLM, Bedrock proxies, in-house routers, fine-tuned models behind a private URL.
+
+## What is Custom (OpenAI-compatible)?
+
+The **Custom** provider is an escape hatch. If a model server speaks the **OpenAI Chat Completions** API surface — `/v1/chat/completions`, `/v1/embeddings`, optionally `/v1/images/generations` — UnoPim can call it through this provider. You supply the **Base URL** and (optionally) an **API Key**, and UnoPim treats it like any other vendor.
+
+This is how you wire up:
+
+- **vLLM** or **TGI** serving a Llama / Qwen / Mistral fine-tune behind your firewall.
+- **LM Studio** running a local model and exposing the OpenAI-compatible endpoint.
+- **LiteLLM** proxy that fronts AWS Bedrock, Vertex AI, or any provider that lacks a native UnoPim integration.
+- An **internal API gateway** that adds auth, logging, or rate limiting before calling a provider.
+- A **fine-tuned** model your team trained and is hosting privately.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Depends on |
+|------------|:---------:|------------|
+| Text Generation | ✓ | Endpoint exposes `/v1/chat/completions` |
+| Image Generation | ✓* | Endpoint exposes `/v1/images/generations`. Most local servers do not. |
+| Translation | ✓ | Endpoint exposes `/v1/chat/completions` |
+| Agentic PIM | ✓* | Endpoint must support OpenAI **tool calls** for the AI Agent's tool loop. Many open-source servers handle this only partially. |
+
+`✓*` = supported only if the upstream server actually implements that part of the API surface.
+
+## Supported models
+
+There's no fixed list — whatever your gateway exposes. UnoPim sends the model name verbatim in the request body, so the value you put in Models must match exactly what your endpoint expects.
+
+Examples:
+
+- vLLM serving `meta-llama/Meta-Llama-3.1-70B-Instruct` → enter that exact ID.
+- LiteLLM fronting Bedrock Claude → enter `bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0`.
+- LM Studio with a Mistral GGUF → enter the model alias your LM Studio shows.
+
+## Get the endpoint
+
+You provide it. Two pieces:
+
+1. **Base URL** — the root of the OpenAI-compatible API, e.g. `https://gateway.internal.example.com/v1`. Include the `/v1` if your server uses it; UnoPim concatenates the path suffix.
+2. **API Key** — only if the endpoint requires authentication. If the endpoint is unauthenticated (e.g. localhost LM Studio), leave the field blank.
+
+Confirm the endpoint works first:
+
+```bash
+curl https://gateway.internal.example.com/v1/chat/completions \
+ -H "Authorization: Bearer YOUR_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{"model":"your-model-id","messages":[{"role":"user","content":"hello"}]}'
+```
+
+If that returns a JSON response, UnoPim will work too.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Custom (OpenAI-compatible)`
+ - **Label** = e.g. *"vLLM Llama-70B"*
+ - **Base URL** = your endpoint root, e.g. `https://gateway.internal.example.com/v1`
+ - **API Key** = your gateway's key, or leave blank
+ - **Models** = the exact model IDs your endpoint expects
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Custom, Model = the ID you registered.
+- **Image Generation** → only enable if your gateway implements `/v1/images/generations` — most don't.
+- **Translation** → Platform = Custom, Model = a small / fast model.
+- **Agentic PIM** → Platform = Custom, Model = a tool-use-capable upstream. Test with a simple "list my products" prompt before exposing to users; some open-source servers return malformed tool-call JSON.
+
+## Tips and limits
+
+- **The compatibility surface is partial.** "OpenAI-compatible" is rarely 100%. Confirm streaming, tool calls, and JSON mode all work end-to-end before relying on Custom in production.
+- **Network reachability.** UnoPim's PHP-FPM workers must be able to reach the Base URL. If you set a private URL, make sure the application server's egress permits it.
+- **Self-signed certs.** If your gateway uses a self-signed TLS cert, either install the cert in the UnoPim app server's trust store or terminate TLS at a reverse proxy with a real cert.
+- **Auth schemes.** UnoPim sends the API key as `Authorization: Bearer `. If your gateway uses a custom header (`x-api-key`, etc.), front it with a tiny proxy that rewrites the header.
+- **Rate-limit observability.** Custom endpoints don't surface usage in OpenAI's standard format. Plan to monitor spend / latency on your gateway, not in UnoPim.
diff --git a/src/2.0/magic-ai/providers/deepseek.md b/src/2.0/magic-ai/providers/deepseek.md
new file mode 100644
index 00000000..7ee44e8e
--- /dev/null
+++ b/src/2.0/magic-ai/providers/deepseek.md
@@ -0,0 +1,62 @@
+# DeepSeek
+
+> **Provider ID:** `deepseek`
+> **Hosted by:** DeepSeek (api.deepseek.com)
+> **Best for:** Aggressive cost optimisation. DeepSeek's hosted models are typically the cheapest per-million-token option among first-party providers in this list.
+
+## What is DeepSeek?
+
+[DeepSeek](https://www.deepseek.com/) is a Chinese AI lab whose models punch well above their price. The DeepSeek API is OpenAI-compatible, so UnoPim plugs in cleanly. Text-only — no image generation.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `deepseek-chat`, `deepseek-reasoner` |
+| Image Generation | ✗ | — |
+| Translation | ✓ | `deepseek-chat` |
+| Agentic PIM | ✓ | `deepseek-reasoner` |
+
+## Supported models
+
+DeepSeek's hosted catalogue, as exposed in the Models multi-select:
+
+- **`deepseek-chat`** — general-purpose chat model. Default for content and translation.
+- **`deepseek-reasoner`** — reasoning-tuned (R1-family). Best when you need careful multi-step output, including the AI Agent.
+
+::: tip
+DeepSeek Reasoner emits visible *thinking* tokens before the final answer. UnoPim's adapter strips them when streaming into a field, but they still cost tokens — reflect that in your **Token Budget** if you route the AI Agent to Reasoner.
+:::
+
+## Get the credentials
+
+1. Sign in at [https://platform.deepseek.com/](https://platform.deepseek.com/).
+2. Open **API Keys** in the dashboard, click **Create new API key**, copy it.
+3. Add credits to your account on the **Top up** page — you pay as you go.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `DeepSeek`
+ - **Label** = e.g. *"DeepSeek Cheap"*
+ - **API Key** = paste
+ - **Models** = tick `deepseek-chat` and `deepseek-reasoner`.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = DeepSeek, Model = `deepseek-chat`.
+- **Image Generation** → **Not supported.** Route to OpenAI / Gemini / xAI.
+- **Translation** → Platform = DeepSeek, Model = `deepseek-chat`. Often 5-10× cheaper than equivalent OpenAI / Anthropic translation.
+- **Agentic PIM** → Platform = DeepSeek, Model = `deepseek-reasoner`. Tool-use is decent; for complex catalogue-wide plans, premium providers (`gpt-4o`, `claude-sonnet-4-x`) still produce more reliable plans.
+
+## Tips and limits
+
+- **Headquartered in China.** Some compliance regimes (US federal, EU sovereign data) explicitly disallow Chinese-hosted endpoints. Check before routing customer or pricing data through DeepSeek.
+- **Cost-per-token.** Lowest in this provider list at the time of writing. If translation is your hot path, this is the easiest place to save money.
+- **Reasoner thinking tokens.** Reasoner traces inflate output token counts. For chat-style use it's fine; for the Agent loop, set conservative `Max Agent Steps Per Turn` (e.g. `3`) to bound spend.
+- **No image generation.** Pair DeepSeek for text with another provider for images.
diff --git a/src/2.0/magic-ai/providers/gemini.md b/src/2.0/magic-ai/providers/gemini.md
new file mode 100644
index 00000000..7a7ce3f0
--- /dev/null
+++ b/src/2.0/magic-ai/providers/gemini.md
@@ -0,0 +1,66 @@
+# Google Gemini
+
+> **Provider ID:** `gemini`
+> **Hosted by:** Google (generativelanguage.googleapis.com)
+> **Best for:** High-volume, low-cost translation and bulk content. The Flash tier is hard to beat on price-per-token.
+
+## What is Gemini?
+
+**Gemini** is Google's multi-modal LLM family, served by Google AI Studio (free / paid keys) or Vertex AI (enterprise). UnoPim uses the AI Studio path by default — give it a single API key and it uses any model your project has access to.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `gemini-2.5-pro`, `gemini-2.5-flash` |
+| Image Generation | ✓ | `gemini-2.5-flash` (image output) |
+| Translation | ✓ | `gemini-1.5-flash-latest`, `gemini-2.5-flash` |
+| Agentic PIM | ✓ | `gemini-2.5-pro` |
+
+## Supported models
+
+UnoPim lists these Gemini text / multi-modal models in the Models multi-select:
+
+- **`gemini-2.5-pro`** — top-tier reasoning and content quality. Best for the AI Agent.
+- **`gemini-2.5-flash`** — fast multi-modal. Strong default for content generation; supports image generation in newer revisions.
+- **`gemini-2.0-flash`** — cost-aggressive workhorse for translation.
+- **`gemini-1.5-flash-latest`** — long-stable Flash tier. Excellent for bulk translation jobs.
+- **`gemini-1.5-pro`** — long-context Pro tier. Useful when prompts include large reference data.
+
+## Get the credentials
+
+1. Sign in at [https://aistudio.google.com/](https://aistudio.google.com/).
+2. Click **Get API key** in the top-right.
+3. Either pick an existing Google Cloud project or create a new one, then click **Create API key**.
+4. Copy the key — it's shown in plain text and you can retrieve it later from the same screen if needed.
+
+::: tip
+Free-tier keys have a low RPM cap (currently 15 RPM on Flash). For production translation workloads, enable billing on the underlying Google Cloud project so the key promotes to the paid tier automatically.
+:::
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Google Gemini`
+ - **Label** = e.g. *"Gemini Translation"*
+ - **API Key** = paste the AI Studio key
+ - **Models** = at minimum tick `gemini-1.5-flash-latest` for translation and `gemini-2.5-pro` for content.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Gemini, Model = `gemini-2.5-pro` or `gemini-2.5-flash`.
+- **Image Generation** → Platform = Gemini, Model = `gemini-2.5-flash` (only if your account has image-output enabled).
+- **Translation** → Platform = Gemini, Model = `gemini-1.5-flash-latest`. This is the most common cost-saving move — point translation at Flash and content at a premium provider.
+- **Agentic PIM** → Platform = Gemini, Model = `gemini-2.5-pro`.
+
+## Tips and limits
+
+- **Region & residency.** AI Studio routes worldwide. For data residency, use Vertex AI through the [Custom (OpenAI-compatible)](./custom.md) provider behind a LiteLLM proxy.
+- **Safety filters.** Gemini will refuse content that trips its Safety Filters. If specific product copy keeps getting blocked (e.g. weapons / health claims), reword the Custom Prompt rather than disabling the filter.
+- **Free tier rate limits.** A free key works for evaluation but will throttle a real catalogue. Enable billing on the project to lift caps.
+- **Image output.** The Gemini image-output capability is rolled out per-account; if `gemini-2.5-flash` doesn't return images, your project hasn't been granted image generation yet — request access in AI Studio or fall back to OpenAI for images.
diff --git a/src/2.0/magic-ai/providers/groq.md b/src/2.0/magic-ai/providers/groq.md
new file mode 100644
index 00000000..2de4ea7c
--- /dev/null
+++ b/src/2.0/magic-ai/providers/groq.md
@@ -0,0 +1,64 @@
+# Groq
+
+> **Provider ID:** `groq`
+> **Hosted by:** Groq (api.groq.com)
+> **Best for:** Latency-sensitive use cases. Groq's custom LPU hardware serves open-source models at sub-second response times.
+
+## What is Groq?
+
+**Groq** runs popular open-source models (Llama, Qwen, DeepSeek, Kimi, GPT-OSS) on its own LPU-based inference hardware. Same models as Ollama / OpenRouter, but with extreme throughput. Useful when the AI Agent loops through many tool calls and you want the user-facing latency to feel instant. Text-only — no image generation.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `llama-3.1-8b-instant`, `qwen/qwen3-32b` |
+| Image Generation | ✗ | — |
+| Translation | ✓ | `llama-3.1-8b-instant` |
+| Agentic PIM | ✓ | `groq/compound`, `qwen/qwen3-32b` |
+
+## Supported models
+
+UnoPim's Groq integration exposes these model IDs in the Models multi-select:
+
+- **`deepseek-r1-distill-llama-70b`** — DeepSeek's R1 reasoning distilled into a Llama-70B. Strong on multi-step reasoning, good Agent default.
+- **`llama-3.1-8b-instant`** — small, very fast. Translation and short content.
+- **`openai/gpt-oss-120b`** — OpenAI's open-weights GPT-OSS, 120B parameters. Heavy but high quality.
+- **`openai/gpt-oss-20b`** — smaller GPT-OSS variant. Good balance.
+- **`groq/compound`** — Groq's compound model (mix-of-experts style). Strong general default.
+- **`qwen/qwen3-32b`** — Alibaba's Qwen 3, 32B. Solid multilingual coverage; useful for translation.
+- **`moonshotai/kimi-k2-instruct-0905`** — Kimi K2. Good reasoning, large context.
+
+## Get the credentials
+
+1. Sign in at [https://console.groq.com/](https://console.groq.com/).
+2. Open **API Keys** in the sidebar.
+3. Click **Create API Key**, label it, and copy.
+4. Free tier ships generous RPM, so you can evaluate without entering billing.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Groq`
+ - **Label** = e.g. *"Groq Fast"*
+ - **API Key** = paste
+ - **Models** = tick `llama-3.1-8b-instant` and `groq/compound` to start; add others as needed.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Groq, Model = `groq/compound`. Use when you want responses to *feel* instant in the admin UI.
+- **Image Generation** → **Not supported.** Route to a different Platform.
+- **Translation** → Platform = Groq, Model = `llama-3.1-8b-instant`. Probably the cheapest fast translation option in this list.
+- **Agentic PIM** → Platform = Groq, Model = `qwen/qwen3-32b` or `groq/compound`. Tool-use quality is good but not at GPT-4o / Claude Sonnet level — keep complex multi-step plans on a premium provider.
+
+## Tips and limits
+
+- **No image generation.** Pair with OpenAI / Gemini for images.
+- **Token-per-second focus.** Groq's value is latency, not raw quality. For accuracy-critical content (legal copy, regulated industries), still use a frontier model.
+- **Per-key TPM cap.** The free tier caps tokens per minute aggressively. Production workloads should move to a paid plan.
+- **Open-source model behaviour.** Some open-source models occasionally produce inconsistent JSON for tool calls. If the AI Agent flakes, switch the Agent's model to `qwen/qwen3-32b` or `groq/compound` — they handle structured output more reliably.
diff --git a/src/2.0/magic-ai/providers/index.md b/src/2.0/magic-ai/providers/index.md
new file mode 100644
index 00000000..883ba206
--- /dev/null
+++ b/src/2.0/magic-ai/providers/index.md
@@ -0,0 +1,49 @@
+# AI Providers
+
+UnoPim supports **11 AI providers** under Magic AI. Each one is a separate integration with its own credentials, model catalogue, and capabilities. This section documents every provider in detail — how to obtain credentials, which models work with UnoPim, and how to wire each one into the Magic AI features (Text Generation, Image Generation, Translation, Agentic PIM / AI Agent).
+
+## Provider matrix
+
+A quick comparison of capabilities. **Text** = wand icons on text fields, **Image** = wand icons on image / gallery fields, **Translation** = auto-translation on save and the bulk translation command, **Agentic PIM** = AI Agent Chat and the worker pipelines.
+
+| Provider | Text | Image | Translation | Agentic PIM | Hosted / Local |
+|----------|:----:|:-----:|:-----------:|:-----------:|----------------|
+| [OpenAI](./openai.md) | ✓ | ✓ | ✓ | ✓ | Hosted (OpenAI) |
+| [Anthropic](./anthropic.md) | ✓ | | ✓ | ✓ | Hosted (Anthropic) |
+| [Google Gemini](./gemini.md) | ✓ | ✓ | ✓ | ✓ | Hosted (Google) |
+| [Groq](./groq.md) | ✓ | | ✓ | ✓ | Hosted (Groq) |
+| [Ollama](./ollama.md) | ✓ | | ✓ | ✓ | Local / self-hosted |
+| [xAI (Grok)](./xai.md) | ✓ | ✓ | ✓ | ✓ | Hosted (xAI) |
+| [Mistral](./mistral.md) | ✓ | | ✓ | ✓ | Hosted (Mistral) |
+| [DeepSeek](./deepseek.md) | ✓ | | ✓ | ✓ | Hosted (DeepSeek) |
+| [Azure OpenAI](./azure.md) | ✓ | ✓ | ✓ | ✓ | Hosted (Microsoft Azure) |
+| [OpenRouter](./openrouter.md) | ✓ | ✓ | ✓ | ✓ | Hosted (proxy) |
+| [Custom (OpenAI-compatible)](./custom.md) | ✓ | ✓* | ✓ | ✓ | Bring-your-own |
+
+`✓*` for Custom = depends on whether the upstream endpoint behind your custom URL supports image generation.
+
+## How to read each provider page
+
+Every provider page follows the same structure:
+
+1. **What it is** — one paragraph summary.
+2. **Capabilities in UnoPim** — capability matrix specific to this provider.
+3. **Supported models** — the models confirmed to work with UnoPim, grouped by capability (text, image).
+4. **Get the credentials** — where to sign up and how to fetch the API key.
+5. **Configure in UnoPim** — step-by-step Add Platform walkthrough.
+6. **Use it with each Magic AI feature** — how to route this provider's models into Text / Image / Translation / Agentic PIM.
+7. **Tips and limits** — rate limits, cost notes, gotchas.
+
+## Choosing a provider
+
+Three questions narrow the list quickly:
+
+- **Need image generation?** Only **OpenAI**, **Gemini**, **xAI**, **Azure OpenAI**, and **OpenRouter** generate images. The others are text-only.
+- **Data must stay on-prem?** Use **[Ollama](./ollama.md)** (local model server) or **[Custom (OpenAI-compatible)](./custom.md)** pointed at your own gateway.
+- **Optimising for cost?** **[DeepSeek](./deepseek.md)**, **[Gemini Flash](./gemini.md)**, **[Groq](./groq.md)**, and **[Mistral Small](./mistral.md)** are the budget tiers. Pair them with a premium provider for content generation.
+
+You don't have to commit to one. Register multiple Platforms and split capabilities across them in **Magic AI → Settings**.
+
+::: tip
+A common production split: **Anthropic Claude** for content (best long-form quality), **OpenAI DALL-E 3** for images, **Gemini 1.5 Flash** for translation, **OpenAI GPT-4o** for the AI Agent. Translation alone is usually 70%+ of token volume — moving it to a flash-tier model typically cuts the bill 80–95%.
+:::
diff --git a/src/2.0/magic-ai/providers/mistral.md b/src/2.0/magic-ai/providers/mistral.md
new file mode 100644
index 00000000..0565a758
--- /dev/null
+++ b/src/2.0/magic-ai/providers/mistral.md
@@ -0,0 +1,62 @@
+# Mistral
+
+> **Provider ID:** `mistral`
+> **Hosted by:** Mistral AI (api.mistral.ai)
+> **Best for:** European-hosted text generation with strong multilingual coverage — a good fit for translation into French, Spanish, German, Italian, and other European locales.
+
+## What is Mistral?
+
+[Mistral AI](https://mistral.ai/) is a French AI lab. Their hosted API serves the Mistral and Codestral model families. Text-only — Mistral's UnoPim integration does not generate images.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `mistral-large-latest`, `mistral-medium-latest` |
+| Image Generation | ✗ | — |
+| Translation | ✓ | `mistral-small-latest` |
+| Agentic PIM | ✓ | `mistral-large-latest` |
+
+## Supported models
+
+UnoPim's Models multi-select reflects what Mistral exposes for your account. Common choices:
+
+- **`mistral-large-latest`** — flagship tier. Best content quality and tool-use.
+- **`mistral-medium-latest`** — middle tier. Good production default.
+- **`mistral-small-latest`** — fast / cheap. Strong translation pick, especially for European target locales.
+- **`open-mistral-7b`** / **`open-mixtral-8x7b`** — open-weights tiers. Cheaper still; suitable for bulk content where quality variance is acceptable.
+- **`codestral-latest`** — code-flavoured model. Only relevant if your Custom Prompts deliberately produce code-shaped output.
+
+## Get the credentials
+
+1. Sign in at [https://console.mistral.ai/](https://console.mistral.ai/).
+2. Open **API Keys** and **Create new key**.
+3. Confirm billing on the **Workspace** settings page if you exceeded the free trial.
+4. Copy the key.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Mistral`
+ - **Label** = e.g. *"Mistral EU"*
+ - **API Key** = paste
+ - **Models** = at minimum tick `mistral-large-latest` and `mistral-small-latest`.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Mistral, Model = `mistral-large-latest`.
+- **Image Generation** → **Not supported.** Route to OpenAI / Gemini / xAI.
+- **Translation** → Platform = Mistral, Model = `mistral-small-latest`. Particularly strong for fr / es / de / it locales.
+- **Agentic PIM** → Platform = Mistral, Model = `mistral-large-latest`. Tool-use is reliable on Large; smaller tiers can occasionally produce malformed JSON.
+
+## Tips and limits
+
+- **EU residency.** Mistral is hosted in the EU, which makes it easier to defend under GDPR than US-hosted providers. If residency is a deal-breaker, Mistral or [Azure OpenAI](./azure.md) (with an EU region) are the practical options.
+- **No image generation.** Pair Mistral for text with another provider for images.
+- **Multilingual prompts.** Mistral handles non-English source prompts well, so you can write Custom Prompts in French / German if your editorial team prefers — Mistral won't drift the way some English-trained models do.
+- **Latency.** Mistral Large is slower than Mistral Small by 2-3×. Use Small for translation to keep auto-translate-on-save snappy.
diff --git a/src/2.0/magic-ai/providers/ollama.md b/src/2.0/magic-ai/providers/ollama.md
new file mode 100644
index 00000000..230b023b
--- /dev/null
+++ b/src/2.0/magic-ai/providers/ollama.md
@@ -0,0 +1,71 @@
+# Ollama
+
+> **Provider ID:** `ollama`
+> **Hosted by:** You (self-hosted, default `http://localhost:11434`)
+> **Best for:** On-prem / air-gapped deployments where product data must not leave the network.
+
+## What is Ollama?
+
+[Ollama](https://ollama.com/) is a self-hosted runner for open-source models. You install Ollama on a server, pull models locally, and Ollama exposes an HTTP endpoint that UnoPim calls. No API key by default — the only secret is network reachability. Text-only — Ollama in UnoPim is not used for image generation.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `llama3`, `qwen` |
+| Image Generation | ✗ | — |
+| Translation | ✓ | `mistral`, `llama3` |
+| Agentic PIM | ✓ | `llama3`, `qwen` |
+
+## Supported models
+
+The Ollama integration in UnoPim is confirmed working with:
+
+- **`llama2`** / **`llama3`** — Meta's Llama family. `llama3` is the better default; `llama2` only if your hardware is constrained.
+- **`mistral`** — Mistral 7B. Lightweight, good for translation.
+- **`qwen`** — Alibaba's Qwen. Strong multilingual; particularly good for non-Latin locales.
+- **`deepseek-coder`** — code-flavoured model. Use only if your Custom Prompts ask for code-like output (e.g. structured JSON descriptions).
+- **`phi`** — Microsoft's small / efficient model. Useful on lower-spec hardware.
+- **`llava`** — vision-capable. UnoPim does not currently use Llava for generation, but it can describe uploaded images if your Custom Prompt is wired for it.
+
+::: tip
+Whatever you `ollama pull` on the host shows up here. The model dropdown lists what your Ollama server reports — there's no fixed allow-list inside UnoPim.
+:::
+
+## Get the endpoint
+
+There's no API key. You need a running Ollama server.
+
+1. Install Ollama on a machine that the UnoPim app server can reach.
+2. Run `ollama serve` (it binds to `127.0.0.1:11434` by default).
+3. Pull the models you want, e.g. `ollama pull llama3 && ollama pull mistral`.
+4. Confirm the server responds: `curl http://localhost:11434/api/tags`.
+5. If UnoPim runs on a different host, expose Ollama on the network interface (`OLLAMA_HOST=0.0.0.0:11434 ollama serve`) and put it behind a firewall or auth proxy.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `Ollama`
+ - **Label** = e.g. *"Local Ollama"*
+ - **Base URL** = e.g. `http://localhost:11434` (default) or the LAN address of your Ollama box.
+ - **API Key** = leave empty unless you've fronted Ollama with an auth proxy that requires one.
+ - **Models** = tick the models you've pulled.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = Ollama, Model = `llama3`.
+- **Image Generation** → **Not supported.** Use OpenAI / Gemini / xAI.
+- **Translation** → Platform = Ollama, Model = `mistral` or `llama3`.
+- **Agentic PIM** → Platform = Ollama, Model = `llama3` (most reliable tool-use of the small models). For complex multi-step plans, Ollama is generally not on par with GPT-4o / Claude Sonnet — set **Max Agent Steps Per Turn** to a low value to avoid runaway loops.
+
+## Tips and limits
+
+- **Hardware matters.** A `llama3:8b` model needs ~6 GB of VRAM; `llama3:70b` needs ~40 GB. If the server is CPU-only, expect tens of seconds per response — fine for batch jobs, painful for the AI Agent UI.
+- **No image generation.** Even though Ollama can run multi-modal models like LLaVA, UnoPim's image-generation pipeline is wired for DALL-E / Gemini / xAI image APIs only.
+- **Privacy is the headline feature.** Catalogue data never leaves your infrastructure. Use Ollama when GDPR / compliance / sensitive-pricing requirements forbid third-party API calls.
+- **Auth.** Ollama has no built-in authentication. If you expose it beyond `localhost`, put it behind a reverse proxy (nginx, Cloudflare Tunnel) that adds an auth header — and paste that header's secret into the Platform's `API Key` field.
diff --git a/src/2.0/magic-ai/providers/openai.md b/src/2.0/magic-ai/providers/openai.md
new file mode 100644
index 00000000..64690263
--- /dev/null
+++ b/src/2.0/magic-ai/providers/openai.md
@@ -0,0 +1,75 @@
+# OpenAI
+
+> **Provider ID:** `openai`
+> **Hosted by:** OpenAI (api.openai.com)
+> **Best for:** Top-tier general quality, the only provider in UnoPim that ships first-party support for both text **and** image generation.
+
+## What is OpenAI?
+
+OpenAI is the original commercial LLM vendor. UnoPim talks to OpenAI's REST API directly via the unified `LaravelAiAdapter`, so anything OpenAI exposes — chat completions, image generation (DALL-E), embeddings — is available through the standard Magic AI surfaces.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation (wand on text fields) | ✓ | `gpt-4o`, `gpt-4o-mini` |
+| Image Generation (wand on image / gallery) | ✓ | `dall-e-3`, `dall-e-2` |
+| Translation (auto-translate on save) | ✓ | `gpt-4o-mini`, `gpt-3.5-turbo` |
+| Agentic PIM (AI Agent Chat, workers) | ✓ | `gpt-4o` |
+
+## Supported models
+
+The Models multi-select on the Add Platform modal exposes these IDs:
+
+**Text models** — confirmed working with UnoPim:
+
+- `gpt-4o` — flagship multi-modal model. Best quality, reasoning, and tool-use for the AI Agent.
+- `gpt-4o-mini` — cheaper / faster variant of `gpt-4o`. Sweet spot for translation and bulk content.
+- `gpt-3.5-turbo` — legacy budget tier. Cheap, fast, good enough for short copy and simple translation.
+
+**Image models** — confirmed working with UnoPim:
+
+- `dall-e-3` — current-generation image model. Higher fidelity, better prompt adherence.
+- `dall-e-2` — older, cheaper. Useful for bulk thumbnail-style generation.
+
+::: tip
+You can enable several text models on the same Platform and switch between them on the Settings page (Text Generation vs. Translation), without registering a second OpenAI Platform.
+:::
+
+## Get the credentials
+
+1. Sign in at [https://platform.openai.com/](https://platform.openai.com/).
+2. Open **Dashboard → API keys** in the left sidebar.
+3. Click **Create new secret key**, give it a label (e.g. `unopim-prod`), and copy the key — it is shown **only once**.
+4. Add a payment method on **Billing** if you haven't already; image generation and `gpt-4o` calls are paid by token / image.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms** in the admin sidebar.
+2. Click **Add Platform**.
+3. Fill the modal:
+ - **Provider** = `OpenAI`
+ - **Label** = e.g. *"OpenAI Production"*
+ - **API Key** = paste the secret key
+ - **Models** = tick `gpt-4o`, `gpt-4o-mini`, `dall-e-3` (and any others you want)
+ - **Status** = `Enabled`
+4. **Save**. The key is encrypted before it hits the database.
+5. Click the **star** icon on the new row in the Platforms grid to mark this Platform as the default (optional but recommended).
+
+## Use it with each Magic AI feature
+
+Open **Magic AI → Settings** and route the capabilities you want OpenAI to power:
+
+- **Text Generation** → Platform = OpenAI, Model = `gpt-4o` (quality) or `gpt-4o-mini` (speed/cost).
+- **Image Generation** → Platform = OpenAI, Model = `dall-e-3`.
+- **Translation** → Platform = OpenAI, Model = `gpt-4o-mini`.
+- **Agentic PIM** → Platform = OpenAI, Model = `gpt-4o`.
+
+Save the Settings page. The wand icons on product / category fields now call OpenAI; the AI Agent Chat uses `gpt-4o` for tool calls.
+
+## Tips and limits
+
+- **Per-organisation rate limits.** OpenAI applies tier-based RPM/TPM caps; the AI Agent's `Max Agent Steps Per Turn` may amplify usage. If you hit 429 errors, lower steps or upgrade your tier.
+- **Cost split.** Translation typically dominates token usage. Pair OpenAI for content (`gpt-4o`) with a cheaper provider (Gemini Flash, DeepSeek) for translation if cost matters.
+- **DALL-E 3 prompt rewriting.** OpenAI re-writes prompts internally for `dall-e-3`. The image you get back may differ from the literal prompt you typed.
+- **Region.** All requests go through `api.openai.com`. If you need EU residency, use [Azure OpenAI](./azure.md) instead.
diff --git a/src/2.0/magic-ai/providers/openrouter.md b/src/2.0/magic-ai/providers/openrouter.md
new file mode 100644
index 00000000..2263a77b
--- /dev/null
+++ b/src/2.0/magic-ai/providers/openrouter.md
@@ -0,0 +1,65 @@
+# OpenRouter
+
+> **Provider ID:** `openrouter`
+> **Hosted by:** OpenRouter (openrouter.ai)
+> **Best for:** Trying many models behind a single API key. One contract, one bill, hundreds of models.
+
+## What is OpenRouter?
+
+[OpenRouter](https://openrouter.ai/) is a meta-provider: it exposes a single OpenAI-compatible endpoint that proxies to 100+ models from OpenAI, Anthropic, Google, Meta, Mistral, DeepSeek, Cohere, Together AI, and more. You pay OpenRouter, OpenRouter pays the upstream. The result for UnoPim is a single Platform with access to almost every model in this guide.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Notes |
+|------------|:---------:|-------|
+| Text Generation | ✓ | Any text model OpenRouter offers |
+| Image Generation | ✓ | Only for upstream models that themselves support images (DALL-E, Gemini Vision, etc.) |
+| Translation | ✓ | Often paired with cheap upstreams (Llama, DeepSeek, Mistral Small) |
+| Agentic PIM | ✓ | Tool-use depends on the upstream model — pick a tool-use-capable one |
+
+## Supported models
+
+OpenRouter's catalogue is huge and evolves weekly. Browse it at [openrouter.ai/models](https://openrouter.ai/models). The Model field in UnoPim accepts any **route ID** of the form `/`, for example:
+
+- `openai/gpt-4o`, `openai/gpt-4o-mini`
+- `anthropic/claude-sonnet-4`, `anthropic/claude-haiku-4`
+- `google/gemini-2.5-pro`, `google/gemini-1.5-flash`
+- `meta-llama/llama-3.1-70b-instruct`
+- `mistralai/mistral-large`, `mistralai/mistral-small`
+- `deepseek/deepseek-chat`, `deepseek/deepseek-reasoner`
+- `qwen/qwen-2.5-72b-instruct`
+
+Add the route IDs you want in the Models multi-select on the Add Platform modal. UnoPim treats each one as a normal model selection.
+
+## Get the credentials
+
+1. Sign in at [https://openrouter.ai/](https://openrouter.ai/).
+2. Open **Keys** → **Create Key**, label it (e.g. `unopim`), copy.
+3. Top up credits on the **Credits** page. OpenRouter is pay-as-you-go.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `OpenRouter`
+ - **Label** = e.g. *"OpenRouter Pool"*
+ - **API Key** = paste
+ - **Models** = the OpenRouter route IDs you want available, one per line / multi-select entry.
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = OpenRouter, Model = e.g. `anthropic/claude-sonnet-4`.
+- **Image Generation** → Platform = OpenRouter, Model = e.g. `openai/dall-e-3` *if* OpenRouter exposes the upstream image API to your account; otherwise route images to a direct provider.
+- **Translation** → Platform = OpenRouter, Model = e.g. `mistralai/mistral-small` or `deepseek/deepseek-chat`.
+- **Agentic PIM** → Platform = OpenRouter, Model = a strong tool-use model such as `openai/gpt-4o` or `anthropic/claude-sonnet-4`.
+
+## Tips and limits
+
+- **Markup.** OpenRouter adds a small markup on top of the upstream price. If you already have a direct contract with (say) OpenAI or Anthropic, the direct provider is cheaper — use OpenRouter for breadth, not as a primary cost optimiser.
+- **Rate limits cascade.** If the upstream throttles, OpenRouter returns the same 429. Keep an eye on the Job Tracker for failures during bulk operations.
+- **Single bill, many vendors.** This is the headline win. For evaluation phases ("which model writes the best descriptions?"), it's the fastest path to comparing options.
+- **Image support is per-upstream.** Don't assume image generation works just because OpenRouter is listed. Check the upstream model's capability before routing **Image Generation** to OpenRouter.
diff --git a/src/2.0/magic-ai/providers/xai.md b/src/2.0/magic-ai/providers/xai.md
new file mode 100644
index 00000000..b7abe6a7
--- /dev/null
+++ b/src/2.0/magic-ai/providers/xai.md
@@ -0,0 +1,63 @@
+# xAI (Grok)
+
+> **Provider ID:** `xai`
+> **Hosted by:** xAI (api.x.ai)
+> **Best for:** A second opinion alongside OpenAI / Anthropic. Grok also exposes image generation, so it's one of the few drop-in alternatives when DALL-E is unavailable.
+
+## What is xAI?
+
+**xAI** is Elon Musk's AI company; they ship the **Grok** model family. The xAI REST API is OpenAI-shaped — same Chat Completions surface, same JSON formats — so UnoPim plugs in via the unified adapter and routes Grok the same way it routes any other provider.
+
+## Capabilities in UnoPim
+
+| Capability | Supported | Recommended models |
+|------------|:---------:|--------------------|
+| Text Generation | ✓ | `grok-4`, `grok-3-mini` |
+| Image Generation | ✓ | `grok-2-image` |
+| Translation | ✓ | `grok-3-mini` |
+| Agentic PIM | ✓ | `grok-4` |
+
+## Supported models
+
+xAI's catalogue evolves; the Models multi-select reflects whatever your account is entitled to. Typical lineup:
+
+- **`grok-4`** — current flagship. Strong reasoning, tool-use, and long-context.
+- **`grok-3`** / **`grok-3-mini`** — previous-gen text models. The `mini` variant is the cost-efficient pick for translation.
+- **`grok-2-image`** — image generation model. Use for the wand on image / gallery fields.
+
+::: tip
+Tick at least one text model **and** `grok-2-image` if you want to use xAI for both content and images on a single Platform.
+:::
+
+## Get the credentials
+
+1. Sign in at [https://console.x.ai/](https://console.x.ai/).
+2. Open **API Keys** and click **Create API Key**.
+3. Add a billing method on the **Billing** page if your plan requires it.
+4. Copy the key.
+
+## Configure in UnoPim
+
+1. Go to **Magic AI → Platforms → Add Platform**.
+2. Modal fields:
+ - **Provider** = `xAI (Grok)`
+ - **Label** = e.g. *"Grok"*
+ - **API Key** = paste
+ - **Models** = `grok-4`, `grok-3-mini`, `grok-2-image`
+ - **Status** = `Enabled`
+3. **Save**.
+
+## Use it with each Magic AI feature
+
+In **Magic AI → Settings**:
+
+- **Text Generation** → Platform = xAI, Model = `grok-4`.
+- **Image Generation** → Platform = xAI, Model = `grok-2-image`. A useful alternative to DALL-E if you've hit OpenAI rate limits.
+- **Translation** → Platform = xAI, Model = `grok-3-mini`.
+- **Agentic PIM** → Platform = xAI, Model = `grok-4`.
+
+## Tips and limits
+
+- **OpenAI-compatible internally.** If a future Grok model isn't listed yet, you can usually wire it via the [Custom (OpenAI-compatible)](./custom.md) provider with base URL `https://api.x.ai/v1`.
+- **Personality.** Grok has a more conversational / opinionated default tone than OpenAI / Anthropic. If product copy comes out off-brand, tighten the active System Prompt under **Magic AI → System Prompts**.
+- **Image rate limits.** Image generation has its own RPM cap; if you generate in bulk, batch with a queue or stagger via the AI Agent's **Token Budget**.
diff --git a/src/public/assets/2.0/images/dashboard/dashboard-analytics.png b/src/public/assets/2.0/images/dashboard/dashboard-analytics.png
new file mode 100644
index 00000000..1b430cb3
Binary files /dev/null and b/src/public/assets/2.0/images/dashboard/dashboard-analytics.png differ
diff --git a/src/public/assets/2.0/images/dashboard/dashboard-operations.png b/src/public/assets/2.0/images/dashboard/dashboard-operations.png
new file mode 100644
index 00000000..544f9656
Binary files /dev/null and b/src/public/assets/2.0/images/dashboard/dashboard-operations.png differ
diff --git a/src/public/assets/2.0/images/dashboard/dashboard-overview.png b/src/public/assets/2.0/images/dashboard/dashboard-overview.png
index 7f1455e0..295efaf4 100644
Binary files a/src/public/assets/2.0/images/dashboard/dashboard-overview.png and b/src/public/assets/2.0/images/dashboard/dashboard-overview.png differ