Commit 193c7c

2026-03-14 20:39:33 Claude (MCP): [mcp] Update URL structure: paid wikis get top-level custom slugs"
Design/Data_Model.md ..
@@ 156,20 156,24 @@
```
sderle.wikibot.io/ → user's wiki list (dashboard)
- sderle.wikibot.io/third-gulf-war/ → wiki web UI
+ sderle.wikibot.io/third-gulf-war/ → wiki web UI (free wiki, under user namespace)
sderle.wikibot.io/third-gulf-war/api/v1/ → wiki REST API
sderle.wikibot.io/third-gulf-war/mcp → wiki MCP endpoint
```
- ### Custom domains (premium)
+ ### Custom slugs (paid wikis)
- Premium users can CNAME their own domain to their `{username}.wikibot.io` subdomain. Implementation: API Gateway custom domain + ACM certificate (free via AWS). The Lambda resolver checks DynamoDB for custom domain → user mapping.
+ Paid wikis get a top-level slug: `{slug}.wikibot.io`. This is a vanity URL that routes directly to the wiki without the username prefix. The slug is chosen at wiki creation time and must be globally unique (same validation rules as usernames: lowercase alphanumeric + hyphens, 3–30 characters, drawn from the same namespace/blocklist).
```
- research.mysite.com → CNAME → sderle.wikibot.io
+ third-gulf-war.wikibot.io/ → wiki web UI (paid wiki, top-level slug)
+ third-gulf-war.wikibot.io/api/v1/ → wiki REST API
+ third-gulf-war.wikibot.io/mcp → wiki MCP endpoint
```
- This requires wildcard routing at the API Gateway level (`*.wikibot.io`) and TLS cert provisioning per custom domain. ACM supports up to 2500 certs per account, which is fine for early scale. At larger scale, CloudFront with SNI handles this better.
+ The user-namespace URL (`sderle.wikibot.io/third-gulf-war/`) continues to work as a redirect. This means existing MCP connections and bookmarks survive if a free wiki is later upgraded to paid.
+
+ Implementation: the Lambda resolver checks the subdomain against the Wikis table's `custom_slug` GSI first, then falls back to username resolution.
---
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9