Skip to content

docs: remove web search and the MCP server - #100

Merged
crstian19 merged 1 commit into
mainfrom
chore/remove-public-web-search
Sep 25, 2026
Merged

crstian19 merged 1 commit into
mainfrom
chore/remove-public-web-search

Conversation

@crstian19

Copy link
Copy Markdown
Contributor

Why

NaN is retiring its web search (POST /v1/search on api.nan.builders) and the remote MCP server. The MCP server's only tool was web_search.

What

  • Deleted docs/mcp (en + es). The sidebar order and the API reference entry are renumbered. src/middleware.ts sends a 301 from /docs/mcp and /es/docs/mcp to agent-setup.
  • src/data/openapi.json: removed the /search and /mcp paths, their tags and their schemas, the web-search budget sentence, and the search_unavailable error row.
  • Content pages (en + es): removed the web search and MCP sections or links from examples, agent-setup, agents, claude-code, gentle-ai, intro and getting-started.
  • Tests: updated for the removed routes and anchors, plus redirect tests.

Test

npm run build passes, npm test passes 1290 tests, and npm run check reports 0 errors.

NaN is decommissioning its web search: POST /v1/search and the remote MCP
server at /mcp, whose only tool was web_search. Drop every trace of both
from the site.

- Delete the MCP server page (en + es) and 301 /docs/mcp and /es/docs/mcp
  to the agent setup page that linked to it.
- Remove /search and /mcp from the OpenAPI spec, with their Search and MCP
  tags, the four schemas only they used, the web search budget and the
  search_unavailable 503 row.
- Remove the web search snippets from Examples and the links, cards and
  callouts in agent-setup, agents, claude-code, gentle-ai, getting-started
  and intro, in both languages.
- Close the gap the page left in the docs order.
@crstian19
crstian19 merged commit e634763 into main Sep 25, 2026
2 checks passed
sre-helmcode added a commit that referenced this pull request Oct 15, 2026
* feat(signup): /api/signup Worker route proxying to cloud-api open signup

Shared validation in lib/signup.ts mirrors POST /api/auth/signup
(OPEN-SIGNUP.md 2.3): full name, email, job role enum with 'other' free
text, optional X/LinkedIn profile URLs normalized to the accepted shapes,
plan from the enum. The route validates, drops honeypot hits with the
same 202, rate limits per IP (5 per 10 min, valid submissions only) and
proxies to the public endpoint with Origin https://nan.builders and the
client IP. Every upstream success is the same 202; 400 field errors are
sanitized; 429 passes through; anything else is an opaque 502.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(home): hero signup form replaces the waitlist

The hero form now creates an account: full name, email, job role (with
'Other' free text revealed on demand), optional X and LinkedIn profiles,
honeypot, required markers, per-field errors and a 'check your inbox'
success state. Still a vanilla script, no island; ?plan= (and the legacy
?premium=1) is carried into the payload. Copy rewritten in EN and ES.

Removes the waitlist route, its client/server libs, the Resend
confirmation email and their tests. cloud-api now sends the English
magic link, so RESEND_* and CLOUD_API_WAITLIST_KEY are unused here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(site): every CTA goes to account creation, no waitlist left

Pricing tiers link to cloud.nan.builders/signup?plan=premium|inference|
community and the workspaces block gets a plan=workspace CTA. The nav
shows 'Create account' next to Login. Models, footer and 404 point at
the hero signup form. /community drops its payment-first form for a CTA
to signup?plan=community (form, route, lib and tests deleted). Privacy
covers the account profile data and the 7-day purge of unconfirmed
accounts; terms no longer mention a waitlist. A guard test keeps any
waitlist copy out, except the events reserve pool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(docs): guard that web search stays off the site

Web search (/v1/search and the MCP server that only exposed it) was
removed in #100 and /docs/mcp already 301s to agent-setup. Pin it: no
page, doc, dictionary, OpenAPI path or public file may mention it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: describe open signup instead of the waitlist island

ARCHITECTURE.md and README.md now document /api/signup (contract,
validation, honeypot, rate limit, response mapping), the vanilla hero
form, the plan-aware signup links, the free lifecycle state, path-based
EN/ES, the current structure, and the env vars the site no longer reads
(RESEND_*, CLOUD_API_WAITLIST_KEY).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(nav): keep Login + Create account on one line in the narrow desktop band

With the new Create account button the Spanish nav overflowed 66px at
861px, 28px at 900px and 28px right after the old 1100px band. The
compact band now runs to 1240px with tighter spacing and smaller auth
buttons; measured no horizontal scroll at 861-1300px in EN and ES.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(signup): no-JS safe form, exact JSON media type, forward visitor country

- The hero form has method="post" action="/api/signup", so if the
  script fails the browser never GETs the data into a URL. That form
  post gets a plain-text 415 pointing at the platform signup; the body
  is never read or echoed (a redirect to cloud.nan.builders would be
  blocked by the page's form-action 'self').
- /api/signup parses the Content-Type media type and requires exactly
  application/json instead of a substring match.
- cf-ipcountry is forwarded to cloud-api next to the client IP (only a
  well-formed two-character code), for the billing region at verify.
- The blocked email domain/TLD lists are exported and pinned by a test
  so they stay in sync with cloud-api.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(signup): accept mail.com, localized HTML page for no-JS form posts

- mail.com is a real email provider: removed from the blocked-domain
  list (cloud-api drops it too). The pinned list test is updated.
- A no-JS form post to /api/signup now gets a small static HTML page
  instead of plain English text: dark like the site, no JS, its own
  CSP (default-src 'none'), in Spanish when posted from /es or, with no
  same-origin Referer, when Accept-Language prefers it. It explains the
  form needs JavaScript and links to cloud.nan.builders/signup. The
  request body is still never read or echoed; the status stays 415.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: barckcode <cristian@helmcode.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants