instadomain 0.1.0__tar.gz

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.
Files changed (67) hide show
  1. instadomain-0.1.0/.dockerignore +9 -0
  2. instadomain-0.1.0/.gitignore +3 -0
  3. instadomain-0.1.0/Dockerfile +15 -0
  4. instadomain-0.1.0/Dockerfile.instadomain +11 -0
  5. instadomain-0.1.0/LAUNCH.md +245 -0
  6. instadomain-0.1.0/LICENSE +21 -0
  7. instadomain-0.1.0/PKG-INFO +74 -0
  8. instadomain-0.1.0/PLAN.md +349 -0
  9. instadomain-0.1.0/Procfile +1 -0
  10. instadomain-0.1.0/README-pypi.md +53 -0
  11. instadomain-0.1.0/affiliate.py +49 -0
  12. instadomain-0.1.0/analytics.py +162 -0
  13. instadomain-0.1.0/api_server.py +198 -0
  14. instadomain-0.1.0/claude/claude-code-config.md +55 -0
  15. instadomain-0.1.0/claude/claude-desktop-local.json +15 -0
  16. instadomain-0.1.0/claude/claude-desktop-remote.json +13 -0
  17. instadomain-0.1.0/claude/connectors-guide.md +60 -0
  18. instadomain-0.1.0/claude/cursor-config.json +24 -0
  19. instadomain-0.1.0/claude/windsurf-config.json +23 -0
  20. instadomain-0.1.0/config.py +29 -0
  21. instadomain-0.1.0/deploy.sh +80 -0
  22. instadomain-0.1.0/docker-compose.yml +37 -0
  23. instadomain-0.1.0/docs/superpowers/plans/2026-03-15-instadomain-impl.md +2159 -0
  24. instadomain-0.1.0/docs/superpowers/specs/2026-03-15-instadomain-reseller-design.md +315 -0
  25. instadomain-0.1.0/domain_lookup.py +159 -0
  26. instadomain-0.1.0/fly-instadomain.toml +33 -0
  27. instadomain-0.1.0/fly.toml +36 -0
  28. instadomain-0.1.0/gpt/gpt-config.md +81 -0
  29. instadomain-0.1.0/gpt/openapi.yaml +186 -0
  30. instadomain-0.1.0/gpt/system-prompt.txt +11 -0
  31. instadomain-0.1.0/instadomain/__init__.py +1 -0
  32. instadomain-0.1.0/instadomain/api.py +300 -0
  33. instadomain-0.1.0/instadomain/cloudflare_client.py +97 -0
  34. instadomain-0.1.0/instadomain/config.py +25 -0
  35. instadomain-0.1.0/instadomain/db.py +60 -0
  36. instadomain-0.1.0/instadomain/encryption.py +32 -0
  37. instadomain-0.1.0/instadomain/fulfillment.py +142 -0
  38. instadomain-0.1.0/instadomain/mcp_server.py +123 -0
  39. instadomain-0.1.0/instadomain/opensrs_client.py +216 -0
  40. instadomain-0.1.0/instadomain/orders.py +116 -0
  41. instadomain-0.1.0/instadomain/pricing.py +47 -0
  42. instadomain-0.1.0/instadomain/static/privacy.html +83 -0
  43. instadomain-0.1.0/instadomain/static/terms.html +79 -0
  44. instadomain-0.1.0/instadomain/stripe_handler.py +102 -0
  45. instadomain-0.1.0/landing.py +155 -0
  46. instadomain-0.1.0/manifest.json +55 -0
  47. instadomain-0.1.0/mcp_server.py +194 -0
  48. instadomain-0.1.0/nginx.conf +73 -0
  49. instadomain-0.1.0/pyproject.toml +38 -0
  50. instadomain-0.1.0/railway-deploy.md +155 -0
  51. instadomain-0.1.0/railway.json +12 -0
  52. instadomain-0.1.0/requirements-instadomain.txt +9 -0
  53. instadomain-0.1.0/requirements.txt +8 -0
  54. instadomain-0.1.0/setup-ssl.sh +42 -0
  55. instadomain-0.1.0/stats.py +213 -0
  56. instadomain-0.1.0/stats_dashboard.py +225 -0
  57. instadomain-0.1.0/tests/test_instadomain/__init__.py +0 -0
  58. instadomain-0.1.0/tests/test_instadomain/conftest.py +56 -0
  59. instadomain-0.1.0/tests/test_instadomain/test_api.py +112 -0
  60. instadomain-0.1.0/tests/test_instadomain/test_cloudflare_client.py +87 -0
  61. instadomain-0.1.0/tests/test_instadomain/test_encryption.py +20 -0
  62. instadomain-0.1.0/tests/test_instadomain/test_fulfillment.py +128 -0
  63. instadomain-0.1.0/tests/test_instadomain/test_opensrs_client.py +137 -0
  64. instadomain-0.1.0/tests/test_instadomain/test_orders.py +94 -0
  65. instadomain-0.1.0/tests/test_instadomain/test_pricing.py +21 -0
  66. instadomain-0.1.0/tests/test_instadomain/test_stripe_handler.py +107 -0
  67. instadomain-0.1.0/tests/test_integration.py +235 -0
