Persona: Dentist office manager (Friday persona), non-technical, skeptical, on her phone, evaluating whether to trust SeldonFrame with her practice's front office.
Funnel step: Homepage hero → "Paste a URL" tab → /try?url=... (the public, unauthenticated "watch it build, no signup required" surface).
Verbatim evidence
Homepage hero form (https://www.seldonframe.com/) offers two tabs: "Paste a URL" and "Describe the business." A realistic version of this persona has a practice whose only real web presence is a Facebook Page (very common for small local-service businesses — plenty of dentists, salons, landscapers never got past that). I exercised the actual paste-a-URL path against a Facebook page (a generic, non-impersonating one — facebook.com root — to avoid touching any real business's identity) directly against the public API the /try page calls:
$ curl -N "https://www.seldonframe.com/api/v1/web/build/stream?url=https://www.facebook.com/"
event: fetching
data: {"url":"https://www.facebook.com/"}
event: error
data: {"code":422,"reason":"extraction_failed","message":"We read that site but couldn't find the basics we need — a business name, location, and phone number. Try a different URL, or describe your business instead."}
The /try page's own headline directly above the paste box reads:
"Watch it build — no signup required."
"We build a real hosted website, CRM, and a working AI chatbot in a few minutes — free to try, nothing to sign up for yet."
But when extraction fails (packages/crm/src/app/(public)/try/try-client.tsx:346-367), the ONLY forward path offered besides retrying a different URL is a button labeled "Describe your business instead," which links straight to /signup?intent=build — an account-creation wall, immediately contradicting the "no signup required" promise the visitor just read.
Root cause
packages/crm/src/app/api/v1/web/build/stream/route.ts (the public, anonymous build route) is URL-only — it has no text/biz parameter. The homepage's "Describe the business" tab has always routed to /signup (packages/crm/src/components/landing/hero-submit-target.ts:9-14), and this was a deliberate, documented scope cut when /try shipped — see try-client.tsx:14-20:
"the public build route this page calls is URL-only... Wiring a description mode here would require a second public anonymous route this task doesn't create, so the biz seed (if present) is shown read-only with a short explanatory note instead of being submittable. Recorded as a deviation in the task report."
So this isn't a latent bug — it's a known, intentional gap that was punted at ship time. The practical effect: any small business without a text-extractable website (Facebook-only presence, a site with the phone number baked into a logo image instead of text, a Yelp/Google-only listing) hits the account-creation wall at the exact moment SeldonFrame is trying to earn trust with a frictionless demo — precisely the persona (non-technical, skeptical, phone-first, low web sophistication) this ungated flow exists to convert.
Why this is a judgment call, not a PR
Per CLAUDE.md, /try's "no signup required" ungated build is core to the locked SeldonFrame vision (§1: "no guest mode, no local:// paths, no claim step, no upfront API key... progressive key disclosure only"). Fixing this honestly means one of:
- Building a second public, anonymous, description-based build route (real architectural work — a new pipeline, new rate-limit surface, new abuse considerations for an anonymous free-text LLM endpoint), or
- Softening the "no signup required" copy so it doesn't over-promise, or
- Investing in extraction robustness (e.g., detect Facebook/social URLs specifically and give a more actionable message, such as suggesting the visitor paste their Google Business Profile URL instead).
Each is a product/positioning decision, not a small isolated bug — exactly the kind of call this loop is instructed to escalate rather than patch. Flagging for Max to prioritize.
Gate verdict: N/A — no code changed, issue-only per the loop's judgment-call path.
Persona: Dentist office manager (Friday persona), non-technical, skeptical, on her phone, evaluating whether to trust SeldonFrame with her practice's front office.
Funnel step: Homepage hero → "Paste a URL" tab →
/try?url=...(the public, unauthenticated "watch it build, no signup required" surface).Verbatim evidence
Homepage hero form (
https://www.seldonframe.com/) offers two tabs: "Paste a URL" and "Describe the business." A realistic version of this persona has a practice whose only real web presence is a Facebook Page (very common for small local-service businesses — plenty of dentists, salons, landscapers never got past that). I exercised the actual paste-a-URL path against a Facebook page (a generic, non-impersonating one —facebook.comroot — to avoid touching any real business's identity) directly against the public API the/trypage calls:The
/trypage's own headline directly above the paste box reads:But when extraction fails (
packages/crm/src/app/(public)/try/try-client.tsx:346-367), the ONLY forward path offered besides retrying a different URL is a button labeled "Describe your business instead," which links straight to/signup?intent=build— an account-creation wall, immediately contradicting the "no signup required" promise the visitor just read.Root cause
packages/crm/src/app/api/v1/web/build/stream/route.ts(the public, anonymous build route) is URL-only — it has notext/bizparameter. The homepage's "Describe the business" tab has always routed to/signup(packages/crm/src/components/landing/hero-submit-target.ts:9-14), and this was a deliberate, documented scope cut when/tryshipped — seetry-client.tsx:14-20:So this isn't a latent bug — it's a known, intentional gap that was punted at ship time. The practical effect: any small business without a text-extractable website (Facebook-only presence, a site with the phone number baked into a logo image instead of text, a Yelp/Google-only listing) hits the account-creation wall at the exact moment SeldonFrame is trying to earn trust with a frictionless demo — precisely the persona (non-technical, skeptical, phone-first, low web sophistication) this ungated flow exists to convert.
Why this is a judgment call, not a PR
Per CLAUDE.md,
/try's "no signup required" ungated build is core to the locked SeldonFrame vision (§1: "no guest mode, no local:// paths, no claim step, no upfront API key... progressive key disclosure only"). Fixing this honestly means one of:Each is a product/positioning decision, not a small isolated bug — exactly the kind of call this loop is instructed to escalate rather than patch. Flagging for Max to prioritize.
Gate verdict: N/A — no code changed, issue-only per the loop's judgment-call path.