diff --git a/src/routes/(docs)/docs/content/v4/guides/api-custom-eval-examples.md b/src/routes/(docs)/docs/content/v4/guides/api-custom-eval-examples.md
index 0e81c731..7908434c 100644
--- a/src/routes/(docs)/docs/content/v4/guides/api-custom-eval-examples.md
+++ b/src/routes/(docs)/docs/content/v4/guides/api-custom-eval-examples.md
@@ -31,7 +31,7 @@ Response: Array of todo objects with `completed` boolean field.
### Eval function:
```javascript
-(async function (statusCode, responseTime, responseRaw) {
+;(async function (statusCode, responseTime, responseRaw) {
if (statusCode !== 200) {
return { status: "DOWN", latency: responseTime }
}
@@ -81,7 +81,7 @@ SECRET_PARAM=your_real_secret_value
## Cheerio HTML content check {#cheerio-html-check-eval}
```javascript
-(async function (statusCode, responseTime, responseRaw, modules) {
+;(async function (statusCode, responseTime, responseRaw, modules) {
if (statusCode !== 200) {
return { status: "DOWN", latency: responseTime }
}
diff --git a/src/routes/(docs)/docs/content/v4/monitors/grpc.md b/src/routes/(docs)/docs/content/v4/monitors/grpc.md
index 60e6e017..157efd1e 100644
--- a/src/routes/(docs)/docs/content/v4/monitors/grpc.md
+++ b/src/routes/(docs)/docs/content/v4/monitors/grpc.md
@@ -26,13 +26,13 @@ Connection errors and timeouts return **DOWN**.
## Configuration fields {#configuration-fields}
-| Field | Type | Default | Notes |
-| :-------- | :-------- | :------ | :--------------------------------------------- |
-| `host` | `string` | — | Required |
-| `port` | `number` | `50051` | Required |
-| `service` | `string` | `""` | Fully qualified service name; empty = overall |
-| `tls` | `boolean` | `false` | Use TLS credentials |
-| `timeout` | `number` | `10000` | Request deadline in ms |
+| Field | Type | Default | Notes |
+| :-------- | :-------- | :------ | :-------------------------------------------- |
+| `host` | `string` | — | Required |
+| `port` | `number` | `50051` | Required |
+| `service` | `string` | `""` | Fully qualified service name; empty = overall |
+| `tls` | `boolean` | `false` | Use TLS credentials |
+| `timeout` | `number` | `10000` | Request deadline in ms |
## Example {#example}
diff --git a/src/routes/(embed)/+layout.svelte b/src/routes/(embed)/+layout.svelte
index 60b52ebe..1b5f180c 100644
--- a/src/routes/(embed)/+layout.svelte
+++ b/src/routes/(embed)/+layout.svelte
@@ -13,6 +13,7 @@
+
Kener Status
{#if data.font?.cssSrc}
diff --git a/src/routes/(kener)/+page.svelte b/src/routes/(kener)/+page.svelte
index 6f7537f1..46b04435 100644
--- a/src/routes/(kener)/+page.svelte
+++ b/src/routes/(kener)/+page.svelte
@@ -133,6 +133,8 @@
{/if}
+
+
{#if data.socialPagePreviewImage}
diff --git a/src/routes/(kener)/[page_path]/+page.svelte b/src/routes/(kener)/[page_path]/+page.svelte
index 6f7537f1..46b04435 100644
--- a/src/routes/(kener)/[page_path]/+page.svelte
+++ b/src/routes/(kener)/[page_path]/+page.svelte
@@ -133,6 +133,8 @@
{/if}
+
+
{#if data.socialPagePreviewImage}
diff --git a/src/routes/(kener)/[page_path]/events/[MMMM]-[YYYY]/+page.svelte b/src/routes/(kener)/[page_path]/events/[MMMM]-[YYYY]/+page.svelte
index 99670b00..6b7e44f9 100644
--- a/src/routes/(kener)/[page_path]/events/[MMMM]-[YYYY]/+page.svelte
+++ b/src/routes/(kener)/[page_path]/events/[MMMM]-[YYYY]/+page.svelte
@@ -159,6 +159,11 @@
{currentMonth} - Maintenances & Incidents - {data.siteName}
+
+
+
+
+
{#if data.socialPreviewImage}
diff --git a/src/routes/(kener)/events/[MMMM]-[YYYY]/+page.svelte b/src/routes/(kener)/events/[MMMM]-[YYYY]/+page.svelte
index a04f7151..833b0259 100644
--- a/src/routes/(kener)/events/[MMMM]-[YYYY]/+page.svelte
+++ b/src/routes/(kener)/events/[MMMM]-[YYYY]/+page.svelte
@@ -159,6 +159,11 @@
{currentMonth} - Maintenances & Incidents - {data.siteName}
+
+
+
+
+
{#if data.socialPreviewImage}
diff --git a/src/routes/(kener)/incidents/[incident_id]/+page.svelte b/src/routes/(kener)/incidents/[incident_id]/+page.svelte
index 67ec1fa4..18e3e96e 100644
--- a/src/routes/(kener)/incidents/[incident_id]/+page.svelte
+++ b/src/routes/(kener)/incidents/[incident_id]/+page.svelte
@@ -20,9 +20,12 @@
{data.incident.title + " - " + data.siteName}
-
+
+
+
{#if data.comments.length > 0}
+
{/if}
{#if data.socialPreviewImage}
diff --git a/src/routes/(kener)/maintenances/[maintenance_id]/+page.svelte b/src/routes/(kener)/maintenances/[maintenance_id]/+page.svelte
index 813f3686..ed512a05 100644
--- a/src/routes/(kener)/maintenances/[maintenance_id]/+page.svelte
+++ b/src/routes/(kener)/maintenances/[maintenance_id]/+page.svelte
@@ -65,9 +65,12 @@
{data.maintenance.title + " - " + data.siteName}
-
+
+
+
{#if data.maintenance.description}
+
{/if}
{#if data.socialPreviewImage}
diff --git a/src/routes/(kener)/monitors/[monitor_tag]/+page.svelte b/src/routes/(kener)/monitors/[monitor_tag]/+page.svelte
index cd1c61fc..6bafeaf4 100644
--- a/src/routes/(kener)/monitors/[monitor_tag]/+page.svelte
+++ b/src/routes/(kener)/monitors/[monitor_tag]/+page.svelte
@@ -29,9 +29,12 @@
{data.monitorName + " - " + data.siteName}
-
+
+
+
{#if data.monitorDescription}
+
{/if}
{#if data.socialPreviewImage}
diff --git a/src/routes/(manage)/+layout.svelte b/src/routes/(manage)/+layout.svelte
index 81b87001..d931e73f 100644
--- a/src/routes/(manage)/+layout.svelte
+++ b/src/routes/(manage)/+layout.svelte
@@ -62,6 +62,7 @@
+
{pageTitle} | Kener
{#if data.font?.cssSrc}
diff --git a/src/routes/(manage)/manage/app/badges/+page.svelte b/src/routes/(manage)/manage/app/badges/+page.svelte
index 6532efba..e9f10093 100644
--- a/src/routes/(manage)/manage/app/badges/+page.svelte
+++ b/src/routes/(manage)/manage/app/badges/+page.svelte
@@ -250,9 +250,7 @@
{/each}
-
- Status text will be shown in the selected language
-
+ Status text will be shown in the selected language
{/if}
diff --git a/src/routes/llms.txt/+server.ts b/src/routes/llms.txt/+server.ts
new file mode 100644
index 00000000..c418afeb
--- /dev/null
+++ b/src/routes/llms.txt/+server.ts
@@ -0,0 +1,11 @@
+import { redirect } from "@sveltejs/kit";
+import type { RequestHandler } from "./$types";
+import { getDocsRootConfig } from "../(docs)/docs/docs-utils.server";
+
+export const GET: RequestHandler = () => {
+ const rootConfig = getDocsRootConfig();
+ const latestVersion = rootConfig.versions.find((v) => v.latest) ?? rootConfig.versions[0];
+ const versionSlug = latestVersion?.slug ?? "v4";
+
+ throw redirect(301, `/docs/${versionSlug}/llms.txt`);
+};
diff --git a/src/routes/sitemap.xml/+server.ts b/src/routes/sitemap.xml/+server.ts
new file mode 100644
index 00000000..f5149304
--- /dev/null
+++ b/src/routes/sitemap.xml/+server.ts
@@ -0,0 +1,53 @@
+import type { RequestHandler } from "@sveltejs/kit";
+import { getDocsRootConfig, getVersionDocsUrls } from "../(docs)/docs/docs-utils.server";
+
+const BASE_DOMAIN = "https://kener.ing";
+
+export const GET: RequestHandler = () => {
+ const rootConfig = getDocsRootConfig();
+ const latestVersion = rootConfig.versions.find((v) => v.latest) ?? rootConfig.versions[0];
+
+ const urls: { loc: string; priority: string; changefreq: string }[] = [
+ { loc: `${BASE_DOMAIN}/docs`, priority: "1.0", changefreq: "weekly" },
+ ];
+
+ if (latestVersion) {
+ const docsUrls = getVersionDocsUrls(latestVersion.slug, BASE_DOMAIN);
+ for (const url of docsUrls) {
+ // Skip raw markdown URLs and external URLs
+ if (url.includes("/docs/raw/") || !url.startsWith(BASE_DOMAIN)) continue;
+ urls.push({ loc: url, priority: "0.8", changefreq: "weekly" });
+ }
+
+ // Add llms.txt for AI discoverability
+ urls.push({
+ loc: `${BASE_DOMAIN}/docs/${latestVersion.slug}/llms.txt`,
+ priority: "0.5",
+ changefreq: "weekly",
+ });
+ }
+
+ const xml = `
+