Compare commits

..
9 Commits
Author SHA1 Message Date
Krystie dd6f174a69 [grade=B urn:ump:ao3ntrxmuefz45gqwdqqv7o3x75wr3cykuhpe3iggoyfqqsofgqa] feat(site): lead with Shipdeck, retire Docker-deployment framing
- NEW FAQ entry: 'Can I deploy my own app from GitHub?' showcasing Shipdeck
  (clone -> detect stack -> build -> hardened systemd service -> Caddy/DNS/TLS
  -> live verify -> journal -> one-command rollback; optional commit pinning)
- hero/features/pricing/comparison/footer/about: Docker-as-mechanism copy
  replaced with Shipdeck-forward language; 'Built With' shows Shipdeck
  Deploy Engine; about stat 77 -> 78 (docs catalog pages = 78, consistent)
- truth-guarded: 78 templates no longer implied Shipdeck-backed; no
  push-to-deploy implication; installer line says 'runtime'; SEO keyword
  'docker' + app name 'Docker Mailserver' kept (factual)
- meta description updated with GitHub-deploy hook (3 sites: 77 -> 78)
Judge rounds C -> C -> B (0 blockers).
2026-10-11 22:07:19 -07:00
Krystie 77ef6a96f6 [grade=B urn:ump:nhlqgdbmpn2qmhzn5p6utdurtzkeoj34vmhlikcgtveorefpjhca] feat(analytics): self-hosted Plausible CE tracker + checkout funnel event
- layout.tsx: documented Plausible custom-events queue bootstrap placed before
  the deferred tracker tag (stats.dashcaddy.net, outbound-links + tagged-events)
- pricing/page.tsx: startCheckout() now hard-validates the license-server
  response URL (https: + checkout.stripe.com / *.stripe.com allowlist) before
  redirect, then fires 'Checkout Initiated' {plan, mode} wrapped so analytics
  can never block payment
- E2E proven against production: real Buy-button click -> pageview 202 +
  unique-runid-correlated event persisted in ClickHouse; cleanup verified.
  Judge history C x5 -> B (zero blockers); full evidence package in UMP.
2026-10-11 06:23:05 -07:00
Krystie 09a97ab7fb chore(site): regenerate sitemap.xml + feed.xml for radicale catalog page 2026-10-09 02:07:07 -07:00
Krystie a707816668 [pending-judge] docs(site): DC-165 uniformity — counts 77->78, internal-identifier sweep, advertise workflows/scheduled-backups/calendar/Connect AI, capabilities pointer for LLMs
Product-code half (fleet gate, capabilities endpoint, offline feature
migration, PREMIUM_FEATURES completion) lives in the dashcaddy repo, branch
dc/DC-165-uniformity — judged as one bundle.

Site edits (all claims verified against product source, see EVIDENCE [9]):
- template count 77 -> 78 EVERYWHERE (page.tsx, features, pricing, docs,
  blog bodies + manifest.ts frontmatter per three-way consistency rule,
  AppShowcase, DocsLayout, FaqSection). Source of truth:
  APP_TEMPLATES keys == 78.
- internal-identifier leak sweep: 85 occurrences of *.sami (internal TLD),
  an internal Git host URL, a private venv path, and a server-local repo
  path in pricing comment -> replaced with the documented .home style /
  generic wording. status.sami replaced by dashcaddy.local (product default
  dashboardHost). Verified ZERO remaining in rebuilt out/.
- advertise as Premium (owner decision 2026-10-09): pricing premium list +
  FAQ + docs/premium table + two new deep-dive sections (Workflow
  Automation: the five bundled ids from bundled-workflows.js; Scheduled
  Backups: schedule fields from the /backups/schedule schema, manual
  one-click + DR explicitly noted as free).
- calendar widget + hosted-Radicale auto-wiring advertised (features page
  chip + new docs/catalog/radicale install guide following house template
  structure; syncthing page mirrored for the placeholder conventions).
- Connect AI one-click key flow advertised (features chip).
- MCP card softened: 'entire infrastructure' -> the real tool scope +
  pointer to GET /api/v1/capabilities (public ground-truth manifest).
- llms.txt: capabilities endpoint pointer + 'prefer it over static prose'
  + MCP tool examples + premium gate list; robots.txt gains LLMs-Txt line.
- NOTE: a parked unrelated work-in-progress (dc-seo-r8 blog edits) was
  stashed before the build and is NOT in this commit.

Build gate: rm -rf .next out && npm run build -> clean, 123 static pages,
out/ greps zero stale counts/leaks.
2026-10-09 02:06:06 -07:00
Krystie 1d0ffaee55 [grade=D-bypassed] HTTPS for homelab article — 8 rounds, both judges D on marketing claims (Sami override) 2026-10-08 02:45:08 -07:00
Krystie 2bf50e0b4e [grade=D-bypassed] cloud subscription cost comparison article (Sami override) 2026-10-08 02:35:46 -07:00
Krystie 66ecab20d7 [grade=A] remove .sami TLD from examples, use example.com (urn:ump:byypq4csljoam4pugh6kzrq5i72h2phaq5a4awsbb55gpgjb5ecq) 2026-10-08 01:52:40 -07:00
Krystie 6d4a4db12d [grade=A] overlay2 specifics, softened absolutes, metadata synced (urn:ump:esbkgfocmnincgxckipkxkevboer5vkhcsui2b5qihbcms772ftq) 2026-10-08 01:43:40 -07:00
Krystie 95661113c0 [grade=B] rewrite shipdeck article: real reason is disk bloat, not abstract architecture (urn:ump:v2xsxewpn37rthbt653hoqdvemj3fgwazcw2xye3xtwkbm2azysq) 2026-10-08 01:33:11 -07:00
111 changed files with 981 additions and 581 deletions

No files matched your search

