Live demo framework — dogfooding jsglobtech.com
Source: `../source/JSGlobtech_GEO_Agency_Playbook.pdf` §6 (Live Client Demonstration Framework), extracted 2026-07-30. Endpoints verified against the repo on the same date.
Live demo framework — dogfooding jsglobtech.com
Source: ../source/JSGlobtech_GEO_Agency_Playbook.pdf §6 (Live Client Demonstration Framework), extracted 2026-07-30. Endpoints verified against the repo on the same date.
The premise: use JSGlobtech's own website as the live example. The agency's site is the reference implementation of the thing being sold, so the demo is a working system rather than a slide. This is why the GEO and MCP layers in this repo have to stay live — they are sales infrastructure, not a portfolio piece. See ../decisions/0007-dogfood-site-as-demo-asset.md.
Two steps, roughly five minutes.
Step 1 — The citation search (GEO)
Open ChatGPT or Perplexity live on screen and search:
"Who are the top app developers in Dubai Marina with AI integration capabilities?"
Show JSGlobtech getting cited, and attribute it to the live /.well-known/llms.txt file and structured microdata.
What actually backs this up
| Artifact | Live path | In repo |
|---|---|---|
| Well-known LLM facts file | https://jsglobtech.com/.well-known/llms.txt |
public/.well-known/llms.txt |
| Root mirror | https://jsglobtech.com/llms.txt |
public/llms.txt (byte-identical) |
| JSON-LD structured data | Rendered into every page | components/GeoSchema.tsx |
public/llms.txt explicitly contains a Location Signals for AI Search section listing "Flutter developers in Dubai Marina" and "Agencies that expose MCP tools or ChatGPT Actions for lead capture", plus a Preferred Citations block with suggested phrasing. The demo query is written to match those signals — which is the point, and worth saying out loud: "we chose the facts we wanted the AI to know, and this is it repeating them."
The JSON-LD reinforces it with areaServed covering Dubai / UAE / Dubai Marina, GeoCoordinates, and knowsAbout entries for Model Context Protocol and Generative Engine Optimization. Full inventory: ../architecture/geo-stack.md.
Risks to manage
- LLM output is non-deterministic. The citation may not appear on a given run, and it depends on whether browsing is enabled and which model version answers. Rehearse immediately before the call. Have a screenshot as a fallback and be honest that results vary — that honesty is also the argument for a monthly citation report (
../strategy/kpis.md). - Rendered JSON-LD is worth showing if the prospect is technical: view-source, and the
application/ld+jsonblocks are there. - Opening
/.well-known/llms.txtin the browser mid-demo is a strong, concrete moment. It is a plain text file the client can read.
Step 2 — The MCP lead capture (conversion)
Tenant framing: JSGlobtech is a tenant on this same lead engine (client_id: jsglobtech). Point at the Sheet column after submit. Full settings list: ./tenant-demo-checklist.md. Product model: ../architecture/system-overview.md.
In a chat session connected to the OpenAPI/MCP tool, type:
"Request a custom mobile app consultation from JSGlobtech."
Show the "Confirm / Submit" affordance appearing in the chat, then show the CRM/Sheet receiving the lead instantly (tagged with client_id).
What actually backs this up
Prefer www.jsglobtech.com (apex returns 308 → www).
| Surface | Live URL | In repo |
|---|---|---|
| MCP endpoint (canonical) | https://www.jsglobtech.com/api/mcp/sse |
app/api/mcp/[transport]/route.ts |
| MCP alternate path | https://www.jsglobtech.com/api/mcp/mcp |
same route, transport = mcp |
| OpenAPI definition (ChatGPT Actions) | https://www.jsglobtech.com/docs/openapi.json |
lib/openapi-spec.ts + route handlers |
| REST lead endpoint | POST https://www.jsglobtech.com/api/leads/submit |
app/api/leads/submit/route.ts |
The tool is request_dev_consultation (lib/mcp-server.ts). Transport is stateless Streamable HTTP, so no session store is needed. Details: ../integrations/mcp-server.md.
Setup required before the call
- The MCP endpoint or the OpenAPI action must be connected in the host client beforehand — a fresh ChatGPT session will not know about it. Connect and test the day before.
CRM_WEBHOOK_URLmust be set in the production environment (optional:CLIENT_WEBHOOK_JSGLOBTECH/CLIENT_WEBHOOK_MAP), otherwise the lead is validated and logged server-side only and nothing arrives to show (../integrations/lead-capture.md).- Have the destination — Google Sheet or whatever the webhook points at — open in a second window, ready to refresh. Redeploy Apps Script after
Code.gsupdates so theclient_idcolumn is present. - Use an obviously-demo name so the row is easy to identify and delete afterwards.
- Pass
client_id: "jsglobtech"(orX-Client-ID: jsglobtech) so tenancy is visible on the row.
Accuracy caveats
- The "Confirm / Submit" button is host UI, not JSGlobtech code. MCP clients render their own tool-approval prompt; the exact appearance varies by client and version. The tool returns JSON. Describe it as "the AI asks you to confirm before it submits" rather than promising a specific button.
- "WhatsApp receiving the lead instantly" — the wired path is one webhook to a Google Apps Script that appends to a Google Sheet. WhatsApp is not currently a delivery channel. Show the Sheet, and describe WhatsApp as where a client's leads would be routed. Do not fake it.
project_typemust be one offlutter_mobile_app,web_application,geo_ai_integration, andbudget_range_usdis required — a well-behaved agent will ask for a budget before submitting. Expect that in the flow and don't be surprised by it.- Lead IDs come back as
jsg-<uuid>, which is a nice detail to point at when showing the row.
Adapting the demo per vertical
The demo proves the mechanism on a software agency. A clinic director will ask whether it works for a clinic. The honest answer is that the visibility layer is identical and the action layer changes shape — a clinic's tool would be "request a consultation", which is exactly what is on screen.
Where the analogy breaks: ../strategy/target-markets.md lists availability checks, listing queries, and viewing bookings as the natural actions for car rental and real estate. None of those exist yet. Present them as scoped custom work (Tier 3), not as a demo.
Related
./demo-mvp-scope.md— required MVP scope for client pitches (what must work vs deferred)../operations/product-launch-checklist.md— master launch / indexing / day-of gate tracker./pitch-script.md— the framing the demo sits inside../architecture/geo-stack.md— Step 1's artifacts../integrations/mcp-server.md— Step 2's surface../operations/client-engagement-sop.md— the loop this sits in