@lovinka/deployik-mcp 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -70,6 +70,7 @@ Get a token at **Account → Access tokens** in Deployik. The token is shown onc
70
70
 
71
71
  - **~37 thin tools** — one per Deployik HTTP endpoint (projects, deployments, env vars, secrets, domains, auto-build, password protection, volumes, analytics, email, dashboard groups, tokens, GitHub).
72
72
  - **12 workflow tools** — `setup_project_from_repo`, `deploy_project`, `set_secret`, `tail_latest_logs`, `debug_failed_deployment`, `get_project_health`, `init_in_repo`, `whats_my_url`, `whats_broken`, `redeploy`, and more.
73
+ - **Dockerfile-aware project creation** — generated presets cover Next.js, Vite, Astro, static sites, and Node APIs; user-provided Dockerfiles are supported by choosing `framework: "static"`, setting `root_directory` to the Dockerfile folder, and setting `port` to the container listen port.
73
74
  - **Bundled knowledge** — Deployik's how-to recipes ship as MCP prompts (`deployik_recipe_*`), plus three tools: `list_recipes`, `get_recipe(topic)`, and **`find_help(question)`** which routes free-form English ("where do I set the Stripe key for the live site?") to the right recipe automatically.
74
75
  - **Repo binding** — first call inside a git repo with a unique-match `origin` auto-writes `.deployik.json` (committed, just project + dashboard group + schema URL) and gitignores the private `.deployik/` directory. Self-healing `.gitignore`.
75
76
  - **Tiered safety** — destructive operations require `confirm: true`; production-touching operations also require `confirm_name: <project>`. Every destructive call is logged to `.deployik/audit.log`.
@@ -75,6 +75,29 @@ function readConfig(path) {
75
75
  throw new Error(`Failed to parse ${path} — refusing to overwrite. (${err.message})`);
76
76
  }
77
77
  }
78
+ export function findExistingMcpConfig(opts) {
79
+ const cwd = opts.cwd ?? process.cwd();
80
+ const name = opts.name ?? "deployik";
81
+ const scopes = opts.scope === "local" ? ["local", "global"] : ["global", "local"];
82
+ for (const scope of scopes) {
83
+ for (const target of targetsFor(scope, cwd)) {
84
+ if (!existsSync(target.path))
85
+ continue;
86
+ const config = readConfig(target.path);
87
+ const entry = config?.mcpServers?.[name];
88
+ const url = entry?.env?.DEPLOYIK_URL?.trim();
89
+ const token = entry?.env?.DEPLOYIK_TOKEN?.trim();
90
+ if (url || token) {
91
+ return {
92
+ path: target.path,
93
+ ...(url ? { url } : {}),
94
+ ...(token ? { token } : {}),
95
+ };
96
+ }
97
+ }
98
+ }
99
+ return undefined;
100
+ }
78
101
  function backup(path) {
79
102
  const ts = new Date().toISOString().replace(/[:.]/g, "-");
80
103
  const bak = `${path}.bak.${ts}`;
@@ -1 +1 @@
1
- {"version":3,"file":"install-mcp.js","sourceRoot":"","sources":["../src/install-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-mcp.js","sourceRoot":"","sources":["../src/install-mcp.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,11 @@
5
5
  // Scope:
6
6
  // global → ~/.claude/skills/deployik-howto/ (default)
7
7
  // local → <cwd>/.claude/skills/deployik-howto/ (per-project)
8
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
8
+ import { chmodSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
9
9
  import { homedir } from "node:os";
10
- import { join, resolve } from "node:path";
10
+ import { dirname, join, resolve } from "node:path";
11
11
  import { createInterface } from "node:readline";
12
- import { RECIPE_FILES } from "./knowledge/recipes.generated.js";
12
+ import { RECIPE_FILES, SKILL_FILES } from "./knowledge/recipes.generated.js";
13
13
  // Two read modes, chosen at first prompt by checking whether stdin is a TTY:
14
14
  //
15
15
  // TTY → singleton readline; user is typing interactively.
@@ -80,8 +80,9 @@ export async function installSkillResult(opts) {
80
80
  process.stderr.write(`No bundled recipes found in this build.\n`);
81
81
  return null;
82
82
  }
83
+ const files = SKILL_FILES.length > 0 ? SKILL_FILES : RECIPE_FILES;
83
84
  process.stdout.write(`Skill files (${opts.scope}) → ${target}\n`);
84
- for (const f of RECIPE_FILES)
85
+ for (const f of files)
85
86
  process.stdout.write(` - ${f.file}\n`);
86
87
  const alreadyExisted = existsSync(target);
87
88
  if (alreadyExisted) {
@@ -95,9 +96,14 @@ export async function installSkillResult(opts) {
95
96
  }
96
97
  }
97
98
  mkdirSync(target, { recursive: true });
98
- for (const f of RECIPE_FILES)
99
- writeFileSync(join(target, f.file), f.content, "utf8");
100
- return { target, files: RECIPE_FILES.map((f) => f.file), alreadyExisted };
99
+ for (const f of files) {
100
+ const filePath = join(target, f.file);
101
+ mkdirSync(dirname(filePath), { recursive: true });
102
+ writeFileSync(filePath, f.content, "utf8");
103
+ if (f.executable)
104
+ chmodSync(filePath, 0o755);
105
+ }
106
+ return { target, files: files.map((f) => f.file), alreadyExisted };
101
107
  }
102
108
  export async function promptYesNo(promptText) {
103
109
  const answer = await readLine(promptText);
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
package/dist/install.js CHANGED
@@ -6,7 +6,7 @@
6
6
  // `--yes` skips prompts but still runs validations — bad token / unreachable
7
7
  // URL still aborts, since installing a config that can't authenticate would
8
8
  // be a footgun.
9
- import { installMcp } from "./install-mcp.js";
9
+ import { findExistingMcpConfig, installMcp, } from "./install-mcp.js";
10
10
  import { installSkillResult, prompt, promptYesNo, promptChoice, closeReadline } from "./install-skill.js";
11
11
  import { openInBrowser } from "./lib/browser.js";
12
12
  import { box, dim, fail, info, ok, section, warn, bold, cyan } from "./lib/term.js";
@@ -14,6 +14,9 @@ import { VERSION } from "./version.js";
14
14
  const DEFAULT_URL = "https://deployik.lovinka.com";
15
15
  export async function installAll(opts) {
16
16
  const cwd = opts.cwd ?? process.cwd();
17
+ const existing = opts.skipMcp
18
+ ? undefined
19
+ : findExistingMcpConfig({ scope: opts.scope, cwd });
17
20
  if (!opts.yes) {
18
21
  process.stdout.write("\n" + box(`@lovinka/deployik-mcp installer (${VERSION})`, [
19
22
  `${dim("Wires the Deployik MCP server into Claude's config and copies")}`,
@@ -21,7 +24,7 @@ export async function installAll(opts) {
21
24
  ]) + "\n");
22
25
  }
23
26
  // ─── Step 1: URL ──────────────────────────────────────────────
24
- let url = opts.url ?? process.env.DEPLOYIK_URL ?? "";
27
+ let url = opts.url ?? process.env.DEPLOYIK_URL ?? existing?.url ?? "";
25
28
  if (!opts.skipMcp) {
26
29
  if (!opts.yes && !url) {
27
30
  process.stdout.write(section(1, 4, "Deployik server URL"));
@@ -46,6 +49,9 @@ export async function installAll(opts) {
46
49
  }
47
50
  // ─── Step 2: Token ────────────────────────────────────────────
48
51
  let token = opts.token ?? process.env.DEPLOYIK_TOKEN ?? "";
52
+ if (!token && existing?.token && (!opts.url || sameUrl(url, existing.url))) {
53
+ token = existing.token;
54
+ }
49
55
  let user;
50
56
  if (!opts.skipMcp) {
51
57
  process.stdout.write(section(2, 4, "Personal Access Token"));
@@ -143,6 +149,11 @@ export async function installAll(opts) {
143
149
  closeReadline();
144
150
  return 0;
145
151
  }
152
+ function sameUrl(left, right) {
153
+ if (!left || !right)
154
+ return false;
155
+ return left.replace(/\/+$/, "") === right.replace(/\/+$/, "");
156
+ }
146
157
  function abort(msg) {
147
158
  process.stdout.write(`\n${fail(msg)}\n`);
148
159
  closeReadline();
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -2,21 +2,25 @@ import { RECIPE_FILES } from "./recipes.generated.js";
2
2
  const TOPIC_TITLES = {
3
3
  overview: "Deployik overview",
4
4
  "create-project": "Connect a GitHub repo and deploy it",
5
+ "dockerfile-app": "Deploy a Dockerfile, Go server, API, or SQLite-backed app",
5
6
  "custom-domain": "Set up a custom domain with SSL",
6
7
  "env-vars": "Add environment variables and secrets",
7
8
  "auto-deploy": "Configure auto-deploy from GitHub",
8
9
  "password-protection": "Password-protect a preview or production site",
9
10
  "contact-form-email": "Wire up a contact form with email + reCAPTCHA",
11
+ "attach-postgres": "Attach and manage a Postgres sidecar database",
10
12
  rollback: "Roll back a deployment",
11
13
  };
12
14
  const TOPIC_SUMMARIES = {
13
15
  overview: "What Deployik is and the dashboard's anatomy.",
14
16
  "create-project": "From 'I have a GitHub repo' to 'it's deployed' in seven clicks.",
17
+ "dockerfile-app": "How to deploy Dockerfile/Go/custom long-running apps: use framework static, root_directory, port, and optional persistent volume.",
15
18
  "custom-domain": "DNS verification, SSL provisioning, and primary-domain selection.",
16
19
  "env-vars": "Shared, preview, and production scopes — when to use which.",
17
20
  "auto-deploy": "GitHub webhooks, preview/production branch matching, opt-in production fan-out.",
18
21
  "password-protection": "Generate a per-environment password and share the URL.",
19
22
  "contact-form-email": "Webglobe SMTP + reCAPTCHA v3 + the AI-install prompt for Next.js routes.",
23
+ "attach-postgres": "Postgres attach/restart/credentials/reset workflow and safety gates.",
20
24
  rollback: "Promote a previous successful deployment back to live.",
21
25
  };
22
26
  const cached = null;
@@ -43,11 +47,13 @@ function buildRecipes() {
43
47
  ];
44
48
  const topicHeaders = [
45
49
  { topic: "create-project", header: "create-project" },
50
+ { topic: "dockerfile-app", header: "dockerfile-app" },
46
51
  { topic: "custom-domain", header: "custom-domain" },
47
52
  { topic: "env-vars", header: "env-vars" },
48
53
  { topic: "auto-deploy", header: "auto-deploy" },
49
54
  { topic: "password-protection", header: "password-protection" },
50
55
  { topic: "contact-form-email", header: "contact-form-email" },
56
+ { topic: "attach-postgres", header: "attach-postgres" },
51
57
  { topic: "rollback", header: "rollback" },
52
58
  ];
53
59
  for (const { topic, header } of topicHeaders) {
@@ -106,11 +112,13 @@ export function getRecipe(topic) {
106
112
  export const RECIPE_TOPICS = [
107
113
  "overview",
108
114
  "create-project",
115
+ "dockerfile-app",
109
116
  "custom-domain",
110
117
  "env-vars",
111
118
  "auto-deploy",
112
119
  "password-protection",
113
120
  "contact-form-email",
121
+ "attach-postgres",
114
122
  "rollback",
115
123
  ];
116
124
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,36 @@
1
1
  // AUTO-GENERATED by scripts/copy-recipes.mjs. Do not edit by hand.
2
2
  // Source: ../../.claude/skills/deployik-howto/
3
3
  export const RECIPE_FILES = [
4
+ {
5
+ file: "api-actions.md",
6
+ content: "# Deployik — API actions\n\nAction mode for the goals in [click-paths.md](click-paths.md). Each entry has the endpoint, payload shape, safety tier, and the exact `helpers/deployik` invocation.\n\n## Helper script\n\nPrefer Deployik MCP tools when they are available in the current session. They already hold the configured Deployik token and are safer than shelling out.\n\nIf MCP tools are unavailable, invoke the API via `./helpers/deployik` (relative to this skill's directory) — never paste tokens into raw curl. The wrapper:\n\n- Reads `~/.config/deployik/config` (`DEPLOYIK_BASE_URL`, `DEPLOYIK_TOKEN`)\n- Sends `Authorization: Bearer $DEPLOYIK_TOKEN`\n- Prints `HTTP <status>` to stderr, body to stdout\n- Exits non-zero on HTTP error\n- Pretty-prints JSON if `jq` is installed\n\nUsage:\n\n```\ndeployik api <METHOD> <path> [json-body]\n```\n\nIf `~/.config/deployik/config` is missing and no Deployik MCP tools are available, stop and direct the user to create a token (Sidebar → **Access tokens** → **Create token**) before retrying. If MCP tools are available, do not require this file.\n\n## Safety tiers\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently — read-only |\n| `POST/PUT/PATCH` non-production | Print payload, ask \"Do this?\" — wait for affirmative reply |\n| `POST/PUT/PATCH` production env | Flag `**PRODUCTION**`, ask explicit yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) |\n\n## Resolving project id\n\nMost endpoints need `{id}` (a ULID). When the user names a project, run:\n\n```\ndeployik api GET /api/projects\n```\n\n…and find the row whose `name` matches. Use its `id`.\n\n---\n\n## create-project\n\n**Goal:** [click-paths.md#create-project](click-paths.md#create-project)\n\n**Endpoint:** `POST /api/projects`\n**Tier:** Mutation — confirm before executing.\n\n**Body shape:**\n\n```json\n{\n \"name\": \"my-app\",\n \"github_repo\": \"my-repo\",\n \"github_owner\": \"my-org\",\n \"branch\": \"main\",\n \"framework\": \"nextjs\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"\",\n \"output_directory\": \".next\",\n \"build_command\": \"bun run build\",\n \"install_command\": \"bun install\",\n \"node_version\": \"22\",\n \"group_id\": \"(optional — dashboard group id; defaults to your personal group)\",\n \"organization_id\": \"(deprecated alias for group_id)\"\n}\n```\n\n**Framework values:** `nextjs`, `vite`, `astro`, `static`, `node-api`.\nFor a user-provided Dockerfile, use `framework: \"static\"` and set\n`root_directory` to the folder containing the Dockerfile. There is no special\n`framework: \"docker\"` value; Dockerfile presence is what makes Deployik build\nthe Dockerfile as-is.\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"my-app\",\"github_repo\":\"my-repo\",\"github_owner\":\"my-org\",\"branch\":\"main\",\"framework\":\"nextjs\",\"package_manager\":\"auto\",\"output_directory\":\".next\",\"build_command\":\"bun run build\",\"install_command\":\"bun install\",\"node_version\":\"22\"}'\n```\n\n**Behavior:** creates the project, auto-domain, GitHub webhook (best-effort), and triggers an initial preview deployment.\n\n**Groups:** the Projects dashboard uses dashboard groups. Call `GET /api/groups`\nto list available group ids. To create into a specific dashboard tab, pass that\ngroup's id as `group_id` (the API still accepts the legacy field name\n`organization_id` for backward compatibility).\n\n---\n\n## dockerfile-app\n\n**Goal:** [click-paths.md#dockerfile-app](click-paths.md#dockerfile-app)\n\n**Endpoint:** `POST /api/projects`, then optional `PATCH /api/projects/{id}` for runtime volume settings if they were not included at create time.\n**Tier:** Mutation — confirm before executing.\n\n**Deployik Dockerfile rule:** if a `Dockerfile` exists at repo root, Deployik uses it as-is with repo root as context. If `root_directory` is set and that folder contains a `Dockerfile`, Deployik uses that Dockerfile with `root_directory` as context. Do not invent `framework: \"docker\"`; use `framework: \"static\"` as the neutral preset.\n\n**Body shape for a Go / Dockerfile app in a subdirectory:**\n\n```json\n{\n \"name\": \"fleet\",\n \"github_repo\": \"QTTa\",\n \"github_owner\": \"LEFTEQ\",\n \"branch\": \"main\",\n \"framework\": \"static\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"apps/fleet\",\n \"output_directory\": \"\",\n \"build_command\": \"\",\n \"install_command\": \"\",\n \"node_version\": \"22\",\n \"port\": 8080,\n \"data_volume_enabled\": true,\n \"data_mount_path\": \"/data\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"fleet\",\"github_repo\":\"QTTa\",\"github_owner\":\"LEFTEQ\",\"branch\":\"main\",\"framework\":\"static\",\"package_manager\":\"auto\",\"root_directory\":\"apps/fleet\",\"output_directory\":\"\",\"build_command\":\"\",\"install_command\":\"\",\"node_version\":\"22\",\"port\":8080,\"data_volume_enabled\":true,\"data_mount_path\":\"/data\"}'\n```\n\n**When the repo inspector misses the app:** Dockerfile-only or Go-only folders may not appear in the JS-oriented repo inspector because they have no `package.json`. That is not evidence Deployik cannot run them. If the user knows the folder, create the project directly with `root_directory` and `framework: \"static\"`.\n\n**After creation:** Deployik triggers an initial preview deployment automatically. Use `GET /api/projects/{id}/deployments` or the MCP `list_deployments` / `deploy_project(wait:true)` flow to watch it.\n\n**Common failure:** Docker cannot copy files outside its build context. If the Dockerfile says `COPY go.sum .` or `COPY internal ./internal`, those paths must exist inside `root_directory` when `root_directory` is used.\n\n---\n\n## custom-domain\n\n**Goal:** [click-paths.md#custom-domain](click-paths.md#custom-domain)\n\n**Endpoints:**\n- `POST /api/projects/{id}/domains` — adds the row\n- `POST /api/projects/{id}/domains/{did}/verify` — runs DNS check + cert provisioning (returns 202; final result streams over WebSocket but the synchronous response confirms acceptance)\n- `PATCH /api/projects/{id}/domains/{did}` `{is_primary: true}` — optional, mark as primary\n\n**Tier:** Mutation — confirm before each step.\n\n**Body shape (POST):**\n\n```json\n{ \"domain\": \"example.com\", \"environment\": \"production\" }\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects/{id}/domains '{\"domain\":\"example.com\",\"environment\":\"production\"}'\ndeployik api POST /api/projects/{id}/domains/{did}/verify\n```\n\n**Critical reminder for the user:** the DNS A-record at the registrar must point to the VPS IP **before** Verify, otherwise it fails. Tell them the click-paths recipe explains where to add it.\n\n---\n\n## env-vars\n\n**Goal:** [click-paths.md#env-vars](click-paths.md#env-vars)\n\n**Endpoints:**\n- `POST /api/projects/{id}/env` — single upsert (env var)\n- `POST /api/projects/{id}/secrets` — single upsert (secret)\n- `DELETE /api/projects/{id}/env/{key}?environment=preview|production|shared` — destructive\n- `PUT /api/projects/{id}/env` — bulk replace (don't use unless the user says \"replace all\")\n\n**Tier:** Mutation — confirm. **Production environment writes get extra production-flag confirmation.**\n\n**Body shape (single upsert):**\n\n```json\n{ \"key\": \"STRIPE_PUBLIC\", \"value\": \"pk_test_xxx\", \"environment\": \"preview\" }\n```\n\n**Environment values:** `shared` (applies to both), `preview`, or `production`. If the user says \"preview\", use `preview`; if \"production\" or \"live\", use `production`. If unsure, ask.\n\n**Invocations:**\n\n```\ndeployik api POST /api/projects/{id}/env '{\"key\":\"STRIPE_PUBLIC\",\"value\":\"pk_test_xxx\",\"environment\":\"preview\"}'\ndeployik api POST /api/projects/{id}/secrets '{\"key\":\"DATABASE_URL\",\"value\":\"postgres://...\",\"environment\":\"production\"}'\ndeployik api DELETE /api/projects/{id}/env/STRIPE_PUBLIC?environment=preview\n```\n\n**Constraint:** secrets refuse `NEXT_PUBLIC_*` keys (they need to be in the variables store to bake into the build). Surface that error verbatim if the API returns it.\n\n**Heads-up:** changing a variable does NOT redeploy. After applying, ask the user if they want you to trigger a redeploy via the [#rollback](#rollback) endpoint with the latest commit sha.\n\n---\n\n## auto-deploy\n\n**Goal:** [click-paths.md#auto-deploy](click-paths.md#auto-deploy)\n\n**Endpoint:** `PUT /api/projects/{id}/auto-build`\n**Tier:** Mutation — confirm.\n\n**Body shape:**\n\n```json\n{\n \"enabled\": true,\n \"production_branch\": \"main\",\n \"preview_branches\": \"*\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api PUT /api/projects/{id}/auto-build '{\"enabled\":true,\"production_branch\":\"main\",\"preview_branches\":\"*\"}'\n```\n\n**Side effect:** Deployik creates a webhook on the GitHub repo. If the user hasn't granted the `admin:repo_hook` scope to the OAuth app, this errors — ask them to sign out and back in in the dashboard, then retry.\n\nTo disable: `deployik api DELETE /api/projects/{id}/auto-build` (deletes config + webhook). Treat as destructive — typed confirmation.\n\n---\n\n## password-protection\n\n**Goal:** [click-paths.md#password-protection](click-paths.md#password-protection)\n\n**Endpoints:**\n- `PUT /api/projects/{id}/protection` — enable/disable per environment\n- `POST /api/projects/{id}/protection/regenerate` — new password (destructive — require typed confirmation, the old password stops working at this point)\n\n**Tier:** PUT = mutation/confirm. Regenerate = destructive/typed-confirm.\n\n**Body shapes:**\n\n```json\n{ \"environment\": \"preview\", \"enabled\": true }\n{ \"environment\": \"production\", \"enabled\": false }\n```\n\n**Invocations:**\n\n```\ndeployik api PUT /api/projects/{id}/protection '{\"environment\":\"preview\",\"enabled\":true}'\ndeployik api POST /api/projects/{id}/protection/regenerate '{\"environment\":\"preview\"}'\n```\n\n**Response on enable / regenerate:** the JSON includes the plaintext password under `password`. Surface it to the user with a warning: this is the only time the API will return it.\n\n---\n\n## contact-form-email\n\n**Goal:** [click-paths.md#contact-form-email](click-paths.md#contact-form-email)\n\n**Endpoints:**\n- `GET /api/projects/{id}/email` — fetch current settings + the **AI install prompt** (auto-generated server-side from the project's framework, package manager, root directory, and reCAPTCHA site key)\n- `PUT /api/projects/{id}/email` — save SMTP host/port/security/user, From address + name, contact recipients, reCAPTCHA site key, score threshold; the SMTP password and reCAPTCHA secret are persisted as encrypted secrets\n- `POST /api/projects/{id}/email/test-smtp` — send a test email through the saved SMTP credentials\n\n**Tier:** PUT = mutation/confirm. test-smtp = mutation/confirm (it actually sends an email — usually fine, but flag it explicitly because the user might be configuring against a live mailbox). GET = read silent.\n\n**Body shape (PUT):**\n\n```json\n{\n \"provider\": \"webglobe\",\n \"smtp_host\": \"smtp.webglobe.cz\",\n \"smtp_port\": 587,\n \"smtp_security\": \"starttls\",\n \"smtp_user\": \"noreply@example.com\",\n \"smtp_password\": \"<paste, only sent on save>\",\n \"email_from\": \"noreply@example.com\",\n \"email_from_name\": \"My Site\",\n \"contact_email_to\": \"owner@example.com\",\n \"recaptcha_site_key\": \"6Lc...public\",\n \"recaptcha_secret\": \"6Lc...secret\",\n \"recaptcha_mode\": \"v3\",\n \"recaptcha_score_threshold\": 0.5\n}\n```\n\n**Provider values:** `webglobe` (defaults derived from the project's primary production domain) or `smtp` (custom — user supplies all fields). Use `webglobe` unless the user says otherwise.\n\n**Security values:** `starttls` (port 587), `tls` (port 465), `none` (only for explicit testing — never recommend it).\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/email\ndeployik api PUT /api/projects/{id}/email '{\"provider\":\"webglobe\",\"smtp_host\":\"smtp.webglobe.cz\",\"smtp_port\":587,\"smtp_security\":\"starttls\",\"smtp_user\":\"noreply@example.com\",\"smtp_password\":\"<...>\",\"email_from\":\"noreply@example.com\",\"email_from_name\":\"My Site\",\"contact_email_to\":\"owner@example.com\",\"recaptcha_site_key\":\"<site>\",\"recaptcha_secret\":\"<secret>\",\"recaptcha_mode\":\"v3\",\"recaptcha_score_threshold\":0.5}'\ndeployik api POST /api/projects/{id}/email/test-smtp\n```\n\n**Response from GET:** includes the field `ai_install_prompt` (or similar — confirm the exact key by reading the response). This is a fully-formed prompt the user can paste into any AI coding assistant to install the contact-form code into their site. **When the user asks for the AI prompt, surface this string verbatim** — do not paraphrase or shorten it.\n\n**Workflow when guiding action mode for this recipe:**\n1. Ask the user for the four SMTP values from the Webglobe portal and the two reCAPTCHA keys from Google. Offer to walk them through Parts 1 and 2 of the click-paths recipe if they don't have them yet.\n2. Print the PUT payload (with **password and secret masked** as `***` in the preview) and ask \"Do this?\"\n3. On confirm, send the PUT.\n4. Ask if they want to verify by sending a test email; if yes, run POST `/email/test-smtp`.\n5. If the test succeeds, fetch GET `/email` and surface the AI install prompt for Part 4 of the recipe.\n6. If the test fails, surface the error from `payload.settings.last_test_error` verbatim and offer to walk through troubleshooting.\n\n**Sensitive values:** `smtp_password` and `recaptcha_secret` are the only truly sensitive fields. Treat them like passwords. If the user pastes them in chat, complete the action then suggest rotating them.\n\n---\n\n## attach-postgres\n\n**Goal:** [click-paths.md#attach-postgres](click-paths.md#attach-postgres)\n\n**Endpoints:**\n- `GET /api/projects/{id}/services` — list services attached to the project\n- `POST /api/projects/{id}/services` — attach a service (v1: postgres)\n- `DELETE /api/projects/{id}/services/{env}` — **destructive** — detach + drop volume\n- `GET /api/projects/{id}/services/{env}/credentials` — reveal password + DSN + SSH tunnel command (audited)\n- `POST /api/projects/{id}/services/{env}/regenerate-password` — rotate password (container keeps old password until next deploy/restart)\n- `POST /api/projects/{id}/services/{env}/restart` — recreate container, preserve data\n- `POST /api/projects/{id}/services/{env}/reset` — **destructive** — wipe volume, requires `{\"confirm\":\"<project>-<env>\"}` body\n\n**Tier:**\n- `GET` list — silent.\n- `POST` attach — mutation, confirm.\n- `POST` restart, regenerate-password — mutation, confirm. **Production gets the production flag.**\n- `DELETE` detach and `POST` reset — typed-string confirm matching `<project>-<env>` even in preview. Do **not** run these as a shortcut for \"start fresh\" — there is no undo.\n\n**Body shapes:**\n\n```json\n// Attach\n{ \"environment\": \"preview\", \"type\": \"postgres\" }\n\n// Reset (server requires the typed string)\n{ \"confirm\": \"<project_name>-<environment>\" }\n```\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/services\ndeployik api POST /api/projects/{id}/services '{\"environment\":\"preview\",\"type\":\"postgres\"}'\ndeployik api GET /api/projects/{id}/services/preview/credentials\ndeployik api POST /api/projects/{id}/services/preview/restart\ndeployik api POST /api/projects/{id}/services/preview/regenerate-password\ndeployik api POST /api/projects/{id}/services/production/reset '{\"confirm\":\"my-app-production\"}'\ndeployik api DELETE /api/projects/{id}/services/preview\n```\n\n**After attach — don't forget the deploy:** attach is just a row in the database. The container only starts on the next deployment for that environment (the pipeline's `EnsureServices` hook). Tell the user to trigger one: `deployik api POST /api/projects/{id}/deployments '{\"environment\":\"preview\"}'`.\n\n**Project rename is blocked while attached.** `PATCH /api/projects/{id}` with a new `name` will 409 if any service row exists for the project. Detach first.\n\n---\n\n## rollback\n\n**Goal:** [click-paths.md#rollback](click-paths.md#rollback)\n\n**Endpoints:**\n- `GET /api/projects/{id}/deployments?environment=production&status=live` — find the previous good deployment\n- `POST /api/projects/{id}/deployments` — trigger a redeploy of a specific commit\n\n**Tier:** Mutation — confirm. **Production redeploys flagged as production.**\n\n**Body shape (POST):**\n\n```json\n{ \"environment\": \"production\", \"branch\": \"main\", \"commit_sha\": \"abc1234\" }\n```\n\nIf the user wants to roll back to \"the previous good one\", list deployments first and pick the most recent `live` row before the regression. Show its commit sha and message in the confirmation prompt.\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/deployments?environment=production&status=live&limit=5\ndeployik api POST /api/projects/{id}/deployments '{\"environment\":\"production\",\"branch\":\"main\",\"commit_sha\":\"abc1234\"}'\n```\n\n---\n\n## Errors\n\nWhen the API returns a non-2xx status:\n\n- Print the HTTP status and the JSON body (the helper does this automatically — let the user see it).\n- **Don't retry silently.** Most errors are user-meaningful (e.g. `403` from auto-build = missing OAuth scope, `409` from domain add = duplicate, `400` from secret = `NEXT_PUBLIC_` not allowed).\n- Suggest the next step based on the error message rather than guessing or hand-rolling a fix.\n",
7
+ },
8
+ {
9
+ file: "click-paths.md",
10
+ content: "# Deployik — Where to click\n\nNine recipes for the most common things a user wants to do in the Deployik dashboard. If the user's goal isn't in the table, ask them warmly to rephrase, or check whether their goal is actually outside Deployik's scope.\n\nEvery recipe ends with a friendly \"stuck on a step?\" line. If the user uses it, ask which step and walk through that single step in fine detail (one click, one screenshot description, or one clarifying question at a time) before continuing.\n\n## What do you want to do?\n\n| Goal | Recipe |\n|------|--------|\n| I want to put my GitHub repo online | [#create-project](#create-project) |\n| I want to deploy a Dockerfile, Go server, API, or SQLite-backed app | [#dockerfile-app](#dockerfile-app) |\n| I want to use my own domain (example.com) | [#custom-domain](#custom-domain) |\n| I want to set environment variables / API keys | [#env-vars](#env-vars) |\n| I want it to redeploy when I push to GitHub | [#auto-deploy](#auto-deploy) |\n| I want a password before people see the site | [#password-protection](#password-protection) |\n| I want my contact form to actually send emails (with spam protection) | [#contact-form-email](#contact-form-email) |\n| I want a Postgres database for my app | [#attach-postgres](#attach-postgres) |\n| I want to roll back to a previous version | [#rollback](#rollback) |\n\n---\n\n## create-project\n\n**Goal:** Connect a GitHub repository to Deployik and deploy it for the first time.\n\n**Route:** `/new`\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**Steps:**\n1. Click **+ New project** on the dashboard. The page lists every GitHub repo Deployik can see for your account.\n2. Search or scroll for the repo. Click **Import** on the row.\n3. *If Deployik detects a monorepo (multiple apps in subfolders):* a step appears asking which app to deploy. Click the one you want. Framework, root directory, and build command pre-fill.\n4. *If single-app:* this step is skipped automatically.\n5. On the configuration screen:\n - **Project name** — used as the preview subdomain. Lowercase letters, digits, and hyphens only.\n - **Branch** — usually `main` or `master`.\n - **Framework** — auto-detected. If wrong, change it; install/build/output reset to that framework's defaults.\n - **Group** — choose the dashboard group/tab this project should live in.\n6. Click **Create project**. Deployik creates the auto-domain `{project-name}.preview.lovinka.com`, sets up the GitHub webhook for auto-deploy, and starts the first preview deployment.\n7. The page navigates to the project Overview. The **Preview** strip shows the deployment progressing through queued → building → live.\n\n**Gotcha:** the GitHub OAuth scope must include `admin:repo_hook` for the webhook step to work. If you signed in before that scope was added, sign out and back in.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#create-project](api-actions.md#create-project)\n\n---\n\n## dockerfile-app\n\n**Goal:** Deploy a project that already has its own Dockerfile, such as a Go HTTP server, a custom API, or an app that needs SQLite/persistent files.\n\n**Route:** `/new`, then project **Settings** if you need to adjust runtime fields.\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**What Deployik supports:**\n- If the repo root contains `Dockerfile`, Deployik builds that Dockerfile as-is.\n- If the app lives in a subfolder, set **Root directory** to that subfolder and put `Dockerfile` there. Deployik builds with that subfolder as the Docker context, so files beside the Dockerfile are included correctly.\n- There is no special **Docker** framework option. Pick **Static Site** as the neutral preset for custom Dockerfiles; the Dockerfile takes over the real build.\n\n**Steps:**\n1. Make sure the repo is pushed to GitHub. Deployik clones from GitHub, not your unpushed local files.\n2. Make sure the app folder has a `Dockerfile`. For a subfolder app, the Dockerfile should be inside that folder.\n3. Click **+ New project**, import the repo, and choose the app folder if Deployik shows a monorepo picker.\n4. On the configuration screen:\n - **Framework** — choose **Static Site** for a custom Dockerfile.\n - **Root directory** — folder containing the Dockerfile, or leave empty for repo root.\n - **Port** — the HTTP port your container listens on, for example `8080` for many Go servers or `3000` for many web apps.\n - **Group** — choose the dashboard group/tab this project should live in.\n5. If the app writes local files, open project **Settings** → **Runtime** after creation and enable **Persistent data volume**. Set **Mount path** to the path your container writes to, such as `/data` or `/app/data`.\n6. Trigger a preview deploy. The build log should show `docker buildx build` using your Dockerfile.\n\n**Gotcha:** Docker can only copy files inside the build context. If your Dockerfile is in `apps/fleet`, keep `go.mod`, `go.sum`, `internal/`, `web/`, and other copied files inside `apps/fleet`, or move the Dockerfile to a higher folder and use that as the root directory.\n\n**Gotcha:** the `framework`, `build_command`, `install_command`, `output_directory`, `node_version`, `start_command`, and `health_path` fields are for Deployik-generated Dockerfiles. A user Dockerfile controls its own build, command, and health check. The Deployik **Port** field still matters because the reverse proxy connects to that port.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#dockerfile-app](api-actions.md#dockerfile-app)\n\n---\n\n## custom-domain\n\n**Goal:** Point your own domain (e.g. `example.com`) at a Deployik project.\n\n**Route:** `/projects/$id/settings/domains`\n**Sidebar:** Project → **Settings** (expand) → **Domains**\n\n**Steps:**\n1. Click **Domains** under the project's Settings section.\n2. Find the **Add domain** form near the top. Enter the domain (apex like `example.com` or subdomain like `app.example.com`).\n3. Pick the environment — **Preview** for staging, **Production** for live.\n4. Click **Add**. The row appears with status `pending` and `dns_verified: no`.\n5. **Outside Deployik** — go to your domain's DNS provider:\n - **Cloudflare:** DNS → **Records** → **Add record** → Type `A`, Name (apex = `@`, subdomain = the prefix), IPv4 = the VPS IP shown in Deployik's expandable **DNS Setup Guide** on the same page, Proxy status: **DNS only** (gray cloud, not orange — Cloudflare's proxy interferes with Let's Encrypt). Save.\n - **Namecheap:** Domain List → **Manage** → **Advanced DNS** → **Add new record** → Type `A Record`, Host (`@` or subdomain), Value = VPS IP, TTL Automatic. Save.\n - **GoDaddy:** Domain → **DNS** → **Add** → Type `A`, Name (`@` or subdomain), Value = VPS IP. Save.\n - **Other registrar:** add an `A` record pointing at the VPS IP from the DNS Setup Guide. The exact UI varies — the record type and value matter, the UI doesn't.\n6. Wait 1–5 minutes for DNS to propagate. You can check with `dig +short A example.com` or `nslookup example.com` from your terminal — when it returns the VPS IP, you're ready.\n7. Back in Deployik, on the same Domains page, click the **Verify** button on the domain's row. A live log streams: DNS check → Let's Encrypt cert request → nginx reload. Wait for \"Provisioning complete\".\n8. Once `ssl_status: active`, the **Open** button on the row works. Production primary domain also drives the **Open** link on the project Overview.\n\n**Gotcha:** if Verify fails with \"DNS does not match\", DNS hasn't propagated yet — wait another minute and try again. Don't change anything in Deployik in the meantime.\n\n**Set as primary:** to make this domain the one Deployik treats as canonical for its environment, click the row's three-dot menu → **Set as primary**. A star badge appears.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can especially help with the registrar's DNS panel — just tell me which provider you use and I'll talk you through the exact clicks.\n\n**API equivalent:** [api-actions.md#custom-domain](api-actions.md#custom-domain)\n\n---\n\n## env-vars\n\n**Goal:** Set environment variables (for build-time `NEXT_PUBLIC_*`) or secrets (runtime-only) for the deployed app.\n\n**Route:** `/projects/$id/settings/env`\n**Sidebar:** Project → **Settings** (expand) → **Environments**\n\n**Steps:**\n1. Click **Environments** under the project's Settings section.\n2. Two tabs at the top: **Variables** (visible at build time, can include `NEXT_PUBLIC_*`) and **Secrets** (runtime only, never in build).\n3. Each row picks a **Scope** — *Shared* (applies to both preview and production), *Preview* only, or *Production* only.\n4. Click **Add variable** (or **Add secret** on that tab). Type the key (e.g. `STRIPE_PUBLIC` or `DATABASE_URL`), the value, pick the scope. Click **Save**.\n5. To bulk-paste from a `.env` file: click **Import .env**, paste the file's contents, pick the scope. Each non-empty line becomes one variable.\n6. Existing values are masked as `****abcd` (last 4 chars). To change a value, click the row's edit (pencil) icon, paste the new value, save.\n\n**Gotcha:** changing a variable does NOT redeploy automatically. You'll see a \"Variables changed since last deploy\" badge on the project Overview. Click **Redeploy** there to apply the new values.\n\n**Build-time vs runtime:** `NEXT_PUBLIC_*` keys are baked into the static bundle at build time, so changing one requires a rebuild. Secrets are always runtime-only — Deployik refuses to save a secret with a `NEXT_PUBLIC_` prefix.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also add a variable for you via the API — just tell me the key, value, and which environment.\n\n**API equivalent:** [api-actions.md#env-vars](api-actions.md#env-vars)\n\n---\n\n## auto-deploy\n\n**Goal:** Make Deployik redeploy automatically when you push to GitHub.\n\n**Route:** `/projects/$id/settings`\n**Sidebar:** Project → **Settings** (expand) → **Build** (the default Settings page)\n\n**Steps:**\n1. Click **Settings** in the project sidebar (it lands on Build by default).\n2. Scroll to the **Auto-deploy** section.\n3. Toggle **Enable auto-deploy**. The first time you turn it on, Deployik creates a webhook on the GitHub repo using your OAuth token — this requires the `admin:repo_hook` scope. If the toggle errors, sign out and back in (GitHub re-prompts for the scope).\n4. **Production branch** — the branch whose pushes trigger production deployments. Defaults to the project's main branch (e.g. `main`).\n5. **Preview branches** — comma-separated list of branch names or branch patterns. `*` matches every other branch. Leave as `*` unless you want to restrict preview builds to specific branches.\n6. Click **Save**. The status indicator turns green and shows the GitHub webhook ID.\n7. Push a commit to the production branch. Within seconds, a new deployment with `trigger_source: webhook` appears in the Deployments list, and Deployik streams the build log.\n\n**Gotcha:** if a push doesn't trigger a build, check **GitHub repo → Settings → Webhooks**. The Deployik webhook should show recent deliveries with `200 OK` responses. Re-deliver a failed one from there to debug.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#auto-deploy](api-actions.md#auto-deploy)\n\n---\n\n## password-protection\n\n**Goal:** Hide the deployed site (preview, production, or both) behind a password before showing it to clients or doing QA.\n\n**Route:** `/projects/$id/settings/protection`\n**Sidebar:** Project → **Settings** (expand) → **Protection**\n\n**Steps:**\n1. Click **Protection** under the project's Settings section.\n2. Two cards: **Preview** and **Production**. Each has a toggle and (when enabled) a password reveal button.\n3. Toggle **Enable password protection** on the environment you want.\n4. Deployik generates a 16-character random password, encrypts and stores it, regenerates the nginx config to add `auth_request` blocks, and shows you the password once. Click the eye icon to reveal it. Copy it now.\n5. Click **Regenerate password** to mint a new one (invalidates the old). The new password is shown the same way.\n6. Visit the deployed site in an incognito window to confirm: the Czech-language auth page (`Heslo`) appears. Enter the password — you're in for 24 hours.\n\n**Gotcha:** changing the password does not log out anyone who's already on the site. The signed `deployik_site_auth` cookie they hold remains valid for its 24-hour lifetime. To force everyone off, change the cookie's `JWT_SECRET` on the Deployik server (operator action).\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#password-protection](api-actions.md#password-protection)\n\n---\n\n## contact-form-email\n\n**Goal:** Make the contact form on your deployed site actually deliver emails to your inbox, with spam protection so bots don't flood you.\n\n**Route:** `/projects/$id/integrations/email`\n**Sidebar:** Project → **Integrations** (expand) → **Email**\n\n**What this gives you:** when someone submits the contact form on your site, a real email lands in your inbox. Bots are filtered out using Google's invisible spam check (reCAPTCHA v3 — your visitors never see a \"click the traffic lights\" puzzle).\n\nThis recipe has three parts. Two of them happen outside Deployik — I'll tell you when we're leaving and when we're coming back.\n\n### Part 1 — Get your SMTP credentials from Webglobe (outside Deployik)\n\nSMTP is just the technical name for \"email sending\" — your hosting provider gives you a username and password your site uses to send mail through their servers.\n\n1. Open a new browser tab, go to your **Webglobe customer portal** (the place where you manage your hosting). Sign in.\n2. Find the section called **Mail** or **E-mail accounts**. Pick the address you want emails to come *from* (e.g. `noreply@yourdomain.com`). Create it if it doesn't exist yet.\n3. On that mailbox, look for **SMTP** or **Outgoing mail** settings. Write down four things:\n - **SMTP host** (looks like `smtp.webglobe.cz` or similar — exact name varies)\n - **SMTP port** (usually `587` for STARTTLS or `465` for TLS)\n - **Security** (`STARTTLS` for port 587, `TLS` for port 465)\n - **Username** (often the full email address, e.g. `noreply@yourdomain.com`)\n - **Password** (the mailbox password — keep it safe, you'll paste it into Deployik in Part 3)\n\nIf you can't find any of these, ask me — I'll help you locate them based on what you see in the portal.\n\n### Part 2 — Get reCAPTCHA v3 keys from Google (outside Deployik)\n\nThis is the spam protection. Google gives you two keys: a **site key** that goes on the public form, and a **secret key** the server uses to verify the form was submitted by a human.\n\n1. In a new tab, open `https://www.google.com/recaptcha/admin/create`. Sign in with your Google account.\n2. Fill the form:\n - **Label:** anything memorable, e.g. `myproject contact form`\n - **reCAPTCHA type:** pick **reCAPTCHA v3** (very important — v2 won't work).\n - **Domains:** add your production hostname (e.g. `example.com`). If you have a `www.example.com` variant, add it too. You can add `localhost` for testing.\n - Accept the terms, click **Submit**.\n3. The next page shows two keys:\n - **Site key** — public, goes in Deployik. Copy it.\n - **Secret key** — private, goes in your secrets store. Copy it too (and treat it like a password).\n\n### Part 3 — Wire it up in Deployik\n\nWe're back in Deployik now.\n\n1. In the project sidebar, expand **Integrations** and click **Email**.\n2. Fill in the SMTP fields with what you wrote down in Part 1:\n - **SMTP host**, **Port**, **Security** (STARTTLS / TLS), **Username**.\n - For **Password**, click the field and paste the mailbox password.\n3. Fill in the email fields:\n - **From address** — the mailbox address (e.g. `noreply@yourdomain.com`).\n - **From name** — the human name shown to recipients (e.g. `My Site`).\n - **Contact recipients** — who receives the form submissions. Comma-separated if more than one.\n4. Paste the reCAPTCHA **site key** from Part 2 into the **reCAPTCHA site key** field.\n5. **Score threshold** — leave at the default (`0.5`) unless you know you want to change it. Higher = stricter (more bots blocked, but more humans rejected too).\n6. Click **Save**. Deployik writes the SMTP host/port/from-address as **shared variables** and the SMTP password and reCAPTCHA secret as **secrets** — so the deployed site can read them at runtime.\n7. Click **Send test email**. Check the inbox of one of your **Contact recipients**. If it arrives, you're done with Part 3.\n\n### Part 4 — Add the contact form code to your site\n\nThe Email page has an **AI install prompt** section. It generates a copy-pasteable prompt with your project's exact framework, environment variables, and reCAPTCHA site key already filled in.\n\n1. On the Email page, scroll to **AI install prompt** (or **Install with AI**).\n2. Click **Copy prompt**.\n3. Paste the prompt into your AI coding assistant (Cursor, Claude Code, etc.) inside your project's repo. The assistant will write the contact form route, the reCAPTCHA hook, and the server handler that calls Deployik's SMTP credentials.\n4. Commit, push. If auto-deploy is on, the new version is live in a couple of minutes.\n5. Visit your live site, fill out the form, submit. The email should land in the inbox you configured.\n\n**Gotcha:** if the test email succeeds but real form submissions don't arrive, the most common cause is that the contact form code isn't reading the reCAPTCHA secret from environment variables on the server. The AI install prompt sets this up correctly — if it doesn't work, paste the error your form shows you and I'll diagnose.\n\n**Gotcha:** the **SMTP password** and the **reCAPTCHA secret** are the only two truly sensitive values here. Both are stored as secrets (encrypted at rest) — never paste them into a chat with me unless you're willing to rotate them after.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also do Part 3 for you via the API once you have the values from Parts 1 and 2 — just ask.\n\n**API equivalent:** [api-actions.md#contact-form-email](api-actions.md#contact-form-email)\n\n---\n\n## attach-postgres\n\n**Goal:** Get a real Postgres database for your app, per environment (preview / production), with credentials wired into the runtime automatically.\n\n**Route:** `/projects/$id/services`\n**Sidebar:** Project → **Services**\n\n**What this gives you:**\n- A dedicated Postgres container (a \"sidecar\") that runs next to your app, one per environment.\n- Standard environment variables (`DATABASE_URL` + discrete `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` / `PGPASSWORD`) injected into the deployed app automatically — your code just reads them.\n- A 16xxx loopback port on the VPS so you can connect from your laptop via an SSH tunnel for migrations / inspection.\n- The database **persists across deploys** — the volume isn't touched by a new deployment.\n\n**Steps:**\n\n1. *(Optional, brand-new project only)* On the **New project** page, scroll to **Attach Postgres database**. Toggle it on for preview / production. Skip the rest of this recipe — it's done.\n2. *(Existing project)* Click **Services** in the project sidebar.\n3. Two cards: **Preview** and **Production**. Each starts as **Not attached** with an **Attach Postgres** button.\n4. Click **Attach Postgres** on the environment you want. Deployik records the row, generates a strong random password, and assigns a unique 16xxx host port. The card flips to **Attached · pending** — the container itself isn't running yet.\n5. Trigger any deploy for that environment (push a commit, or click **Redeploy** on Overview). The build pipeline's `EnsureServices` hook starts the postgres container, waits for it to be healthy, then starts your app with the env vars injected. The card shows **running** once it's up.\n6. On the Services card, click **Show credentials** to reveal the password and the **SSH tunnel command**. Copy the SSH command, run it on your laptop — it forwards `127.0.0.1:15432` on your machine to the postgres in the VPS. Connect with `psql postgres://...@127.0.0.1:15432/...` or any client.\n7. To restart the container without touching data, click **Restart**. To rotate the password, click **Regenerate password** — the new password is shown once; the running container keeps the old password until the next deploy/restart, so trigger a redeploy right after.\n\n**Gotcha — Reset wipes everything:** the **Reset** button drops the volume and starts an empty database. Use it only for preview when you want a clean slate. On production it requires you to type `<project>-production` to confirm. There is no undo.\n\n**Gotcha — project rename is blocked:** while a service is attached, the project name is frozen (renaming would orphan the volume). Detach first, rename, re-attach (and re-import data) if you really need a new name.\n\n**Gotcha — detach deletes data:** clicking **Detach** stops the container AND removes the named volume. There is no undo. Take a `pg_dump` first if you want to keep the data.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also attach Postgres for you via the API and tail the container logs to confirm it came up clean — just ask.\n\n**API equivalent:** [api-actions.md#attach-postgres](api-actions.md#attach-postgres)\n\n---\n\n## rollback\n\n**Goal:** Revert to a previous successful deployment when the latest one is broken.\n\n**Route:** `/projects/$id/deployments`\n**Sidebar:** Project → **Deployments**\n\n**Steps:**\n1. Click **Deployments** in the project sidebar.\n2. The list shows every deployment with status, branch, commit message, who triggered it, and a thumbnail screenshot.\n3. Find the most recent **live**-status row from before the regression. Click the row to open the deployment detail page.\n4. On the detail page, in the top-right, click **Redeploy this commit**. (If you don't see that button, scroll to the build log header — it's there.)\n5. A confirmation modal appears. Click **Redeploy**. A new deployment row appears in the list with the same `commit_sha` but a new `id`, new build, and `triggered_by_username: you`.\n6. When status reaches **live**, the swap completes — the previous broken container is stopped and the rolled-back container takes over. Visitors see the older code immediately.\n\n**Gotcha:** rollback re-runs the build from source. If the regression is a config/env-var issue (not a code change), changing the env var and triggering a new build is faster — see [#env-vars](#env-vars). If it's a runtime dependency that broke between commits, rollback is the right move.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also list your recent deployments and pick the right \"last good\" one for you — just say the word.\n\n**API equivalent:** [api-actions.md#rollback](api-actions.md#rollback)\n",
11
+ },
4
12
  {
5
13
  file: "SKILL.md",
6
- content: "---\nname: deployik-howto\ndescription: Use when a user asks how to do something in the Deployik dashboard — connecting a GitHub repo, custom domains, environment variables or secrets, auto-deploy on push, password protection, sending email from a contact form (Webglobe SMTP + reCAPTCHA v3), or rolling back a deployment — or asks Claude to perform one of those actions for them. Triggers include \"how do I…\", \"where do I click…\", \"I want my own domain\", \"I want my contact form to send emails\", \"I want to make X work\", \"deploy my repo\", and \"just do X for me\" phrased against Deployik. Do NOT activate for questions about Deployik's source code (Go handlers, React pages, migrations) — those are codebase tasks, not dashboard tasks.\n---\n\n# Deployik How-To\n\nHelps a user navigate or operate the Deployik dashboard. Two modes: **guide** (walk them through clicks) and **action** (do it for them via the Deployik API).\n\n## Tone\n\nThe primary user is non-technical. Speak warmly and in plain language. Quote Deployik button labels exactly (they're in English) but explain in everyday words around them. Never assume the user already knows what an \"MX record\" or a \"site key\" is — define it the first time it appears, in one short sentence.\n\nWhen you give a recipe, **always finish with the same friendly offer**:\n\n> Stuck on any of these steps? Tell me which one and I'll walk through it with you.\n\nIf the user gets stuck, ask one question at a time, and offer to do the part on their behalf if it's something action mode can do (e.g. \"Want me to add the secret for you, or do you want to do it in the dashboard?\").\n\nIf a sub-step happens outside Deployik (a registrar's DNS panel, the Google reCAPTCHA admin, a webmail customer portal), say so explicitly so they know they're leaving Deployik for a moment. Then guide them step-by-step in the external UI before bringing them back.\n\n## When to use\n\n- User goal phrased against the Deployik dashboard — e.g. \"I want my own domain\", \"where do I add an env var\", \"make the site password-protected\", \"redeploy when I push to GitHub\", \"make my contact form send emails\", \"roll back my last release\".\n- User asks Claude to *perform* one of those tasks instead of guiding them.\n\n## When NOT to use\n\n- Questions about Deployik's source code, build pipeline internals, or how a Go handler/React page is implemented. Those are not dashboard tasks.\n- Self-hosting / VPS / nginx / SSL provider questions — those belong to the lovinka-infra repo and a different audience.\n\n## How to choose the mode\n\nRead the user's phrasing:\n\n- *\"How do I…\"*, *\"Where do I click…\"*, *\"I want to learn how to…\"* → **guide mode** → see [click-paths.md](click-paths.md).\n- *\"Do X for me\"*, *\"Add this env var\"*, *\"Trigger a deploy\"*, imperative phrasing → **action mode** → see [api-actions.md](api-actions.md).\n\nIf ambiguous, ask warmly: \"Want me to walk you through the dashboard, or do it for you?\"\n\n## Action mode prerequisites\n\nAction mode requires a Personal Access Token. If `~/.config/deployik/config` doesn't exist or is missing `DEPLOYIK_BASE_URL` / `DEPLOYIK_TOKEN`, stop and explain in friendly tone:\n\n> Before I can do this for you, I need a Deployik access token — it's like a password just for tools. In the Deployik sidebar, click **Access tokens** → **Create token**, give it a name like \"skill\", and copy the value it shows you (it starts with `dpk_`). Then save it to a file at `~/.config/deployik/config` like this:\n>\n> ```\n> DEPLOYIK_BASE_URL=https://your-deployik-host\n> DEPLOYIK_TOKEN=dpk_...\n> ```\n>\n> Once that's saved, just ask me the same thing again and I'll do it.\n\n## Safety rules for action mode\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently |\n| `POST/PUT/PATCH` to non-production | Print intended `<METHOD> <path>` and JSON body, ask \"Do this?\" — wait for an affirmative reply |\n| `POST/PUT/PATCH` to production env | Print payload, **flag PRODUCTION explicitly**, ask yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) — anything else aborts |\n\nAlways invoke the API via `helpers/deployik` (bundled with this skill). Never hand-roll curl with the token inline — keeps the token out of shell history.\n",
14
+ content: "---\nname: deployik-howto\ndescription: Use when a user asks how to do something in the Deployik dashboard — connecting a GitHub repo, deploying a Dockerfile/Go/long-running app, custom domains, environment variables or secrets, auto-deploy on push, password protection, sending email from a contact form (Webglobe SMTP + reCAPTCHA v3), or rolling back a deployment — or asks Claude to perform one of those actions for them. Triggers include \"how do I…\", \"where do I click…\", \"I want my own domain\", \"I want my contact form to send emails\", \"I want to make X work\", \"deploy my repo\", \"deploy this Dockerfile\", \"deploy my Go app\", and \"just do X for me\" phrased against Deployik. Do NOT activate for questions about Deployik's source code (Go handlers, React pages, migrations) — those are codebase tasks, not dashboard tasks.\n---\n\n# Deployik How-To\n\nHelps a user navigate or operate the Deployik dashboard. Two modes: **guide** (walk them through clicks) and **action** (do it for them via the Deployik API).\n\n## Tone\n\nThe primary user is non-technical. Speak warmly and in plain language. Quote Deployik button labels exactly (they're in English) but explain in everyday words around them. Never assume the user already knows what an \"MX record\" or a \"site key\" is — define it the first time it appears, in one short sentence.\n\nWhen you give a recipe, **always finish with the same friendly offer**:\n\n> Stuck on any of these steps? Tell me which one and I'll walk through it with you.\n\nIf the user gets stuck, ask one question at a time, and offer to do the part on their behalf if it's something action mode can do (e.g. \"Want me to add the secret for you, or do you want to do it in the dashboard?\").\n\nIf a sub-step happens outside Deployik (a registrar's DNS panel, the Google reCAPTCHA admin, a webmail customer portal), say so explicitly so they know they're leaving Deployik for a moment. Then guide them step-by-step in the external UI before bringing them back.\n\n## When to use\n\n- User goal phrased against the Deployik dashboard — e.g. \"I want my own domain\", \"where do I add an env var\", \"make the site password-protected\", \"redeploy when I push to GitHub\", \"make my contact form send emails\", \"roll back my last release\".\n- User asks Claude to *perform* one of those tasks instead of guiding them.\n\n## Critical build facts\n\n- Deployik supports user-provided Dockerfiles. There is no special `framework: docker` value.\n- If a `Dockerfile` exists in the repo root, Deployik builds it as-is with repo root as the Docker context.\n- If `root_directory` is set and a `Dockerfile` exists inside that folder, Deployik builds that Dockerfile with `root_directory` as the Docker context.\n- For Dockerfile, Go, SQLite, or other long-running non-frontend apps, use `framework: static` as the neutral preset, set `root_directory` to the Dockerfile folder, and set `port` to the port the container listens on.\n- The build/install/output fields are for generated Dockerfiles. A user Dockerfile controls its own build and start command.\n\n## When NOT to use\n\n- Questions about Deployik's source code, build pipeline internals, or how a Go handler/React page is implemented. Those are not dashboard tasks.\n- Self-hosting / VPS / nginx / SSL provider questions — those belong to the lovinka-infra repo and a different audience.\n\n## How to choose the mode\n\nRead the user's phrasing:\n\n- *\"How do I…\"*, *\"Where do I click…\"*, *\"I want to learn how to…\"* → **guide mode** → see [click-paths.md](click-paths.md).\n- *\"Do X for me\"*, *\"Add this env var\"*, *\"Trigger a deploy\"*, imperative phrasing → **action mode** → see [api-actions.md](api-actions.md).\n\nIf ambiguous, ask warmly: \"Want me to walk you through the dashboard, or do it for you?\"\n\n## Action mode prerequisites\n\nAction mode requires a Personal Access Token, but it may already be available through the Deployik MCP server. Prefer Deployik MCP tools when they are available in the current session (`list_projects`, `create_project`, `deploy_project`, `get_recipe`, etc.). Do not stop just because `~/.config/deployik/config` is missing if MCP Deployik tool calls work.\n\nIf no Deployik MCP tools are available, use the bundled `helpers/deployik` script. If `~/.config/deployik/config` doesn't exist or is missing `DEPLOYIK_BASE_URL` / `DEPLOYIK_TOKEN`, stop and explain in friendly tone:\n\n> Before I can do this for you, I need a Deployik access token — it's like a password just for tools. In the Deployik sidebar, click **Access tokens** → **Create token**, give it a name like \"skill\", and copy the value it shows you (it starts with `dpk_`). Then save it to a file at `~/.config/deployik/config` like this:\n>\n> ```\n> DEPLOYIK_BASE_URL=https://your-deployik-host\n> DEPLOYIK_TOKEN=dpk_...\n> ```\n>\n> Once that's saved, just ask me the same thing again and I'll do it.\n\n## Safety rules for action mode\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently |\n| `POST/PUT/PATCH` to non-production | Print intended `<METHOD> <path>` and JSON body, ask \"Do this?\" — wait for an affirmative reply |\n| `POST/PUT/PATCH` to production env | Print payload, **flag PRODUCTION explicitly**, ask yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) — anything else aborts |\n\nUse Deployik MCP tools first. If they are unavailable, invoke the HTTP API via `helpers/deployik` (bundled with this skill). Never hand-roll curl with the token inline — keeps the token out of shell history.\n",
7
15
  },
16
+ ];
17
+ export const SKILL_FILES = [
8
18
  {
9
19
  file: "api-actions.md",
10
- content: "# Deployik — API actions\n\nAction mode for the goals in [click-paths.md](click-paths.md). Each entry has the endpoint, payload shape, safety tier, and the exact `helpers/deployik` invocation.\n\n## Helper script\n\nAlways invoke the API via `./helpers/deployik` (relative to this skill's directory) — never paste tokens into raw curl. The wrapper:\n\n- Reads `~/.config/deployik/config` (`DEPLOYIK_BASE_URL`, `DEPLOYIK_TOKEN`)\n- Sends `Authorization: Bearer $DEPLOYIK_TOKEN`\n- Prints `HTTP <status>` to stderr, body to stdout\n- Exits non-zero on HTTP error\n- Pretty-prints JSON if `jq` is installed\n\nUsage:\n\n```\ndeployik api <METHOD> <path> [json-body]\n```\n\nIf `~/.config/deployik/config` is missing, stop and direct the user to create a token (Sidebar → **Access tokens** → **Create token**) before retrying.\n\n## Safety tiers\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently — read-only |\n| `POST/PUT/PATCH` non-production | Print payload, ask \"Do this?\" — wait for affirmative reply |\n| `POST/PUT/PATCH` production env | Flag `**PRODUCTION**`, ask explicit yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) |\n\n## Resolving project id\n\nMost endpoints need `{id}` (a ULID). When the user names a project, run:\n\n```\ndeployik api GET /api/projects\n```\n\n…and find the row whose `name` matches. Use its `id`.\n\n---\n\n## create-project\n\n**Goal:** [click-paths.md#create-project](click-paths.md#create-project)\n\n**Endpoint:** `POST /api/projects`\n**Tier:** Mutation — confirm before executing.\n\n**Body shape:**\n\n```json\n{\n \"name\": \"my-app\",\n \"github_repo\": \"my-repo\",\n \"github_owner\": \"my-org\",\n \"branch\": \"main\",\n \"framework\": \"nextjs\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"\",\n \"output_directory\": \".next\",\n \"build_command\": \"bun run build\",\n \"install_command\": \"bun install\",\n \"node_version\": \"22\",\n \"group_id\": \"(optional — dashboard group id; defaults to your personal group)\",\n \"organization_id\": \"(deprecated alias for group_id)\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"my-app\",\"github_repo\":\"my-repo\",\"github_owner\":\"my-org\",\"branch\":\"main\",\"framework\":\"nextjs\",\"package_manager\":\"auto\",\"output_directory\":\".next\",\"build_command\":\"bun run build\",\"install_command\":\"bun install\",\"node_version\":\"22\"}'\n```\n\n**Behavior:** creates the project, auto-domain, GitHub webhook (best-effort), and triggers an initial preview deployment.\n\n**Groups:** the Projects dashboard uses dashboard groups. Call `GET /api/groups`\nto list available group ids. To create into a specific dashboard tab, pass that\ngroup's id as `group_id` (the API still accepts the legacy field name\n`organization_id` for backward compatibility).\n\n---\n\n## custom-domain\n\n**Goal:** [click-paths.md#custom-domain](click-paths.md#custom-domain)\n\n**Endpoints:**\n- `POST /api/projects/{id}/domains` — adds the row\n- `POST /api/projects/{id}/domains/{did}/verify` — runs DNS check + cert provisioning (returns 202; final result streams over WebSocket but the synchronous response confirms acceptance)\n- `PATCH /api/projects/{id}/domains/{did}` `{is_primary: true}` — optional, mark as primary\n\n**Tier:** Mutation — confirm before each step.\n\n**Body shape (POST):**\n\n```json\n{ \"domain\": \"example.com\", \"environment\": \"production\" }\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects/{id}/domains '{\"domain\":\"example.com\",\"environment\":\"production\"}'\ndeployik api POST /api/projects/{id}/domains/{did}/verify\n```\n\n**Critical reminder for the user:** the DNS A-record at the registrar must point to the VPS IP **before** Verify, otherwise it fails. Tell them the click-paths recipe explains where to add it.\n\n---\n\n## env-vars\n\n**Goal:** [click-paths.md#env-vars](click-paths.md#env-vars)\n\n**Endpoints:**\n- `POST /api/projects/{id}/env` — single upsert (env var)\n- `POST /api/projects/{id}/secrets` — single upsert (secret)\n- `DELETE /api/projects/{id}/env/{key}?environment=preview|production|shared` — destructive\n- `PUT /api/projects/{id}/env` — bulk replace (don't use unless the user says \"replace all\")\n\n**Tier:** Mutation — confirm. **Production environment writes get extra production-flag confirmation.**\n\n**Body shape (single upsert):**\n\n```json\n{ \"key\": \"STRIPE_PUBLIC\", \"value\": \"pk_test_xxx\", \"environment\": \"preview\" }\n```\n\n**Environment values:** `shared` (applies to both), `preview`, or `production`. If the user says \"preview\", use `preview`; if \"production\" or \"live\", use `production`. If unsure, ask.\n\n**Invocations:**\n\n```\ndeployik api POST /api/projects/{id}/env '{\"key\":\"STRIPE_PUBLIC\",\"value\":\"pk_test_xxx\",\"environment\":\"preview\"}'\ndeployik api POST /api/projects/{id}/secrets '{\"key\":\"DATABASE_URL\",\"value\":\"postgres://...\",\"environment\":\"production\"}'\ndeployik api DELETE /api/projects/{id}/env/STRIPE_PUBLIC?environment=preview\n```\n\n**Constraint:** secrets refuse `NEXT_PUBLIC_*` keys (they need to be in the variables store to bake into the build). Surface that error verbatim if the API returns it.\n\n**Heads-up:** changing a variable does NOT redeploy. After applying, ask the user if they want you to trigger a redeploy via the [#rollback](#rollback) endpoint with the latest commit sha.\n\n---\n\n## auto-deploy\n\n**Goal:** [click-paths.md#auto-deploy](click-paths.md#auto-deploy)\n\n**Endpoint:** `PUT /api/projects/{id}/auto-build`\n**Tier:** Mutation — confirm.\n\n**Body shape:**\n\n```json\n{\n \"enabled\": true,\n \"production_branch\": \"main\",\n \"preview_branches\": \"*\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api PUT /api/projects/{id}/auto-build '{\"enabled\":true,\"production_branch\":\"main\",\"preview_branches\":\"*\"}'\n```\n\n**Side effect:** Deployik creates a webhook on the GitHub repo. If the user hasn't granted the `admin:repo_hook` scope to the OAuth app, this errors — ask them to sign out and back in in the dashboard, then retry.\n\nTo disable: `deployik api DELETE /api/projects/{id}/auto-build` (deletes config + webhook). Treat as destructive — typed confirmation.\n\n---\n\n## password-protection\n\n**Goal:** [click-paths.md#password-protection](click-paths.md#password-protection)\n\n**Endpoints:**\n- `PUT /api/projects/{id}/protection` — enable/disable per environment\n- `POST /api/projects/{id}/protection/regenerate` — new password (destructive — require typed confirmation, the old password stops working at this point)\n\n**Tier:** PUT = mutation/confirm. Regenerate = destructive/typed-confirm.\n\n**Body shapes:**\n\n```json\n{ \"environment\": \"preview\", \"enabled\": true }\n{ \"environment\": \"production\", \"enabled\": false }\n```\n\n**Invocations:**\n\n```\ndeployik api PUT /api/projects/{id}/protection '{\"environment\":\"preview\",\"enabled\":true}'\ndeployik api POST /api/projects/{id}/protection/regenerate '{\"environment\":\"preview\"}'\n```\n\n**Response on enable / regenerate:** the JSON includes the plaintext password under `password`. Surface it to the user with a warning: this is the only time the API will return it.\n\n---\n\n## contact-form-email\n\n**Goal:** [click-paths.md#contact-form-email](click-paths.md#contact-form-email)\n\n**Endpoints:**\n- `GET /api/projects/{id}/email` — fetch current settings + the **AI install prompt** (auto-generated server-side from the project's framework, package manager, root directory, and reCAPTCHA site key)\n- `PUT /api/projects/{id}/email` — save SMTP host/port/security/user, From address + name, contact recipients, reCAPTCHA site key, score threshold; the SMTP password and reCAPTCHA secret are persisted as encrypted secrets\n- `POST /api/projects/{id}/email/test-smtp` — send a test email through the saved SMTP credentials\n\n**Tier:** PUT = mutation/confirm. test-smtp = mutation/confirm (it actually sends an email — usually fine, but flag it explicitly because the user might be configuring against a live mailbox). GET = read silent.\n\n**Body shape (PUT):**\n\n```json\n{\n \"provider\": \"webglobe\",\n \"smtp_host\": \"smtp.webglobe.cz\",\n \"smtp_port\": 587,\n \"smtp_security\": \"starttls\",\n \"smtp_user\": \"noreply@example.com\",\n \"smtp_password\": \"<paste, only sent on save>\",\n \"email_from\": \"noreply@example.com\",\n \"email_from_name\": \"My Site\",\n \"contact_email_to\": \"owner@example.com\",\n \"recaptcha_site_key\": \"6Lc...public\",\n \"recaptcha_secret\": \"6Lc...secret\",\n \"recaptcha_mode\": \"v3\",\n \"recaptcha_score_threshold\": 0.5\n}\n```\n\n**Provider values:** `webglobe` (defaults derived from the project's primary production domain) or `smtp` (custom — user supplies all fields). Use `webglobe` unless the user says otherwise.\n\n**Security values:** `starttls` (port 587), `tls` (port 465), `none` (only for explicit testing — never recommend it).\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/email\ndeployik api PUT /api/projects/{id}/email '{\"provider\":\"webglobe\",\"smtp_host\":\"smtp.webglobe.cz\",\"smtp_port\":587,\"smtp_security\":\"starttls\",\"smtp_user\":\"noreply@example.com\",\"smtp_password\":\"<...>\",\"email_from\":\"noreply@example.com\",\"email_from_name\":\"My Site\",\"contact_email_to\":\"owner@example.com\",\"recaptcha_site_key\":\"<site>\",\"recaptcha_secret\":\"<secret>\",\"recaptcha_mode\":\"v3\",\"recaptcha_score_threshold\":0.5}'\ndeployik api POST /api/projects/{id}/email/test-smtp\n```\n\n**Response from GET:** includes the field `ai_install_prompt` (or similar — confirm the exact key by reading the response). This is a fully-formed prompt the user can paste into any AI coding assistant to install the contact-form code into their site. **When the user asks for the AI prompt, surface this string verbatim** — do not paraphrase or shorten it.\n\n**Workflow when guiding action mode for this recipe:**\n1. Ask the user for the four SMTP values from the Webglobe portal and the two reCAPTCHA keys from Google. Offer to walk them through Parts 1 and 2 of the click-paths recipe if they don't have them yet.\n2. Print the PUT payload (with **password and secret masked** as `***` in the preview) and ask \"Do this?\"\n3. On confirm, send the PUT.\n4. Ask if they want to verify by sending a test email; if yes, run POST `/email/test-smtp`.\n5. If the test succeeds, fetch GET `/email` and surface the AI install prompt for Part 4 of the recipe.\n6. If the test fails, surface the error from `payload.settings.last_test_error` verbatim and offer to walk through troubleshooting.\n\n**Sensitive values:** `smtp_password` and `recaptcha_secret` are the only truly sensitive fields. Treat them like passwords. If the user pastes them in chat, complete the action then suggest rotating them.\n\n---\n\n## attach-postgres\n\n**Goal:** [click-paths.md#attach-postgres](click-paths.md#attach-postgres)\n\n**Endpoints:**\n- `GET /api/projects/{id}/services` — list services attached to the project\n- `POST /api/projects/{id}/services` — attach a service (v1: postgres)\n- `DELETE /api/projects/{id}/services/{env}` — **destructive** — detach + drop volume\n- `GET /api/projects/{id}/services/{env}/credentials` — reveal password + DSN + SSH tunnel command (audited)\n- `POST /api/projects/{id}/services/{env}/regenerate-password` — rotate password (container keeps old password until next deploy/restart)\n- `POST /api/projects/{id}/services/{env}/restart` — recreate container, preserve data\n- `POST /api/projects/{id}/services/{env}/reset` — **destructive** — wipe volume, requires `{\"confirm\":\"<project>-<env>\"}` body\n\n**Tier:**\n- `GET` list — silent.\n- `POST` attach — mutation, confirm.\n- `POST` restart, regenerate-password — mutation, confirm. **Production gets the production flag.**\n- `DELETE` detach and `POST` reset — typed-string confirm matching `<project>-<env>` even in preview. Do **not** run these as a shortcut for \"start fresh\" — there is no undo.\n\n**Body shapes:**\n\n```json\n// Attach\n{ \"environment\": \"preview\", \"type\": \"postgres\" }\n\n// Reset (server requires the typed string)\n{ \"confirm\": \"<project_name>-<environment>\" }\n```\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/services\ndeployik api POST /api/projects/{id}/services '{\"environment\":\"preview\",\"type\":\"postgres\"}'\ndeployik api GET /api/projects/{id}/services/preview/credentials\ndeployik api POST /api/projects/{id}/services/preview/restart\ndeployik api POST /api/projects/{id}/services/preview/regenerate-password\ndeployik api POST /api/projects/{id}/services/production/reset '{\"confirm\":\"my-app-production\"}'\ndeployik api DELETE /api/projects/{id}/services/preview\n```\n\n**After attach — don't forget the deploy:** attach is just a row in the database. The container only starts on the next deployment for that environment (the pipeline's `EnsureServices` hook). Tell the user to trigger one: `deployik api POST /api/projects/{id}/deployments '{\"environment\":\"preview\"}'`.\n\n**Project rename is blocked while attached.** `PATCH /api/projects/{id}` with a new `name` will 409 if any service row exists for the project. Detach first.\n\n---\n\n## rollback\n\n**Goal:** [click-paths.md#rollback](click-paths.md#rollback)\n\n**Endpoints:**\n- `GET /api/projects/{id}/deployments?environment=production&status=live` — find the previous good deployment\n- `POST /api/projects/{id}/deployments` — trigger a redeploy of a specific commit\n\n**Tier:** Mutation — confirm. **Production redeploys flagged as production.**\n\n**Body shape (POST):**\n\n```json\n{ \"environment\": \"production\", \"branch\": \"main\", \"commit_sha\": \"abc1234\" }\n```\n\nIf the user wants to roll back to \"the previous good one\", list deployments first and pick the most recent `live` row before the regression. Show its commit sha and message in the confirmation prompt.\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/deployments?environment=production&status=live&limit=5\ndeployik api POST /api/projects/{id}/deployments '{\"environment\":\"production\",\"branch\":\"main\",\"commit_sha\":\"abc1234\"}'\n```\n\n---\n\n## Errors\n\nWhen the API returns a non-2xx status:\n\n- Print the HTTP status and the JSON body (the helper does this automatically — let the user see it).\n- **Don't retry silently.** Most errors are user-meaningful (e.g. `403` from auto-build = missing OAuth scope, `409` from domain add = duplicate, `400` from secret = `NEXT_PUBLIC_` not allowed).\n- Suggest the next step based on the error message rather than guessing or hand-rolling a fix.\n",
20
+ content: "# Deployik — API actions\n\nAction mode for the goals in [click-paths.md](click-paths.md). Each entry has the endpoint, payload shape, safety tier, and the exact `helpers/deployik` invocation.\n\n## Helper script\n\nPrefer Deployik MCP tools when they are available in the current session. They already hold the configured Deployik token and are safer than shelling out.\n\nIf MCP tools are unavailable, invoke the API via `./helpers/deployik` (relative to this skill's directory) — never paste tokens into raw curl. The wrapper:\n\n- Reads `~/.config/deployik/config` (`DEPLOYIK_BASE_URL`, `DEPLOYIK_TOKEN`)\n- Sends `Authorization: Bearer $DEPLOYIK_TOKEN`\n- Prints `HTTP <status>` to stderr, body to stdout\n- Exits non-zero on HTTP error\n- Pretty-prints JSON if `jq` is installed\n\nUsage:\n\n```\ndeployik api <METHOD> <path> [json-body]\n```\n\nIf `~/.config/deployik/config` is missing and no Deployik MCP tools are available, stop and direct the user to create a token (Sidebar → **Access tokens** → **Create token**) before retrying. If MCP tools are available, do not require this file.\n\n## Safety tiers\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently — read-only |\n| `POST/PUT/PATCH` non-production | Print payload, ask \"Do this?\" — wait for affirmative reply |\n| `POST/PUT/PATCH` production env | Flag `**PRODUCTION**`, ask explicit yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) |\n\n## Resolving project id\n\nMost endpoints need `{id}` (a ULID). When the user names a project, run:\n\n```\ndeployik api GET /api/projects\n```\n\n…and find the row whose `name` matches. Use its `id`.\n\n---\n\n## create-project\n\n**Goal:** [click-paths.md#create-project](click-paths.md#create-project)\n\n**Endpoint:** `POST /api/projects`\n**Tier:** Mutation — confirm before executing.\n\n**Body shape:**\n\n```json\n{\n \"name\": \"my-app\",\n \"github_repo\": \"my-repo\",\n \"github_owner\": \"my-org\",\n \"branch\": \"main\",\n \"framework\": \"nextjs\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"\",\n \"output_directory\": \".next\",\n \"build_command\": \"bun run build\",\n \"install_command\": \"bun install\",\n \"node_version\": \"22\",\n \"group_id\": \"(optional — dashboard group id; defaults to your personal group)\",\n \"organization_id\": \"(deprecated alias for group_id)\"\n}\n```\n\n**Framework values:** `nextjs`, `vite`, `astro`, `static`, `node-api`.\nFor a user-provided Dockerfile, use `framework: \"static\"` and set\n`root_directory` to the folder containing the Dockerfile. There is no special\n`framework: \"docker\"` value; Dockerfile presence is what makes Deployik build\nthe Dockerfile as-is.\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"my-app\",\"github_repo\":\"my-repo\",\"github_owner\":\"my-org\",\"branch\":\"main\",\"framework\":\"nextjs\",\"package_manager\":\"auto\",\"output_directory\":\".next\",\"build_command\":\"bun run build\",\"install_command\":\"bun install\",\"node_version\":\"22\"}'\n```\n\n**Behavior:** creates the project, auto-domain, GitHub webhook (best-effort), and triggers an initial preview deployment.\n\n**Groups:** the Projects dashboard uses dashboard groups. Call `GET /api/groups`\nto list available group ids. To create into a specific dashboard tab, pass that\ngroup's id as `group_id` (the API still accepts the legacy field name\n`organization_id` for backward compatibility).\n\n---\n\n## dockerfile-app\n\n**Goal:** [click-paths.md#dockerfile-app](click-paths.md#dockerfile-app)\n\n**Endpoint:** `POST /api/projects`, then optional `PATCH /api/projects/{id}` for runtime volume settings if they were not included at create time.\n**Tier:** Mutation — confirm before executing.\n\n**Deployik Dockerfile rule:** if a `Dockerfile` exists at repo root, Deployik uses it as-is with repo root as context. If `root_directory` is set and that folder contains a `Dockerfile`, Deployik uses that Dockerfile with `root_directory` as context. Do not invent `framework: \"docker\"`; use `framework: \"static\"` as the neutral preset.\n\n**Body shape for a Go / Dockerfile app in a subdirectory:**\n\n```json\n{\n \"name\": \"fleet\",\n \"github_repo\": \"QTTa\",\n \"github_owner\": \"LEFTEQ\",\n \"branch\": \"main\",\n \"framework\": \"static\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"apps/fleet\",\n \"output_directory\": \"\",\n \"build_command\": \"\",\n \"install_command\": \"\",\n \"node_version\": \"22\",\n \"port\": 8080,\n \"data_volume_enabled\": true,\n \"data_mount_path\": \"/data\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"fleet\",\"github_repo\":\"QTTa\",\"github_owner\":\"LEFTEQ\",\"branch\":\"main\",\"framework\":\"static\",\"package_manager\":\"auto\",\"root_directory\":\"apps/fleet\",\"output_directory\":\"\",\"build_command\":\"\",\"install_command\":\"\",\"node_version\":\"22\",\"port\":8080,\"data_volume_enabled\":true,\"data_mount_path\":\"/data\"}'\n```\n\n**When the repo inspector misses the app:** Dockerfile-only or Go-only folders may not appear in the JS-oriented repo inspector because they have no `package.json`. That is not evidence Deployik cannot run them. If the user knows the folder, create the project directly with `root_directory` and `framework: \"static\"`.\n\n**After creation:** Deployik triggers an initial preview deployment automatically. Use `GET /api/projects/{id}/deployments` or the MCP `list_deployments` / `deploy_project(wait:true)` flow to watch it.\n\n**Common failure:** Docker cannot copy files outside its build context. If the Dockerfile says `COPY go.sum .` or `COPY internal ./internal`, those paths must exist inside `root_directory` when `root_directory` is used.\n\n---\n\n## custom-domain\n\n**Goal:** [click-paths.md#custom-domain](click-paths.md#custom-domain)\n\n**Endpoints:**\n- `POST /api/projects/{id}/domains` — adds the row\n- `POST /api/projects/{id}/domains/{did}/verify` — runs DNS check + cert provisioning (returns 202; final result streams over WebSocket but the synchronous response confirms acceptance)\n- `PATCH /api/projects/{id}/domains/{did}` `{is_primary: true}` — optional, mark as primary\n\n**Tier:** Mutation — confirm before each step.\n\n**Body shape (POST):**\n\n```json\n{ \"domain\": \"example.com\", \"environment\": \"production\" }\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects/{id}/domains '{\"domain\":\"example.com\",\"environment\":\"production\"}'\ndeployik api POST /api/projects/{id}/domains/{did}/verify\n```\n\n**Critical reminder for the user:** the DNS A-record at the registrar must point to the VPS IP **before** Verify, otherwise it fails. Tell them the click-paths recipe explains where to add it.\n\n---\n\n## env-vars\n\n**Goal:** [click-paths.md#env-vars](click-paths.md#env-vars)\n\n**Endpoints:**\n- `POST /api/projects/{id}/env` — single upsert (env var)\n- `POST /api/projects/{id}/secrets` — single upsert (secret)\n- `DELETE /api/projects/{id}/env/{key}?environment=preview|production|shared` — destructive\n- `PUT /api/projects/{id}/env` — bulk replace (don't use unless the user says \"replace all\")\n\n**Tier:** Mutation — confirm. **Production environment writes get extra production-flag confirmation.**\n\n**Body shape (single upsert):**\n\n```json\n{ \"key\": \"STRIPE_PUBLIC\", \"value\": \"pk_test_xxx\", \"environment\": \"preview\" }\n```\n\n**Environment values:** `shared` (applies to both), `preview`, or `production`. If the user says \"preview\", use `preview`; if \"production\" or \"live\", use `production`. If unsure, ask.\n\n**Invocations:**\n\n```\ndeployik api POST /api/projects/{id}/env '{\"key\":\"STRIPE_PUBLIC\",\"value\":\"pk_test_xxx\",\"environment\":\"preview\"}'\ndeployik api POST /api/projects/{id}/secrets '{\"key\":\"DATABASE_URL\",\"value\":\"postgres://...\",\"environment\":\"production\"}'\ndeployik api DELETE /api/projects/{id}/env/STRIPE_PUBLIC?environment=preview\n```\n\n**Constraint:** secrets refuse `NEXT_PUBLIC_*` keys (they need to be in the variables store to bake into the build). Surface that error verbatim if the API returns it.\n\n**Heads-up:** changing a variable does NOT redeploy. After applying, ask the user if they want you to trigger a redeploy via the [#rollback](#rollback) endpoint with the latest commit sha.\n\n---\n\n## auto-deploy\n\n**Goal:** [click-paths.md#auto-deploy](click-paths.md#auto-deploy)\n\n**Endpoint:** `PUT /api/projects/{id}/auto-build`\n**Tier:** Mutation — confirm.\n\n**Body shape:**\n\n```json\n{\n \"enabled\": true,\n \"production_branch\": \"main\",\n \"preview_branches\": \"*\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api PUT /api/projects/{id}/auto-build '{\"enabled\":true,\"production_branch\":\"main\",\"preview_branches\":\"*\"}'\n```\n\n**Side effect:** Deployik creates a webhook on the GitHub repo. If the user hasn't granted the `admin:repo_hook` scope to the OAuth app, this errors — ask them to sign out and back in in the dashboard, then retry.\n\nTo disable: `deployik api DELETE /api/projects/{id}/auto-build` (deletes config + webhook). Treat as destructive — typed confirmation.\n\n---\n\n## password-protection\n\n**Goal:** [click-paths.md#password-protection](click-paths.md#password-protection)\n\n**Endpoints:**\n- `PUT /api/projects/{id}/protection` — enable/disable per environment\n- `POST /api/projects/{id}/protection/regenerate` — new password (destructive — require typed confirmation, the old password stops working at this point)\n\n**Tier:** PUT = mutation/confirm. Regenerate = destructive/typed-confirm.\n\n**Body shapes:**\n\n```json\n{ \"environment\": \"preview\", \"enabled\": true }\n{ \"environment\": \"production\", \"enabled\": false }\n```\n\n**Invocations:**\n\n```\ndeployik api PUT /api/projects/{id}/protection '{\"environment\":\"preview\",\"enabled\":true}'\ndeployik api POST /api/projects/{id}/protection/regenerate '{\"environment\":\"preview\"}'\n```\n\n**Response on enable / regenerate:** the JSON includes the plaintext password under `password`. Surface it to the user with a warning: this is the only time the API will return it.\n\n---\n\n## contact-form-email\n\n**Goal:** [click-paths.md#contact-form-email](click-paths.md#contact-form-email)\n\n**Endpoints:**\n- `GET /api/projects/{id}/email` — fetch current settings + the **AI install prompt** (auto-generated server-side from the project's framework, package manager, root directory, and reCAPTCHA site key)\n- `PUT /api/projects/{id}/email` — save SMTP host/port/security/user, From address + name, contact recipients, reCAPTCHA site key, score threshold; the SMTP password and reCAPTCHA secret are persisted as encrypted secrets\n- `POST /api/projects/{id}/email/test-smtp` — send a test email through the saved SMTP credentials\n\n**Tier:** PUT = mutation/confirm. test-smtp = mutation/confirm (it actually sends an email — usually fine, but flag it explicitly because the user might be configuring against a live mailbox). GET = read silent.\n\n**Body shape (PUT):**\n\n```json\n{\n \"provider\": \"webglobe\",\n \"smtp_host\": \"smtp.webglobe.cz\",\n \"smtp_port\": 587,\n \"smtp_security\": \"starttls\",\n \"smtp_user\": \"noreply@example.com\",\n \"smtp_password\": \"<paste, only sent on save>\",\n \"email_from\": \"noreply@example.com\",\n \"email_from_name\": \"My Site\",\n \"contact_email_to\": \"owner@example.com\",\n \"recaptcha_site_key\": \"6Lc...public\",\n \"recaptcha_secret\": \"6Lc...secret\",\n \"recaptcha_mode\": \"v3\",\n \"recaptcha_score_threshold\": 0.5\n}\n```\n\n**Provider values:** `webglobe` (defaults derived from the project's primary production domain) or `smtp` (custom — user supplies all fields). Use `webglobe` unless the user says otherwise.\n\n**Security values:** `starttls` (port 587), `tls` (port 465), `none` (only for explicit testing — never recommend it).\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/email\ndeployik api PUT /api/projects/{id}/email '{\"provider\":\"webglobe\",\"smtp_host\":\"smtp.webglobe.cz\",\"smtp_port\":587,\"smtp_security\":\"starttls\",\"smtp_user\":\"noreply@example.com\",\"smtp_password\":\"<...>\",\"email_from\":\"noreply@example.com\",\"email_from_name\":\"My Site\",\"contact_email_to\":\"owner@example.com\",\"recaptcha_site_key\":\"<site>\",\"recaptcha_secret\":\"<secret>\",\"recaptcha_mode\":\"v3\",\"recaptcha_score_threshold\":0.5}'\ndeployik api POST /api/projects/{id}/email/test-smtp\n```\n\n**Response from GET:** includes the field `ai_install_prompt` (or similar — confirm the exact key by reading the response). This is a fully-formed prompt the user can paste into any AI coding assistant to install the contact-form code into their site. **When the user asks for the AI prompt, surface this string verbatim** — do not paraphrase or shorten it.\n\n**Workflow when guiding action mode for this recipe:**\n1. Ask the user for the four SMTP values from the Webglobe portal and the two reCAPTCHA keys from Google. Offer to walk them through Parts 1 and 2 of the click-paths recipe if they don't have them yet.\n2. Print the PUT payload (with **password and secret masked** as `***` in the preview) and ask \"Do this?\"\n3. On confirm, send the PUT.\n4. Ask if they want to verify by sending a test email; if yes, run POST `/email/test-smtp`.\n5. If the test succeeds, fetch GET `/email` and surface the AI install prompt for Part 4 of the recipe.\n6. If the test fails, surface the error from `payload.settings.last_test_error` verbatim and offer to walk through troubleshooting.\n\n**Sensitive values:** `smtp_password` and `recaptcha_secret` are the only truly sensitive fields. Treat them like passwords. If the user pastes them in chat, complete the action then suggest rotating them.\n\n---\n\n## attach-postgres\n\n**Goal:** [click-paths.md#attach-postgres](click-paths.md#attach-postgres)\n\n**Endpoints:**\n- `GET /api/projects/{id}/services` — list services attached to the project\n- `POST /api/projects/{id}/services` — attach a service (v1: postgres)\n- `DELETE /api/projects/{id}/services/{env}` — **destructive** — detach + drop volume\n- `GET /api/projects/{id}/services/{env}/credentials` — reveal password + DSN + SSH tunnel command (audited)\n- `POST /api/projects/{id}/services/{env}/regenerate-password` — rotate password (container keeps old password until next deploy/restart)\n- `POST /api/projects/{id}/services/{env}/restart` — recreate container, preserve data\n- `POST /api/projects/{id}/services/{env}/reset` — **destructive** — wipe volume, requires `{\"confirm\":\"<project>-<env>\"}` body\n\n**Tier:**\n- `GET` list — silent.\n- `POST` attach — mutation, confirm.\n- `POST` restart, regenerate-password — mutation, confirm. **Production gets the production flag.**\n- `DELETE` detach and `POST` reset — typed-string confirm matching `<project>-<env>` even in preview. Do **not** run these as a shortcut for \"start fresh\" — there is no undo.\n\n**Body shapes:**\n\n```json\n// Attach\n{ \"environment\": \"preview\", \"type\": \"postgres\" }\n\n// Reset (server requires the typed string)\n{ \"confirm\": \"<project_name>-<environment>\" }\n```\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/services\ndeployik api POST /api/projects/{id}/services '{\"environment\":\"preview\",\"type\":\"postgres\"}'\ndeployik api GET /api/projects/{id}/services/preview/credentials\ndeployik api POST /api/projects/{id}/services/preview/restart\ndeployik api POST /api/projects/{id}/services/preview/regenerate-password\ndeployik api POST /api/projects/{id}/services/production/reset '{\"confirm\":\"my-app-production\"}'\ndeployik api DELETE /api/projects/{id}/services/preview\n```\n\n**After attach — don't forget the deploy:** attach is just a row in the database. The container only starts on the next deployment for that environment (the pipeline's `EnsureServices` hook). Tell the user to trigger one: `deployik api POST /api/projects/{id}/deployments '{\"environment\":\"preview\"}'`.\n\n**Project rename is blocked while attached.** `PATCH /api/projects/{id}` with a new `name` will 409 if any service row exists for the project. Detach first.\n\n---\n\n## rollback\n\n**Goal:** [click-paths.md#rollback](click-paths.md#rollback)\n\n**Endpoints:**\n- `GET /api/projects/{id}/deployments?environment=production&status=live` — find the previous good deployment\n- `POST /api/projects/{id}/deployments` — trigger a redeploy of a specific commit\n\n**Tier:** Mutation — confirm. **Production redeploys flagged as production.**\n\n**Body shape (POST):**\n\n```json\n{ \"environment\": \"production\", \"branch\": \"main\", \"commit_sha\": \"abc1234\" }\n```\n\nIf the user wants to roll back to \"the previous good one\", list deployments first and pick the most recent `live` row before the regression. Show its commit sha and message in the confirmation prompt.\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/deployments?environment=production&status=live&limit=5\ndeployik api POST /api/projects/{id}/deployments '{\"environment\":\"production\",\"branch\":\"main\",\"commit_sha\":\"abc1234\"}'\n```\n\n---\n\n## Errors\n\nWhen the API returns a non-2xx status:\n\n- Print the HTTP status and the JSON body (the helper does this automatically — let the user see it).\n- **Don't retry silently.** Most errors are user-meaningful (e.g. `403` from auto-build = missing OAuth scope, `409` from domain add = duplicate, `400` from secret = `NEXT_PUBLIC_` not allowed).\n- Suggest the next step based on the error message rather than guessing or hand-rolling a fix.\n",
11
21
  },
12
22
  {
13
23
  file: "click-paths.md",
14
- content: "# Deployik — Where to click\n\nEight recipes for the most common things a user wants to do in the Deployik dashboard. If the user's goal isn't in the table, ask them warmly to rephrase, or check whether their goal is actually outside Deployik's scope.\n\nEvery recipe ends with a friendly \"stuck on a step?\" line. If the user uses it, ask which step and walk through that single step in fine detail (one click, one screenshot description, or one clarifying question at a time) before continuing.\n\n## What do you want to do?\n\n| Goal | Recipe |\n|------|--------|\n| I want to put my GitHub repo online | [#create-project](#create-project) |\n| I want to use my own domain (example.com) | [#custom-domain](#custom-domain) |\n| I want to set environment variables / API keys | [#env-vars](#env-vars) |\n| I want it to redeploy when I push to GitHub | [#auto-deploy](#auto-deploy) |\n| I want a password before people see the site | [#password-protection](#password-protection) |\n| I want my contact form to actually send emails (with spam protection) | [#contact-form-email](#contact-form-email) |\n| I want a Postgres database for my app | [#attach-postgres](#attach-postgres) |\n| I want to roll back to a previous version | [#rollback](#rollback) |\n\n---\n\n## create-project\n\n**Goal:** Connect a GitHub repository to Deployik and deploy it for the first time.\n\n**Route:** `/new`\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**Steps:**\n1. Click **+ New project** on the dashboard. The page lists every GitHub repo Deployik can see for your account.\n2. Search or scroll for the repo. Click **Import** on the row.\n3. *If Deployik detects a monorepo (multiple apps in subfolders):* a step appears asking which app to deploy. Click the one you want. Framework, root directory, and build command pre-fill.\n4. *If single-app:* this step is skipped automatically.\n5. On the configuration screen:\n - **Project name** — used as the preview subdomain. Lowercase letters, digits, and hyphens only.\n - **Branch** — usually `main` or `master`.\n - **Framework** — auto-detected. If wrong, change it; install/build/output reset to that framework's defaults.\n - **Group** — choose the dashboard group/tab this project should live in.\n6. Click **Create project**. Deployik creates the auto-domain `{project-name}.preview.lovinka.com`, sets up the GitHub webhook for auto-deploy, and starts the first preview deployment.\n7. The page navigates to the project Overview. The **Preview** strip shows the deployment progressing through queued → building → live.\n\n**Gotcha:** the GitHub OAuth scope must include `admin:repo_hook` for the webhook step to work. If you signed in before that scope was added, sign out and back in.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#create-project](api-actions.md#create-project)\n\n---\n\n## custom-domain\n\n**Goal:** Point your own domain (e.g. `example.com`) at a Deployik project.\n\n**Route:** `/projects/$id/settings/domains`\n**Sidebar:** Project → **Settings** (expand) → **Domains**\n\n**Steps:**\n1. Click **Domains** under the project's Settings section.\n2. Find the **Add domain** form near the top. Enter the domain (apex like `example.com` or subdomain like `app.example.com`).\n3. Pick the environment — **Preview** for staging, **Production** for live.\n4. Click **Add**. The row appears with status `pending` and `dns_verified: no`.\n5. **Outside Deployik** — go to your domain's DNS provider:\n - **Cloudflare:** DNS → **Records** → **Add record** → Type `A`, Name (apex = `@`, subdomain = the prefix), IPv4 = the VPS IP shown in Deployik's expandable **DNS Setup Guide** on the same page, Proxy status: **DNS only** (gray cloud, not orange — Cloudflare's proxy interferes with Let's Encrypt). Save.\n - **Namecheap:** Domain List → **Manage** → **Advanced DNS** → **Add new record** → Type `A Record`, Host (`@` or subdomain), Value = VPS IP, TTL Automatic. Save.\n - **GoDaddy:** Domain → **DNS** → **Add** → Type `A`, Name (`@` or subdomain), Value = VPS IP. Save.\n - **Other registrar:** add an `A` record pointing at the VPS IP from the DNS Setup Guide. The exact UI varies — the record type and value matter, the UI doesn't.\n6. Wait 1–5 minutes for DNS to propagate. You can check with `dig +short A example.com` or `nslookup example.com` from your terminal — when it returns the VPS IP, you're ready.\n7. Back in Deployik, on the same Domains page, click the **Verify** button on the domain's row. A live log streams: DNS check → Let's Encrypt cert request → nginx reload. Wait for \"Provisioning complete\".\n8. Once `ssl_status: active`, the **Open** button on the row works. Production primary domain also drives the **Open** link on the project Overview.\n\n**Gotcha:** if Verify fails with \"DNS does not match\", DNS hasn't propagated yet — wait another minute and try again. Don't change anything in Deployik in the meantime.\n\n**Set as primary:** to make this domain the one Deployik treats as canonical for its environment, click the row's three-dot menu → **Set as primary**. A star badge appears.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can especially help with the registrar's DNS panel — just tell me which provider you use and I'll talk you through the exact clicks.\n\n**API equivalent:** [api-actions.md#custom-domain](api-actions.md#custom-domain)\n\n---\n\n## env-vars\n\n**Goal:** Set environment variables (for build-time `NEXT_PUBLIC_*`) or secrets (runtime-only) for the deployed app.\n\n**Route:** `/projects/$id/settings/env`\n**Sidebar:** Project → **Settings** (expand) → **Environments**\n\n**Steps:**\n1. Click **Environments** under the project's Settings section.\n2. Two tabs at the top: **Variables** (visible at build time, can include `NEXT_PUBLIC_*`) and **Secrets** (runtime only, never in build).\n3. Each row picks a **Scope** — *Shared* (applies to both preview and production), *Preview* only, or *Production* only.\n4. Click **Add variable** (or **Add secret** on that tab). Type the key (e.g. `STRIPE_PUBLIC` or `DATABASE_URL`), the value, pick the scope. Click **Save**.\n5. To bulk-paste from a `.env` file: click **Import .env**, paste the file's contents, pick the scope. Each non-empty line becomes one variable.\n6. Existing values are masked as `****abcd` (last 4 chars). To change a value, click the row's edit (pencil) icon, paste the new value, save.\n\n**Gotcha:** changing a variable does NOT redeploy automatically. You'll see a \"Variables changed since last deploy\" badge on the project Overview. Click **Redeploy** there to apply the new values.\n\n**Build-time vs runtime:** `NEXT_PUBLIC_*` keys are baked into the static bundle at build time, so changing one requires a rebuild. Secrets are always runtime-only — Deployik refuses to save a secret with a `NEXT_PUBLIC_` prefix.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also add a variable for you via the API — just tell me the key, value, and which environment.\n\n**API equivalent:** [api-actions.md#env-vars](api-actions.md#env-vars)\n\n---\n\n## auto-deploy\n\n**Goal:** Make Deployik redeploy automatically when you push to GitHub.\n\n**Route:** `/projects/$id/settings`\n**Sidebar:** Project → **Settings** (expand) → **Build** (the default Settings page)\n\n**Steps:**\n1. Click **Settings** in the project sidebar (it lands on Build by default).\n2. Scroll to the **Auto-deploy** section.\n3. Toggle **Enable auto-deploy**. The first time you turn it on, Deployik creates a webhook on the GitHub repo using your OAuth token — this requires the `admin:repo_hook` scope. If the toggle errors, sign out and back in (GitHub re-prompts for the scope).\n4. **Production branch** — the branch whose pushes trigger production deployments. Defaults to the project's main branch (e.g. `main`).\n5. **Preview branches** — comma-separated list of branch names or branch patterns. `*` matches every other branch. Leave as `*` unless you want to restrict preview builds to specific branches.\n6. Click **Save**. The status indicator turns green and shows the GitHub webhook ID.\n7. Push a commit to the production branch. Within seconds, a new deployment with `trigger_source: webhook` appears in the Deployments list, and Deployik streams the build log.\n\n**Gotcha:** if a push doesn't trigger a build, check **GitHub repo → Settings → Webhooks**. The Deployik webhook should show recent deliveries with `200 OK` responses. Re-deliver a failed one from there to debug.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#auto-deploy](api-actions.md#auto-deploy)\n\n---\n\n## password-protection\n\n**Goal:** Hide the deployed site (preview, production, or both) behind a password before showing it to clients or doing QA.\n\n**Route:** `/projects/$id/settings/protection`\n**Sidebar:** Project → **Settings** (expand) → **Protection**\n\n**Steps:**\n1. Click **Protection** under the project's Settings section.\n2. Two cards: **Preview** and **Production**. Each has a toggle and (when enabled) a password reveal button.\n3. Toggle **Enable password protection** on the environment you want.\n4. Deployik generates a 16-character random password, encrypts and stores it, regenerates the nginx config to add `auth_request` blocks, and shows you the password once. Click the eye icon to reveal it. Copy it now.\n5. Click **Regenerate password** to mint a new one (invalidates the old). The new password is shown the same way.\n6. Visit the deployed site in an incognito window to confirm: the Czech-language auth page (`Heslo`) appears. Enter the password — you're in for 24 hours.\n\n**Gotcha:** changing the password does not log out anyone who's already on the site. The signed `deployik_site_auth` cookie they hold remains valid for its 24-hour lifetime. To force everyone off, change the cookie's `JWT_SECRET` on the Deployik server (operator action).\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#password-protection](api-actions.md#password-protection)\n\n---\n\n## contact-form-email\n\n**Goal:** Make the contact form on your deployed site actually deliver emails to your inbox, with spam protection so bots don't flood you.\n\n**Route:** `/projects/$id/integrations/email`\n**Sidebar:** Project → **Integrations** (expand) → **Email**\n\n**What this gives you:** when someone submits the contact form on your site, a real email lands in your inbox. Bots are filtered out using Google's invisible spam check (reCAPTCHA v3 — your visitors never see a \"click the traffic lights\" puzzle).\n\nThis recipe has three parts. Two of them happen outside Deployik — I'll tell you when we're leaving and when we're coming back.\n\n### Part 1 — Get your SMTP credentials from Webglobe (outside Deployik)\n\nSMTP is just the technical name for \"email sending\" — your hosting provider gives you a username and password your site uses to send mail through their servers.\n\n1. Open a new browser tab, go to your **Webglobe customer portal** (the place where you manage your hosting). Sign in.\n2. Find the section called **Mail** or **E-mail accounts**. Pick the address you want emails to come *from* (e.g. `noreply@yourdomain.com`). Create it if it doesn't exist yet.\n3. On that mailbox, look for **SMTP** or **Outgoing mail** settings. Write down four things:\n - **SMTP host** (looks like `smtp.webglobe.cz` or similar — exact name varies)\n - **SMTP port** (usually `587` for STARTTLS or `465` for TLS)\n - **Security** (`STARTTLS` for port 587, `TLS` for port 465)\n - **Username** (often the full email address, e.g. `noreply@yourdomain.com`)\n - **Password** (the mailbox password — keep it safe, you'll paste it into Deployik in Part 3)\n\nIf you can't find any of these, ask me — I'll help you locate them based on what you see in the portal.\n\n### Part 2 — Get reCAPTCHA v3 keys from Google (outside Deployik)\n\nThis is the spam protection. Google gives you two keys: a **site key** that goes on the public form, and a **secret key** the server uses to verify the form was submitted by a human.\n\n1. In a new tab, open `https://www.google.com/recaptcha/admin/create`. Sign in with your Google account.\n2. Fill the form:\n - **Label:** anything memorable, e.g. `myproject contact form`\n - **reCAPTCHA type:** pick **reCAPTCHA v3** (very important — v2 won't work).\n - **Domains:** add your production hostname (e.g. `example.com`). If you have a `www.example.com` variant, add it too. You can add `localhost` for testing.\n - Accept the terms, click **Submit**.\n3. The next page shows two keys:\n - **Site key** — public, goes in Deployik. Copy it.\n - **Secret key** — private, goes in your secrets store. Copy it too (and treat it like a password).\n\n### Part 3 — Wire it up in Deployik\n\nWe're back in Deployik now.\n\n1. In the project sidebar, expand **Integrations** and click **Email**.\n2. Fill in the SMTP fields with what you wrote down in Part 1:\n - **SMTP host**, **Port**, **Security** (STARTTLS / TLS), **Username**.\n - For **Password**, click the field and paste the mailbox password.\n3. Fill in the email fields:\n - **From address** — the mailbox address (e.g. `noreply@yourdomain.com`).\n - **From name** — the human name shown to recipients (e.g. `My Site`).\n - **Contact recipients** — who receives the form submissions. Comma-separated if more than one.\n4. Paste the reCAPTCHA **site key** from Part 2 into the **reCAPTCHA site key** field.\n5. **Score threshold** — leave at the default (`0.5`) unless you know you want to change it. Higher = stricter (more bots blocked, but more humans rejected too).\n6. Click **Save**. Deployik writes the SMTP host/port/from-address as **shared variables** and the SMTP password and reCAPTCHA secret as **secrets** — so the deployed site can read them at runtime.\n7. Click **Send test email**. Check the inbox of one of your **Contact recipients**. If it arrives, you're done with Part 3.\n\n### Part 4 — Add the contact form code to your site\n\nThe Email page has an **AI install prompt** section. It generates a copy-pasteable prompt with your project's exact framework, environment variables, and reCAPTCHA site key already filled in.\n\n1. On the Email page, scroll to **AI install prompt** (or **Install with AI**).\n2. Click **Copy prompt**.\n3. Paste the prompt into your AI coding assistant (Cursor, Claude Code, etc.) inside your project's repo. The assistant will write the contact form route, the reCAPTCHA hook, and the server handler that calls Deployik's SMTP credentials.\n4. Commit, push. If auto-deploy is on, the new version is live in a couple of minutes.\n5. Visit your live site, fill out the form, submit. The email should land in the inbox you configured.\n\n**Gotcha:** if the test email succeeds but real form submissions don't arrive, the most common cause is that the contact form code isn't reading the reCAPTCHA secret from environment variables on the server. The AI install prompt sets this up correctly — if it doesn't work, paste the error your form shows you and I'll diagnose.\n\n**Gotcha:** the **SMTP password** and the **reCAPTCHA secret** are the only two truly sensitive values here. Both are stored as secrets (encrypted at rest) — never paste them into a chat with me unless you're willing to rotate them after.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also do Part 3 for you via the API once you have the values from Parts 1 and 2 — just ask.\n\n**API equivalent:** [api-actions.md#contact-form-email](api-actions.md#contact-form-email)\n\n---\n\n## attach-postgres\n\n**Goal:** Get a real Postgres database for your app, per environment (preview / production), with credentials wired into the runtime automatically.\n\n**Route:** `/projects/$id/services`\n**Sidebar:** Project → **Services**\n\n**What this gives you:**\n- A dedicated Postgres container (a \"sidecar\") that runs next to your app, one per environment.\n- Standard environment variables (`DATABASE_URL` + discrete `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` / `PGPASSWORD`) injected into the deployed app automatically — your code just reads them.\n- A 16xxx loopback port on the VPS so you can connect from your laptop via an SSH tunnel for migrations / inspection.\n- The database **persists across deploys** — the volume isn't touched by a new deployment.\n\n**Steps:**\n\n1. *(Optional, brand-new project only)* On the **New project** page, scroll to **Attach Postgres database**. Toggle it on for preview / production. Skip the rest of this recipe — it's done.\n2. *(Existing project)* Click **Services** in the project sidebar.\n3. Two cards: **Preview** and **Production**. Each starts as **Not attached** with an **Attach Postgres** button.\n4. Click **Attach Postgres** on the environment you want. Deployik records the row, generates a strong random password, and assigns a unique 16xxx host port. The card flips to **Attached · pending** — the container itself isn't running yet.\n5. Trigger any deploy for that environment (push a commit, or click **Redeploy** on Overview). The build pipeline's `EnsureServices` hook starts the postgres container, waits for it to be healthy, then starts your app with the env vars injected. The card shows **running** once it's up.\n6. On the Services card, click **Show credentials** to reveal the password and the **SSH tunnel command**. Copy the SSH command, run it on your laptop — it forwards `127.0.0.1:15432` on your machine to the postgres in the VPS. Connect with `psql postgres://...@127.0.0.1:15432/...` or any client.\n7. To restart the container without touching data, click **Restart**. To rotate the password, click **Regenerate password** — the new password is shown once; the running container keeps the old password until the next deploy/restart, so trigger a redeploy right after.\n\n**Gotcha — Reset wipes everything:** the **Reset** button drops the volume and starts an empty database. Use it only for preview when you want a clean slate. On production it requires you to type `<project>-production` to confirm. There is no undo.\n\n**Gotcha — project rename is blocked:** while a service is attached, the project name is frozen (renaming would orphan the volume). Detach first, rename, re-attach (and re-import data) if you really need a new name.\n\n**Gotcha — detach deletes data:** clicking **Detach** stops the container AND removes the named volume. There is no undo. Take a `pg_dump` first if you want to keep the data.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also attach Postgres for you via the API and tail the container logs to confirm it came up clean — just ask.\n\n**API equivalent:** [api-actions.md#attach-postgres](api-actions.md#attach-postgres)\n\n---\n\n## rollback\n\n**Goal:** Revert to a previous successful deployment when the latest one is broken.\n\n**Route:** `/projects/$id/deployments`\n**Sidebar:** Project → **Deployments**\n\n**Steps:**\n1. Click **Deployments** in the project sidebar.\n2. The list shows every deployment with status, branch, commit message, who triggered it, and a thumbnail screenshot.\n3. Find the most recent **live**-status row from before the regression. Click the row to open the deployment detail page.\n4. On the detail page, in the top-right, click **Redeploy this commit**. (If you don't see that button, scroll to the build log header — it's there.)\n5. A confirmation modal appears. Click **Redeploy**. A new deployment row appears in the list with the same `commit_sha` but a new `id`, new build, and `triggered_by_username: you`.\n6. When status reaches **live**, the swap completes — the previous broken container is stopped and the rolled-back container takes over. Visitors see the older code immediately.\n\n**Gotcha:** rollback re-runs the build from source. If the regression is a config/env-var issue (not a code change), changing the env var and triggering a new build is faster — see [#env-vars](#env-vars). If it's a runtime dependency that broke between commits, rollback is the right move.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also list your recent deployments and pick the right \"last good\" one for you — just say the word.\n\n**API equivalent:** [api-actions.md#rollback](api-actions.md#rollback)\n",
24
+ content: "# Deployik — Where to click\n\nNine recipes for the most common things a user wants to do in the Deployik dashboard. If the user's goal isn't in the table, ask them warmly to rephrase, or check whether their goal is actually outside Deployik's scope.\n\nEvery recipe ends with a friendly \"stuck on a step?\" line. If the user uses it, ask which step and walk through that single step in fine detail (one click, one screenshot description, or one clarifying question at a time) before continuing.\n\n## What do you want to do?\n\n| Goal | Recipe |\n|------|--------|\n| I want to put my GitHub repo online | [#create-project](#create-project) |\n| I want to deploy a Dockerfile, Go server, API, or SQLite-backed app | [#dockerfile-app](#dockerfile-app) |\n| I want to use my own domain (example.com) | [#custom-domain](#custom-domain) |\n| I want to set environment variables / API keys | [#env-vars](#env-vars) |\n| I want it to redeploy when I push to GitHub | [#auto-deploy](#auto-deploy) |\n| I want a password before people see the site | [#password-protection](#password-protection) |\n| I want my contact form to actually send emails (with spam protection) | [#contact-form-email](#contact-form-email) |\n| I want a Postgres database for my app | [#attach-postgres](#attach-postgres) |\n| I want to roll back to a previous version | [#rollback](#rollback) |\n\n---\n\n## create-project\n\n**Goal:** Connect a GitHub repository to Deployik and deploy it for the first time.\n\n**Route:** `/new`\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**Steps:**\n1. Click **+ New project** on the dashboard. The page lists every GitHub repo Deployik can see for your account.\n2. Search or scroll for the repo. Click **Import** on the row.\n3. *If Deployik detects a monorepo (multiple apps in subfolders):* a step appears asking which app to deploy. Click the one you want. Framework, root directory, and build command pre-fill.\n4. *If single-app:* this step is skipped automatically.\n5. On the configuration screen:\n - **Project name** — used as the preview subdomain. Lowercase letters, digits, and hyphens only.\n - **Branch** — usually `main` or `master`.\n - **Framework** — auto-detected. If wrong, change it; install/build/output reset to that framework's defaults.\n - **Group** — choose the dashboard group/tab this project should live in.\n6. Click **Create project**. Deployik creates the auto-domain `{project-name}.preview.lovinka.com`, sets up the GitHub webhook for auto-deploy, and starts the first preview deployment.\n7. The page navigates to the project Overview. The **Preview** strip shows the deployment progressing through queued → building → live.\n\n**Gotcha:** the GitHub OAuth scope must include `admin:repo_hook` for the webhook step to work. If you signed in before that scope was added, sign out and back in.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#create-project](api-actions.md#create-project)\n\n---\n\n## dockerfile-app\n\n**Goal:** Deploy a project that already has its own Dockerfile, such as a Go HTTP server, a custom API, or an app that needs SQLite/persistent files.\n\n**Route:** `/new`, then project **Settings** if you need to adjust runtime fields.\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**What Deployik supports:**\n- If the repo root contains `Dockerfile`, Deployik builds that Dockerfile as-is.\n- If the app lives in a subfolder, set **Root directory** to that subfolder and put `Dockerfile` there. Deployik builds with that subfolder as the Docker context, so files beside the Dockerfile are included correctly.\n- There is no special **Docker** framework option. Pick **Static Site** as the neutral preset for custom Dockerfiles; the Dockerfile takes over the real build.\n\n**Steps:**\n1. Make sure the repo is pushed to GitHub. Deployik clones from GitHub, not your unpushed local files.\n2. Make sure the app folder has a `Dockerfile`. For a subfolder app, the Dockerfile should be inside that folder.\n3. Click **+ New project**, import the repo, and choose the app folder if Deployik shows a monorepo picker.\n4. On the configuration screen:\n - **Framework** — choose **Static Site** for a custom Dockerfile.\n - **Root directory** — folder containing the Dockerfile, or leave empty for repo root.\n - **Port** — the HTTP port your container listens on, for example `8080` for many Go servers or `3000` for many web apps.\n - **Group** — choose the dashboard group/tab this project should live in.\n5. If the app writes local files, open project **Settings** → **Runtime** after creation and enable **Persistent data volume**. Set **Mount path** to the path your container writes to, such as `/data` or `/app/data`.\n6. Trigger a preview deploy. The build log should show `docker buildx build` using your Dockerfile.\n\n**Gotcha:** Docker can only copy files inside the build context. If your Dockerfile is in `apps/fleet`, keep `go.mod`, `go.sum`, `internal/`, `web/`, and other copied files inside `apps/fleet`, or move the Dockerfile to a higher folder and use that as the root directory.\n\n**Gotcha:** the `framework`, `build_command`, `install_command`, `output_directory`, `node_version`, `start_command`, and `health_path` fields are for Deployik-generated Dockerfiles. A user Dockerfile controls its own build, command, and health check. The Deployik **Port** field still matters because the reverse proxy connects to that port.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#dockerfile-app](api-actions.md#dockerfile-app)\n\n---\n\n## custom-domain\n\n**Goal:** Point your own domain (e.g. `example.com`) at a Deployik project.\n\n**Route:** `/projects/$id/settings/domains`\n**Sidebar:** Project → **Settings** (expand) → **Domains**\n\n**Steps:**\n1. Click **Domains** under the project's Settings section.\n2. Find the **Add domain** form near the top. Enter the domain (apex like `example.com` or subdomain like `app.example.com`).\n3. Pick the environment — **Preview** for staging, **Production** for live.\n4. Click **Add**. The row appears with status `pending` and `dns_verified: no`.\n5. **Outside Deployik** — go to your domain's DNS provider:\n - **Cloudflare:** DNS → **Records** → **Add record** → Type `A`, Name (apex = `@`, subdomain = the prefix), IPv4 = the VPS IP shown in Deployik's expandable **DNS Setup Guide** on the same page, Proxy status: **DNS only** (gray cloud, not orange — Cloudflare's proxy interferes with Let's Encrypt). Save.\n - **Namecheap:** Domain List → **Manage** → **Advanced DNS** → **Add new record** → Type `A Record`, Host (`@` or subdomain), Value = VPS IP, TTL Automatic. Save.\n - **GoDaddy:** Domain → **DNS** → **Add** → Type `A`, Name (`@` or subdomain), Value = VPS IP. Save.\n - **Other registrar:** add an `A` record pointing at the VPS IP from the DNS Setup Guide. The exact UI varies — the record type and value matter, the UI doesn't.\n6. Wait 1–5 minutes for DNS to propagate. You can check with `dig +short A example.com` or `nslookup example.com` from your terminal — when it returns the VPS IP, you're ready.\n7. Back in Deployik, on the same Domains page, click the **Verify** button on the domain's row. A live log streams: DNS check → Let's Encrypt cert request → nginx reload. Wait for \"Provisioning complete\".\n8. Once `ssl_status: active`, the **Open** button on the row works. Production primary domain also drives the **Open** link on the project Overview.\n\n**Gotcha:** if Verify fails with \"DNS does not match\", DNS hasn't propagated yet — wait another minute and try again. Don't change anything in Deployik in the meantime.\n\n**Set as primary:** to make this domain the one Deployik treats as canonical for its environment, click the row's three-dot menu → **Set as primary**. A star badge appears.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can especially help with the registrar's DNS panel — just tell me which provider you use and I'll talk you through the exact clicks.\n\n**API equivalent:** [api-actions.md#custom-domain](api-actions.md#custom-domain)\n\n---\n\n## env-vars\n\n**Goal:** Set environment variables (for build-time `NEXT_PUBLIC_*`) or secrets (runtime-only) for the deployed app.\n\n**Route:** `/projects/$id/settings/env`\n**Sidebar:** Project → **Settings** (expand) → **Environments**\n\n**Steps:**\n1. Click **Environments** under the project's Settings section.\n2. Two tabs at the top: **Variables** (visible at build time, can include `NEXT_PUBLIC_*`) and **Secrets** (runtime only, never in build).\n3. Each row picks a **Scope** — *Shared* (applies to both preview and production), *Preview* only, or *Production* only.\n4. Click **Add variable** (or **Add secret** on that tab). Type the key (e.g. `STRIPE_PUBLIC` or `DATABASE_URL`), the value, pick the scope. Click **Save**.\n5. To bulk-paste from a `.env` file: click **Import .env**, paste the file's contents, pick the scope. Each non-empty line becomes one variable.\n6. Existing values are masked as `****abcd` (last 4 chars). To change a value, click the row's edit (pencil) icon, paste the new value, save.\n\n**Gotcha:** changing a variable does NOT redeploy automatically. You'll see a \"Variables changed since last deploy\" badge on the project Overview. Click **Redeploy** there to apply the new values.\n\n**Build-time vs runtime:** `NEXT_PUBLIC_*` keys are baked into the static bundle at build time, so changing one requires a rebuild. Secrets are always runtime-only — Deployik refuses to save a secret with a `NEXT_PUBLIC_` prefix.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also add a variable for you via the API — just tell me the key, value, and which environment.\n\n**API equivalent:** [api-actions.md#env-vars](api-actions.md#env-vars)\n\n---\n\n## auto-deploy\n\n**Goal:** Make Deployik redeploy automatically when you push to GitHub.\n\n**Route:** `/projects/$id/settings`\n**Sidebar:** Project → **Settings** (expand) → **Build** (the default Settings page)\n\n**Steps:**\n1. Click **Settings** in the project sidebar (it lands on Build by default).\n2. Scroll to the **Auto-deploy** section.\n3. Toggle **Enable auto-deploy**. The first time you turn it on, Deployik creates a webhook on the GitHub repo using your OAuth token — this requires the `admin:repo_hook` scope. If the toggle errors, sign out and back in (GitHub re-prompts for the scope).\n4. **Production branch** — the branch whose pushes trigger production deployments. Defaults to the project's main branch (e.g. `main`).\n5. **Preview branches** — comma-separated list of branch names or branch patterns. `*` matches every other branch. Leave as `*` unless you want to restrict preview builds to specific branches.\n6. Click **Save**. The status indicator turns green and shows the GitHub webhook ID.\n7. Push a commit to the production branch. Within seconds, a new deployment with `trigger_source: webhook` appears in the Deployments list, and Deployik streams the build log.\n\n**Gotcha:** if a push doesn't trigger a build, check **GitHub repo → Settings → Webhooks**. The Deployik webhook should show recent deliveries with `200 OK` responses. Re-deliver a failed one from there to debug.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#auto-deploy](api-actions.md#auto-deploy)\n\n---\n\n## password-protection\n\n**Goal:** Hide the deployed site (preview, production, or both) behind a password before showing it to clients or doing QA.\n\n**Route:** `/projects/$id/settings/protection`\n**Sidebar:** Project → **Settings** (expand) → **Protection**\n\n**Steps:**\n1. Click **Protection** under the project's Settings section.\n2. Two cards: **Preview** and **Production**. Each has a toggle and (when enabled) a password reveal button.\n3. Toggle **Enable password protection** on the environment you want.\n4. Deployik generates a 16-character random password, encrypts and stores it, regenerates the nginx config to add `auth_request` blocks, and shows you the password once. Click the eye icon to reveal it. Copy it now.\n5. Click **Regenerate password** to mint a new one (invalidates the old). The new password is shown the same way.\n6. Visit the deployed site in an incognito window to confirm: the Czech-language auth page (`Heslo`) appears. Enter the password — you're in for 24 hours.\n\n**Gotcha:** changing the password does not log out anyone who's already on the site. The signed `deployik_site_auth` cookie they hold remains valid for its 24-hour lifetime. To force everyone off, change the cookie's `JWT_SECRET` on the Deployik server (operator action).\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#password-protection](api-actions.md#password-protection)\n\n---\n\n## contact-form-email\n\n**Goal:** Make the contact form on your deployed site actually deliver emails to your inbox, with spam protection so bots don't flood you.\n\n**Route:** `/projects/$id/integrations/email`\n**Sidebar:** Project → **Integrations** (expand) → **Email**\n\n**What this gives you:** when someone submits the contact form on your site, a real email lands in your inbox. Bots are filtered out using Google's invisible spam check (reCAPTCHA v3 — your visitors never see a \"click the traffic lights\" puzzle).\n\nThis recipe has three parts. Two of them happen outside Deployik — I'll tell you when we're leaving and when we're coming back.\n\n### Part 1 — Get your SMTP credentials from Webglobe (outside Deployik)\n\nSMTP is just the technical name for \"email sending\" — your hosting provider gives you a username and password your site uses to send mail through their servers.\n\n1. Open a new browser tab, go to your **Webglobe customer portal** (the place where you manage your hosting). Sign in.\n2. Find the section called **Mail** or **E-mail accounts**. Pick the address you want emails to come *from* (e.g. `noreply@yourdomain.com`). Create it if it doesn't exist yet.\n3. On that mailbox, look for **SMTP** or **Outgoing mail** settings. Write down four things:\n - **SMTP host** (looks like `smtp.webglobe.cz` or similar — exact name varies)\n - **SMTP port** (usually `587` for STARTTLS or `465` for TLS)\n - **Security** (`STARTTLS` for port 587, `TLS` for port 465)\n - **Username** (often the full email address, e.g. `noreply@yourdomain.com`)\n - **Password** (the mailbox password — keep it safe, you'll paste it into Deployik in Part 3)\n\nIf you can't find any of these, ask me — I'll help you locate them based on what you see in the portal.\n\n### Part 2 — Get reCAPTCHA v3 keys from Google (outside Deployik)\n\nThis is the spam protection. Google gives you two keys: a **site key** that goes on the public form, and a **secret key** the server uses to verify the form was submitted by a human.\n\n1. In a new tab, open `https://www.google.com/recaptcha/admin/create`. Sign in with your Google account.\n2. Fill the form:\n - **Label:** anything memorable, e.g. `myproject contact form`\n - **reCAPTCHA type:** pick **reCAPTCHA v3** (very important — v2 won't work).\n - **Domains:** add your production hostname (e.g. `example.com`). If you have a `www.example.com` variant, add it too. You can add `localhost` for testing.\n - Accept the terms, click **Submit**.\n3. The next page shows two keys:\n - **Site key** — public, goes in Deployik. Copy it.\n - **Secret key** — private, goes in your secrets store. Copy it too (and treat it like a password).\n\n### Part 3 — Wire it up in Deployik\n\nWe're back in Deployik now.\n\n1. In the project sidebar, expand **Integrations** and click **Email**.\n2. Fill in the SMTP fields with what you wrote down in Part 1:\n - **SMTP host**, **Port**, **Security** (STARTTLS / TLS), **Username**.\n - For **Password**, click the field and paste the mailbox password.\n3. Fill in the email fields:\n - **From address** — the mailbox address (e.g. `noreply@yourdomain.com`).\n - **From name** — the human name shown to recipients (e.g. `My Site`).\n - **Contact recipients** — who receives the form submissions. Comma-separated if more than one.\n4. Paste the reCAPTCHA **site key** from Part 2 into the **reCAPTCHA site key** field.\n5. **Score threshold** — leave at the default (`0.5`) unless you know you want to change it. Higher = stricter (more bots blocked, but more humans rejected too).\n6. Click **Save**. Deployik writes the SMTP host/port/from-address as **shared variables** and the SMTP password and reCAPTCHA secret as **secrets** — so the deployed site can read them at runtime.\n7. Click **Send test email**. Check the inbox of one of your **Contact recipients**. If it arrives, you're done with Part 3.\n\n### Part 4 — Add the contact form code to your site\n\nThe Email page has an **AI install prompt** section. It generates a copy-pasteable prompt with your project's exact framework, environment variables, and reCAPTCHA site key already filled in.\n\n1. On the Email page, scroll to **AI install prompt** (or **Install with AI**).\n2. Click **Copy prompt**.\n3. Paste the prompt into your AI coding assistant (Cursor, Claude Code, etc.) inside your project's repo. The assistant will write the contact form route, the reCAPTCHA hook, and the server handler that calls Deployik's SMTP credentials.\n4. Commit, push. If auto-deploy is on, the new version is live in a couple of minutes.\n5. Visit your live site, fill out the form, submit. The email should land in the inbox you configured.\n\n**Gotcha:** if the test email succeeds but real form submissions don't arrive, the most common cause is that the contact form code isn't reading the reCAPTCHA secret from environment variables on the server. The AI install prompt sets this up correctly — if it doesn't work, paste the error your form shows you and I'll diagnose.\n\n**Gotcha:** the **SMTP password** and the **reCAPTCHA secret** are the only two truly sensitive values here. Both are stored as secrets (encrypted at rest) — never paste them into a chat with me unless you're willing to rotate them after.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also do Part 3 for you via the API once you have the values from Parts 1 and 2 — just ask.\n\n**API equivalent:** [api-actions.md#contact-form-email](api-actions.md#contact-form-email)\n\n---\n\n## attach-postgres\n\n**Goal:** Get a real Postgres database for your app, per environment (preview / production), with credentials wired into the runtime automatically.\n\n**Route:** `/projects/$id/services`\n**Sidebar:** Project → **Services**\n\n**What this gives you:**\n- A dedicated Postgres container (a \"sidecar\") that runs next to your app, one per environment.\n- Standard environment variables (`DATABASE_URL` + discrete `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` / `PGPASSWORD`) injected into the deployed app automatically — your code just reads them.\n- A 16xxx loopback port on the VPS so you can connect from your laptop via an SSH tunnel for migrations / inspection.\n- The database **persists across deploys** — the volume isn't touched by a new deployment.\n\n**Steps:**\n\n1. *(Optional, brand-new project only)* On the **New project** page, scroll to **Attach Postgres database**. Toggle it on for preview / production. Skip the rest of this recipe — it's done.\n2. *(Existing project)* Click **Services** in the project sidebar.\n3. Two cards: **Preview** and **Production**. Each starts as **Not attached** with an **Attach Postgres** button.\n4. Click **Attach Postgres** on the environment you want. Deployik records the row, generates a strong random password, and assigns a unique 16xxx host port. The card flips to **Attached · pending** — the container itself isn't running yet.\n5. Trigger any deploy for that environment (push a commit, or click **Redeploy** on Overview). The build pipeline's `EnsureServices` hook starts the postgres container, waits for it to be healthy, then starts your app with the env vars injected. The card shows **running** once it's up.\n6. On the Services card, click **Show credentials** to reveal the password and the **SSH tunnel command**. Copy the SSH command, run it on your laptop — it forwards `127.0.0.1:15432` on your machine to the postgres in the VPS. Connect with `psql postgres://...@127.0.0.1:15432/...` or any client.\n7. To restart the container without touching data, click **Restart**. To rotate the password, click **Regenerate password** — the new password is shown once; the running container keeps the old password until the next deploy/restart, so trigger a redeploy right after.\n\n**Gotcha — Reset wipes everything:** the **Reset** button drops the volume and starts an empty database. Use it only for preview when you want a clean slate. On production it requires you to type `<project>-production` to confirm. There is no undo.\n\n**Gotcha — project rename is blocked:** while a service is attached, the project name is frozen (renaming would orphan the volume). Detach first, rename, re-attach (and re-import data) if you really need a new name.\n\n**Gotcha — detach deletes data:** clicking **Detach** stops the container AND removes the named volume. There is no undo. Take a `pg_dump` first if you want to keep the data.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also attach Postgres for you via the API and tail the container logs to confirm it came up clean — just ask.\n\n**API equivalent:** [api-actions.md#attach-postgres](api-actions.md#attach-postgres)\n\n---\n\n## rollback\n\n**Goal:** Revert to a previous successful deployment when the latest one is broken.\n\n**Route:** `/projects/$id/deployments`\n**Sidebar:** Project → **Deployments**\n\n**Steps:**\n1. Click **Deployments** in the project sidebar.\n2. The list shows every deployment with status, branch, commit message, who triggered it, and a thumbnail screenshot.\n3. Find the most recent **live**-status row from before the regression. Click the row to open the deployment detail page.\n4. On the detail page, in the top-right, click **Redeploy this commit**. (If you don't see that button, scroll to the build log header — it's there.)\n5. A confirmation modal appears. Click **Redeploy**. A new deployment row appears in the list with the same `commit_sha` but a new `id`, new build, and `triggered_by_username: you`.\n6. When status reaches **live**, the swap completes — the previous broken container is stopped and the rolled-back container takes over. Visitors see the older code immediately.\n\n**Gotcha:** rollback re-runs the build from source. If the regression is a config/env-var issue (not a code change), changing the env var and triggering a new build is faster — see [#env-vars](#env-vars). If it's a runtime dependency that broke between commits, rollback is the right move.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also list your recent deployments and pick the right \"last good\" one for you — just say the word.\n\n**API equivalent:** [api-actions.md#rollback](api-actions.md#rollback)\n",
25
+ },
26
+ {
27
+ file: "helpers/deployik",
28
+ content: "#!/usr/bin/env bash\n# deployik — thin wrapper around the Deployik HTTP API.\n# Reads ~/.config/deployik/config (KEY=value lines) and signs requests with\n# DEPLOYIK_TOKEN as a Bearer token. Never inline tokens on the command line.\nset -euo pipefail\n\nCONFIG_FILE=\"${DEPLOYIK_CONFIG:-$HOME/.config/deployik/config}\"\n\nusage() {\n cat <<EOF\nUsage: deployik api <METHOD> <path> [json-body]\n\nExamples:\n deployik api GET /api/projects\n deployik api POST /api/projects/abc/env '{\"key\":\"FOO\",\"value\":\"bar\",\"environment\":\"preview\"}'\n deployik api DELETE /api/projects/abc/domains/xyz\n\nReads $CONFIG_FILE for DEPLOYIK_BASE_URL and DEPLOYIK_TOKEN.\nSet DEPLOYIK_CONFIG to override the path.\nEOF\n}\n\nif [[ \"${1:-}\" == \"-h\" || \"${1:-}\" == \"--help\" ]]; then\n usage\n exit 0\nfi\n\nif [[ ! -f \"$CONFIG_FILE\" ]]; then\n cat >&2 <<EOF\ndeployik: config file not found at $CONFIG_FILE\n\nCreate it with two lines:\n DEPLOYIK_BASE_URL=https://your-deployik-host\n DEPLOYIK_TOKEN=dpk_...\n\nGenerate a token in the Deployik dashboard sidebar: Access tokens → Create token.\nEOF\n exit 2\nfi\n\n# shellcheck disable=SC1090\nsource \"$CONFIG_FILE\"\n\nif [[ -z \"${DEPLOYIK_BASE_URL:-}\" || -z \"${DEPLOYIK_TOKEN:-}\" ]]; then\n echo \"deployik: DEPLOYIK_BASE_URL or DEPLOYIK_TOKEN missing in $CONFIG_FILE\" >&2\n exit 2\nfi\n\nif [[ \"${1:-}\" != \"api\" || $# -lt 3 ]]; then\n usage\n exit 2\nfi\n\nshift\nmethod=\"$1\"\npath=\"$2\"\nbody=\"${3:-}\"\n\n# Strip trailing slash from base, leading slash from path, then rejoin.\nbase=\"${DEPLOYIK_BASE_URL%/}\"\npath=\"/${path#/}\"\nurl=\"$base$path\"\n\ncurl_args=(\n --silent\n --show-error\n --write-out \"\\n__HTTP_STATUS__:%{http_code}\\n\"\n --request \"$method\"\n --header \"Authorization: Bearer $DEPLOYIK_TOKEN\"\n --header \"Accept: application/json\"\n)\n\nif [[ -n \"$body\" ]]; then\n curl_args+=(--header \"Content-Type: application/json\" --data \"$body\")\nfi\n\nraw=$(curl \"${curl_args[@]}\" \"$url\")\nstatus=$(printf '%s\\n' \"$raw\" | awk -F: '/^__HTTP_STATUS__:/ {print $2}' | tr -d '[:space:]')\nbody_out=$(printf '%s\\n' \"$raw\" | sed '/^__HTTP_STATUS__:/d')\n\nif command -v jq >/dev/null 2>&1 && [[ -n \"$body_out\" ]]; then\n if printf '%s' \"$body_out\" | jq . >/dev/null 2>&1; then\n body_out=$(printf '%s' \"$body_out\" | jq .)\n fi\nfi\n\necho \"HTTP $status\" >&2\n[[ -n \"$body_out\" ]] && printf '%s\\n' \"$body_out\"\n\ncase \"$status\" in\n 2*) exit 0 ;;\n *) exit 1 ;;\nesac\n",
29
+ executable: true,
30
+ },
31
+ {
32
+ file: "SKILL.md",
33
+ content: "---\nname: deployik-howto\ndescription: Use when a user asks how to do something in the Deployik dashboard — connecting a GitHub repo, deploying a Dockerfile/Go/long-running app, custom domains, environment variables or secrets, auto-deploy on push, password protection, sending email from a contact form (Webglobe SMTP + reCAPTCHA v3), or rolling back a deployment — or asks Claude to perform one of those actions for them. Triggers include \"how do I…\", \"where do I click…\", \"I want my own domain\", \"I want my contact form to send emails\", \"I want to make X work\", \"deploy my repo\", \"deploy this Dockerfile\", \"deploy my Go app\", and \"just do X for me\" phrased against Deployik. Do NOT activate for questions about Deployik's source code (Go handlers, React pages, migrations) — those are codebase tasks, not dashboard tasks.\n---\n\n# Deployik How-To\n\nHelps a user navigate or operate the Deployik dashboard. Two modes: **guide** (walk them through clicks) and **action** (do it for them via the Deployik API).\n\n## Tone\n\nThe primary user is non-technical. Speak warmly and in plain language. Quote Deployik button labels exactly (they're in English) but explain in everyday words around them. Never assume the user already knows what an \"MX record\" or a \"site key\" is — define it the first time it appears, in one short sentence.\n\nWhen you give a recipe, **always finish with the same friendly offer**:\n\n> Stuck on any of these steps? Tell me which one and I'll walk through it with you.\n\nIf the user gets stuck, ask one question at a time, and offer to do the part on their behalf if it's something action mode can do (e.g. \"Want me to add the secret for you, or do you want to do it in the dashboard?\").\n\nIf a sub-step happens outside Deployik (a registrar's DNS panel, the Google reCAPTCHA admin, a webmail customer portal), say so explicitly so they know they're leaving Deployik for a moment. Then guide them step-by-step in the external UI before bringing them back.\n\n## When to use\n\n- User goal phrased against the Deployik dashboard — e.g. \"I want my own domain\", \"where do I add an env var\", \"make the site password-protected\", \"redeploy when I push to GitHub\", \"make my contact form send emails\", \"roll back my last release\".\n- User asks Claude to *perform* one of those tasks instead of guiding them.\n\n## Critical build facts\n\n- Deployik supports user-provided Dockerfiles. There is no special `framework: docker` value.\n- If a `Dockerfile` exists in the repo root, Deployik builds it as-is with repo root as the Docker context.\n- If `root_directory` is set and a `Dockerfile` exists inside that folder, Deployik builds that Dockerfile with `root_directory` as the Docker context.\n- For Dockerfile, Go, SQLite, or other long-running non-frontend apps, use `framework: static` as the neutral preset, set `root_directory` to the Dockerfile folder, and set `port` to the port the container listens on.\n- The build/install/output fields are for generated Dockerfiles. A user Dockerfile controls its own build and start command.\n\n## When NOT to use\n\n- Questions about Deployik's source code, build pipeline internals, or how a Go handler/React page is implemented. Those are not dashboard tasks.\n- Self-hosting / VPS / nginx / SSL provider questions — those belong to the lovinka-infra repo and a different audience.\n\n## How to choose the mode\n\nRead the user's phrasing:\n\n- *\"How do I…\"*, *\"Where do I click…\"*, *\"I want to learn how to…\"* → **guide mode** → see [click-paths.md](click-paths.md).\n- *\"Do X for me\"*, *\"Add this env var\"*, *\"Trigger a deploy\"*, imperative phrasing → **action mode** → see [api-actions.md](api-actions.md).\n\nIf ambiguous, ask warmly: \"Want me to walk you through the dashboard, or do it for you?\"\n\n## Action mode prerequisites\n\nAction mode requires a Personal Access Token, but it may already be available through the Deployik MCP server. Prefer Deployik MCP tools when they are available in the current session (`list_projects`, `create_project`, `deploy_project`, `get_recipe`, etc.). Do not stop just because `~/.config/deployik/config` is missing if MCP Deployik tool calls work.\n\nIf no Deployik MCP tools are available, use the bundled `helpers/deployik` script. If `~/.config/deployik/config` doesn't exist or is missing `DEPLOYIK_BASE_URL` / `DEPLOYIK_TOKEN`, stop and explain in friendly tone:\n\n> Before I can do this for you, I need a Deployik access token — it's like a password just for tools. In the Deployik sidebar, click **Access tokens** → **Create token**, give it a name like \"skill\", and copy the value it shows you (it starts with `dpk_`). Then save it to a file at `~/.config/deployik/config` like this:\n>\n> ```\n> DEPLOYIK_BASE_URL=https://your-deployik-host\n> DEPLOYIK_TOKEN=dpk_...\n> ```\n>\n> Once that's saved, just ask me the same thing again and I'll do it.\n\n## Safety rules for action mode\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently |\n| `POST/PUT/PATCH` to non-production | Print intended `<METHOD> <path>` and JSON body, ask \"Do this?\" — wait for an affirmative reply |\n| `POST/PUT/PATCH` to production env | Print payload, **flag PRODUCTION explicitly**, ask yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) — anything else aborts |\n\nUse Deployik MCP tools first. If they are unavailable, invoke the HTTP API via `helpers/deployik` (bundled with this skill). Never hand-roll curl with the token inline — keeps the token out of shell history.\n",
15
34
  },
16
35
  ];
17
36
  //# sourceMappingURL=recipes.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.generated.js","sourceRoot":"","sources":["../../src/knowledge/recipes.generated.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+CAA+C;AAO/C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,myIAAmyI;KAC7yI;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,y/cAAy/c;KACngd;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,quoBAAquoB;KAC/uoB;CACF,CAAC"}
1
+ {"version":3,"file":"recipes.generated.js","sourceRoot":"","sources":["../../src/knowledge/recipes.generated.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+CAA+C;AAW/C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,o2iBAAo2iB;KAC92iB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,48tBAA48tB;KACt9tB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,6hLAA6hL;KACviL;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,o2iBAAo2iB;KAC92iB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,48tBAA48tB;KACt9tB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,m9EAAm9E;QAC59E,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,6hLAA6hL;KACviL;CACF,CAAC"}
@@ -98,6 +98,12 @@ const SYNONYMS = {
98
98
  // email / contact form
99
99
  email: "email", contact: "email", smtp: "email", recaptcha: "email", form: "email",
100
100
  webglobe: "email", mail: "email", "form-email": "email",
101
+ // dockerfile / custom servers
102
+ docker: "dockerfile", dockerfile: "dockerfile", container: "dockerfile", image: "dockerfile",
103
+ go: "dockerfile", golang: "dockerfile", api: "dockerfile", server: "dockerfile",
104
+ sqlite: "dockerfile", volume: "dockerfile", persistent: "dockerfile",
105
+ // postgres sidecar
106
+ postgres: "postgres", postgresql: "postgres", database: "postgres", db: "postgres", sidecar: "postgres",
101
107
  // rollback
102
108
  rollback: "rollback", revert: "rollback", undo: "rollback", restore: "rollback", previous: "rollback",
103
109
  // create / connect project
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/tools/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/tools/help.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,12 @@ export function buildCreateProjectPayload(args, resolvedGroupId) {
24
24
  const groupId = resolvedGroupId ?? args.group_id ?? args.organization_id;
25
25
  if (groupId)
26
26
  payload.organization_id = groupId;
27
+ if (args.host_network_access !== undefined)
28
+ payload.host_network_access = args.host_network_access;
29
+ if (args.data_volume_enabled !== undefined)
30
+ payload.data_volume_enabled = args.data_volume_enabled;
31
+ if (args.data_mount_path)
32
+ payload.data_mount_path = args.data_mount_path;
27
33
  if (args.resource_tier)
28
34
  payload.resource_tier = args.resource_tier;
29
35
  if (args.start_command)
@@ -97,20 +103,26 @@ export function registerProjectTools(server, ctx) {
97
103
  });
98
104
  registerTool(server, ctx, {
99
105
  name: "create_project",
100
- description: "Create a new Deployik project from a GitHub repo. Returns the new project record. Use `setup_project_from_repo` if you want auto-inspection of monorepo apps + an initial deploy.",
106
+ description: "Create a new Deployik project from a GitHub repo. Supports generated Next.js/Vite/Astro/static/node-api Dockerfiles and user-provided Dockerfiles. For Dockerfile/Go/custom apps, use framework='static', set root_directory to the folder containing Dockerfile, and set port to the container listen port. Use `setup_project_from_repo` if you want JS app auto-inspection of monorepos + an initial deploy.",
101
107
  inputSchema: {
102
108
  name: z.string().describe("DNS-safe slug. Must match ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$"),
103
109
  github_owner: z.string(),
104
110
  github_repo: z.string(),
105
111
  branch: z.string().default("main"),
106
- framework: z.enum(["nextjs", "vite", "astro", "static"]).default("nextjs"),
112
+ framework: z
113
+ .enum(["nextjs", "vite", "astro", "static", "node-api"])
114
+ .default("nextjs")
115
+ .describe("Build preset for generated Dockerfiles. For a user Dockerfile, choose 'static'; Dockerfile presence makes Deployik build it as-is."),
107
116
  package_manager: z.enum(["auto", "bun", "pnpm", "npm", "yarn"]).default("auto"),
108
- root_directory: z.string().default(""),
109
- output_directory: z.string().default(""),
110
- build_command: z.string().default(""),
111
- install_command: z.string().default(""),
117
+ root_directory: z.string().default("").describe("App subdirectory. For Dockerfile apps, this must be the directory containing Dockerfile."),
118
+ output_directory: z.string().default("").describe("Generated-Dockerfile output folder. Ignored by user-provided Dockerfiles."),
119
+ build_command: z.string().default("").describe("Generated-Dockerfile build command. Ignored by user-provided Dockerfiles."),
120
+ install_command: z.string().default("").describe("Generated-Dockerfile install command. Ignored by user-provided Dockerfiles."),
112
121
  node_version: z.string().default("22"),
113
- port: z.number().int().min(1).max(65535).default(3000),
122
+ port: z.number().int().min(1).max(65535).default(3000).describe("Container HTTP listen port. Required for Dockerfile apps if they do not listen on 3000."),
123
+ host_network_access: z.boolean().optional().describe("Allow runtime container to reach host services via host.docker.internal."),
124
+ data_volume_enabled: z.boolean().optional().describe("Enable a persistent Docker volume for runtime file storage."),
125
+ data_mount_path: z.string().optional().describe("Container mount path for the persistent volume, e.g. /data or /app/data."),
114
126
  group_id: z.string().optional().describe("Dashboard group id. Preferred over organization_id."),
115
127
  group: z.string().optional().describe("Dashboard group name, slug, or id."),
116
128
  organization_id: z.string().optional().describe("Backward-compatible alias for group_id."),
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -47,21 +47,28 @@ export function registerWorkflowTools(server, ctx) {
47
47
  });
48
48
  registerTool(server, ctx, {
49
49
  name: "setup_project_from_repo",
50
- description: "End-to-end: inspect the GitHub repo for monorepo/framework, create a Deployik project, optionally enable auto-build + auto-production. Returns the project + initial preview deploy id (if any).",
50
+ description: "End-to-end: inspect the GitHub repo for JS monorepo/framework apps, create a Deployik project, optionally enable auto-build + auto-production. Returns the project + initial preview deploy id (if any). For Dockerfile-only or Go-only folders the inspector may miss the app; that is not evidence Deployik cannot deploy it. Use create_project directly with framework='static', root_directory pointing at the Dockerfile folder, and port set to the container listen port.",
51
51
  inputSchema: {
52
52
  owner: z.string(),
53
53
  repo: z.string(),
54
54
  name: z.string().describe("DNS-safe slug, e.g. 'my-app'."),
55
55
  branch: z.string().default("main"),
56
- framework: z.enum(["nextjs", "vite", "astro", "static"]).optional(),
56
+ framework: z
57
+ .enum(["nextjs", "vite", "astro", "static", "node-api"])
58
+ .optional()
59
+ .describe("Override detected generated-Dockerfile preset. For user Dockerfiles, use 'static'."),
57
60
  package_manager: z.enum(["auto", "bun", "pnpm", "npm", "yarn"]).optional(),
58
- root_directory: z.string().optional().describe("If the repo is a monorepo, the app subdirectory."),
61
+ root_directory: z.string().optional().describe("If the repo is a monorepo, the app subdirectory. For Dockerfile apps, use the folder containing Dockerfile."),
59
62
  group_id: z.string().optional().describe("Dashboard group id. Preferred over organization_id."),
60
63
  group: z.string().optional().describe("Dashboard group name, slug, or id."),
61
64
  organization_id: z.string().optional().describe("Backward-compatible alias for group_id."),
62
65
  auto_build_enabled: z.boolean().default(true),
63
66
  auto_production_enabled: z.boolean().default(false),
64
67
  resource_tier: z.enum(["nano", "small", "medium", "large"]).optional(),
68
+ port: z.number().int().min(1).max(65535).optional().describe("Container HTTP listen port. Important for Dockerfile apps."),
69
+ host_network_access: z.boolean().optional(),
70
+ data_volume_enabled: z.boolean().optional().describe("Enable a persistent Docker volume for runtime file storage."),
71
+ data_mount_path: z.string().optional().describe("Container mount path for the persistent volume, e.g. /data."),
65
72
  start_command: z.string().optional(),
66
73
  health_path: z.string().optional(),
67
74
  },
@@ -91,7 +98,10 @@ export function registerWorkflowTools(server, ctx) {
91
98
  build_command: detectedApp?.suggested_build_command ?? "",
92
99
  install_command: "",
93
100
  node_version: "22",
94
- port: 3000,
101
+ port: args.port ?? 3000,
102
+ host_network_access: args.host_network_access,
103
+ data_volume_enabled: args.data_volume_enabled,
104
+ data_mount_path: args.data_mount_path,
95
105
  auto_build_enabled: args.auto_build_enabled,
96
106
  auto_production_enabled: args.auto_production_enabled,
97
107
  resource_tier: args.resource_tier,
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"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"}
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED by scripts/copy-recipes.mjs from ../package.json. Do not edit by hand.
2
- export const VERSION = "0.3.1";
2
+ export const VERSION = "0.3.2";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovinka/deployik-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "MCP server for Deployik — drive projects, deployments, secrets, and domains from any MCP-aware AI.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,7 +18,7 @@
18
18
  "start": "node dist/index.js",
19
19
  "inspect": "node scripts/copy-recipes.mjs && tsc -p tsconfig.json && npx @modelcontextprotocol/inspector node dist/index.js",
20
20
  "typecheck": "tsc -p tsconfig.json --noEmit",
21
- "test": "bun test",
21
+ "test": "node scripts/copy-recipes.mjs && bun test",
22
22
  "prepublishOnly": "npm run build"
23
23
  },
24
24
  "engines": {