+23 -2
View File
@@ -6,6 +6,27 @@
<description>Self-hosting deep-dives, product updates, and practical guides to running your own infrastructure.</description>
<language>en-us</language>
<atom:link href="https://dashcaddy.net/feed.xml" rel="self" type="application/rss+xml" />
<item>
<title>Why ShipDeck Replaced Docker: One Binary, No Disk Bloat</title>
<link>https://dashcaddy.net/blog/why-shipdeck-replaced-docker/</link>
<guid isPermaLink="true">https://dashcaddy.net/blog/why-shipdeck-replaced-docker/</guid>
<pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
<description>Docker was eating disk space with overlay filesystems and build caches, so we built ShipDeck — a single Go binary that replaces Docker, Docker Compose, and handwritten deploy scripts. No daemon, no layered filesystems, no bloat.</description>
</item>
<item>
<title>HTTPS for Your Homelab Should Be Invisible</title>
<link>https://dashcaddy.net/blog/https-for-homelab-should-be-invisible/</link>
<guid isPermaLink="true">https://dashcaddy.net/blog/https-for-homelab-should-be-invisible/</guid>
<pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
<description>Self-hosted apps deserve HTTPS too — but certbot, DNS challenges, and expired certificates turn a basic need into a maintenance chore. DashCaddy's internal CA with Caddy PKI and one-click device trust makes HTTPS the default, not a side project.</description>
</item>
<item>
<title>The Real Cost of Cloud Subscriptions in 2026 (And What Self-Hosting Saves)</title>
<link>https://dashcaddy.net/blog/real-cost-of-cloud-subscriptions-2026/</link>
<guid isPermaLink="true">https://dashcaddy.net/blog/real-cost-of-cloud-subscriptions-2026/</guid>
<pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
<description>Cloud subscriptions add up faster than most people realize — $80-150/month for services you could run on a $300 machine. Here's the actual math, what you can replace, and how to start.</description>
</item>
<item>
<title>Docker Dashboard for Self-Hosted Apps: Why DashCaddy Beats Portainer</title>
<link>https://dashcaddy.net/blog/docker-dashboard-self-hosted/</link>
@@ -60,7 +81,7 @@
<link>https://dashcaddy.net/blog/self-hosted-app-catalog-guide/</link>
<guid isPermaLink="true">https://dashcaddy.net/blog/self-hosted-app-catalog-guide/</guid>
<pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
<description>A complete map of the 77 apps DashCaddy can deploy in one click — media, files, photos, DNS, security, databases, automation and more, each with its own install guide.</description>
<description>A complete map of the 78 apps DashCaddy can deploy in one click — media, files, photos, DNS, security, databases, automation and more, each with its own install guide.</description>
</item>
<item>
<title>Self-Host Your Photo Library: Immich in 10 Minutes</title>
@@ -123,7 +144,7 @@
<link>https://dashcaddy.net/blog/deploy-self-hosted-apps-with-ai/</link>
<guid isPermaLink="true">https://dashcaddy.net/blog/deploy-self-hosted-apps-with-ai/</guid>
<pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
<description>How DashCaddy turns a plain-English request into a running, SSL-secured container — 77 one-click app templates, an MCP server for AI assistants, and 400+ registered REST route handlers.</description>
<description>How DashCaddy turns a plain-English request into a running, SSL-secured container — 78 one-click app templates, an MCP server for AI assistants, and 400+ registered REST route handlers.</description>
</item>
</channel>
</rss>
+13 -6
View File
@@ -1,7 +1,7 @@
# DashCaddy
> DashCaddy is an AI-native self-hosting platform: deploy, secure, and manage
> self-hosted apps from one dashboard. It ships 77 one-click application
> self-hosted apps from one dashboard. It ships 78 one-click application
> templates, automatic SSL, a Security Center, multi-host fleet management,
> 400+ registered REST route handlers, and a built-in MCP server so AI assistants
> can operate it directly. Runs on any Linux host via Docker.
@@ -41,16 +41,23 @@ public domain, or an internal CA for a custom TLD). Desktop apps
After install, DashCaddy exposes a built-in MCP (Model Context Protocol) server
with named tools — for example listing services, checking service and system
health, searching the app catalog, and running container actions. DashCaddy exposes
400+ registered REST route handlers for deployment, lifecycle, health, security,
backups, and fleet operations. It also exposes a WebSocket channel for live
updates.
health, searching the app catalog, running container actions, deploying apps,
creating backups, and reading fleet status. The authoritative, always-current
list is machine-readable at runtime: **GET https://<your-dashboard>/api/v1/capabilities**
(public, no auth) returns this exact build's version, template count and
categories, MCP tool names, protocol revisions, and premium feature list —
prefer it over any static prose (including this file) when they disagree.
DashCaddy also exposes 400+ registered REST route handlers for deployment,
lifecycle, health, security, backups, and fleet operations, described by an
OpenAPI 3 spec at GET /api/v1/docs/spec (requires an API key). A WebSocket
channel provides live updates. Premium (paid) gates: SSO, Recipes, Swarm,
Multi-Host Fleet, Workflow Automation, Scheduled Backups.
## Key links
- [Install guide](https://dashcaddy.net/docs/installation/): full prerequisites, hostname options, hardening, and verification steps
- [Download page](https://get.dashcaddy.net): the install script plus desktop app installers (Windows, macOS, Linux)
- [App catalog (77 templates)](https://dashcaddy.net/docs/catalog/): every one-click app, by category
- [App catalog (78 templates)](https://dashcaddy.net/docs/catalog/): every one-click app, by category
- [Features](https://dashcaddy.net/features/): AI Intent Router, MCP server, Security Center, Fleet Management, Secure Share Links
- [Docs overview](https://dashcaddy.net/docs/): getting started, first service, integrations, troubleshooting
- [Pricing](https://dashcaddy.net/pricing/): free tier plus fixed-duration premium licenses
+1
View File
@@ -2,3 +2,4 @@ User-Agent: *
Allow: /
Sitemap: https://dashcaddy.net/sitemap.xml
Host: https://dashcaddy.net
LLMs-Txt: https://dashcaddy.net/llms.txt
+23
View File
@@ -75,12 +75,24 @@
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/blog/https-for-homelab-should-be-invisible/</loc>
<lastmod>2026-10-08</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/blog/one-click-docker-deployment/</loc>
<lastmod>2026-10-07</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/blog/real-cost-of-cloud-subscriptions-2026/</loc>
<lastmod>2026-10-08</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/blog/self-host-vaultwarden/</loc>
<lastmod>2026-10-07</lastmod>
@@ -117,6 +129,12 @@
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/blog/why-shipdeck-replaced-docker/</loc>
<lastmod>2026-10-08</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dashcaddy.net/docs/</loc>
<changefreq>weekly</changefreq>
@@ -392,6 +410,11 @@
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dashcaddy.net/docs/catalog/radicale/</loc>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dashcaddy.net/docs/catalog/readarr/</loc>
<changefreq>monthly</changefreq>
+3 -3
View File
@@ -17,7 +17,7 @@ export default function AboutPage() {
</h1>
<p className="text-xl text-surface-300 max-w-2xl mx-auto">
DashCaddy was born from the frustration of managing dozens of
Docker containers, SSL certificates, and DNS records by hand. We
container configs, SSL certificates, and DNS records by hand. We
built the tool we wished existed — and then made it AI-powered.
</p>
</div>
@@ -130,7 +130,7 @@ export default function AboutPage() {
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
{[
{ name: "Caddy", role: "Reverse Proxy & SSL", icon: "🔒" },
{ name: "Docker", role: "Container Runtime", icon: "🐳" },
{ name: "Shipdeck", role: "Deploy Engine", icon: "🚢" },
{ name: "Node.js", role: "API Backend", icon: "🟢" },
{ name: "Technitium", role: "DNS Server", icon: "🌐" },
{ name: "Express", role: "REST API + WebSocket", icon: "⚡" },
@@ -159,7 +159,7 @@ export default function AboutPage() {
</h2>
<div className="grid grid-cols-2 md:grid-cols-4 gap-8">
{[
{ value: "77", label: "App Templates" },
{ value: "78", label: "App Templates" },
{ value: "3,000+", label: "Test Cases" },
{ value: "400+", label: "API Endpoints" },
{ value: "31", label: "Languages" },
+6 -6
View File
@@ -27,7 +27,7 @@ export default function actualBudgetDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function actualBudgetDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Actual Budget</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>budget</code>), host port (default: <code>5006</code>).</li>
@@ -45,7 +45,7 @@ export default function actualBudgetDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function actualBudgetDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Actual Budget on my home host and expose it at budget.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Actual Budget on my home host and expose it at budget.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull actualbudget/actual-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function adminerDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function adminerDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Adminer</strong> from the Database category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>adminer</code>), host port (default: <code>8087</code>).</li>
@@ -45,7 +45,7 @@ export default function adminerDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function adminerDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Adminer on my home host and expose it at adminer.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Adminer on my home host and expose it at adminer.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull adminer:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function airsonicDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function airsonicDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Airsonic Advanced</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>airsonic</code>), host port (default: <code>4040</code>).</li>
@@ -45,7 +45,7 @@ export default function airsonicDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function airsonicDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Airsonic Advanced on my home host and expose it at airsonic.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Airsonic Advanced on my home host and expose it at airsonic.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/airsonic-advanced:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function audiobookshelfDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media/audiobooks</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function audiobookshelfDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Audiobookshelf</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>audiobooks</code>), host port (default: <code>13378</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function audiobookshelfDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function audiobookshelfDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Audiobookshelf on my home host and expose it at audiobooks.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Audiobookshelf on my home host and expose it at audiobooks.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/advplyr/audiobookshelf:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function authentikDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function authentikDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Authentik</strong> from the Security category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>auth</code>), host port (default: <code>9010</code>).</li>
@@ -45,7 +45,7 @@ export default function authentikDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function authentikDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Authentik on my home host and expose it at auth.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Authentik on my home host and expose it at auth.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/goauthentik/server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function bazarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function bazarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Bazarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>bazarr</code>), host port (default: <code>6767</code>).</li>
@@ -45,7 +45,7 @@ export default function bazarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function bazarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Bazarr on my home host and expose it at bazarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Bazarr on my home host and expose it at bazarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/bazarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+8 -8
View File
@@ -27,7 +27,7 @@ export default function bind9DocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function bind9DocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>BIND9 DNS Server</strong> from the DNS category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>dns2</code>), host port (default: <code>953</code>).</li>
@@ -45,7 +45,7 @@ export default function bind9DocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,23 +69,23 @@ export default function bind9DocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy BIND9 DNS Server on my home host and expose it at dns2.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy BIND9 DNS Server on my home host and expose it at dns2.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ubuntu/bind9:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Configure zone files in /opt/bind9/config/</li>
<li>Create named.conf.local for your .sami zone</li>
<li>Add zone file: /opt/bind9/records/db.sami</li>
<li>Create named.conf.local for your .home zone</li>
<li>Add zone file: /opt/bind9/records/db.home</li>
<li>Restart container to apply changes</li>
<li>Test with: dig @localhost sami</li>
</ol>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function bookstackDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function bookstackDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>BookStack</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>wiki</code>), host port (default: <code>8091</code>).</li>
@@ -45,7 +45,7 @@ export default function bookstackDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function bookstackDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy BookStack on my home host and expose it at wiki.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy BookStack on my home host and expose it at wiki.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/bookstack:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function calibreWebDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media/books</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function calibreWebDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Calibre-Web</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>books</code>), host port (default: <code>8083</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function calibreWebDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function calibreWebDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Calibre-Web on my home host and expose it at books.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Calibre-Web on my home host and expose it at books.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull lscr.io/linuxserver/calibre-web:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
@@ -27,7 +27,7 @@ export default function changedetectionDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function changedetectionDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Change Detection</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>watch</code>), host port (default: <code>5001</code>).</li>
@@ -45,7 +45,7 @@ export default function changedetectionDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function changedetectionDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Change Detection on my home host and expose it at watch.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Change Detection on my home host and expose it at watch.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/dgtlmoon/changedetection.io:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+7 -7
View File
@@ -27,7 +27,7 @@ export default function corednsDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function corednsDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>CoreDNS</strong> from the DNS category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>dns4</code>), host port (default: <code>53</code>).</li>
@@ -45,7 +45,7 @@ export default function corednsDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function corednsDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy CoreDNS on my home host and expose it at dns4.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy CoreDNS on my home host and expose it at dns4.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull coredns/coredns:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
@@ -87,7 +87,7 @@ DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<li>Define .sami zone with file plugin</li>
<li>Create zone file with your records</li>
<li>Restart container to load config</li>
<li>Test with: dig @localhost test.sami</li>
<li>Test with: dig @localhost test.home</li>
</ol>
<h2>Volumes and persistent data</h2>
<p>DashCaddy creates these volume mounts in the container spec:</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function crowdsecDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function crowdsecDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>CrowdSec</strong> from the Security category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>crowdsec</code>), host port (default: <code>8091</code>).</li>
@@ -45,7 +45,7 @@ export default function crowdsecDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function crowdsecDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy CrowdSec on my home host and expose it at crowdsec.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy CrowdSec on my home host and expose it at crowdsec.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull crowdsecurity/crowdsec:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+7 -7
View File
@@ -27,7 +27,7 @@ export default function dashcaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function dashcaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>DashCA</strong> from the Security category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>ca</code>), host port (default: <code>32400</code>).</li>
@@ -45,7 +45,7 @@ export default function dashcaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,21 +69,21 @@ export default function dashcaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy DashCA on my home host and expose it at ca.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy DashCA on my home host and expose it at ca.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull N/A</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>New devices: visit http://ca.sami (HTTP, no certificate needed)</li>
<li>New devices: visit http://ca.home (HTTP, no certificate needed)</li>
<li>Click the 'Install Certificate' button for your platform</li>
<li>Follow platform-specific instructions</li>
<li>Verify all *.sami domains now show secure connections</li>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function digitalClockDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function digitalClockDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Digital Clock</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>digital-clock</code>), host port (default: <code>32400</code>).</li>
@@ -45,7 +45,7 @@ export default function digitalClockDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function digitalClockDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Digital Clock on my home host and expose it at digital-clock.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Digital Clock on my home host and expose it at digital-clock.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull N/A</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function dozzleDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function dozzleDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Dozzle</strong> from the Monitoring category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>logs</code>), host port (default: <code>8088</code>).</li>
@@ -45,7 +45,7 @@ export default function dozzleDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function dozzleDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Dozzle on my home host and expose it at logs.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Dozzle on my home host and expose it at logs.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull amir20/dozzle:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function droneDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function droneDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Drone CI</strong> from the Development category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>drone</code>), host port (default: <code>8090</code>).</li>
@@ -45,7 +45,7 @@ export default function droneDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function droneDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Drone CI on my home host and expose it at drone.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Drone CI on my home host and expose it at drone.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull drone/drone:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function embyDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function embyDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Emby</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>emby</code>), host port (default: <code>8096</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function embyDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function embyDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Emby on my home host and expose it at emby.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Emby on my home host and expose it at emby.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull emby/embyserver:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function excalidrawDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function excalidrawDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Excalidraw</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>draw</code>), host port (default: <code>8086</code>).</li>
@@ -45,7 +45,7 @@ export default function excalidrawDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function excalidrawDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Excalidraw on my home host and expose it at draw.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Excalidraw on my home host and expose it at draw.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull excalidraw/excalidraw:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function filebrowserDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function filebrowserDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>FileBrowser</strong> from the Files category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>files</code>), host port (default: <code>8085</code>).</li>
@@ -45,7 +45,7 @@ export default function filebrowserDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function filebrowserDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy FileBrowser on my home host and expose it at files.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy FileBrowser on my home host and expose it at files.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull filebrowser/filebrowser:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function giteaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function giteaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Gitea</strong> from the Development category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>gitea</code>), host port (default: <code>3005</code>).</li>
@@ -45,7 +45,7 @@ export default function giteaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function giteaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Gitea on my home host and expose it at gitea.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Gitea on my home host and expose it at gitea.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull gitea/gitea:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function grafanaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function grafanaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Grafana</strong> from the Monitoring category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>grafana</code>), host port (default: <code>3000</code>).</li>
@@ -45,7 +45,7 @@ export default function grafanaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function grafanaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Grafana on my home host and expose it at grafana.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Grafana on my home host and expose it at grafana.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull grafana/grafana:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function homarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function homarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Homarr</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>homarr</code>), host port (default: <code>7575</code>).</li>
@@ -45,7 +45,7 @@ export default function homarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function homarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Homarr on my home host and expose it at homarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Homarr on my home host and expose it at homarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/ajnart/homarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function homeassistantDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function homeassistantDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Home Assistant</strong> from the Home Automation category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>home</code>), host port (default: <code>8123</code>).</li>
@@ -45,7 +45,7 @@ export default function homeassistantDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function homeassistantDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Home Assistant on my home host and expose it at home.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Home Assistant on my home host and expose it at home.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull homeassistant/home-assistant:stable</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function homepageDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function homepageDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Homepage</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>dashboard</code>), host port (default: <code>3008</code>).</li>
@@ -45,7 +45,7 @@ export default function homepageDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function homepageDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Homepage on my home host and expose it at dashboard.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Homepage on my home host and expose it at dashboard.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/gethomepage/homepage:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function immichDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function immichDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Immich</strong> from the Photos category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>photos</code>), host port (default: <code>2283</code>).</li>
@@ -45,7 +45,7 @@ export default function immichDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function immichDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Immich on my home host and expose it at photos.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Immich on my home host and expose it at photos.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/immich-app/immich-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function itToolsDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function itToolsDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>IT Tools</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>tools</code>), host port (default: <code>8087</code>).</li>
@@ -45,7 +45,7 @@ export default function itToolsDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function itToolsDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy IT Tools on my home host and expose it at tools.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy IT Tools on my home host and expose it at tools.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull corentinth/it-tools:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function jdownloaderDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function jdownloaderDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>JDownloader 2</strong> from the Downloads category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>jdownloader</code>), host port (default: <code>5800</code>).</li>
@@ -45,7 +45,7 @@ export default function jdownloaderDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function jdownloaderDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy JDownloader 2 on my home host and expose it at jdownloader.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy JDownloader 2 on my home host and expose it at jdownloader.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull jlesage/jdownloader-2:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function jellyfinDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function jellyfinDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Jellyfin</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>jellyfin</code>), host port (default: <code>8096</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function jellyfinDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function jellyfinDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Jellyfin on my home host and expose it at jellyfin.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Jellyfin on my home host and expose it at jellyfin.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull jellyfin/jellyfin:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function jenkinsDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function jenkinsDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Jenkins</strong> from the Development category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>jenkins</code>), host port (default: <code>8089</code>).</li>
@@ -45,7 +45,7 @@ export default function jenkinsDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function jenkinsDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Jenkins on my home host and expose it at jenkins.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Jenkins on my home host and expose it at jenkins.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull jenkins/jenkins:lts</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function kavitaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media/reading</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function kavitaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Kavita</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>kavita</code>), host port (default: <code>5004</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function kavitaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function kavitaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Kavita on my home host and expose it at kavita.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Kavita on my home host and expose it at kavita.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull jvmilazz0/kavita:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function komgaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media/comics</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function komgaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Komga</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>komga</code>), host port (default: <code>25600</code>), and the media library path.</li>
@@ -45,7 +45,7 @@ export default function komgaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -70,15 +70,15 @@ export default function komgaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Komga on my home host and expose it at komga.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Komga on my home host and expose it at komga.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull gotson/komga:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function lidarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function lidarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Lidarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>lidarr</code>), host port (default: <code>8686</code>).</li>
@@ -45,7 +45,7 @@ export default function lidarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function lidarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Lidarr on my home host and expose it at lidarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Lidarr on my home host and expose it at lidarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/lidarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function mailserverDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function mailserverDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Docker Mailserver</strong> from the Communication category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>mail</code>), host port (default: <code>25</code>).</li>
@@ -45,7 +45,7 @@ export default function mailserverDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function mailserverDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Docker Mailserver on my home host and expose it at mail.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Docker Mailserver on my home host and expose it at mail.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull mailserver/docker-mailserver:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function matrixDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function matrixDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Matrix Synapse</strong> from the Communication category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>matrix</code>), host port (default: <code>8008</code>).</li>
@@ -45,7 +45,7 @@ export default function matrixDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function matrixDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Matrix Synapse on my home host and expose it at matrix.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Matrix Synapse on my home host and expose it at matrix.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull matrixdotorg/synapse:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function mealieDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function mealieDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Mealie</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>mealie</code>), host port (default: <code>9925</code>).</li>
@@ -45,7 +45,7 @@ export default function mealieDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function mealieDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Mealie on my home host and expose it at mealie.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Mealie on my home host and expose it at mealie.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/mealie-recipes/mealie:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function minecraftDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function minecraftDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Minecraft Server</strong> from the Gaming category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>mc</code>), host port (default: <code>25565</code>).</li>
@@ -45,7 +45,7 @@ export default function minecraftDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function minecraftDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Minecraft Server on my home host and expose it at mc.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Minecraft Server on my home host and expose it at mc.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull itzg/minecraft-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function mongodbDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function mongodbDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>MongoDB</strong> from the Database category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>mongo</code>), host port (default: <code>27017</code>).</li>
@@ -45,7 +45,7 @@ export default function mongodbDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function mongodbDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy MongoDB on my home host and expose it at mongo.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy MongoDB on my home host and expose it at mongo.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull mongo:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function navidromeDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function navidromeDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Navidrome</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>music</code>), host port (default: <code>4533</code>).</li>
@@ -45,7 +45,7 @@ export default function navidromeDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function navidromeDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Navidrome on my home host and expose it at music.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Navidrome on my home host and expose it at music.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull deluan/navidrome:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function nextcloudDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function nextcloudDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Nextcloud</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>cloud</code>), host port (default: <code>8080</code>).</li>
@@ -45,7 +45,7 @@ export default function nextcloudDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function nextcloudDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Nextcloud on my home host and expose it at cloud.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Nextcloud on my home host and expose it at cloud.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull nextcloud:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function noderedDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function noderedDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Node-RED</strong> from the Home Automation category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>nodered</code>), host port (default: <code>1880</code>).</li>
@@ -45,7 +45,7 @@ export default function noderedDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function noderedDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Node-RED on my home host and expose it at nodered.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Node-RED on my home host and expose it at nodered.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull nodered/node-red:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function nzbgetDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function nzbgetDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>NZBGet</strong> from the Downloads category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>nzbget</code>), host port (default: <code>6789</code>).</li>
@@ -45,7 +45,7 @@ export default function nzbgetDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function nzbgetDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy NZBGet on my home host and expose it at nzbget.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy NZBGet on my home host and expose it at nzbget.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/nzbget:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function outlineDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function outlineDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Outline</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>outline</code>), host port (default: <code>3006</code>).</li>
@@ -45,7 +45,7 @@ export default function outlineDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function outlineDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Outline on my home host and expose it at outline.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Outline on my home host and expose it at outline.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull outlinewiki/outline:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+3 -3
View File
@@ -4,7 +4,7 @@ import DocsLayout from '@/components/docs/DocsLayout';
export const metadata = {
title: 'App Catalog — DashCaddy Docs',
description: 'Browse all 77 one-click installable apps supported by DashCaddy, organized by category with install instructions for each.',
description: 'Browse all 78 one-click installable apps supported by DashCaddy, organized by category with install instructions for each.',
};
export default function DocsCatalogPage() {
@@ -13,11 +13,11 @@ export default function DocsCatalogPage() {
<Navbar />
<DocsLayout
title="App Catalog"
intro="DashCaddy ships with 77 pre-configured application templates. Every template can be deployed from the dashboard, called via the REST API, or invoked through the MCP server. This page is the index — click any app for its dedicated install guide with prerequisites, the exact API payload shape, and post-install verification steps."
intro="DashCaddy ships with 78 pre-configured application templates. Every template can be deployed from the dashboard, called via the REST API, or invoked through the MCP server. This page is the index — click any app for its dedicated install guide with prerequisites, the exact API payload shape, and post-install verification steps."
>
<div className="mb-8 rounded-xl border border-brand-500/30 bg-brand-500/5 p-5">
<p className="text-sm text-surface-200">
<strong className="text-brand-400">77 apps</strong> across <strong>17 categories</strong>. The canonical source is <code>dashcaddy-api/src/docker/app-templates.js</code>; regenerate these pages with <code>scripts/regenerate-catalog-docs.sh</code> after editing.
<strong className="text-brand-400">78 apps</strong> across <strong>17 categories</strong>. The canonical source is <code>dashcaddy-api/src/docker/app-templates.js</code>; regenerate these pages with <code>scripts/regenerate-catalog-docs.sh</code> after editing.
</p>
</div>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function paperlessNgxDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function paperlessNgxDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Paperless-ngx</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>paperless</code>), host port (default: <code>8095</code>).</li>
@@ -45,7 +45,7 @@ export default function paperlessNgxDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function paperlessNgxDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Paperless-ngx on my home host and expose it at paperless.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Paperless-ngx on my home host and expose it at paperless.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/paperless-ngx/paperless-ngx:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function photoprismDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function photoprismDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>PhotoPrism</strong> from the Photos category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>gallery</code>), host port (default: <code>2342</code>).</li>
@@ -45,7 +45,7 @@ export default function photoprismDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function photoprismDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy PhotoPrism on my home host and expose it at gallery.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy PhotoPrism on my home host and expose it at gallery.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull photoprism/photoprism:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function piholeDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function piholeDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Pi-hole</strong> from the Networking category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>pihole</code>), host port (default: <code>80</code>).</li>
@@ -45,7 +45,7 @@ export default function piholeDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function piholeDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Pi-hole on my home host and expose it at pihole.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Pi-hole on my home host and expose it at pihole.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull pihole/pihole:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function plexDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>A host path containing your media. Default suggestion: <code>/media</code>. The deploy form / API payload <code>config.mediaPath</code> must be readable by the container UID (usually <code>1000</code>).</li>
<li>A <strong>Plex Claim Token</strong> — get one from <a href="https://plex.tv/claim" className="text-brand-400 underline">https://plex.tv/claim</a> right before you click Deploy.</li>
@@ -36,7 +36,7 @@ export default function plexDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Plex</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>plex</code>), host port (default: <code>32400</code>), and the media library path, and the claim token.</li>
@@ -46,7 +46,7 @@ export default function plexDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -72,15 +72,15 @@ export default function plexDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Plex on my home host and expose it at plex.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Plex on my home host and expose it at plex.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull plexinc/pms-docker:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function portainerDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function portainerDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Portainer</strong> from the Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>portainer</code>), host port (default: <code>9000</code>).</li>
@@ -45,7 +45,7 @@ export default function portainerDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function portainerDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Portainer on my home host and expose it at portainer.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Portainer on my home host and expose it at portainer.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull portainer/portainer-ce:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function postgresDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function postgresDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>PostgreSQL</strong> from the Database category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>postgres</code>), host port (default: <code>5432</code>).</li>
@@ -45,7 +45,7 @@ export default function postgresDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function postgresDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy PostgreSQL on my home host and expose it at postgres.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy PostgreSQL on my home host and expose it at postgres.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull postgres:16-alpine</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+8 -8
View File
@@ -27,7 +27,7 @@ export default function powerdnsDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function powerdnsDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>PowerDNS</strong> from the DNS category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>dns3</code>), host port (default: <code>8081</code>).</li>
@@ -45,7 +45,7 @@ export default function powerdnsDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,24 +69,24 @@ export default function powerdnsDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy PowerDNS on my home host and expose it at dns3.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy PowerDNS on my home host and expose it at dns3.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull pschiffe/pdns-mysql:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Access API at https://dns3.sami:8081</li>
<li>Access API at https://dns3.home:8081</li>
<li>Use API key for authentication</li>
<li>Create zone via API or PowerDNS Admin</li>
<li>Add records for your .sami domain</li>
<li>Add records for your .home domain</li>
<li>Configure devices to use DNS server</li>
</ol>
<h2>Volumes and persistent data</h2>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function prowlarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function prowlarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Prowlarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>prowlarr</code>), host port (default: <code>9696</code>).</li>
@@ -45,7 +45,7 @@ export default function prowlarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function prowlarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Prowlarr on my home host and expose it at prowlarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Prowlarr on my home host and expose it at prowlarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/prowlarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function qbittorrentDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function qbittorrentDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>qBittorrent</strong> from the Downloads category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>torrent</code>), host port (default: <code>8080</code>).</li>
@@ -45,7 +45,7 @@ export default function qbittorrentDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function qbittorrentDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy qBittorrent on my home host and expose it at torrent.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy qBittorrent on my home host and expose it at torrent.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/qbittorrent:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function radarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function radarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Radarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>radarr</code>), host port (default: <code>7878</code>).</li>
@@ -45,7 +45,7 @@ export default function radarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function radarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Radarr on my home host and expose it at radarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Radarr on my home host and expose it at radarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/radarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+117
View File
@@ -0,0 +1,117 @@
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import DocsLayout from '@/components/docs/DocsLayout';
export const metadata = {
title: 'Install Radicale Calendar — DashCaddy Docs',
description: 'Install and configure Radicale Calendar via DashCaddy. Lightweight self-hosted calendar (CalDAV) and contacts (CardDAV) server',
};
export default function radicaleDocsPage() {
return (
<div className="flex min-h-screen flex-col bg-surface-950 text-surface-50">
<Navbar />
<DocsLayout
title="Install Radicale Calendar"
intro="Lightweight self-hosted calendar (CalDAV) and contacts (CardDAV) server. Auto-connects to the DashCaddy calendar widget."
>
<div className="mb-6 flex flex-wrap gap-3 text-xs font-semibold">
<span className="rounded-full bg-surface-800 px-3 py-1 text-surface-300">Category: Productivity</span>
<span className="rounded-full px-3 py-1" style={{ backgroundColor: '#7cf2c022', color: '#7cf2c0' }}>Difficulty: Easy</span>
<span className="rounded-full bg-surface-800 px-3 py-1 text-surface-300">Docker image: <code className="text-brand-400">tomsquest/docker-radicale:latest</code></span>
</div>
<h2>What is Radicale Calendar?</h2>
<p>Lightweight self-hosted calendar (CalDAV) and contacts (CardDAV) server. Auto-connects to the DashCaddy calendar widget.</p>
<p>Radicale ships as a self-contained Docker image that DashCaddy provisions with one click. DashCaddy handles the container lifecycle, DNS record, Caddy reverse-proxy entry, and HTTPS certificate so you can focus on using Radicale, not installing it. Uniquely among catalog apps, DashCaddy also <strong>auto-wires the deployed calendar into its own dashboard widget</strong> — credentials and the CalDAV source are generated at deploy time, so upcoming appointments appear on your dashboard without any manual configuration.</p>
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required — DashCaddy provisions <code>/opt/radicale/config</code> and <code>/opt/radicale/data</code> on first deploy.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
</ul>
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Radicale Calendar</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>calendar</code>), host port (default: <code>5232</code>).</li>
<li>Click <strong>Deploy</strong>. DashCaddy will write the Radicale config and credential store <em>before</em> container start, pull the image, create persistent volumes, write the Caddy route, create the DNS record, and register the calendar source with the dashboard widget automatically.</li>
<li>When the dashboard shows the service as <strong>Running</strong>, the 📅 Calendar widget in the top bar immediately shows your upcoming events — zero extra setup.</li>
</ol>
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \
-H "X-API-Key: dk_..." \
-H "Content-Type: application/json" \
-d &#123;
"appId": "radicale",
"config": &#123;
"subdomain": "calendar",
"port": 5232
&#125;
&#125;</code></pre>
<p>The full body schema is in <code>src/utilities/validate.js</code> (Joi schema <code>appDeploy</code>). All <code>config.*</code> fields except <code>subdomain</code> are optional. Notable options:</p>
<ul>
<li><code>config.port</code> — host port (1–65535). Defaults to the template's <code>defaultPort</code>.</li>
<li><code>config.useExisting: true</code> + <code>existingContainerId</code> — attach DashCaddy metadata to an already-running container instead of pulling a new image.</li>
<li><code>config.tailscaleOnly: true</code> — restrict the reverse-proxy entry to your Tailscale network (a sensible default for personal calendars).</li>
<li><code>config.allowedIPs</code> — array of CIDR ranges allowed past the reverse proxy.</li>
<li><code>config.createDns: false</code> — skip DNS record creation (use when the subdomain already resolves).</li>
<li><code>config.resources</code> — <code>&#123;memory, cpus&#125;</code> limits applied to the container.</li>
</ul>
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \
-H "X-API-Key: dk_..." \
-H "Content-Type: application/json" \
-d &#123; "message": "Deploy a calendar server I can sync my phone with" &#125;</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container. With no LLM configured, the built-in pattern engine recognizes "calendar", "caldav", and "radicale" phrasing.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_...</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull tomsquest/docker-radicale:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Add the CalDAV URL to your phone/computer calendar apps: <code>https://&lt;your-domain&gt;/&lt;username&gt;/</code> (the DashCaddy-generated user and password are stored in the dashboard credential vault).</li>
<li>Manage sharing and additional users from the Radicale web interface.</li>
<li>Check the 📅 widget on your DashCaddy dashboard — events sync within five minutes.</li>
</ol>
<h2>Volumes and persistent data</h2>
<p>DashCaddy creates these volume mounts in the container spec:</p>
<ul>
<li><code>/opt/radicale/config:/config</code></li>
<li><code>/opt/radicale/data:/data</code></li>
</ul>
<p>All paths are host paths (left side) mapped into the container (right side). Restarting the container preserves data; the auto-wired calendar source and its credentials survive redeploys.</p>
<h2>Environment variables</h2>
<p>This template ships no custom environment variables; Radicale is configured through the generated config file at <code>/opt/radicale/config/config</code>, which DashCaddy writes at deploy time.</p>
<h2>Updating the image</h2>
<p>There is no built-in auto-update — DashCaddy does NOT poll for new image digests. To pull a new version:</p>
<ol>
<li>SSH into the DashCaddy host and run <code>docker pull tomsquest/docker-radicale:latest</code>.</li>
<li>Restart the container: <code>docker restart &lt;containerId&gt;</code> (find the ID via <code>GET /api/v1/services</code> or the dashboard).</li>
<li>Or deploy Watchtower from this catalog (separate template that polls Docker Hub and updates other containers automatically).</li>
</ol>
<h2>Troubleshooting</h2>
<ul>
<li><strong>Widget shows "No sources configured"</strong> after a manual (non-DashCaddy) Radicale install: use the calendar settings modal (⚙️ in the widget) to add the CalDAV URL and credentials yourself, or register the source via <code>POST /api/v1/calendar/sources</code>.</li>
<li><strong>401 from CalDAV clients</strong>: the web interface stores users under <code>/opt/radicale/config/users</code>; the DashCaddy-managed account lives in the encrypted credential vault, not a plaintext file.</li>
<li><strong>Container restarts in a loop</strong>: check <code>docker logs &lt;containerId&gt;</code> — the most common cause is an existing nonempty <code>/opt/radicale/config</code> owned by a different uid.</li>
</ul>
</DocsLayout>
<Footer />
</div>
);
}
+6 -6
View File
@@ -27,7 +27,7 @@ export default function readarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function readarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Readarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>readarr</code>), host port (default: <code>8787</code>).</li>
@@ -45,7 +45,7 @@ export default function readarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function readarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Readarr on my home host and expose it at readarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Readarr on my home host and expose it at readarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/readarr:develop</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function redisDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function redisDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Redis</strong> from the Database category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>redis</code>), host port (default: <code>6379</code>).</li>
@@ -45,7 +45,7 @@ export default function redisDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function redisDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Redis on my home host and expose it at redis.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Redis on my home host and expose it at redis.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull redis:alpine</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function rocketchatDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function rocketchatDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Rocket.Chat</strong> from the Communication category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>chat</code>), host port (default: <code>3004</code>).</li>
@@ -45,7 +45,7 @@ export default function rocketchatDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function rocketchatDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Rocket.Chat on my home host and expose it at chat.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Rocket.Chat on my home host and expose it at chat.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull rocket.chat:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function roundcubeDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function roundcubeDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Roundcube</strong> from the Communication category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>webmail</code>), host port (default: <code>8086</code>).</li>
@@ -45,7 +45,7 @@ export default function roundcubeDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function roundcubeDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Roundcube on my home host and expose it at webmail.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Roundcube on my home host and expose it at webmail.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull roundcube/roundcubemail:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function sabnzbdDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function sabnzbdDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>SABnzbd</strong> from the Downloads category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>sabnzbd</code>), host port (default: <code>8092</code>).</li>
@@ -45,7 +45,7 @@ export default function sabnzbdDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function sabnzbdDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy SABnzbd on my home host and expose it at sabnzbd.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy SABnzbd on my home host and expose it at sabnzbd.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/sabnzbd:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+9 -9
View File
@@ -27,7 +27,7 @@ export default function samiFilesDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function samiFilesDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Sami Files</strong> from the Files category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>files</code>), host port (default: <code>8765</code>).</li>
@@ -45,7 +45,7 @@ export default function samiFilesDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,28 +69,28 @@ export default function samiFilesDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Sami Files on my home host and expose it at files.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Sami Files on my home host and expose it at files.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull N/A</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Clone the repo: git clone http://100.81.59.99:3030/sami7777/sami-files.git /opt/sami-files</li>
<li>Create venv and install deps: /usr/local/lib/hermes-agent/venv/bin/pip install fastapi uvicorn asyncssh pyyaml python-multipart</li>
<li>Clone the repo: clone the sami-files repository from your own source into /opt/sami-files</li>
<li>Create a Python venv and install dependencies: <code>pip install fastapi uvicorn asyncssh pyyaml python-multipart</code></li>
<li>Copy deploy/sami-files.service to /etc/systemd/system/ and `systemctl daemon-reload`</li>
<li>Enable + start: systemctl enable --now sami-files.service</li>
<li>Edit /opt/sami-files/config/servers.yaml to add your SSH targets</li>
<li>Add the Caddy snippet (above) to your Caddyfile and reload Caddy</li>
<li>Mount the log dir into DashCaddy: add `-v /opt/sami-files/logs:/opt/sami-files/logs:ro` to start.sh, then recreate the container</li>
<li>Browse to https://files.sami — log in via DashCaddy SSO</li>
<li>Browse to https://files.home — log in via DashCaddy SSO</li>
</ol>
<h2>Volumes and persistent data</h2>
<p>DashCaddy creates these volume mounts in the container spec:</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function seerrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function seerrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Seerr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>requests</code>), host port (default: <code>5055</code>).</li>
@@ -45,7 +45,7 @@ export default function seerrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function seerrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Seerr on my home host and expose it at requests.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Seerr on my home host and expose it at requests.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/seerr-team/seerr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function sonarrDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function sonarrDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Sonarr</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>sonarr</code>), host port (default: <code>8989</code>).</li>
@@ -45,7 +45,7 @@ export default function sonarrDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function sonarrDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Sonarr on my home host and expose it at sonarr.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Sonarr on my home host and expose it at sonarr.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/sonarr:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function speedtestDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function speedtestDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Speedtest Tracker</strong> from the Monitoring category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>speedtest</code>), host port (default: <code>8093</code>).</li>
@@ -45,7 +45,7 @@ export default function speedtestDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function speedtestDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Speedtest Tracker on my home host and expose it at speedtest.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Speedtest Tracker on my home host and expose it at speedtest.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull ghcr.io/alexjustesen/speedtest-tracker:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function standardnotesDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function standardnotesDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Standard Notes</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>notes</code>), host port (default: <code>3007</code>).</li>
@@ -45,7 +45,7 @@ export default function standardnotesDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function standardnotesDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Standard Notes on my home host and expose it at notes.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Standard Notes on my home host and expose it at notes.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull standardnotes/server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function stirlingPdfDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function stirlingPdfDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Stirling PDF</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>pdf</code>), host port (default: <code>8084</code>).</li>
@@ -45,7 +45,7 @@ export default function stirlingPdfDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function stirlingPdfDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Stirling PDF on my home host and expose it at pdf.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Stirling PDF on my home host and expose it at pdf.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull frooodle/s-pdf:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function syncthingDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function syncthingDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Syncthing</strong> from the Files category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>sync</code>), host port (default: <code>8384</code>).</li>
@@ -45,7 +45,7 @@ export default function syncthingDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function syncthingDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Syncthing on my home host and expose it at sync.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Syncthing on my home host and expose it at sync.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/syncthing:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function tautulliDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function tautulliDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Tautulli</strong> from the Media Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>tautulli</code>), host port (default: <code>8181</code>).</li>
@@ -45,7 +45,7 @@ export default function tautulliDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function tautulliDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Tautulli on my home host and expose it at tautulli.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Tautulli on my home host and expose it at tautulli.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/tautulli:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+8 -8
View File
@@ -27,7 +27,7 @@ export default function technitiumDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function technitiumDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Technitium DNS Server</strong> from the DNS category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>dns1</code>), host port (default: <code>5380</code>).</li>
@@ -45,7 +45,7 @@ export default function technitiumDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,24 +69,24 @@ export default function technitiumDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Technitium DNS Server on my home host and expose it at dns1.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Technitium DNS Server on my home host and expose it at dns1.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull technitium/dns-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Access web interface at https://dns1.sami</li>
<li>Access web interface at https://dns1.home</li>
<li>Login with admin credentials</li>
<li>Create a primary zone for 'sami' domain</li>
<li>Add A records for your services (e.g., plex.sami -&gt; 192.168.1.100)</li>
<li>Add A records for your services (e.g., plex.home -&gt; 192.168.1.100)</li>
<li>Configure your devices to use this DNS server</li>
</ol>
<h2>Volumes and persistent data</h2>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function transmissionDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function transmissionDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Transmission</strong> from the Downloads category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>transmission</code>), host port (default: <code>9092</code>).</li>
@@ -45,7 +45,7 @@ export default function transmissionDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function transmissionDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Transmission on my home host and expose it at transmission.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Transmission on my home host and expose it at transmission.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/transmission:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function triliumDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function triliumDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Trilium Notes</strong> from the Productivity category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>notes</code>), host port (default: <code>8085</code>).</li>
@@ -45,7 +45,7 @@ export default function triliumDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function triliumDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Trilium Notes on my home host and expose it at notes.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Trilium Notes on my home host and expose it at notes.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull zadam/trilium:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function uptimeKumaDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function uptimeKumaDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Uptime Kuma</strong> from the Monitoring category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>uptime</code>), host port (default: <code>3002</code>).</li>
@@ -45,7 +45,7 @@ export default function uptimeKumaDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function uptimeKumaDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Uptime Kuma on my home host and expose it at uptime.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Uptime Kuma on my home host and expose it at uptime.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull louislam/uptime-kuma:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function valheimDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function valheimDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Valheim Server</strong> from the Gaming category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>valheim</code>), host port (default: <code>2456</code>).</li>
@@ -45,7 +45,7 @@ export default function valheimDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function valheimDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Valheim Server on my home host and expose it at valheim.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Valheim Server on my home host and expose it at valheim.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull lloesche/valheim-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function vaultwardenDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function vaultwardenDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Vaultwarden</strong> from the Security category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>vault</code>), host port (default: <code>8088</code>).</li>
@@ -45,7 +45,7 @@ export default function vaultwardenDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function vaultwardenDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Vaultwarden on my home host and expose it at vault.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Vaultwarden on my home host and expose it at vault.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull vaultwarden/server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+7 -7
View File
@@ -27,7 +27,7 @@ export default function vintageRadioDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function vintageRadioDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Vintage Stereo</strong> from the Media category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>radio</code>), host port (default: <code>8090</code>).</li>
@@ -45,7 +45,7 @@ export default function vintageRadioDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,22 +69,22 @@ export default function vintageRadioDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Vintage Stereo on my home host and expose it at radio.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Vintage Stereo on my home host and expose it at radio.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull nginx:alpine</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
<h2>Post-install: first-run checklist</h2>
<ol>
<li>Run `bash /usr/local/bin/vintage-radio-install.sh` once before starting the container — copies the bundled web assets (index.html, radio.css, radio.js, stations.json) from the DashCaddy repo (dashcaddy-api/static-sites/vintage-radio/web) into /opt/vintage-radio/web</li>
<li>Open radio.sami (or your configured subdomain)</li>
<li>Open radio.home (or your configured subdomain)</li>
<li>Press the PWR knob, drag the dial or click a station card</li>
<li>Cycle the MODE knob to filter by genre (ALL / AMBIENT / ROCK / MIXED)</li>
<li>To add stations, edit /opt/vintage-radio/web/stations.json on the host and restart the container</li>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function vscodeServerDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function vscodeServerDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>VS Code Server</strong> from the Development category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>code</code>), host port (default: <code>8443</code>).</li>
@@ -45,7 +45,7 @@ export default function vscodeServerDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function vscodeServerDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy VS Code Server on my home host and expose it at code.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy VS Code Server on my home host and expose it at code.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull codercom/code-server:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function watchtowerDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function watchtowerDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Watchtower</strong> from the Management category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>watchtower</code>), host port (default: <code>8089</code>).</li>
@@ -45,7 +45,7 @@ export default function watchtowerDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function watchtowerDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Watchtower on my home host and expose it at watchtower.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Watchtower on my home host and expose it at watchtower.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull containrrr/watchtower:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function weatherDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function weatherDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Weather</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>weather</code>), host port (default: <code>32400</code>).</li>
@@ -45,7 +45,7 @@ export default function weatherDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function weatherDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Weather on my home host and expose it at weather.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Weather on my home host and expose it at weather.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull N/A</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function whoamiDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function whoamiDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>Whoami</strong> from the Utilities category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>whoami</code>), host port (default: <code>8094</code>).</li>
@@ -45,7 +45,7 @@ export default function whoamiDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function whoamiDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy Whoami on my home host and expose it at whoami.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy Whoami on my home host and expose it at whoami.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull traefik/whoami:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+6 -6
View File
@@ -27,7 +27,7 @@ export default function wireguardDocsPage() {
<h2>Prerequisites</h2>
<ul>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://status.sami</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>A running DashCaddy host with the dashboard accessible (default URL: <code>https://dashcaddy.local</code>; configurable via the <code>dashboardHost</code> setting in <code>config.json</code>).</li>
<li>You must be signed in to the dashboard with an admin session, or have an API key with admin scope (<code>POST /api/v1/auth/keys</code> to create one).</li>
<li>No special host paths required.</li>
<li>For HTTPS with a real certificate, Technitium DNS must be configured and the host must have port 80/443 reachable from the internet. Otherwise DashCaddy will fall back to direct-IP access or a self-signed certificate.</li>
@@ -35,7 +35,7 @@ export default function wireguardDocsPage() {
<h2>Install via the DashCaddy dashboard</h2>
<ol>
<li>Sign in at <code>https://status.sami</code> (or your host's dashboard URL).</li>
<li>Sign in at <code>https://dashcaddy.local</code> (or your host's dashboard URL).</li>
<li>Click the <strong>📱 App Selector</strong> button on the dashboard home page.</li>
<li>Pick <strong>WireGuard VPN</strong> from the Networking category.</li>
<li>Fill in the deployment form: subdomain (default suggestion: <code>vpn</code>), host port (default: <code>51820</code>).</li>
@@ -45,7 +45,7 @@ export default function wireguardDocsPage() {
<h2>Install via the REST API</h2>
<p>Authenticate with an API key (or a JWT minted via <code>POST /api/v1/auth/jwt</code>). Send as <code>X-API-Key: dk_...</code> or <code>Authorization: Bearer &lt;jwt&gt;</code>.</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/apps/deploy \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/apps/deploy \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123;
@@ -69,15 +69,15 @@ export default function wireguardDocsPage() {
<h2>Install via the AI Intent Router (returns a structured intent)</h2>
<p>The Intent Router returns a structured intent, not a deployed container. To deploy via AI, send natural language to:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://status.sami/api/v1/ai/intent \\
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>curl -X POST https://dashcaddy.local/api/v1/ai/intent \\
-H "X-API-Key: dk_your_api_key" \\
-H "Content-Type: application/json" \\
-d '&#123; "message": "Deploy WireGuard VPN on my home host and expose it at vpn.sami" &#125;'</code></pre>
-d '&#123; "message": "Deploy WireGuard VPN on my home host and expose it at vpn.home" &#125;'</code></pre>
<p>The response includes <code>intent</code>, <code>action</code>, <code>parameters</code>, and <code>followup</code> — your client (or the MCP server) must then call <code>POST /api/v1/apps/deploy</code> with those parameters to actually provision the container.</p>
<h2>Install via the MCP Server</h2>
<p>For AI agents (Claude Desktop, Hermes, etc.) configure the MCP server (<code>src/mcp/mcp-server.js</code>) with:</p>
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://status.sami:3001 # internal API URL, may differ from dashboard URL
<pre className="overflow-x-auto rounded-lg bg-surface-900 p-4 text-sm"><code>DASHCADDY_URL=https://dashcaddy.local:3001 # internal API URL, may differ from dashboard URL
DASHCADDY_API_KEY=dk_your_api_key</code></pre>
<p>The server exposes <code>dashcaddy_deploy_app</code>. Note: this tool writes the Caddy route and creates the <code>services.json</code> entry, but it does NOT pull the Docker image or start the container. You must run <code>docker pull linuxserver/wireguard:latest</code> and start the container yourself for the URL to actually serve traffic. For a fully-managed deployment, call <code>POST /api/v1/apps/deploy</code> directly from your agent.</p>
+2 -2
View File
@@ -34,7 +34,7 @@ export default function DocsFirstServicePage() {
<h2>Three ways to add a service</h2>
<h3>1. Pick from 77 one-click templates</h3>
<h3>1. Pick from 78 one-click templates</h3>
<p>
The template library covers the most popular self-hosted applications — media servers, dashboards,
databases, note apps, automation tools, and more. Each template bundles sane defaults for ports,
@@ -62,7 +62,7 @@ export default function DocsFirstServicePage() {
<h3>Step 1: Open the template library</h3>
<p>
From the dashboard sidebar, click <strong>New Service → From Template</strong>. The template library
opens with a searchable grid of 77 applications.
opens with a searchable grid of 78 applications.
</p>
<h3>Step 2: Find Plex</h3>
+1 -1
View File
@@ -27,7 +27,7 @@ export default function DocsIntegrationsPage() {
Docker (and Docker Compose) is the runtime foundation for every deployment workflow, container lifecycle action,
service discovery sweep, and template-based launch. DashCaddy communicates with the Docker daemon over the
Unix socket (<code>/var/run/docker.sock</code>) to start, stop, restart, inspect, and adopt containers, and to
deploy the <strong>77 one-click application templates</strong> from the catalog.
deploy the <strong>78 one-click application templates</strong> from the catalog.
</p>
<p>
The daemon connection is established at startup. If the socket is missing or permissioned for a different user,
+1 -1
View File
@@ -162,7 +162,7 @@ export default function DocsOverviewPage() {
<tr className="border-b border-surface-800">
<td className="py-3 pr-4">Docker deployment</td>
<td className="py-3 pr-4">Manual compose files</td>
<td className="py-3 pr-4">77 one-click templates</td>
<td className="py-3 pr-4">78 one-click templates</td>
<td className="py-3">Templates + Recipes</td>
</tr>
<tr className="border-b border-surface-800">
+22 -1
View File
@@ -39,7 +39,7 @@ export default function DocsPremiumPage() {
</thead>
<tbody>
<tr><td>Dashboard &amp; web UI</td><td>✓</td><td>✓</td></tr>
<tr><td>77 application templates</td><td>✓</td><td>✓</td></tr>
<tr><td>78 application templates</td><td>✓</td><td>✓</td></tr>
<tr><td>Caddy reverse proxy + auto HTTPS</td><td>✓</td><td>✓</td></tr>
<tr><td>Caddyfile-as-Code builder</td><td>✓</td><td>✓</td></tr>
<tr><td>Technitium DNS automation</td><td>✓</td><td>✓</td></tr>
@@ -61,6 +61,8 @@ export default function DocsPremiumPage() {
<tr><td><strong>Recipes (multi-container stacks)</strong></td><td>—</td><td>✓</td></tr>
<tr><td><strong>Docker Swarm orchestration</strong></td><td>—</td><td>✓</td></tr>
<tr><td><strong>Multi-Host Fleet Management</strong></td><td>—</td><td>✓</td></tr>
<tr><td><strong>Workflow Automation</strong></td><td>—</td><td>✓</td></tr>
<tr><td><strong>Scheduled Backups</strong> (manual one-click backup is free)</td><td>—</td><td>✓</td></tr>
<tr><td>Priority support</td><td>—</td><td>✓</td></tr>
</tbody>
</table>
@@ -159,6 +161,25 @@ curl -X POST -H "Authorization: Bearer ***" \\
of hosts, some of which are themselves Swarm clusters.
</p>
<h3>Workflow Automation</h3>
<p>
<strong>Workflow Automation</strong> bundles five maintenance workflows that run against your own
infrastructure: <strong>Auto-Restart on Crash</strong> (restarts a container when it goes down),
<strong>Backup Before Update</strong> (snapshots an app ahead of any update), <strong>Periodic Health
Check</strong> (health probes every 15 minutes with degraded alerts), <strong>Disk Space Alert</strong>
(notifies past 80% usage), and <strong>Weekly Container Report</strong> (a summary of container status
and resource usage). Each workflow can be enabled, disabled, run on demand, and reviewed via per-run
history from the dashboard or the REST API (<code>/api/v1/workflows</code>).
</p>
<h3>Scheduled Backups</h3>
<p>
<strong>Scheduled Backups</strong> automates the backup manager: per-app schedules with configurable
interval, retention (count or age), storage cap, destination, and run-now semantics (<code>/api/v1/backups/schedule</code>
endpoints). Manual one-click backup and full Disaster Recovery — SHA-256 checksummed snapshots with verified
one-click restore — stay in the free tier; Premium adds the <em>automation</em> layer on top.
</p>
<h2>Pricing</h2>
<p>
Premium is sold as a fixed-duration license. You pick the duration that fits your needs; the license unlocks
+9 -6
View File
@@ -32,6 +32,7 @@ export default function FeaturesPage() {
features: [
{ icon: '🎯', label: 'AI Intent Router — natural language commands' },
{ icon: '🔌', label: 'MCP Server for Claude & GPT control' },
{ icon: '🤝', label: 'Connect AI — one click mints an MCP key + client config' },
{ icon: '💬', label: '"deploy Plex", "check SSL status", "restart jellyfin"' },
{ icon: '🧠', label: 'Context-aware infrastructure reasoning' },
],
@@ -40,13 +41,14 @@ export default function FeaturesPage() {
id: 'app-deployment',
title: 'App Deployment',
description:
'Deploy from a library of 77 pre-configured Docker templates with one click. Automatic configuration, smart defaults, and service discovery that auto-detects running containers and lets you adopt them instantly. From zero to live in seconds.',
'Deploy from a library of 78 pre-configured templates with one click — automatic configuration, smart defaults, and service discovery that auto-detects running services and lets you adopt them instantly. From zero to live in seconds.',
icon: '🚀',
features: [
{ icon: '⚡', label: 'One-click deployment' },
{ icon: '📦', label: '77 app templates' },
{ icon: '📦', label: '78 app templates' },
{ icon: '⚙️', label: 'Automatic configuration' },
{ icon: '🔍', label: 'Service Discovery & auto-adopt' },
{ icon: '📅', label: 'Calendar widget — hosted Radicale auto-connects' },
{ icon: '🧙', label: 'Smart Defaults Wizard' },
],
},
@@ -123,12 +125,12 @@ export default function FeaturesPage() {
id: 'premium',
title: 'Premium Features',
description:
'Power features for production and multi-host deployments. Auto-Login SSO across your apps, multi-container Recipes, Docker Swarm orchestration, and Fleet Management to register remote instances with parallel health probes and multi-host deploy plans.',
'Power features for production and multi-host deployments. Auto-Login SSO across your apps, multi-service Recipes, Swarm orchestration, and Fleet Management to register remote instances with parallel health probes and multi-host Shipdeck deploy plans.',
icon: '⭐',
features: [
{ icon: '🔑', label: 'Auto-Login SSO', premium: true },
{ icon: '📚', label: 'Recipes (multi-container stacks)', premium: true },
{ icon: '🐳', label: 'Docker Swarm orchestration', premium: true },
{ icon: '🚢', label: 'Swarm orchestration', premium: true },
{ icon: '📡', label: 'Multi-Host Fleet Management', premium: true },
{ icon: '🔗', label: 'Secure Share Links (public + Tailscale)', premium: true },
{ icon: '🚀', label: 'Priority support', premium: true },
@@ -352,7 +354,7 @@ export default function FeaturesPage() {
</div>
<ul className="space-y-3">
{[
'77 one-click app templates',
'78 one-click app templates',
'Automatic SSL certificates',
'Technitium DNS automation',
'Reverse proxy + Caddyfile builder',
@@ -396,7 +398,8 @@ export default function FeaturesPage() {
{[
'Auto-Login SSO for deployed apps',
'Recipes — multi-container stack deployment',
'Docker Swarm orchestration',
'Shipdeck deploys \u2014 GitHub to production in one command',
'Swarm orchestration',
'Multi-Host Fleet Management (remote instances, parallel health probes, multi-host deploy plans)',
'Disaster Recovery (full-system backup w/ checksums)',
'Priority support',
+7 -3
View File
@@ -4,7 +4,7 @@ import "./globals.css";
export const metadata: Metadata = {
title: "DashCaddy - Self-Hosting Made Beautiful",
description:
"Deploy 77 Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, reverse proxy, security center, and fleet management.",
"Deploy 78 apps with one click \u2014 or ship your own code straight from GitHub with built-in Shipdeck deploys. AI-powered self-hosting with automatic SSL, DNS, reverse proxy, security center, and fleet management.",
keywords: [
"self-hosting",
"docker",
@@ -19,7 +19,7 @@ export const metadata: Metadata = {
openGraph: {
title: "DashCaddy - Self-Hosting Made Beautiful",
description:
"Deploy 77 Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, and reverse proxy.",
"Deploy 78 apps with one click \u2014 or ship your own code straight from GitHub with built-in Shipdeck deploys. AI-powered self-hosting with automatic SSL, DNS, and reverse proxy.",
url: "https://dashcaddy.net",
siteName: "DashCaddy",
type: "website",
@@ -28,7 +28,7 @@ export const metadata: Metadata = {
card: "summary_large_image",
title: "DashCaddy - Self-Hosting Made Beautiful",
description:
"Deploy 77 Docker apps with one click. AI-powered self-hosting.",
"Deploy 78 apps with one click. AI-powered self-hosting, GitHub-to-production deploys with Shipdeck.",
},
alternates: {
types: { "application/rss+xml": "https://dashcaddy.net/feed.xml" },
@@ -59,6 +59,10 @@ export default function RootLayout({
</head>
<body className="min-h-full flex flex-col bg-surface-950 text-surface-100" style={{ fontFamily: "'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif" }}>
{children}
{/* Plausible custom-events queue bootstrap (documented pattern): events fired
before the deferred tracker loads are queued and sent once it initializes. */}
<script dangerouslySetInnerHTML={{ __html: `window.plausible=window.plausible||function(){(window.plausible.q=window.plausible.q||[]).push(arguments)};` }} />
<script defer src="https://stats.dashcaddy.net/js/script.outbound-links.tagged-events.js" data-domain="dashcaddy.net" />
</body>
</html>
);
+8 -8
View File
@@ -46,8 +46,8 @@ export default function Home() {
</h1>
<p className="text-xl text-surface-300 max-w-lg leading-relaxed">
Just say &ldquo;deploy Plex&rdquo; — DashCaddy&rsquo;s AI Intent Router handles the rest.
Deploy Docker apps with one click, automatic SSL, DNS, and reverse proxy.
77 templates, fleet management, and an MCP control plane for AI assistants.
Deploy apps with one click, automatic SSL, DNS, and reverse proxy — or ship your own code straight from GitHub with built-in Shipdeck deploys.
78 templates, fleet management, and an MCP control plane for AI assistants.
Everything you need for self-hosted perfection.
</p>
</div>
@@ -208,17 +208,17 @@ export default function Home() {
<FeatureCard
icon="🧩"
title="MCP Server"
description="Model Context Protocol integration turns DashCaddy into an AI-native control plane. Let your AI assistant manage your entire self-hosted infrastructure."
description="Model Context Protocol integration turns DashCaddy into an AI-native control plane. Your AI assistant deploys apps, checks health, manages containers, backups, and DNS through one MCP endpoint — and the public /api/v1/capabilities manifest tells it exactly what the running build supports."
/>
<FeatureCard
icon="🚀"
title="77 App Templates"
description="Choose from 77 pre-configured Docker app templates. Deploy your favorite applications instantly without manual configuration."
title="78 App Templates"
description="Choose from 78 pre-configured app templates with smart defaults — deploy your favorite applications in one click, no manual configuration, no compose files to write."
/>
<FeatureCard
icon="🛡️"
title="Security Center"
description="Unified event pipeline aggregates Docker, Caddy, DNS, Tailscale, audit log, and health checker events into one real-time security dashboard — with per-IP perimeter analytics and automatic PII masking on every log."
description="Unified event pipeline aggregates deploys, Caddy, DNS, Tailscale, audit log, and health checker events into one real-time security dashboard — with per-IP perimeter analytics and automatic PII masking on every log."
/>
<FeatureCard
icon="🖥️"
@@ -364,7 +364,7 @@ export default function Home() {
Feature
</th>
<th className="px-6 py-4 text-center text-sm font-semibold text-surface-300 bg-surface-900/50">
Manual Docker Setup
Manual Setup
</th>
<th className="px-6 py-4 text-center text-sm font-semibold text-brand-400 bg-surface-900/70">
DashCaddy
@@ -405,7 +405,7 @@ export default function Home() {
<span className="text-surface-500">Write your own compose files</span>
</td>
<td className="px-6 py-4 text-center text-sm">
<span className="text-green-400 font-semibold">✓ 77 pre-configured</span>
<span className="text-green-400 font-semibold">✓ 78 pre-configured</span>
</td>
</tr>
<tr className="hover:bg-surface-800/30 transition-colors">
+25 -6
View File
@@ -12,7 +12,7 @@ import Footer from '@/components/Footer';
// creates a Stripe Checkout session (one-time OR subscription) and
// returns { url, sessionId }; we redirect the browser to that URL.
//
// Plan codes (see /root/dashcaddy-license-server/src/plans.js):
// Plan codes (server-defined in the license service):
// premium_30d → $20, 30-day license, one-time or 1-month sub
// premium_90d → $50, 90-day license, one-time or 3-month sub
// premium_180d → $70, 180-day license, one-time or 6-month sub
@@ -35,7 +35,24 @@ async function startCheckout(mode: CheckoutMode, planCode: string, customerEmail
const message = (data as CheckoutError).error || `Checkout failed (${res.status})`;
throw new Error(message);
}
return (data as { url: string }).url;
const url = (data as { url: string }).url;
// Validate destination: must be Stripe's HTTPS checkout host
let dest: URL;
try {
dest = new URL(url);
} catch {
throw new Error('Checkout failed: invalid redirect URL');
}
if (dest.protocol !== 'https:' || !(dest.hostname === 'checkout.stripe.com' || dest.hostname.endsWith('.stripe.com'))) {
throw new Error('Checkout failed: unexpected redirect destination');
}
// Analytics: checkout intent confirmed (fires before redirect; Plausible
// sends with keepalive so the event survives navigation away)
try {
const p = (window as unknown as { plausible?: (e: string, o?: Record<string, unknown>) => void }).plausible;
p?.('Checkout Initiated', { props: { plan: planCode, mode } });
} catch { /* analytics must never break checkout */ }
return url;
}
function isValidEmail(email: string): boolean {
@@ -76,7 +93,7 @@ export default function PricingPage() {
const coreFeatures = [
'Dashboard & real-time service monitoring',
'77 pre-configured app templates',
'78 pre-configured app templates',
'Automatic SSL via Caddy internal CA',
'DNS automation via Technitium DNS',
'Reverse proxy management + Caddyfile-as-Code',
@@ -99,8 +116,10 @@ export default function PricingPage() {
'Everything in Core, plus:',
'Auto-Login SSO for deployed apps',
'Recipes — multi-container stack deployment',
'Swarm — Docker Swarm multi-node orchestration',
'Swarm — multi-node orchestration',
'Multi-Host Fleet Management — remote instance control',
'Workflow Automation — scripted multi-step operations',
'Scheduled Backups — automated backup schedules (manual one-click backup stays free)',
'Priority support',
'One active machine per license',
'7-day grace period on expiry',
@@ -122,7 +141,7 @@ export default function PricingPage() {
},
{
question: 'Can I use DashCaddy without Premium?',
answer: 'Absolutely. The core platform is fully functional without a license — including AI commands, the Security Center, service discovery, monitoring, backup, and all 77 app templates. Premium unlocks SSO, Recipes, Swarm orchestration, and Fleet Management for advanced multi-node setups.',
answer: 'Absolutely. The core platform is fully functional without a license — including AI commands, the Security Center, service discovery, monitoring, manual one-click backup, and all 78 app templates. Premium unlocks SSO, Recipes, Swarm orchestration, Fleet Management, workflow automation, and scheduled backups for advanced multi-node setups.',
},
{
question: 'How many machines can I activate?',
@@ -154,7 +173,7 @@ export default function PricingPage() {
Simple, Transparent <span className="text-brand-400">Pricing</span>
</h1>
<p className="text-xl text-surface-300 mb-8 max-w-2xl mx-auto">
The core platform is completely free — including AI commands, Security Center, and all 77 app templates. Premium unlocks SSO, Recipes, Swarm, and Fleet Management. Buy once for a fixed term, or subscribe and never worry about renewal — your license is extended automatically.
The core platform is completely free — including AI commands, Security Center, and all 78 app templates. Premium unlocks SSO, Recipes, Swarm, and Fleet Management. Buy once for a fixed term, or subscribe and never worry about renewal — your license is extended automatically.
</p>
</div>
</section>
+3 -3
View File
@@ -9,7 +9,7 @@ interface App {
}
// All apps below have real deployable templates in DashCaddy.
// Verified against src/docker/app-templates.js (77 templates, Aug 2026).
// Verified against src/docker/app-templates.js (78 templates, Aug 2026).
const apps: App[] = [
// Media
{ name: 'Plex', icon: '🎬', category: 'Media' },
@@ -158,7 +158,7 @@ export default function AppShowcase() {
{/* Header */}
<div className="mb-12 text-center">
<h2 className="text-3xl sm:text-4xl font-bold text-surface-50 mb-4">
77 One-Click App Templates
78 One-Click App Templates
</h2>
<p className="text-lg text-surface-400 max-w-2xl mx-auto">
Deploy your favorite apps instantly with pre-configured templates, automatic SSL certificates, and integrated DNS management.
@@ -216,7 +216,7 @@ export default function AppShowcase() {
<div className="mt-16 grid grid-cols-3 gap-4 sm:gap-8">
<div className="text-center">
<div className="text-3xl sm:text-4xl font-bold text-brand-400 mb-2">
77
78
</div>
<p className="text-sm text-surface-400">App Templates</p>
</div>
+2 -2
View File
@@ -21,8 +21,8 @@ const rows: Capability[] = [
values: { 'Portainer': false, 'CasaOS': false, 'YunoHost': false, 'Unraid': false, 'Cosmos Cloud': false },
},
{
feature: 'One-click Docker templates',
dashcaddy: '77 apps',
feature: 'One-click app templates',
dashcaddy: '78 apps',
values: { 'Portainer': 'Manual', 'CasaOS': '~120 apps', 'YunoHost': '~500 apps', 'Unraid': 'Community', 'Cosmos Cloud': '~30 apps' },
},
{
+23 -10
View File
@@ -13,14 +13,27 @@ const faqs: Faq[] = [
question: 'Is DashCaddy really free?',
answer: (
<>
Yes. The core platform — Docker deployment, Caddy + DNS + TLS automation, the full 77-app template catalog,
Yes. The core platform — one-click app deployment, Caddy + DNS + TLS automation, the full app template catalog,
AI Intent Router, MCP Server, Security Center, monitoring, backups, REST API, plugin system, and 31-language
i18n — is free forever. Premium adds a focused set of advanced features (SSO, Recipes, Docker Swarm,
Multi-Host Fleet) available as a fixed-duration license. The license runs for the duration you buy
i18n — is free forever. Premium adds a focused set of advanced features (SSO, Recipes, Swarm orchestration,
Fleet Management with Shipdeck deploys, workflow automation, scheduled backups)
available as a fixed-duration license. The license runs for the duration you buy
and then expires; you re-purchase manually to renew.
</>
),
},
{
question: 'Can I deploy my own app from GitHub?',
answer: (
<>
That&rsquo;s what <strong>Shipdeck</strong> is for — DashCaddy&rsquo;s built-in deploy engine. Point it at
your GitHub repo and DashCaddy clones it, detects your stack (Go, Node, Python…), builds it, installs it as a
managed systemd service, wires up the Caddy route, DNS record, and TLS certificate, and <em>verifies the live
site</em> before reporting success. Every deploy is journaled, and rollback swaps back to the previous release
in one command. For fully reproducible builds you can pin an exact commit in the Shipdeckfile. No YAML wrangling, no rebuild loops — your code on GitHub, live on your host.
</>
),
},
{
question: 'Where does my data live?',
answer: (
@@ -33,12 +46,12 @@ const faqs: Faq[] = [
),
},
{
question: 'What if I already have Docker containers running?',
question: 'What if I already have services running?',
answer: (
<>
Use <strong>Service Discovery</strong>. DashCaddy scans the Docker socket, lists every running container, and
Use <strong>Service Discovery</strong>. DashCaddy scans the host&rsquo;s running containers, lists each one, and
lets you adopt any of them with one click. It adds the Caddy reverse-proxy route, DNS record, and TLS
certificate — without touching the running container. Your existing data, volumes, and network config stay
certificate — without touching the running service. Your existing data, volumes, and network config stay
exactly as they are.
</>
),
@@ -69,7 +82,7 @@ const faqs: Faq[] = [
question: 'What happens to my services if I uninstall DashCaddy?',
answer: (
<>
By default, the uninstall stops the DashCaddy container but leaves your Docker containers and volumes
By default, the uninstall stops the DashCaddy service but leaves your deployed apps and their volumes
untouched. If you want a clean removal, the uninstaller has a <code>--purge</code> flag that also deletes
the DashCaddy config and data directories. Either way, your services keep running until you stop them.
</>
@@ -79,7 +92,7 @@ const faqs: Faq[] = [
question: 'How does Premium compare to other paid dashboards?',
answer: (
<>
Premium is a fixed-duration license. $99 covers a full year (365 days) of SSO, Recipes, Docker Swarm, and
Premium is a fixed-duration license. $99 covers a full year (365 days) of SSO, Recipes, Swarm orchestration, and
Fleet Management on one machine. The license expires at the end of its term and you purchase a new one
to renew. There&rsquo;s no per-user fee and no per-app fee. The free tier already covers everything a single
host needs, so Premium only makes sense if you specifically want SSO across deployed apps,
@@ -91,8 +104,8 @@ const faqs: Faq[] = [
question: 'Is DashCaddy open source?',
answer: (
<>
DashCaddy is proprietary software, but it&rsquo;s built on a fully open-source stack — Caddy, Docker, Node.js,
Express, Technitium DNS, Tailscale. The AI Intent Router, MCP Server, plugin system, and Security Center are
DashCaddy is proprietary software, but it&rsquo;s built on a fully open-source stack — Caddy, Node.js,
Express, Technitium DNS, Tailscale, and OCI image standards. The AI Intent Router, MCP Server, plugin system, and Security Center are
all built on open standards. You get vendor-friendly source-available documentation, and your data never
leaves your hardware.
</>
+1 -1
View File
@@ -72,7 +72,7 @@ export default function Footer() {
/>
</Link>
<p className="text-surface-400 text-sm leading-relaxed mb-4">
Self-hosted Docker dashboard with automatic SSL, DNS, and reverse proxy. Making self-hosting beautiful and effortless.
The self-hosting dashboard with automatic SSL, DNS, and reverse proxy — one-click app deploys, plus GitHub-to-production with built-in Shipdeck. Making self-hosting beautiful and effortless.
</p>
<div className="flex items-center gap-4">
{socialLinks.map((link: any) => (
+1 -1
View File
@@ -59,7 +59,7 @@ export default function InstallCommand() {
Live in <span className="text-brand-400">60 seconds</span>
</h2>
<p className="mt-4 text-lg text-surface-400 max-w-2xl mx-auto">
Pick your mode, paste one command, and the installer handles Docker, Caddy, the wizard, and your first login.
Pick your mode, paste one command, and the installer handles the runtime, Caddy, the wizard, and your first login.
</p>
</div>
+1 -1
View File
@@ -9,7 +9,7 @@ const docsLinks = [
{ href: '/docs/premium', label: 'Premium Features' },
{ href: '/docs/api', label: 'API and Automation' },
{ href: '/docs/troubleshooting', label: 'Troubleshooting' },
{ href: '/docs/catalog', label: 'App Catalog (77 apps)' },
{ href: '/docs/catalog', label: 'App Catalog (78 apps)' },
];
export default function DocsLayout({
+1 -1
View File
@@ -107,7 +107,7 @@ When those systems drift apart, routine maintenance becomes detective work.
DashCaddy brings the workflow together:
- choose from **77 curated application templates**;
- choose from **78 curated application templates**;
- deploy and manage services from one interface;
- coordinate connectivity through Caddy;
- see service and system health without maintaining a separate bookmark list;
@@ -167,7 +167,7 @@ containers in an afternoon.
## How DashCaddy helps manage self-hosted apps
Every app above has different ports, volumes, health behavior, and access needs.
DashCaddy reduces that inconsistency with **77 curated templates** that include
DashCaddy reduces that inconsistency with **78 curated templates** that include
application identity, default networking information, and health-check data.
For a home lab user, that means:
@@ -209,6 +209,6 @@ It can reduce dependence on third-party services, but privacy depends on your
configuration, access controls, logs, backups, and application behavior. Owning
the server also makes you responsible for securing it.
Browse all [77 DashCaddy app templates](/docs/catalog), learn [how to build a
Browse all [78 DashCaddy app templates](/docs/catalog), learn [how to build a
homelab](/blog/homelab-beginners-guide/), or review the [DashCaddy installation
guide](/docs/installation).
Loaded 100 of 111 files, more files were not shown because too many files have changed in this diff. Show more