# Shared Services Registry *Last updated: 2026-01-29 (v2 — added Resend, shared env patterns, AI APIs)* All reusable infrastructure, accounts, domains, and services across Hammer's projects. --- ## 🖥️ Infrastructure ### VPS — Clawdbot Host - **Provider:** Hostinger - **IP:** 72.60.68.214 - **OS:** Ubuntu Linux - **User:** clawdbot (sudo, password required) - **Purpose:** Runs Clawdbot gateway, Caddy reverse proxy - **Services running:** Caddy (reverse proxy + TLS), Clawdbot gateway ### VPS — Dokploy (App Hosting) - **Provider:** Dokploy Cloud - **IP:** 191.101.0.153 - **Dashboard:** https://app.dokploy.com - **API Key:** Stored in Bitwarden ("Dokploy API Key" or similar) - **Purpose:** Docker-based app deployment (compose + individual apps + managed Postgres) --- ## 🌐 Domains ### Primary Domain: `donovankelly.xyz` DNS managed via Hostinger. Wildcard `*.hammer.donovankelly.xyz` → 72.60.68.214. | Subdomain | Points To | Purpose | |-----------|-----------|---------| | `hammer.donovankelly.xyz` | 72.60.68.214 (Caddy) | Clawdbot hooks endpoint (Control UI blocked) | | `ws.hammer.donovankelly.xyz` | 72.60.68.214 (Caddy) | WebSocket relay (token-auth) for dashboard chat | | `dash.donovankelly.xyz` | Dokploy (Traefik) | Hammer Dashboard (queue + chat + projects) | | `app.todo.donovankelly.xyz` | Dokploy (Traefik) | Todo App frontend | | `api.todo.donovankelly.xyz` | Dokploy (Traefik) | Todo App backend API | | `app.thenetwork.donovankelly.xyz` | Dokploy (Traefik) | Network App (NWM CRM) frontend | | `api.thenetwork.donovankelly.xyz` | Dokploy (Traefik) | Network App API backend | | `app.nkode.donovankelly.xyz` | Dokploy (Traefik) | nKode frontend | | `api.nkode.donovankelly.xyz` | Dokploy (Traefik) | nKode backend (Rust) | ### Other Domains | Domain | Purpose | |--------|---------| | `git.infra.nkode.tech` | Gitea instance (code hosting) | | `network-api.nkode.tech` | Alias for Network App API | | `that2ndguy.com` | That2ndGuy golf brand (not yet live) | --- ## 📦 Dokploy Projects & Services ### Project: Hammer Projects (`EtUEaT-WRASozvV78tgPL`) | Service | Type | Compose/App ID | Domain | |---------|------|----------------|--------| | hammer-queue | Compose | `kBdwrcZodIRyNIvQ-wrzG` | dash.donovankelly.xyz | | network-app-api | Compose | `UKrNvUyMCdaSWkl6DcAGA` | api.thenetwork.donovankelly.xyz | | network-app-web | Compose | `Sa1LrtH5uu-a7chrtebXb` | app.thenetwork.donovankelly.xyz | | todo-app-v2 | Compose | `e07fMO8TXcHI_SkKqBWrl` | api.todo.donovankelly.xyz | | todo-app-web | Compose | `ofMFmzQhEYK-3LfH5QmU_` | app.todo.donovankelly.xyz | | network-app-db | Postgres | `KzFkJETXrW_oMaiPsUb2o` | (internal) | | todo-app-db | Postgres | `WrvHLAc1kaqsrpTaSGOG4` | (internal) | ### Project: nKode (`rqBLzpkkE9b7hlQHh6tBG`) | Service | Type | App ID | Domain | |---------|------|--------|--------| | nkode-frontend | Application | `f-9zg1S81u5Nzh_aZj2Jl` | app.nkode.donovankelly.xyz | | nkode-backend | Application | `gEOD9RFeADCSYZscOI61B` | api.nkode.donovankelly.xyz | | nkode-db | Postgres | `-kClddhuQsAWjy-ZP4anV` | (internal) | --- ## 📁 Git Repositories (Gitea) All hosted at `git.infra.nkode.tech`. Two orgs: `hammer` (Hammer's repos) and `dkelly` (Donovan's repos). ### Hammer's Repos | Repo | Purpose | |------|---------| | `hammer/clawd` | Clawdbot workspace (this repo) | | `hammer/hammer-queue` | Hammer Dashboard (dash.donovankelly.xyz) | | `hammer/network-app-api` | Network App backend | | `hammer/network-app-web` | Network App frontend | | `hammer/network-app-mobile` | Network App mobile (Flutter?) | | `hammer/todo-app-web` | Todo App frontend | | `hammer/donovan-portfolio` | Donovan's portfolio site | | `hammer/nkode-web` | nKode frontend | | `hammer/notes` | Markdown notes repo | ### Donovan's Repos | Repo | Purpose | |------|---------| | `dkelly/Markdown-Notes` | Markdown notes app | | `dkelly/flutter-nkode` | nKode Flutter mobile app | | `dkelly/nkode-oidc` | nKode OIDC auth provider | | `dkelly/nkode-rs` | nKode Rust backend | --- ## 🔑 Accounts & API Keys All secrets stored in **Bitwarden** (shared org vault: `Hammer's Credentials`). | Service | Purpose | Where Used | Bitwarden Item | |---------|---------|-----------|----------------| | **Resend** | Transactional email (noreply@donovankelly.xyz) | Todo App, Network App | RESEND_API_KEY in app envs | | **Dokploy API** | Deploy apps via API | Dashboard deploy, cron task worker | "dokploy api key" | | **Brave Search API** | Web search | Clawdbot gateway | "brave api key" | | **Anthropic API** | LLM (Claude) | Network App AI features | ANTHROPIC_API_KEY in network-app env | | **OpenAI API** | LLM (GPT) | Network App AI features | OPENAI_API_KEY in network-app env | | **BetterAuth** | Auth framework (shared pattern) | Todo App, Network App | Per-app BETTER_AUTH_SECRET | | Hammer Dashboard API | Task CRUD, webhooks | Cron jobs, heartbeat checks | "Hammer Queue (donovankelly.xyz)" | | Gmail API (OAuth2) | Email monitoring | Heartbeat checks, `~/.local/bin/gmail` | "accounts.google.com" | | Gitea (hammer) | Push code, create PRs | All repos | "git.infra.nkode.tech" | | nKode Postgres | Database creds | nkode-backend env vars | "nKode Postgres (Dokploy)" | | Clawdbot Gateway WS | WebSocket auth token | dash.donovankelly.xyz chat relay | GATEWAY_WS_URL / WS token | | Todoist | Task management (legacy?) | Unknown | "Todoist" | ### Bitwarden Vault Info - **Organization:** `4e3ffbdb-0f8b-4f7a-a276-b0a30160e33f` (Hammer's Credentials) - **Collection:** `320f9e42-607e-4180-8533-b0a30160e342` (Default collection) - **CLI:** `/home/clawdbot/.npm-global/bin/bw` - **Config:** `~/.clawdbot/.env` (BW_CLIENTID, BW_CLIENTSECRET, BW_PASSWORD) --- ## 🔧 Reusable for New Projects When spinning up a new app, reuse: 1. **Hosting:** Add to Dokploy under "Hammer Projects" or create a new project 2. **Domain:** Add subdomain under `*.donovankelly.xyz` (wildcard DNS already set) 3. **Database:** Create managed Postgres in Dokploy (free, internal networking) 4. **Code hosting:** Create repo under `hammer/` org on `git.infra.nkode.tech` 5. **Secrets:** Store all API keys/creds in Bitwarden shared vault 6. **TLS:** Automatic via Dokploy's Traefik (for Dokploy apps) or Caddy (for VPS services) 7. **Deploy:** Use Dokploy API for automated deploys from task worker ### Shared Env Patterns Across Apps Apps on Dokploy share common env var patterns. When creating a new app: | Env Var | What It Is | How to Get | |---------|-----------|------------| | `DATABASE_URL` | Postgres connection string | Create managed Postgres in Dokploy, use internal hostname | | `BETTER_AUTH_SECRET` | Auth session signing key | Generate: `openssl rand -hex 32` — store in Bitwarden | | `RESEND_API_KEY` | Transactional email | Reuse existing key (same Resend account) | | `FROM_EMAIL` | Sender address | Use `noreply@donovankelly.xyz` or per-app variant | | `APP_URL` | Public URL | The app's subdomain (e.g. `https://app.X.donovankelly.xyz`) | | `ALLOWED_ORIGINS` | CORS origins | Frontend + API URLs | | `PORT` | Service port | Typically 3000/3001 — Dokploy routes via Traefik | ### Not Yet Set Up (Opportunities) - **Stripe:** No account yet — needed if any app charges money - **Analytics:** No Plausible/PostHog — could add self-hosted analytics - **Error tracking:** No Sentry — could add for production monitoring - **S3/Object storage:** No MinIO or cloud storage — would benefit file uploads --- ## 📋 Caddy Reverse Proxy (VPS: 72.60.68.214) Caddy handles TLS termination for VPS-hosted services: | Route | Target | Notes | |-------|--------|-------| | `hammer.donovankelly.xyz/hooks/*` | Clawdbot gateway | Webhook endpoint only | | `ws.hammer.donovankelly.xyz` | Clawdbot gateway | WebSocket, token-authenticated | | `app.todo.donovankelly.xyz` | Dokploy | Todo frontend | | `api.todo.donovankelly.xyz` | Dokploy | Todo backend | > ⚠️ `hammer.donovankelly.xyz` Control UI is BLOCKED — needs auth layer before re-enabling. --- *Keep this file updated when adding new services, domains, or accounts.*