@@ -0,0 +1,9 @@
1
+ .git
2
+ __pycache__
3
+ *.pyc
4
+ data/
5
+ .env
6
+ tests/
7
+ PLAN.md
8
+ *.md
9
+ .dockerignore
@@ -0,0 +1,3 @@
1
+ __pycache__/
2
+ *.pyc
3
+ data/
@@ -0,0 +1,15 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /app
4
+
5
+ COPY requirements.txt .
6
+ RUN pip install --no-cache-dir -r requirements.txt
7
+
8
+ COPY *.py ./
9
+
10
+ # Create data directory for SQLite (used locally; Fly mounts a volume at /data)
11
+ RUN mkdir -p /data
12
+
13
+ EXPOSE 8080
14
+
15
+ CMD ["sh", "-c", "python3 -m uvicorn api_server:app --host 0.0.0.0 --port ${PORT:-8080}"]
@@ -0,0 +1,11 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /app
4
+ COPY requirements-instadomain.txt .
5
+ RUN pip install --no-cache-dir -r requirements-instadomain.txt
6
+
7
+ COPY domain_lookup.py .
8
+ COPY config.py .
9
+ COPY instadomain/ instadomain/
10
+
11
+ CMD ["uvicorn", "instadomain.api:create_app", "--factory", "--host", "0.0.0.0", "--port", "8080"]
@@ -0,0 +1,245 @@
1
+ # Launch Checklist
2
+
3
+ Step-by-step playbook for going live. Work top to bottom.
4
+
5
+ ---
6
+
7
+ ## Pre-Launch (Technical)
8
+
9
+ ### 1. Register the domain
10
+
11
+ - [ ] Check availability: https://www.namecheap.com/domains/registration/results/?domain=domaincheckr
12
+ - [ ] Alternatives if taken: `checkdomain.tools`, `domaincheckr.io`, `domainavail.com`, `rdapcheck.com`
13
+ - Recommended registrar: **Porkbun** (https://porkbun.com) — cheapest .com (~$9/year), developer-friendly
14
+ - Fallback: **Namecheap** (https://namecheap.com) — ~$10/year
15
+
16
+ ### 2. Deploy to Railway
17
+
18
+ Full instructions: see `railway-deploy.md`. Quick version:
19
+
20
+ ```bash
21
+ npm i -g @railway/cli
22
+ railway login
23
+ railway init # name: domain-checker
24
+ railway up # deploys API service
25
+ ```
26
+
27
+ Railway generates a URL like `https://domain-checker-production.up.railway.app`. HTTPS is automatic — no certbot needed.
28
+
29
+ - [ ] `curl https://<railway-url>/health` returns `{"status": "ok"}`
30
+ - [ ] `curl https://<railway-url>/check/dinkhub.com` returns JSON with `available: true` and affiliate links
31
+
32
+ ### 3. Deploy MCP service on Railway
33
+
34
+ In the Railway dashboard, add a second service from the same repo with start command override:
35
+
36
+ ```
37
+ python3 mcp_server.py --http
38
+ ```
39
+
40
+ - [ ] `curl https://<mcp-railway-url>/mcp/` returns 200
41
+
42
+ ### 4. Set affiliate IDs
43
+
44
+ ```bash
45
+ railway variables set NAMECHEAP_AFFILIATE_ID=YOUR_ID
46
+ railway variables set PORKBUN_AFFILIATE_ID=YOUR_ID
47
+ ```
48
+
49
+ Set these on both the API service and the MCP service after affiliate approvals (see section below).
50
+
51
+ ### 5. Point custom domain to Railway (optional)
52
+
53
+ ```bash
54
+ railway domain
55
+ # Follow prompts; set CNAME in your registrar DNS panel
56
+ ```
57
+
58
+ - [ ] Wait for propagation (5–30 min). Verify: `dig +short domaincheckr.com`
59
+
60
+ ### 6. Update config files with live URLs
61
+
62
+ Replace `domaincheckr.com` placeholders in these files with your actual Railway URLs (or custom domain if set):
63
+
64
+ - `gpt/openapi.yaml` — API service URL
65
+ - `claude/claude-desktop-remote.json` — MCP service URL
66
+ - `claude/cursor-config.json` — MCP service URL
67
+ - `claude/windsurf-config.json` — MCP service URL
68
+
69
+ Fill in affiliate IDs after approvals (see section below).
70
+
71
+ ---
72
+
73
+ ## Affiliate Programs (Apply Day 1 — don't wait for deploy)
74
+
75
+ Apply to all four simultaneously. Approvals take 1–7 days. You need at least one live before the tool has real value.
76
+
77
+ ### Namecheap Affiliates (Primary)
78
+
79
+ - [ ] Apply: https://www.namecheap.com/affiliates/
80
+ - Commission: up to $5 per .com registration, 30-day cookie
81
+ - Approval time: 1–3 business days (manual review)
82
+ - **"How will you promote" field — paste this:**
83
+ > I'm running a domain availability checker tool integrated as a ChatGPT GPT and a Claude Desktop Extension. When users check domain availability via AI assistants, the tool returns results with Namecheap registration links. The tool is used inside ChatGPT (GPT Store) and Claude Desktop, with no separate website — clicks come directly from AI assistant sessions with high purchase intent.
84
+ - After approval: add ID to `.env` as `NAMECHEAP_AFFILIATE_ID`
85
+
86
+ ### Porkbun Affiliates (Secondary)
87
+
88
+ - [ ] Apply: https://porkbun.com/affiliates
89
+ - Commission: $2–3 per registration, 30-day cookie
90
+ - Approval time: 2–5 business days
91
+ - **"How will you promote" field — paste this:**
92
+ > I operate a domain availability checker integrated as a Claude Desktop Extension and ChatGPT GPT Store tool. When a user asks an AI assistant about domain availability, the tool queries RDAP in real time and returns results with Porkbun registration links. No website — all distribution is through AI assistant integrations.
93
+ - After approval: add ID to `.env` as `PORKBUN_AFFILIATE_ID`
94
+
95
+ ### GoDaddy via CJ Affiliate
96
+
97
+ - [ ] Create CJ account: https://www.cj.com (click "Publisher Sign Up")
98
+ - [ ] Search for GoDaddy program inside CJ dashboard and apply
99
+ - Commission: $5–10 per registration, 45-day cookie
100
+ - Approval time: 3–7 business days (GoDaddy reviews separately inside CJ)
101
+ - **Application notes field:**
102
+ > AI assistant integration — domain availability checker tool running as a ChatGPT GPT and Claude MCP extension. High-intent traffic: users are actively searching for available domains to register.
103
+ - After approval: grab affiliate link template from CJ and add to `affiliate.py`
104
+
105
+ ### Dynadot Affiliates
106
+
107
+ - [ ] Apply: https://www.dynadot.com/affiliates.html
108
+ - Commission: $5 per new account + $0.50 per domain transfer, 45-day cookie
109
+ - Approval time: 2–5 business days
110
+ - **"How will you promote" field:**
111
+ > Domain availability checker integrated into ChatGPT and Claude AI assistants. Users ask about domain availability, get real-time results with registration links. Traffic is high-intent — users are actively looking to register domains.
112
+ - After approval: add link template to `affiliate.py`
113
+
114
+ ### After Any Approval
115
+
116
+ - [ ] Set the new affiliate ID on Railway: `railway variables set <VAR>=<value>` (Railway auto-restarts)
117
+ - [ ] Test end-to-end: check an available domain via `curl https://<your-url>/check/sometestdomain123456.com` — confirm affiliate links appear in response with correct tracking parameters
118
+ - [ ] Click a link, verify it 302-redirects to the registrar and sets a cookie
119
+
120
+ ---
121
+
122
+ ## ChatGPT GPT Store (Phase 2)
123
+
124
+ - [ ] Go to https://chatgpt.com/gpts/editor (requires ChatGPT Plus or higher)
125
+ - [ ] **Name:** `Domain Checker`
126
+ - [ ] **Description** (shown in GPT Store search results):
127
+ > Check if any domain name is available for registration. Instant results with registration links. Suggests creative alternatives if your first choice is taken.
128
+ - [ ] **System prompt:** copy from `gpt/system-prompt.txt`
129
+ - [ ] **Add Action:**
130
+ - Click "Add actions"
131
+ - Import from URL: `https://domaincheckr.com/openapi.json`
132
+ - Or manually upload `gpt/openapi.yaml`
133
+ - Authentication: None
134
+ - [ ] **Conversation starters** (add all four):
135
+ - `Is mycoolstartup.com available?`
136
+ - `Check these 5 domains for me: ...`
137
+ - `I'm building a fitness app. Find me available domain names.`
138
+ - `What domains are available for a SaaS called Taskly?`
139
+ - [ ] **Privacy policy URL:** `https://domaincheckr.com/privacy` (create a simple static page or add a `/privacy` route returning plain text)
140
+ - [ ] **Test before publishing:**
141
+ - Ask: "Is dinkhub.com available?" — verify it calls the action and returns affiliate links
142
+ - Ask: "Find domain names for a recipe app" — verify bulk suggestions work
143
+ - [ ] Set visibility to **Public**
144
+ - [ ] Publish
145
+ - [ ] Copy GPT URL (format: `https://chatgpt.com/g/g-XXXXX-domain-checker`) — save it for sharing
146
+
147
+ ---
148
+
149
+ ## Claude Distribution (Phase 3)
150
+
151
+ ### Test local MCP (stdio)
152
+
153
+ - [ ] Edit `claude/claude-desktop-local.json`: replace `/path/to/domain-checker` with actual path
154
+ - [ ] Merge into `~/Library/Application Support/Claude/claude_desktop_config.json`
155
+ - [ ] Restart Claude Desktop
156
+ - [ ] Ask Claude: "Is dinkhub.com available?" — confirm it calls the tool and returns affiliate links
157
+
158
+ ### Test remote MCP (streamable-HTTP)
159
+
160
+ - [ ] Merge `claude/claude-desktop-remote.json` into Claude Desktop config (points to `https://domaincheckr.com/mcp/`)
161
+ - [ ] Restart Claude Desktop, repeat the same domain check test
162
+
163
+ ### Submit to Anthropic Extensions Directory
164
+
165
+ - [ ] Fill out interest form: https://www.anthropic.com/extensions (check for current form URL — Anthropic updates this)
166
+ - **What to include in the submission:**
167
+ - Name: Domain Checker
168
+ - Description: Real-time domain availability checker via RDAP. Checks single domains, bulk lists, and generates domain ideas from keywords. Returns affiliate registration links for available domains.
169
+ - MCP server URL: `https://domaincheckr.com/mcp/`
170
+ - Tools exposed: `check_domain`, `check_domains_bulk`, `suggest_domains`
171
+ - Transport: Streamable HTTP
172
+ - Auth: None (public)
173
+ - Use case: Any user who wants to find and register a domain name
174
+ - [ ] Monitor email for acceptance confirmation (can take 1–4 weeks)
175
+
176
+ ### Add as Connector on claude.ai
177
+
178
+ - [ ] Go to https://claude.ai → Settings → Connectors → Add Custom Connector
179
+ - [ ] URL: `https://domaincheckr.com/mcp/`
180
+ - [ ] Name: Domain Checker
181
+ - [ ] Test via the claude.ai web interface
182
+
183
+ ### Publish config snippets for other MCP clients
184
+
185
+ - [ ] Post `claude/cursor-config.json` and `claude/windsurf-config.json` to the GitHub repo README
186
+ - [ ] Share on Reddit: r/cursor_ai, r/windsurf
187
+ - Message to use:
188
+ > Added a zero-config domain availability checker MCP server. Works in Cursor, Windsurf, Claude Desktop. Checks via RDAP (no API key). Config: [link to repo]
189
+
190
+ ---
191
+
192
+ ## Post-Launch Monitoring
193
+
194
+ ### Daily stats check
195
+
196
+ ```bash
197
+ # Run locally (SQLite lives in the Railway service's ephemeral filesystem; for persistence
198
+ # consider mounting a Railway Volume or pulling the DB via railway run):
199
+ railway run python3 stats.py
200
+ ```
201
+
202
+ ### Stats dashboard
203
+
204
+ ```bash
205
+ python3 stats_dashboard.py
206
+ # Opens at http://localhost:8085
207
+ ```
208
+
209
+ Watch:
210
+ - [ ] Total checks per day (target: 100+ by end of week 1)
211
+ - [ ] Available vs taken ratio (expect ~30% available)
212
+ - [ ] Affiliate link click count
213
+ - [ ] Source breakdown (mcp vs api)
214
+
215
+ ### External dashboards
216
+
217
+ - [ ] GPT Store analytics: https://chatgpt.com/gpts/editor → select your GPT → Analytics tab
218
+ - Track: conversations started, messages sent
219
+ - [ ] Namecheap affiliate dashboard: https://affiliate.namecheap.com
220
+ - [ ] CJ Affiliate (GoDaddy): https://members.cj.com
221
+ - [ ] Porkbun affiliate: https://porkbun.com/affiliates/dashboard
222
+
223
+ ### First-week targets
224
+
225
+ | Metric | Target |
226
+ |--------|--------|
227
+ | Daily checks | 100+ |
228
+ | GPT Store conversations | 50+ |
229
+ | Affiliate link clicks | 5+ |
230
+ | Uptime | 100% |
231
+
232
+ ---
233
+
234
+ ## Growth (Month 2+)
235
+
236
+ - **SEO landing page:** Add a `/` route or static `index.html` at `domaincheckr.com` explaining the tool. Target keywords: "domain availability checker", "check domain name free"
237
+ - **Product Hunt:** Launch when daily checks hit 1,000+. Category: Developer Tools
238
+ - **Reddit posts:**
239
+ - r/ChatGPT: "I built a domain checker GPT that actually suggests alternatives"
240
+ - r/ClaudeAI: "Free domain availability MCP server — works in Claude Desktop, Cursor, Windsurf"
241
+ - r/EntrepreneurRideAlong: "Side project update: domain checker affiliate tool"
242
+ - **More TLDs:** Add `.io`, `.ai`, `.dev`, `.co` RDAP endpoints to `domain_lookup.py` — high-demand TLDs worth checking
243
+ - **More registrars:** Add Spaceship (https://spaceship.com/affiliates, $1–3/reg) once the others are live
244
+ - **RDAP cache:** Add 5-minute TTL cache in `domain_lookup.py` once daily volume exceeds 10,000 checks
245
+ - **A/B test link format:** Try "Register at Namecheap →" vs inline markdown vs end-of-message summary to find highest click-through format
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 InstaDomain
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: instadomain
3
+ Version: 0.1.0
4
+ Summary: Buy domains without leaving the terminal. MCP server for Claude Code.
5
+ Project-URL: Homepage, https://github.com/nachdakwale/instadomain
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Keywords: ai,claude,dns,domain,mcp
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: Internet :: Name Service (DNS)
17
+ Requires-Python: >=3.11
18
+ Requires-Dist: fastmcp>=2.0
19
+ Requires-Dist: httpx>=0.27
20
+ Description-Content-Type: text/markdown
21
+
22
+ # InstaDomain
23
+
24
+ Buy domains without leaving the terminal. An MCP server for Claude Code that lets you check availability, purchase domains, and get DNS management credentials -- all through natural conversation.
25
+
26
+ ## What It Does
27
+
28
+ 1. **Check domain availability** -- see if a domain is available and get instant pricing
29
+ 2. **Buy domains** -- purchase via Stripe checkout (opens in browser)
30
+ 3. **Get DNS access** -- receive Cloudflare nameservers and a scoped API token for DNS management
31
+
32
+ ## Setup
33
+
34
+ ### Install
35
+
36
+ ```bash
37
+ pip install instadomain
38
+ ```
39
+
40
+ ### Add to Claude Code
41
+
42
+ Add to your Claude Code MCP config (`~/.claude/claude_desktop_config.json`):
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "instadomain": {
48
+ "command": "instadomain"
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### Or run directly
55
+
56
+ ```bash
57
+ instadomain
58
+ ```
59
+
60
+ ## Usage
61
+
62
+ Once configured, just ask Claude:
63
+
64
+ - "Is coolstartup.com available?"
65
+ - "Buy mycoolproject.dev"
66
+ - "What's the status of my domain order?"
67
+
68
+ ## How It Works
69
+
70
+ InstaDomain registers domains through OpenSRS, sets up DNS on Cloudflare, and gives you a scoped API token so you can manage DNS records programmatically. Payments are handled securely through Stripe.
71
+
72
+ ## Pricing
73
+
74
+ Domains are priced at wholesale cost + a small markup. Prices vary by TLD. You'll see the exact price before confirming any purchase.