+ AI Gateway is now available + + : identity-aware access to any AI provider, eliminate API keys, and tunnel to + self-hosted models + + .{' '} + + {banner.link.label} + +
+
+
+ Answers are generated from the docs and can be wrong. Check the linked pages. +
+{part.input?.query}, {count} {count === 1 ? 'page' : 'pages'} + > + ) : ( + <>Searching
{part.input?.query ?? '…'}> + ); + } else if (name === 'read_page') { + label = <>{done ? 'Read' : 'Reading'}
{part.input?.path ?? '…'}>;
+ } else {
+ label = name;
+ }
+
+ const Icon = name === 'read_page' ? FileText : SearchIcon;
+ return (
+ {part.errorText ?? 'Tool call failed'}
+ ) : ( +{label}
+ )} ++ {roleName[message.role] ?? 'unknown'} +
+ {toolCalls.length > 0 && ( ++ Ask anything about Pangolin. The assistant searches and reads these docs to answer. +
+ {suggestions.map((q) => ( + + ))} +Request failed
+{errorText(chat.error)}
+{title}
} + {children} +
+ {title}
+ {showArrow &&
+ {cta}
+
{title}
} +{name}
+ {type && {type}}
+ {defaultValue !== undefined && (
+
+ default: {String(defaultValue)}
+
+ )}
+ {post?.map((p) => (
+
+ {p}
+
+ ))}
+ {required && required}
+ {deprecated && deprecated}
+ {hint}
} + {children} + {caption &&{description}
} +
+
### Internal Users
diff --git a/manage/access-control/forwarded-headers.mdx b/content/docs/manage/access-control/forwarded-headers.mdx
similarity index 100%
rename from manage/access-control/forwarded-headers.mdx
rename to content/docs/manage/access-control/forwarded-headers.mdx
diff --git a/manage/access-control/links.mdx b/content/docs/manage/access-control/links.mdx
similarity index 99%
rename from manage/access-control/links.mdx
rename to content/docs/manage/access-control/links.mdx
index 71d4657..1dbe6b9 100644
--- a/manage/access-control/links.mdx
+++ b/content/docs/manage/access-control/links.mdx
@@ -3,8 +3,6 @@ title: "Shareable Links"
description: "Create Links and use access tokens for browser or programmatic access."
---
-
-
Links are special URLs that grant access to one resource without requiring the recipient to sign in as a Pangolin user. Anyone with a web browser on the internet can access the resource if they have a valid Link.
When you create a Link, Pangolin gives you two ways to use it:
diff --git a/manage/access-control/login-page.mdx b/content/docs/manage/access-control/login-page.mdx
similarity index 100%
rename from manage/access-control/login-page.mdx
rename to content/docs/manage/access-control/login-page.mdx
diff --git a/manage/access-control/mfa.mdx b/content/docs/manage/access-control/mfa.mdx
similarity index 100%
rename from manage/access-control/mfa.mdx
rename to content/docs/manage/access-control/mfa.mdx
diff --git a/manage/access-control/password-rotation.mdx b/content/docs/manage/access-control/password-rotation.mdx
similarity index 100%
rename from manage/access-control/password-rotation.mdx
rename to content/docs/manage/access-control/password-rotation.mdx
diff --git a/manage/access-control/rules.mdx b/content/docs/manage/access-control/rules.mdx
similarity index 100%
rename from manage/access-control/rules.mdx
rename to content/docs/manage/access-control/rules.mdx
diff --git a/manage/access-control/security-keys.mdx b/content/docs/manage/access-control/security-keys.mdx
similarity index 100%
rename from manage/access-control/security-keys.mdx
rename to content/docs/manage/access-control/security-keys.mdx
diff --git a/manage/access-control/session-length.mdx b/content/docs/manage/access-control/session-length.mdx
similarity index 100%
rename from manage/access-control/session-length.mdx
rename to content/docs/manage/access-control/session-length.mdx
diff --git a/manage/ai/budgets.mdx b/content/docs/manage/ai/budgets.mdx
similarity index 100%
rename from manage/ai/budgets.mdx
rename to content/docs/manage/ai/budgets.mdx
diff --git a/manage/ai/configure-ai-clients/claude-desktop.mdx b/content/docs/manage/ai/configure-ai-clients/claude-desktop.mdx
similarity index 96%
rename from manage/ai/configure-ai-clients/claude-desktop.mdx
rename to content/docs/manage/ai/configure-ai-clients/claude-desktop.mdx
index 68186cb..0b8f315 100644
--- a/manage/ai/configure-ai-clients/claude-desktop.mdx
+++ b/content/docs/manage/ai/configure-ai-clients/claude-desktop.mdx
@@ -3,8 +3,6 @@ title: "Claude Desktop"
description: "Connect Claude Desktop's third-party inference to a Pangolin AI Gateway resource"
---
-
-
Claude Desktop can route its requests through a third-party inference gateway instead of Anthropic directly. Point it at an AI Gateway resource that has an Anthropic-compatible provider attached — Anthropic itself, Bedrock, Vertex AI, or a custom Anthropic-compatible endpoint. See [AI Gateway Overview](/manage/ai/overview) if you haven't set that up yet.
@@ -14,11 +12,10 @@ Claude Desktop can route its requests through a third-party inference gateway in
/>
-import AiGatewayKey from "/snippets/ai-gateway-key.mdx";
You'll need the resource's URL (its `
+
You can create more than one AI Gateway resource so different users and roles get their own providers. Distinct hostnames are the usual approach; they can also share a FQDN. See [Multiple Gateway Resources](/manage/ai/multiple-gateway-resources).
diff --git a/manage/ai/providers/anthropic.mdx b/content/docs/manage/ai/providers/anthropic.mdx
similarity index 100%
rename from manage/ai/providers/anthropic.mdx
rename to content/docs/manage/ai/providers/anthropic.mdx
diff --git a/manage/ai/providers/bedrock.mdx b/content/docs/manage/ai/providers/bedrock.mdx
similarity index 100%
rename from manage/ai/providers/bedrock.mdx
rename to content/docs/manage/ai/providers/bedrock.mdx
diff --git a/manage/ai/providers/configuration.mdx b/content/docs/manage/ai/providers/configuration.mdx
similarity index 100%
rename from manage/ai/providers/configuration.mdx
rename to content/docs/manage/ai/providers/configuration.mdx
diff --git a/manage/ai/providers/custom.mdx b/content/docs/manage/ai/providers/custom.mdx
similarity index 100%
rename from manage/ai/providers/custom.mdx
rename to content/docs/manage/ai/providers/custom.mdx
diff --git a/manage/ai/providers/custom/bifrost.mdx b/content/docs/manage/ai/providers/custom/bifrost.mdx
similarity index 100%
rename from manage/ai/providers/custom/bifrost.mdx
rename to content/docs/manage/ai/providers/custom/bifrost.mdx
diff --git a/manage/ai/providers/custom/cloud-apis-through-a-site.mdx b/content/docs/manage/ai/providers/custom/cloud-apis-through-a-site.mdx
similarity index 100%
rename from manage/ai/providers/custom/cloud-apis-through-a-site.mdx
rename to content/docs/manage/ai/providers/custom/cloud-apis-through-a-site.mdx
diff --git a/manage/ai/providers/custom/ollama.mdx b/content/docs/manage/ai/providers/custom/ollama.mdx
similarity index 100%
rename from manage/ai/providers/custom/ollama.mdx
rename to content/docs/manage/ai/providers/custom/ollama.mdx
diff --git a/manage/ai/providers/custom/vllm.mdx b/content/docs/manage/ai/providers/custom/vllm.mdx
similarity index 100%
rename from manage/ai/providers/custom/vllm.mdx
rename to content/docs/manage/ai/providers/custom/vllm.mdx
diff --git a/manage/ai/providers/google-gemini.mdx b/content/docs/manage/ai/providers/google-gemini.mdx
similarity index 100%
rename from manage/ai/providers/google-gemini.mdx
rename to content/docs/manage/ai/providers/google-gemini.mdx
diff --git a/manage/ai/providers/microsoft-foundry.mdx b/content/docs/manage/ai/providers/microsoft-foundry.mdx
similarity index 100%
rename from manage/ai/providers/microsoft-foundry.mdx
rename to content/docs/manage/ai/providers/microsoft-foundry.mdx
diff --git a/manage/ai/providers/model-routing.mdx b/content/docs/manage/ai/providers/model-routing.mdx
similarity index 98%
rename from manage/ai/providers/model-routing.mdx
rename to content/docs/manage/ai/providers/model-routing.mdx
index 304e9de..4c835f2 100644
--- a/manage/ai/providers/model-routing.mdx
+++ b/content/docs/manage/ai/providers/model-routing.mdx
@@ -12,7 +12,7 @@ See [AI Providers](/manage/ai/providers/overview) for what a provider is, and [P
On the provider's **Models** tab, every request must match an **allow** entry and must not match a **block** entry. An empty allow list denies all traffic. A key cannot sit on both lists.
-
+
You add keys three ways:
diff --git a/manage/ai/providers/open-router.mdx b/content/docs/manage/ai/providers/open-router.mdx
similarity index 100%
rename from manage/ai/providers/open-router.mdx
rename to content/docs/manage/ai/providers/open-router.mdx
diff --git a/manage/ai/providers/openai.mdx b/content/docs/manage/ai/providers/openai.mdx
similarity index 100%
rename from manage/ai/providers/openai.mdx
rename to content/docs/manage/ai/providers/openai.mdx
diff --git a/manage/ai/providers/overview.mdx b/content/docs/manage/ai/providers/overview.mdx
similarity index 98%
rename from manage/ai/providers/overview.mdx
rename to content/docs/manage/ai/providers/overview.mdx
index 857e8d8..d5cc7fd 100644
--- a/manage/ai/providers/overview.mdx
+++ b/content/docs/manage/ai/providers/overview.mdx
@@ -27,7 +27,7 @@ On an AI Gateway resource, attach one or more providers from the **AI Gateway**
The resource only speaks the API formats its attached providers advertise. Attach whichever providers match the [clients](/manage/ai/overview#4-connect-a-client) you plan to connect.
-
+
## Provider Types
diff --git a/manage/ai/providers/vercel-ai-gateway.mdx b/content/docs/manage/ai/providers/vercel-ai-gateway.mdx
similarity index 100%
rename from manage/ai/providers/vercel-ai-gateway.mdx
rename to content/docs/manage/ai/providers/vercel-ai-gateway.mdx
diff --git a/manage/ai/providers/vertex-ai.mdx b/content/docs/manage/ai/providers/vertex-ai.mdx
similarity index 100%
rename from manage/ai/providers/vertex-ai.mdx
rename to content/docs/manage/ai/providers/vertex-ai.mdx
diff --git a/manage/ai/session-logs.mdx b/content/docs/manage/ai/session-logs.mdx
similarity index 97%
rename from manage/ai/session-logs.mdx
rename to content/docs/manage/ai/session-logs.mdx
index 6b7fcbd..a44c193 100644
--- a/manage/ai/session-logs.mdx
+++ b/content/docs/manage/ai/session-logs.mdx
@@ -6,7 +6,7 @@ description: "Prompt and response transcripts for AI Gateway requests in an orga
Session logs store the prompt and response for each AI Gateway call. Open **AI Gateway > Session Logs** to browse them. Use them to see what a client sent, what the upstream returned, and which user, key, provider, and resource handled the call.
-
+
+
These records are independent of session log retention. For prompt and response text, see [Session Logs](/manage/ai/session-logs). The two share a session id per call.
diff --git a/manage/ai/virtual-api-keys.mdx b/content/docs/manage/ai/virtual-api-keys.mdx
similarity index 99%
rename from manage/ai/virtual-api-keys.mdx
rename to content/docs/manage/ai/virtual-api-keys.mdx
index 57d5721..c59e453 100644
--- a/manage/ai/virtual-api-keys.mdx
+++ b/content/docs/manage/ai/virtual-api-keys.mdx
@@ -56,7 +56,7 @@ You can optionally associate a user. That association is for usage tracking and
When you create or edit a key, you can attach a [budget](/manage/ai/budgets) so spend or tokens on that key are capped.
-
+
## Where to Get a Key
diff --git a/manage/alerting/alert-rules.mdx b/content/docs/manage/alerting/alert-rules.mdx
similarity index 99%
rename from manage/alerting/alert-rules.mdx
rename to content/docs/manage/alerting/alert-rules.mdx
index 61eb22f..be28884 100644
--- a/manage/alerting/alert-rules.mdx
+++ b/content/docs/manage/alerting/alert-rules.mdx
@@ -3,8 +3,6 @@ title: "Alert Rules"
description: "Subscribe to Pangolin events on sites, resources, and health checks and deliver email, webhooks, or integrations"
---
-
-
+
+
+
## HTTPS Request Log Fields
diff --git a/manage/analytics/streaming.mdx b/content/docs/manage/analytics/streaming.mdx
similarity index 95%
rename from manage/analytics/streaming.mdx
rename to content/docs/manage/analytics/streaming.mdx
index fe64a34..8edd036 100644
--- a/manage/analytics/streaming.mdx
+++ b/content/docs/manage/analytics/streaming.mdx
@@ -18,7 +18,7 @@ Open **Organization > Logs & Analytics > Streaming** to add destinations and mon
You choose which categories each destination receives. Only log types enabled for your organization can be streamed.
-
+
## Destination types
@@ -26,7 +26,7 @@ You choose which categories each destination receives. Only log types enabled fo
Each destination type has its own configuration and payload behavior. Select **Add destination** and pick a delivery method.
-
+
+
All delivery uses **POST**. Requests time out after 30 seconds.
@@ -44,7 +42,7 @@ All delivery uses **POST**. Requests time out after 30 seconds.
On the **Headers** tab, add optional static headers sent with every request, for example a vendor-specific API key or a non-default `Content-Type`. When you do not override it, Pangolin sends `Content-Type: application/json` (or `application/x-ndjson` when using the NDJSON payload format).
-
+
## Default payload (template off)
@@ -81,7 +79,7 @@ Some columns are stored as JSON strings in the database (`headers`, `query`, and
On the **Body** tab, enable **Custom body template** and provide a JSON template string. Pangolin performs simple placeholder substitution, **not** a full templating language like Handlebars.
-
+
### Template variables
diff --git a/manage/analytics/streaming/s3.mdx b/content/docs/manage/analytics/streaming/s3.mdx
similarity index 98%
rename from manage/analytics/streaming/s3.mdx
rename to content/docs/manage/analytics/streaming/s3.mdx
index 6c6d4e5..ca318aa 100644
--- a/manage/analytics/streaming/s3.mdx
+++ b/content/docs/manage/analytics/streaming/s3.mdx
@@ -3,8 +3,6 @@ title: "Amazon S3"
description: "Archive audit logs to S3 or S3-compatible object storage"
---
-
-
S3 destinations upload batches of your organization's audit logs as objects in a bucket you control. Use them for long-term archival, data lakes (Athena, Glue, BigQuery), or S3-compatible stores such as MinIO and Cloudflare R2.
+
Uploads time out after 60 seconds per object.
@@ -54,7 +52,7 @@ Uploads time out after 60 seconds per object.
| **CSV** | RFC-4180 CSV with a header row; see [CSV format](#csv-format) |
-
+
## Logs tab
@@ -62,7 +60,7 @@ Uploads time out after 60 seconds per object.
Choose which log categories are uploaded. Each enabled type is written to its own key prefix (`request/`, `action/`, etc.). Only log types enabled for your organization can be streamed.
-
+
## Object key layout
diff --git a/manage/asnblocking.mdx b/content/docs/manage/asnblocking.mdx
similarity index 100%
rename from manage/asnblocking.mdx
rename to content/docs/manage/asnblocking.mdx
diff --git a/manage/blueprints.mdx b/content/docs/manage/blueprints.mdx
similarity index 99%
rename from manage/blueprints.mdx
rename to content/docs/manage/blueprints.mdx
index 85baa0e..9afe4ee 100644
--- a/manage/blueprints.mdx
+++ b/content/docs/manage/blueprints.mdx
@@ -3,8 +3,6 @@ title: "Blueprints"
description: "Define Pangolin resources and site settings declaratively with YAML or container labels"
---
-
-
Blueprints let you define Pangolin resources as code. Instead of configuring every site, target, and access rule manually in the dashboard, you describe the desired state in YAML or container labels and let Pangolin apply it consistently.
Use blueprints when you want:
@@ -66,7 +64,7 @@ Use container labels when the resource definition should live inside your Compos
Paste YAML into **Settings > Blueprints** in the Pangolin dashboard.
-
+
diff --git a/manage/branding.mdx b/content/docs/manage/branding.mdx
similarity index 100%
rename from manage/branding.mdx
rename to content/docs/manage/branding.mdx
diff --git a/manage/clients/archiving-blocking.mdx b/content/docs/manage/clients/archiving-blocking.mdx
similarity index 100%
rename from manage/clients/archiving-blocking.mdx
rename to content/docs/manage/clients/archiving-blocking.mdx
diff --git a/manage/clients/client-logs.mdx b/content/docs/manage/clients/client-logs.mdx
similarity index 100%
rename from manage/clients/client-logs.mdx
rename to content/docs/manage/clients/client-logs.mdx
diff --git a/manage/clients/configure-client.mdx b/content/docs/manage/clients/configure-client.mdx
similarity index 100%
rename from manage/clients/configure-client.mdx
rename to content/docs/manage/clients/configure-client.mdx
diff --git a/manage/clients/credentials.mdx b/content/docs/manage/clients/credentials.mdx
similarity index 100%
rename from manage/clients/credentials.mdx
rename to content/docs/manage/clients/credentials.mdx
diff --git a/manage/clients/fingerprinting.mdx b/content/docs/manage/clients/fingerprinting.mdx
similarity index 100%
rename from manage/clients/fingerprinting.mdx
rename to content/docs/manage/clients/fingerprinting.mdx
diff --git a/manage/clients/firewalls.mdx b/content/docs/manage/clients/firewalls.mdx
similarity index 99%
rename from manage/clients/firewalls.mdx
rename to content/docs/manage/clients/firewalls.mdx
index 5a4ea5f..5bb4b05 100644
--- a/manage/clients/firewalls.mdx
+++ b/content/docs/manage/clients/firewalls.mdx
@@ -3,8 +3,6 @@ title: "Firewall Quirks"
description: "Improve Pangolin direct-connect success behind restrictive firewalls"
---
-
-
Most of the time, Pangolin works with existing firewall policies without any special tuning. Pangolin Sites and Pangolin Clients attempt NAT traversal first so traffic can flow directly between client and site. When direct connectivity cannot be established, traffic falls back to relaying through Gerbil. You can [learn more about how holepunching works here](https://pangolin.net/news/nat-holepunching).
For background on direct vs relayed paths and how to verify connection type, see [NAT Traversal](/manage/clients/nat-traversal).
diff --git a/manage/clients/install-client.mdx b/content/docs/manage/clients/install-client.mdx
similarity index 100%
rename from manage/clients/install-client.mdx
rename to content/docs/manage/clients/install-client.mdx
diff --git a/manage/clients/kubernetes/deployment.mdx b/content/docs/manage/clients/kubernetes/deployment.mdx
similarity index 100%
rename from manage/clients/kubernetes/deployment.mdx
rename to content/docs/manage/clients/kubernetes/deployment.mdx
diff --git a/manage/clients/nat-traversal.mdx b/content/docs/manage/clients/nat-traversal.mdx
similarity index 100%
rename from manage/clients/nat-traversal.mdx
rename to content/docs/manage/clients/nat-traversal.mdx
diff --git a/manage/clients/understanding-clients.mdx b/content/docs/manage/clients/understanding-clients.mdx
similarity index 100%
rename from manage/clients/understanding-clients.mdx
rename to content/docs/manage/clients/understanding-clients.mdx
diff --git a/manage/clients/update-client.mdx b/content/docs/manage/clients/update-client.mdx
similarity index 100%
rename from manage/clients/update-client.mdx
rename to content/docs/manage/clients/update-client.mdx
diff --git a/manage/common-api-routes.mdx b/content/docs/manage/common-api-routes.mdx
similarity index 100%
rename from manage/common-api-routes.mdx
rename to content/docs/manage/common-api-routes.mdx
diff --git a/manage/community-blueprints-repo.mdx b/content/docs/manage/community-blueprints-repo.mdx
similarity index 99%
rename from manage/community-blueprints-repo.mdx
rename to content/docs/manage/community-blueprints-repo.mdx
index e339da6..405d8ff 100644
--- a/manage/community-blueprints-repo.mdx
+++ b/content/docs/manage/community-blueprints-repo.mdx
@@ -3,8 +3,6 @@ title: "Community Blueprints"
description: "Community-maintained library of ready-to-use Pangolin Blueprints for self-hosted applications"
---
-
-
The Pangolin Community Blueprints repository is a shared library of ready-to-use Docker Compose templates for common self-hosted services, already wired to expose those services through Pangolin.
+
You can search the table and delete an organization from it.
diff --git a/manage/organizations/org-id.mdx b/content/docs/manage/organizations/org-id.mdx
similarity index 100%
rename from manage/organizations/org-id.mdx
rename to content/docs/manage/organizations/org-id.mdx
diff --git a/manage/remote-node/backhaul.mdx b/content/docs/manage/remote-node/backhaul.mdx
similarity index 100%
rename from manage/remote-node/backhaul.mdx
rename to content/docs/manage/remote-node/backhaul.mdx
diff --git a/manage/remote-node/config-file.mdx b/content/docs/manage/remote-node/config-file.mdx
similarity index 100%
rename from manage/remote-node/config-file.mdx
rename to content/docs/manage/remote-node/config-file.mdx
diff --git a/manage/remote-node/quick-install-remote.mdx b/content/docs/manage/remote-node/quick-install-remote.mdx
similarity index 100%
rename from manage/remote-node/quick-install-remote.mdx
rename to content/docs/manage/remote-node/quick-install-remote.mdx
diff --git a/manage/remote-node/understanding-nodes.mdx b/content/docs/manage/remote-node/understanding-nodes.mdx
similarity index 98%
rename from manage/remote-node/understanding-nodes.mdx
rename to content/docs/manage/remote-node/understanding-nodes.mdx
index e9f0e11..0494390 100644
--- a/manage/remote-node/understanding-nodes.mdx
+++ b/content/docs/manage/remote-node/understanding-nodes.mdx
@@ -24,7 +24,7 @@ Think of different nodes as the "front doors" to your applications - users conne
- **Failover**: If you have multiple nodes, the control plane will failover between them. If one node becomes unavailable, traffic can optionally fail over to our cloud infrastructure or other nodes until you restore service.
-
+
## Benefits
diff --git a/manage/resource-launcher.mdx b/content/docs/manage/resource-launcher.mdx
similarity index 100%
rename from manage/resource-launcher.mdx
rename to content/docs/manage/resource-launcher.mdx
diff --git a/manage/resources/private/ai-gateway.mdx b/content/docs/manage/resources/private/ai-gateway.mdx
similarity index 100%
rename from manage/resources/private/ai-gateway.mdx
rename to content/docs/manage/resources/private/ai-gateway.mdx
diff --git a/manage/resources/private/alias.mdx b/content/docs/manage/resources/private/alias.mdx
similarity index 100%
rename from manage/resources/private/alias.mdx
rename to content/docs/manage/resources/private/alias.mdx
diff --git a/manage/resources/private/authentication.mdx b/content/docs/manage/resources/private/authentication.mdx
similarity index 100%
rename from manage/resources/private/authentication.mdx
rename to content/docs/manage/resources/private/authentication.mdx
diff --git a/manage/resources/private/cidr.mdx b/content/docs/manage/resources/private/cidr.mdx
similarity index 99%
rename from manage/resources/private/cidr.mdx
rename to content/docs/manage/resources/private/cidr.mdx
index be21a13..d9bf36e 100644
--- a/manage/resources/private/cidr.mdx
+++ b/content/docs/manage/resources/private/cidr.mdx
@@ -3,8 +3,6 @@ title: "CIDR"
description: "Route client traffic to an entire IP range on the remote network"
---
-
-
A CIDR private resource exposes an entire IP range on your remote network to connected Pangolin clients. When a user connects with the Pangolin client and has access to the resource, the client installs a route for that prefix and all traffic to addresses within the range is carried over the tunnel.
CIDR resources are the usual choice for whole subnets or network segments instead of creating a separate host resource for every machine.
diff --git a/manage/resources/private/destinations.mdx b/content/docs/manage/resources/private/destinations.mdx
similarity index 99%
rename from manage/resources/private/destinations.mdx
rename to content/docs/manage/resources/private/destinations.mdx
index ffc2bb5..b7f7fea 100644
--- a/manage/resources/private/destinations.mdx
+++ b/content/docs/manage/resources/private/destinations.mdx
@@ -3,8 +3,6 @@ title: "Destinations"
description: "What a private resource destination is and how to define it (FQDN, IP, or CIDR)"
---
-
-
## What is a destination?
A destination is the network location your site can route to for a private resource: a single host IP address, an IP CIDR range, or a fully qualified domain name (FQDN). Every private resource must have a destination—it tells Pangolin where the resource lives on the remote network and how the site should reach it.
diff --git a/manage/resources/private/host.mdx b/content/docs/manage/resources/private/host.mdx
similarity index 99%
rename from manage/resources/private/host.mdx
rename to content/docs/manage/resources/private/host.mdx
index 75a43af..dc3db48 100644
--- a/manage/resources/private/host.mdx
+++ b/content/docs/manage/resources/private/host.mdx
@@ -3,8 +3,6 @@ title: "Host"
description: "Route client traffic to a single IP address or FQDN on the remote network"
---
-
-
A host private resource exposes a single machine on your remote network to connected Pangolin clients. When a user connects with the Pangolin client and has access to the resource, traffic destined for that host is carried over the tunnel to the site, which delivers it on the remote network.
Host resources are the most common private resource type. They do not render in a browser—you use native applications (a database client, `curl`, an RDP client, etc.) against the destination address while the Pangolin client is connected.
diff --git a/manage/resources/private/multi-site-routing.mdx b/content/docs/manage/resources/private/multi-site-routing.mdx
similarity index 100%
rename from manage/resources/private/multi-site-routing.mdx
rename to content/docs/manage/resources/private/multi-site-routing.mdx
diff --git a/manage/resources/private/port-restrictions.mdx b/content/docs/manage/resources/private/port-restrictions.mdx
similarity index 99%
rename from manage/resources/private/port-restrictions.mdx
rename to content/docs/manage/resources/private/port-restrictions.mdx
index 29e0cb0..c5b5194 100644
--- a/manage/resources/private/port-restrictions.mdx
+++ b/content/docs/manage/resources/private/port-restrictions.mdx
@@ -3,8 +3,6 @@ title: "Ports and ICMP"
description: "Configure TCP and UDP port modes and ICMP (ping) for private resources"
---
-
-
For each private resource, TCP and UDP are configured separately. Each protocol uses one of three modes: All, Blocked, or Custom. ICMP (ping) is controlled on its own and does not follow those TCP/UDP modes.
## Port restrictions
diff --git a/manage/resources/private/private-http.mdx b/content/docs/manage/resources/private/private-http.mdx
similarity index 100%
rename from manage/resources/private/private-http.mdx
rename to content/docs/manage/resources/private/private-http.mdx
diff --git a/manage/resources/private/ssh.mdx b/content/docs/manage/resources/private/ssh.mdx
similarity index 100%
rename from manage/resources/private/ssh.mdx
rename to content/docs/manage/resources/private/ssh.mdx
diff --git a/manage/resources/public/ai-gateway.mdx b/content/docs/manage/resources/public/ai-gateway.mdx
similarity index 100%
rename from manage/resources/public/ai-gateway.mdx
rename to content/docs/manage/resources/public/ai-gateway.mdx
diff --git a/manage/resources/public/authentication.mdx b/content/docs/manage/resources/public/authentication.mdx
similarity index 100%
rename from manage/resources/public/authentication.mdx
rename to content/docs/manage/resources/public/authentication.mdx
diff --git a/manage/resources/public/healthchecks-failover.mdx b/content/docs/manage/resources/public/healthchecks-failover.mdx
similarity index 99%
rename from manage/resources/public/healthchecks-failover.mdx
rename to content/docs/manage/resources/public/healthchecks-failover.mdx
index 9a384c2..9a1069c 100644
--- a/manage/resources/public/healthchecks-failover.mdx
+++ b/content/docs/manage/resources/public/healthchecks-failover.mdx
@@ -3,8 +3,6 @@ title: "Health Checks and Failover"
description: "Monitor public resource targets and automatically remove unhealthy targets from routing"
---
-
-
Health checks for public resources monitor each target and keep bad targets out of traffic automatically. When a target fails its check, Pangolin marks it unhealthy and removes it from load balancing. When it recovers and passes again, Pangolin adds it back.
## How it works
diff --git a/manage/resources/public/http-https.mdx b/content/docs/manage/resources/public/http-https.mdx
similarity index 99%
rename from manage/resources/public/http-https.mdx
rename to content/docs/manage/resources/public/http-https.mdx
index e4dcbea..d498ada 100644
--- a/manage/resources/public/http-https.mdx
+++ b/content/docs/manage/resources/public/http-https.mdx
@@ -3,8 +3,6 @@ title: "HTTP / HTTPS"
description: "Publish websites, APIs, and dashboards as authenticated public reverse proxies"
---
-
-
HTTP and HTTPS public resources are the most common public resource type. They expose a web application or API on a fully qualified domain name with a valid TLS certificate, fronted by Pangolin's authenticated reverse proxy.
Users open the resource URL in any web browser. No Pangolin client is required.
diff --git a/manage/resources/public/maintenance.mdx b/content/docs/manage/resources/public/maintenance.mdx
similarity index 100%
rename from manage/resources/public/maintenance.mdx
rename to content/docs/manage/resources/public/maintenance.mdx
diff --git a/manage/resources/public/raw-resources.mdx b/content/docs/manage/resources/public/raw-resources.mdx
similarity index 97%
rename from manage/resources/public/raw-resources.mdx
rename to content/docs/manage/resources/public/raw-resources.mdx
index 7beb5af..b206d56 100644
--- a/manage/resources/public/raw-resources.mdx
+++ b/content/docs/manage/resources/public/raw-resources.mdx
@@ -3,8 +3,6 @@ title: "TCP / UDP"
description: "Expose raw TCP and UDP services on a Pangolin server port without authentication"
---
-
-
TCP and UDP public resources are protocol-agnostic proxies. Unlike HTTP/HTTPS, SSH, RDP, and VNC, they do **not** receive a fully qualified domain name or TLS certificate. Instead, each resource binds to a port on the Pangolin server host. Clients connect to `
+
After installation, click on the router app link at the top of the page to configure the app with your Newt credentials from Pangolin. Once you have entered the credentials, save and start the app. The router will now be connected to your Pangolin site and you can manage it like any other Newt site in the dashboard.
-
+
A complete config file is located at `/etc/newt/settings` on the router. You can edit this file directly to change credentials or add additional configuration options. After making changes, restart the router app to apply the new configuration. An example settings file can be found at: https://github.com/fosrl/newt/blob/main/packages/advantech/merge/etc/defaults
diff --git a/manage/sites/install-site.mdx b/content/docs/manage/sites/install-site.mdx
similarity index 77%
rename from manage/sites/install-site.mdx
rename to content/docs/manage/sites/install-site.mdx
index 5b4bfa7..7ecf695 100644
--- a/manage/sites/install-site.mdx
+++ b/content/docs/manage/sites/install-site.mdx
@@ -266,79 +266,6 @@ Running a site in a Kubernetes cluster is covered separately from the Docker ins
+
+
Optionally, sites provisioned with a key can be placed into a pending state. They appear under the Pending Sites tab on the provisioning page so administrators can review new sites and approve them before they are treated as fully active in production.
@@ -144,5 +144,5 @@ Admins can still inspect pending resources from the site: open **Resources** on
Approving a pending site marks all of its associated pending resources as not pending and enables them, moving the staged setup into production. Rejecting a pending site deletes all associated pending resources along with the site.
-
+
diff --git a/manage/sites/understanding-sites.mdx b/content/docs/manage/sites/understanding-sites.mdx
similarity index 100%
rename from manage/sites/understanding-sites.mdx
rename to content/docs/manage/sites/understanding-sites.mdx
diff --git a/manage/sites/update-site.mdx b/content/docs/manage/sites/update-site.mdx
similarity index 100%
rename from manage/sites/update-site.mdx
rename to content/docs/manage/sites/update-site.mdx
diff --git a/manage/ssh.mdx b/content/docs/manage/ssh.mdx
similarity index 100%
rename from manage/ssh.mdx
rename to content/docs/manage/ssh.mdx
diff --git a/self-host/advanced/cloudflare-proxy.mdx b/content/docs/self-host/advanced/cloudflare-proxy.mdx
similarity index 98%
rename from self-host/advanced/cloudflare-proxy.mdx
rename to content/docs/self-host/advanced/cloudflare-proxy.mdx
index 2e1e668..01d3a58 100644
--- a/self-host/advanced/cloudflare-proxy.mdx
+++ b/content/docs/self-host/advanced/cloudflare-proxy.mdx
@@ -136,5 +136,5 @@ After making these changes, restart both Traefik and Pangolin for the configurat
If websockets are not connecting from sites or clients, ensure that websockets are enabled in Cloudflare:
-
+
\ No newline at end of file
diff --git a/self-host/advanced/config-file.mdx b/content/docs/self-host/advanced/config-file.mdx
similarity index 97%
rename from self-host/advanced/config-file.mdx
rename to content/docs/self-host/advanced/config-file.mdx
index 74ca12c..65cef1a 100644
--- a/self-host/advanced/config-file.mdx
+++ b/content/docs/self-host/advanced/config-file.mdx
@@ -310,7 +310,7 @@ This section contains the complete reference for all configuration options in `c
**Default**: `false`
- **Environment Variable**: `ENABLE_AI_GATEWAY_CLIENT_IP_HEADER` (or `ENABLE_AI_GATEWAY_CLIENT_IP_HEADER_FILE` to read the value from a file - see [Reading secrets from a file](#reading-secrets-from-a-file-_file-suffix))
+ **Environment Variable**: `ENABLE_AI_GATEWAY_CLIENT_IP_HEADER` (or `ENABLE_AI_GATEWAY_CLIENT_IP_HEADER_FILE` to read the value from a file — see [Reading secrets from a file](#reading-secrets-from-a-file-_file-suffix))
+
+ >
+ );
+}
+
+export function baseOptions(): BaseLayoutProps {
+ return {
+ nav: {
+ title: