{
  "schema_version": 1,
  "type": "skill",
  "slug": "adom-cloud",
  "title": "adom.cloud — DNS Proxy",
  "brief": "Provision short, memorable *.adom.cloud URLs that reverse-proxy to long Adom container URLs. Powered by Cloudflare Workers + KV on the edge.",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "source_path": "SKILL.md",
  "readme": "# adom.cloud — DNS Proxy Service\n\nTurn long, secret container URLs into short, memorable `*.adom.cloud` addresses. The secret container hash is completely hidden from end users.\n\n## What It Does\n\nEvery Adom container has a URL like:\n```\nhttps://coder.john-project-a1b2c3d4e5f6g7h8.containers.adom.inc/proxy/8797/\n```\n\nThe long hash in the URL acts as authentication — anyone with it can access your service. But it's ugly and hard to share. **adom.cloud** lets you create clean URLs like:\n\n```\nhttps://myapp.adom.cloud\n```\n\nThat reverse-proxy to your container service, hiding the secret hash entirely.\n\n## How It Works\n\n```\nBrowser → myapp.adom.cloud → Cloudflare DNS (proxied) → CF Worker → KV Lookup → Container URL\n```\n\n1. **DNS** — A proxied A record points `myapp.adom.cloud` to a dummy IP (`192.0.2.1`)\n2. **Cloudflare Worker** — Intercepts the request before it reaches the dummy IP\n3. **KV Lookup** — Worker reads the subdomain from the Host header, looks up the target URL in Cloudflare Workers KV\n4. **Reverse Proxy** — Worker fetches from the real container URL and returns the response to the user\n\nBoth HTTP and WebSocket connections are proxied transparently — important for VS Code, Adom Viewer, and other real-time apps.\n\n## Features\n\n- **Edge Performance** — Cloudflare Workers run at 300+ edge locations worldwide, sub-50ms latency\n- **Automatic SSL** — HTTPS is free and automatic via Cloudflare\n- **WebSocket Support** — Full bidirectional WebSocket passthrough for real-time apps\n- **Hidden Secrets** — The container hash never appears in the user's browser\n- **Instant Provisioning** — Create a subdomain in seconds via Claude\n\n## Usage\n\nJust ask Claude:\n\n- *\"Create a subdomain called myapp for my viewer on port 8797\"*\n- *\"Set up editor.adom.cloud to point to my VS Code on this container\"*\n- *\"List all my adom.cloud subdomains\"*\n- *\"Delete the test subdomain\"*\n\nClaude handles all the Cloudflare API calls — DNS record creation, KV mapping, and verification.\n\n## Subdomain Rules\n\n- Lowercase letters, numbers, and hyphens only\n- 1–63 characters\n- Cannot start or end with a hyphen\n- Reserved names blocked: `www`, `api`, `mail`, `admin`, `dashboard`, etc.\n\n## Architecture\n\n| Component | Details |\n|-----------|---------|\n| **Domain** | `adom.cloud` (registered on Cloudflare) |\n| **Worker** | `adom-dns-proxy` — routes `*.adom.cloud/*` |\n| **KV Store** | `DNS_MAP` namespace — subdomain → target URL mappings |\n| **DNS Records** | Proxied A records → `192.0.2.1` (RFC 5737 dummy IP) |\n| **Source** | `gallia/dns/` (Worker in `worker/`, provisioning service in root) |\n\n## Security\n\n- The adom.cloud URL becomes public — anyone with it can access the service\n- The secret container hash is never exposed to end users\n- SSL termination at Cloudflare edge\n- Credentials stored securely in `~/.claude/skills/adom-cloud/.env` (never committed to git)",
  "author": {
    "name": "Kyle Bergstedt",
    "email": "[email protected]"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:30:13.767Z",
  "updated_at": "2026-05-28T05:30:13.767Z",
  "sub_skills": [],
  "parent_app": null,
  "org": "adom"
}