From 2dd1d7d1ebc0ff2c9e54cf8b1857327fdce8781d Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 13:13:59 -0400 Subject: [PATCH 1/6] Add first-build guide and correct ChatGPT setup --- content/meta.ts | 1 + content/workshop-start.mdx | 108 ++++++++++++++++++++++++++++++ generated/manifest.json | 6 +- generated/setup/chatgpt.md | 17 ++--- scripts/build-llms-index.test.mjs | 3 +- scripts/verify-routes.mjs | 3 +- 6 files changed, 125 insertions(+), 13 deletions(-) create mode 100644 content/workshop-start.mdx diff --git a/content/meta.ts b/content/meta.ts index 5a1250f..5bdb544 100644 --- a/content/meta.ts +++ b/content/meta.ts @@ -4,6 +4,7 @@ export default defineMeta({ pages: [ "index", "quickstart", + "workshop-start", "troubleshooting", "setup", "concepts", diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx new file mode 100644 index 0000000..1f83e7e --- /dev/null +++ b/content/workshop-start.mdx @@ -0,0 +1,108 @@ +--- +title: Build and publish your first Space +description: Connect your AI tool, make a small static page, and share a link someone else can open. +sidebar: + label: Your first Space +--- + +Use the AI tool you already have. Connect it, make one small thing, and give someone a link that opens. + +## Connect your tool + +Sign in to the tool you want to build with, then open its setup guide. Keep your email inbox available for Spacefast sign-in. + +| Your tool | Start here | Before connecting | +| --- | --- | --- | +| ChatGPT | [Connect ChatGPT](https://my.spacefast.com/start/chatgpt) | Use ChatGPT on the web. Plugin availability and custom MCP connections depend on your account and workspace security settings. | +| Claude | [Connect Claude](/setup/claude-app/) | Sign in to Claude. On a Team or Enterprise plan, an owner must add the connector first. | +| Codex | [Connect Codex](/setup/codex/) | Use a Codex session where you can install the plugin or configure an MCP server, then sign in to Spacefast when asked. | + +Follow that guide through installation and authorization. Enable Spacefast in the conversation if your tool asks you to select it. + +### Check your connection + +Send this prompt in your AI tool: + +```text +Use Spacefast to tell me which account I am connected as and list my teams. Do not create or change anything. +``` + +Continue when the tool returns your Spacefast account and teams. Seeing Spacefast in settings alone does not prove that the connection works. If the tool cannot make the request, use [Connection blocked](#connection-blocked). + +## Make one small thing + +Choose one prompt. Replace the words in square brackets with your idea, then send it in the connected conversation. Start with one static `index.html`; you can add more after someone opens your first version. + +### Checklist + +```text +Make a one-page checklist for [goal] with add, complete, and clear-completed controls. +Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. +Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. +Keep the Space ID so later changes update this same Space and its live address. +If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +``` + +### Calculator + +```text +Make a one-page calculator for [calculation], label every input, and show the formula and result. +Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. +Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. +Keep the Space ID so later changes update this same Space and its live address. +If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +``` + +### Dashboard + +```text +Make a one-page dashboard using fictional data for [topic], with three summary figures and a useful filter. +Use one self-contained index.html with inline styles and JavaScript. Keep the first version static, with no sign-in, database, or paid services. +Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. +Keep the Space ID so later changes update this same Space and its live address. +If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +``` + +## Publish and share + +1. Open the result yourself and check that the controls work. +2. Open the Space in [your dashboard](https://my.spacefast.com). In **Access**, choose **Create share link**, then **Can view**. Review its expiry and create the link. +3. Copy that viewer link and open it in a private browser window where you are signed out, or ask another person to open it without your account. + +You have finished this step when someone else can open the page and use it. A private Space's address alone can require access; share the viewer link you tested. Keep owner and claim links to yourself. See [Sharing and access](/access). + +## Keep it and return + +Save the Space's dashboard link so you can find it again. Ask your agent to change one thing and publish to the **same Space**. Reopen the existing viewer link and check that it shows the change. + +If you published without an account, open the private claim link, sign in, and choose your team before you leave. Review whether you want the publishing agent to keep permission to update the Space. Claiming keeps the Space available and preserves its sharing settings. + +An unclaimed Space expires **33 hours and 20 minutes after its latest publish that changes files**. Keep the claim link private. [Anonymous publishing and claiming](/anonymous-and-claim) explains how to keep the result. + +## Connection blocked + +You can still publish the page through [Drop](https://my.spacefast.com/drop): + +1. Ask your AI tool to export the self-contained `index.html` file. +2. Open Drop and sign in if asked. +3. Upload the file and wait for publishing to finish. +4. Open the Space in the dashboard, then follow [Publish and share](#publish-and-share) to create and test a viewer link. + +If your workspace blocks the connection, ask your administrator about its policy or use this file upload path for your first build. + +## Stuck + +| What you see | What to do | +| --- | --- | +| Spacefast is missing or cannot identify my account | Reopen your tool's setup link above, confirm installation and connection, enable Spacefast in the conversation, then rerun the connection prompt. Check workspace policy if blocked. | +| Publish failed | Record the visible error and job or request ID, check upload or build status, then use [Troubleshooting](/troubleshooting). Do not create another Space solely to retry an uncertain publish. | +| The demo link says private or returns 403 | In the intended Space, open **Access → Create share link → Can view**. Copy that viewer link and test it without owner access. | +| I published without an account | Open the private claim link, review continued agent access, claim, then confirm the result is retained and that its intended viewer link still works. | + +## Before you leave + +- **Can someone else open your viewer link?** +- **Can you find this Space again and update the same address?** +- **If you published without an account, have you claimed it?** + +If one answer is no, ask a coach to help and agree who will follow up. diff --git a/generated/manifest.json b/generated/manifest.json index 407d2af..19ba5f6 100644 --- a/generated/manifest.json +++ b/generated/manifest.json @@ -1,5 +1,5 @@ { - "contentDigest": "6c850e3cefc08d93f1cc46bcb9a61432d1879a6c0b3f5ea2819419851a8fcf83", + "contentDigest": "c6f8cf737fa5f1dee0f2fb50370a13793948da37bd137b047fd1093f51f5af7b", "counts": { "apiOperations": 435, "changelogPackages": 24, @@ -3666,9 +3666,9 @@ "sha256": "385c453d153fb9da28dea822f96125319d7dddae5a0dfd56e624e974527288a4" }, { - "bytes": 1468, + "bytes": 1684, "path": "setup/chatgpt.md", - "sha256": "ee46377afaaecf4d51d1b1d2b842d222fc8476a37c32b56fe83a07147f64a658" + "sha256": "40ca4683f6de463b0997717a1da05032607d230f2e8b49b58a7ba64697a0f3db" }, { "bytes": 1113, diff --git a/generated/setup/chatgpt.md b/generated/setup/chatgpt.md index e3f1ff1..bae79cf 100644 --- a/generated/setup/chatgpt.md +++ b/generated/setup/chatgpt.md @@ -13,19 +13,20 @@ Add Spacefast to ChatGPT on the web so it can publish what you build. ## Other ways to connect -**Add Spacefast as a custom app.** Connect the hosted MCP server directly with Developer mode. +**Add Spacefast as a custom MCP server.** Add Spacefast as a custom MCP server in ChatGPT, then approve OAuth. ```text https://mcp.spacefast.com ``` -1. In [ChatGPT on the web](https://chatgpt.com), open Settings → Security and login and turn on Developer mode. -2. Open [chatgpt.com/plugins](https://chatgpt.com/plugins) and choose + to create an app. -3. Paste the address above and choose OAuth. -4. Connect the app, then sign in to Spacefast and approve access. -5. In a conversation, open the Plus menu, choose Developer mode, then choose Spacefast. +1. On [ChatGPT web](https://chatgpt.com), open Plugins, choose +, then Add custom MCP server. +2. Name it Spacefast and enter the server address shown above. +3. Choose OAuth, then review the risk warning. +4. Select I understand and want to continue, then choose Create as a plugin. +5. Install the resulting plugin. When asked, sign in to Spacefast and approve access. +6. In a conversation, type @ and select Spacefast. Run the connection check before publishing. -Read and write tools work on eligible accounts only, subject to your confirmation settings and workspace policies. +Use ChatGPT on the web. Adding and using custom MCP servers depends on your workspace permissions and security settings. If the option is missing or blocked, ask your workspace admin or use the published Spacefast plugin when available to your account. Prefer to hand this off? Copy setup prompt: @@ -35,4 +36,4 @@ Fetch https://spacefast.com/setup.md Give the agent one prompt that lets it choose and complete the best setup lane. -[Agent documentation](/agents) · [ChatGPT documentation](https://developers.openai.com/api/docs/guides/developer-mode) +[Agent documentation](/agents) · [ChatGPT documentation](https://developers.openai.com/api/docs/guides/custom-mcp-server) diff --git a/scripts/build-llms-index.test.mjs b/scripts/build-llms-index.test.mjs index 8a1ba90..71c5a15 100644 --- a/scripts/build-llms-index.test.mjs +++ b/scripts/build-llms-index.test.mjs @@ -1,5 +1,6 @@ import assert from "node:assert/strict"; import test from "node:test"; +import { fileURLToPath } from "node:url"; import { buildLlmsIndex, discoveryFileForUrl, routeOf } from "./build-llms-index.mjs"; import { routesFromSidebar } from "./sidebar-routes.mjs"; @@ -146,7 +147,7 @@ test("throws when the result would exceed the size ceiling", () => { test("the sidebar parser agrees with the real config", async () => { const { readSidebarRoutes } = await import("./sidebar-routes.mjs"); - const routes = await readSidebarRoutes(new URL("..", import.meta.url).pathname); + const routes = await readSidebarRoutes(fileURLToPath(new URL("..", import.meta.url))); assert.ok(routes.has("/errors")); assert.ok(routes.has("/changelog")); assert.ok(routes.size > 40); diff --git a/scripts/verify-routes.mjs b/scripts/verify-routes.mjs index 5d49e86..8a8ceb0 100644 --- a/scripts/verify-routes.mjs +++ b/scripts/verify-routes.mjs @@ -289,7 +289,8 @@ for (const [file, present, absent] of sidebarExpectations) { } // Docs previous/next skip the generated /setup pages; /setup keeps Blume's order. for (const [file, prev, next] of [ - ["troubleshooting/index.html", "/quickstart", "/spaces"], + ["workshop-start/index.html", "/quickstart", "/troubleshooting"], + ["troubleshooting/index.html", "/workshop-start", "/spaces"], ["spaces/index.html", "/troubleshooting", "/versions"], ["setup/vscode/index.html", "/setup/cursor", "/setup/github-copilot"], ]) { From d4a5e6658d2118537c70a168f44e5f12a13a6560 Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 14:27:28 -0400 Subject: [PATCH 2/6] Explain why anonymous Spaces should be saved to an account --- content/(publish)/anonymous-and-claim.mdx | 12 ++++++------ content/workshop-start.mdx | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/content/(publish)/anonymous-and-claim.mdx b/content/(publish)/anonymous-and-claim.mdx index d459418..dac09e2 100644 --- a/content/(publish)/anonymous-and-claim.mdx +++ b/content/(publish)/anonymous-and-claim.mdx @@ -36,13 +36,13 @@ In `--json` or non-interactive output the key and the claim link are masked. Pas The claim link is a fragment URL on purpose. Browsers never send a fragment to a server, so the key reaches the claim page without being logged anywhere in between. -From the dashboard, **Drop** does the same thing while signed out. The eyebrow reads **Anonymous drop · Claim it later**, and the result carries a **Claim this space** button. +From the dashboard, **Drop** does the same thing while signed out. The result explains that the Space has no account owner yet and offers **Save to my account**. Saving it removes the anonymous publishing deadline, lets you find it again and publish updates, and keeps its existing sharing settings unchanged. A Space you already published to your account does not need this step. Before claiming, you can publish updates, promote or roll back to a version ID from an earlier receipt, and create and revoke scoped viewer links. Listing version history, downloading files, and exporting app data return `space_unclaimed` until someone claims the Space. Run `sf spaces claim` in the publishing directory, sign in, then retry. ## The clock -An anonymous Space serves for **33 hours and 20 minutes** after creation or the latest publish, then stops. A publish that changes nothing creates no version and leaves the deadline where it was. +An unclaimed Space normally stops serving **33 hours and 20 minutes after its latest publish that changes files**. A publish that changes nothing creates no version and leaves the deadline where it was. The claim page shows the current deadline. Opening it near expiry can extend the deadline by up to six hours. It is recoverable after that. The key stays valid for another **7 days**, during which you can still claim the Space and bring it back. After that window the Space is gone. @@ -70,16 +70,16 @@ One more difference. An unclaimed Space accepts every file type, but only *serve ## Claim it - + -Open the `claimUrl` from your receipt, or run `sf spaces claim` in the directory you published from. +Open the `claimUrl` from your receipt, or run `sf spaces claim` in the directory you published from. The page shows the Space and its current serving deadline. -The claim page header reads **Handed off to you**. Before you claim anything you can already manage **Private links** on it, so you can share the site while you decide. +The page explains that the Space was published without an account. Saving it to your account keeps it available after the anonymous deadline and lets you find it again and publish updates. Existing sharing settings stay the same. -Signed out, the button reads **Sign in & claim**. Signed in, it reads **Claim**, or **Claim & keep access** when the agent that published the Space can stay connected. +Signed out, choose **Sign in & save this Space**. Signed in, choose **Save to my account**. If eligible, a separate unchecked option lets the publishing agent keep permission to publish updates after the Space is saved. Leaving it unchecked ends that access. The CLI equivalent starts a browser login for you if you are not signed in. diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx index 1f83e7e..9e86892 100644 --- a/content/workshop-start.mdx +++ b/content/workshop-start.mdx @@ -40,7 +40,7 @@ Make a one-page checklist for [goal] with add, complete, and clear-completed con Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. ``` ### Calculator @@ -50,7 +50,7 @@ Make a one-page calculator for [calculation], label every input, and show the fo Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. ``` ### Dashboard @@ -60,7 +60,7 @@ Make a one-page dashboard using fictional data for [topic], with three summary f Use one self-contained index.html with inline styles and JavaScript. Keep the first version static, with no sign-in, database, or paid services. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, give me the private claim link and tell me to claim it before leaving. Keep management credentials and the claim link out of the viewer link and page. +If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. ``` ## Publish and share @@ -75,9 +75,9 @@ You have finished this step when someone else can open the page and use it. A pr Save the Space's dashboard link so you can find it again. Ask your agent to change one thing and publish to the **same Space**. Reopen the existing viewer link and check that it shows the change. -If you published without an account, open the private claim link, sign in, and choose your team before you leave. Review whether you want the publishing agent to keep permission to update the Space. Claiming keeps the Space available and preserves its sharing settings. +Only a Space published without an account needs this step. It has no account owner yet, so save it to your account to keep it available after the temporary publishing window, find it again, and publish updates. Open its private claim link and sign in. If you belong to more than one team, choose where to save it. Existing sharing settings stay the same. The separate option to let the publishing agent keep updating the Space starts unchecked. -An unclaimed Space expires **33 hours and 20 minutes after its latest publish that changes files**. Keep the claim link private. [Anonymous publishing and claiming](/anonymous-and-claim) explains how to keep the result. +An unclaimed Space normally stops serving **33 hours and 20 minutes after its latest publish that changes files**. The claim page shows the current deadline; opening it near expiry can extend that deadline by up to six hours. Keep the claim link private. [Anonymous publishing and claiming](/anonymous-and-claim) explains how to keep the result. ## Connection blocked @@ -97,12 +97,12 @@ If your workspace blocks the connection, ask your administrator about its policy | Spacefast is missing or cannot identify my account | Reopen your tool's setup link above, confirm installation and connection, enable Spacefast in the conversation, then rerun the connection prompt. Check workspace policy if blocked. | | Publish failed | Record the visible error and job or request ID, check upload or build status, then use [Troubleshooting](/troubleshooting). Do not create another Space solely to retry an uncertain publish. | | The demo link says private or returns 403 | In the intended Space, open **Access → Create share link → Can view**. Copy that viewer link and test it without owner access. | -| I published without an account | Open the private claim link, review continued agent access, claim, then confirm the result is retained and that its intended viewer link still works. | +| I published without an account | Open the private claim link before the displayed deadline, save the Space to your account, then confirm it is available and that its intended viewer link still works. | ## Before you leave - **Can someone else open your viewer link?** - **Can you find this Space again and update the same address?** -- **If you published without an account, have you claimed it?** +- **If you published without an account, have you saved the Space to your account?** If one answer is no, ask a coach to help and agree who will follow up. From 5c8f1afa46ed982d026dca7727f8e006670ebc6c Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 14:38:38 -0400 Subject: [PATCH 3/6] Make starter recipes an explicit first-build path --- content/workshop-start.mdx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx index 9e86892..e6116a6 100644 --- a/content/workshop-start.mdx +++ b/content/workshop-start.mdx @@ -31,36 +31,45 @@ Continue when the tool returns your Spacefast account and teams. Seeing Spacefas ## Make one small thing -Choose one prompt. Replace the words in square brackets with your idea, then send it in the connected conversation. Start with one static `index.html`; you can add more after someone opens your first version. +Connect your AI tool first. The setup prompt connects Spacefast to your tool; a recipe prompt tells it what to make. Choose a starter recipe below, replace the words in square brackets with your idea, and send it in the same connected conversation. Answer the agent's questions, review the privately published result, and ask for changes before sharing it. -### Checklist +Start with one static `index.html`; you can add more after someone opens your first version. + +## Choose a starter recipe + +These three recipes are copyable prompts for a first Space. Each uses the account you checked above, keeps the first version private and static, then asks your agent to return the dashboard link and a viewer link you can test. Pick the smallest one that sounds useful. + +### Checklist recipe ```text Make a one-page checklist for [goal] with add, complete, and clear-completed controls. Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. +Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. +Keep management credentials and private owner links out of the viewer link and page. ``` -### Calculator +### Calculator recipe ```text Make a one-page calculator for [calculation], label every input, and show the formula and result. Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. +Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. +Keep management credentials and private owner links out of the viewer link and page. ``` -### Dashboard +### Dashboard recipe ```text Make a one-page dashboard using fictional data for [topic], with three summary figures and a useful filter. Use one self-contained index.html with inline styles and JavaScript. Keep the first version static, with no sign-in, database, or paid services. +Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. Keep the Space ID so later changes update this same Space and its live address. -If you publish without an account, explain that the Space has no account owner yet. Give me its private claim link and the current deadline from the publish receipt. Tell me that saving it to my account keeps it available after the anonymous deadline, lets me find it again and publish updates, and leaves existing sharing settings unchanged. Keep management credentials and the claim link out of the viewer link and page. +Keep management credentials and private owner links out of the viewer link and page. ``` ## Publish and share From f33c4b2c4c8f8bbee26beb4f54ad4f150ba0299f Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 15:17:41 -0400 Subject: [PATCH 4/6] Simplify the first recipe guide around one conversation --- content/workshop-start.mdx | 114 ++++++------------------------- scripts/docs-experience.test.mjs | 11 +++ 2 files changed, 32 insertions(+), 93 deletions(-) diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx index e6116a6..284b479 100644 --- a/content/workshop-start.mdx +++ b/content/workshop-start.mdx @@ -1,117 +1,45 @@ --- -title: Build and publish your first Space -description: Connect your AI tool, make a small static page, and share a link someone else can open. +title: Build and share your first Space +description: Connect an AI tool, copy a starter recipe, and share the result. sidebar: label: Your first Space --- -Use the AI tool you already have. Connect it, make one small thing, and give someone a link that opens. +Connect Spacefast to the AI tool you already use, then make and share one small page. -## Connect your tool +## Connect your AI tool -Sign in to the tool you want to build with, then open its setup guide. Keep your email inbox available for Spacefast sign-in. +Open the setup guide for your tool and follow it through authorization. Keep your email inbox available if Spacefast asks you to sign in. -| Your tool | Start here | Before connecting | +| Your tool | Setup guide | Before connecting | | --- | --- | --- | | ChatGPT | [Connect ChatGPT](https://my.spacefast.com/start/chatgpt) | Use ChatGPT on the web. Plugin availability and custom MCP connections depend on your account and workspace security settings. | | Claude | [Connect Claude](/setup/claude-app/) | Sign in to Claude. On a Team or Enterprise plan, an owner must add the connector first. | -| Codex | [Connect Codex](/setup/codex/) | Use a Codex session where you can install the plugin or configure an MCP server, then sign in to Spacefast when asked. | +| Codex | [Connect Codex](/setup/codex/) | Use a Codex session where you can install the plugin or configure an MCP server. | -Follow that guide through installation and authorization. Enable Spacefast in the conversation if your tool asks you to select it. +## Choose and copy a recipe -### Check your connection +In your access email, click **Build your first recipe**. You can also [open the recipe page](https://my.spacefast.com/first-recipe) directly. Choose a checklist, calculator, or dashboard, then copy its prompt. -Send this prompt in your AI tool: +Paste the prompt into the same conversation where you connected Spacefast. Answer any questions, then review the page and ask for changes in that conversation. The recipe starts with one static `index.html` and fictional data. -```text -Use Spacefast to tell me which account I am connected as and list my teams. Do not create or change anything. -``` +The recipe checks your connected account before publishing. If it needs you to choose a team, it asks. If it cannot reach your account, it stops and explains how to reconnect. -Continue when the tool returns your Spacefast account and teams. Seeing Spacefast in settings alone does not prove that the connection works. If the tool cannot make the request, use [Connection blocked](#connection-blocked). +## Open and share the result -## Make one small thing +When publishing finishes, the agent returns a dashboard link and a viewer link for the same Space. Open the viewer link and check the page. Test the link in a private browser window where you are signed out, or ask someone else to open it. -Connect your AI tool first. The setup prompt connects Spacefast to your tool; a recipe prompt tells it what to make. Choose a starter recipe below, replace the words in square brackets with your idea, and send it in the same connected conversation. Answer the agent's questions, review the privately published result, and ask for changes before sharing it. +If the agent does not return a viewer link, open the Space in [your dashboard](https://my.spacefast.com), choose **Access → Create share link → Can view**, and test that link while signed out. See [Sharing and access](/access) for other access options. -Start with one static `index.html`; you can add more after someone opens your first version. +To make a change, return to the same AI conversation and ask the agent to update the existing Space. Open the viewer link again to check the result. -## Choose a starter recipe +Publishing through your connected account saves the Space there; it does not require a claim step. If you choose [Drop](https://my.spacefast.com/drop) and publish without signing in, see [Publish without an account](/anonymous-and-claim) for the claim link and expiry details. -These three recipes are copyable prompts for a first Space. Each uses the account you checked above, keeps the first version private and static, then asks your agent to return the dashboard link and a viewer link you can test. Pick the smallest one that sounds useful. - -### Checklist recipe - -```text -Make a one-page checklist for [goal] with add, complete, and clear-completed controls. -Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. -Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. -Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. -Keep the Space ID so later changes update this same Space and its live address. -Keep management credentials and private owner links out of the viewer link and page. -``` - -### Calculator recipe - -```text -Make a one-page calculator for [calculation], label every input, and show the formula and result. -Use one self-contained index.html with inline styles and JavaScript. Use fictional examples and keep the first version static, with no sign-in, database, or paid services. -Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. -Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. -Keep the Space ID so later changes update this same Space and its live address. -Keep management credentials and private owner links out of the viewer link and page. -``` - -### Dashboard recipe - -```text -Make a one-page dashboard using fictional data for [topic], with three summary figures and a useful filter. -Use one self-contained index.html with inline styles and JavaScript. Keep the first version static, with no sign-in, database, or paid services. -Use my connected Spacefast account. If more than one team is available, ask which team to use. If the account is unavailable, stop and tell me what to reconnect. -Publish it privately with Spacefast. Wait for publishing to finish, then return the Space's dashboard link and a viewer link that allows viewing without my account. Do not make the Space public. -Keep the Space ID so later changes update this same Space and its live address. -Keep management credentials and private owner links out of the viewer link and page. -``` - -## Publish and share - -1. Open the result yourself and check that the controls work. -2. Open the Space in [your dashboard](https://my.spacefast.com). In **Access**, choose **Create share link**, then **Can view**. Review its expiry and create the link. -3. Copy that viewer link and open it in a private browser window where you are signed out, or ask another person to open it without your account. - -You have finished this step when someone else can open the page and use it. A private Space's address alone can require access; share the viewer link you tested. Keep owner and claim links to yourself. See [Sharing and access](/access). - -## Keep it and return - -Save the Space's dashboard link so you can find it again. Ask your agent to change one thing and publish to the **same Space**. Reopen the existing viewer link and check that it shows the change. - -Only a Space published without an account needs this step. It has no account owner yet, so save it to your account to keep it available after the temporary publishing window, find it again, and publish updates. Open its private claim link and sign in. If you belong to more than one team, choose where to save it. Existing sharing settings stay the same. The separate option to let the publishing agent keep updating the Space starts unchecked. - -An unclaimed Space normally stops serving **33 hours and 20 minutes after its latest publish that changes files**. The claim page shows the current deadline; opening it near expiry can extend that deadline by up to six hours. Keep the claim link private. [Anonymous publishing and claiming](/anonymous-and-claim) explains how to keep the result. - -## Connection blocked - -You can still publish the page through [Drop](https://my.spacefast.com/drop): - -1. Ask your AI tool to export the self-contained `index.html` file. -2. Open Drop and sign in if asked. -3. Upload the file and wait for publishing to finish. -4. Open the Space in the dashboard, then follow [Publish and share](#publish-and-share) to create and test a viewer link. - -If your workspace blocks the connection, ask your administrator about its policy or use this file upload path for your first build. - -## Stuck +## If you get stuck | What you see | What to do | | --- | --- | -| Spacefast is missing or cannot identify my account | Reopen your tool's setup link above, confirm installation and connection, enable Spacefast in the conversation, then rerun the connection prompt. Check workspace policy if blocked. | -| Publish failed | Record the visible error and job or request ID, check upload or build status, then use [Troubleshooting](/troubleshooting). Do not create another Space solely to retry an uncertain publish. | -| The demo link says private or returns 403 | In the intended Space, open **Access → Create share link → Can view**. Copy that viewer link and test it without owner access. | -| I published without an account | Open the private claim link before the displayed deadline, save the Space to your account, then confirm it is available and that its intended viewer link still works. | - -## Before you leave - -- **Can someone else open your viewer link?** -- **Can you find this Space again and update the same address?** -- **If you published without an account, have you saved the Space to your account?** - -If one answer is no, ask a coach to help and agree who will follow up. +| Spacefast is missing or cannot reach your account | Reopen the setup guide, confirm installation and authorization, and enable Spacefast in the conversation if your tool asks. Check workspace policy if the connection is blocked. | +| Publishing failed | Record the visible error and job or request ID, check the publish status, then use [Troubleshooting](/troubleshooting). Do not create another Space solely to retry an uncertain publish. | +| The viewer link says private or returns 403 | In the intended Space, create a **Can view** share link under **Access**. Test that link while signed out. | +| You published through Drop without signing in | Keep the private claim link and follow [Publish without an account](/anonymous-and-claim) before its displayed deadline. | diff --git a/scripts/docs-experience.test.mjs b/scripts/docs-experience.test.mjs index 1d14f69..b699ecc 100644 --- a/scripts/docs-experience.test.mjs +++ b/scripts/docs-experience.test.mjs @@ -56,6 +56,17 @@ test("Quickstart gives a no-install route before the CLI steps", async () => { assert.match(quickstart.slice(drop, install), /\[Drop\]\(\/docs\/publish#publish\)/u); }); +test("first Space guide points to the canonical recipe flow and keeps recovery optional", async () => { + const guide = await builtPage("/workshop-start"); + const recipe = guide.indexOf("[open the recipe page](https://my.spacefast.com/first-recipe)"); + const sameConversation = guide.indexOf("same conversation where you connected Spacefast"); + const viewer = guide.indexOf("the agent returns a dashboard link and a viewer link"); + const recovery = guide.indexOf("If the agent does not return a viewer link"); + assert.ok(recipe >= 0 && sameConversation > recipe && viewer > sameConversation); + assert.ok(recovery > viewer, "dashboard share-link instructions are a recovery path"); + assert.match(guide, /Publishing through your connected account saves the Space there; it does not require a claim step\./u); +}); + test("unfamiliar homepage terms have a linked glossary with definitions", async () => { const home = await builtPage("/"); const glossary = await builtPage("/glossary"); From ce9f5bbeff13f8c743c3f768d225f654a3283e75 Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 15:31:52 -0400 Subject: [PATCH 5/6] Use current app setup in the workshop flow --- content/workshop-start.mdx | 4 ++-- generated/manifest.json | 6 +++--- generated/setup/chatgpt.md | 17 ++++++++--------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx index 284b479..5d5e60c 100644 --- a/content/workshop-start.mdx +++ b/content/workshop-start.mdx @@ -14,8 +14,8 @@ Open the setup guide for your tool and follow it through authorization. Keep you | Your tool | Setup guide | Before connecting | | --- | --- | --- | | ChatGPT | [Connect ChatGPT](https://my.spacefast.com/start/chatgpt) | Use ChatGPT on the web. Plugin availability and custom MCP connections depend on your account and workspace security settings. | -| Claude | [Connect Claude](/setup/claude-app/) | Sign in to Claude. On a Team or Enterprise plan, an owner must add the connector first. | -| Codex | [Connect Codex](/setup/codex/) | Use a Codex session where you can install the plugin or configure an MCP server. | +| Claude | [Connect Claude](https://my.spacefast.com/start/claude-app) | Sign in to Claude. On a Team or Enterprise plan, an owner must add the connector first. | +| Codex | [Connect Codex](https://my.spacefast.com/start/codex) | Use a Codex session where you can install the plugin or configure an MCP server. | ## Choose and copy a recipe diff --git a/generated/manifest.json b/generated/manifest.json index 19ba5f6..407d2af 100644 --- a/generated/manifest.json +++ b/generated/manifest.json @@ -1,5 +1,5 @@ { - "contentDigest": "c6f8cf737fa5f1dee0f2fb50370a13793948da37bd137b047fd1093f51f5af7b", + "contentDigest": "6c850e3cefc08d93f1cc46bcb9a61432d1879a6c0b3f5ea2819419851a8fcf83", "counts": { "apiOperations": 435, "changelogPackages": 24, @@ -3666,9 +3666,9 @@ "sha256": "385c453d153fb9da28dea822f96125319d7dddae5a0dfd56e624e974527288a4" }, { - "bytes": 1684, + "bytes": 1468, "path": "setup/chatgpt.md", - "sha256": "40ca4683f6de463b0997717a1da05032607d230f2e8b49b58a7ba64697a0f3db" + "sha256": "ee46377afaaecf4d51d1b1d2b842d222fc8476a37c32b56fe83a07147f64a658" }, { "bytes": 1113, diff --git a/generated/setup/chatgpt.md b/generated/setup/chatgpt.md index bae79cf..e3f1ff1 100644 --- a/generated/setup/chatgpt.md +++ b/generated/setup/chatgpt.md @@ -13,20 +13,19 @@ Add Spacefast to ChatGPT on the web so it can publish what you build. ## Other ways to connect -**Add Spacefast as a custom MCP server.** Add Spacefast as a custom MCP server in ChatGPT, then approve OAuth. +**Add Spacefast as a custom app.** Connect the hosted MCP server directly with Developer mode. ```text https://mcp.spacefast.com ``` -1. On [ChatGPT web](https://chatgpt.com), open Plugins, choose +, then Add custom MCP server. -2. Name it Spacefast and enter the server address shown above. -3. Choose OAuth, then review the risk warning. -4. Select I understand and want to continue, then choose Create as a plugin. -5. Install the resulting plugin. When asked, sign in to Spacefast and approve access. -6. In a conversation, type @ and select Spacefast. Run the connection check before publishing. +1. In [ChatGPT on the web](https://chatgpt.com), open Settings → Security and login and turn on Developer mode. +2. Open [chatgpt.com/plugins](https://chatgpt.com/plugins) and choose + to create an app. +3. Paste the address above and choose OAuth. +4. Connect the app, then sign in to Spacefast and approve access. +5. In a conversation, open the Plus menu, choose Developer mode, then choose Spacefast. -Use ChatGPT on the web. Adding and using custom MCP servers depends on your workspace permissions and security settings. If the option is missing or blocked, ask your workspace admin or use the published Spacefast plugin when available to your account. +Read and write tools work on eligible accounts only, subject to your confirmation settings and workspace policies. Prefer to hand this off? Copy setup prompt: @@ -36,4 +35,4 @@ Fetch https://spacefast.com/setup.md Give the agent one prompt that lets it choose and complete the best setup lane. -[Agent documentation](/agents) · [ChatGPT documentation](https://developers.openai.com/api/docs/guides/custom-mcp-server) +[Agent documentation](/agents) · [ChatGPT documentation](https://developers.openai.com/api/docs/guides/developer-mode) From 0b1c549765b3bd02c3282735346835d38c5757e9 Mon Sep 17 00:00:00 2001 From: Alexander Aidun Date: Mon, 19 Oct 2026 15:56:54 -0400 Subject: [PATCH 6/6] =?UTF-8?q?Lead=20first=20Space=20guide=20with=20the?= =?UTF-8?q?=20reader=E2=80=99s=20own=20idea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/workshop-start.mdx | 14 ++++++++------ scripts/docs-experience.test.mjs | 10 ++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/content/workshop-start.mdx b/content/workshop-start.mdx index 5d5e60c..73c50c1 100644 --- a/content/workshop-start.mdx +++ b/content/workshop-start.mdx @@ -1,6 +1,6 @@ --- title: Build and share your first Space -description: Connect an AI tool, copy a starter recipe, and share the result. +description: Connect an AI tool, describe your idea, and build and share a Space. sidebar: label: Your first Space --- @@ -17,17 +17,19 @@ Open the setup guide for your tool and follow it through authorization. Keep you | Claude | [Connect Claude](https://my.spacefast.com/start/claude-app) | Sign in to Claude. On a Team or Enterprise plan, an owner must add the connector first. | | Codex | [Connect Codex](https://my.spacefast.com/start/codex) | Use a Codex session where you can install the plugin or configure an MCP server. | -## Choose and copy a recipe +## Start with your idea -In your access email, click **Build your first recipe**. You can also [open the recipe page](https://my.spacefast.com/first-recipe) directly. Choose a checklist, calculator, or dashboard, then copy its prompt. +In the same conversation where you connected Spacefast, describe what you want to make and ask the AI tool to build and publish it with Spacefast. For example: “Make a simple page for tracking my garden, then publish it privately with Spacefast and give me a link to view it.” -Paste the prompt into the same conversation where you connected Spacefast. Answer any questions, then review the page and ask for changes in that conversation. The recipe starts with one static `index.html` and fictional data. +If you are unsure where to start, [browse starter recipes](https://my.spacefast.com/first-recipe) for ideas and prompts you can copy into that conversation. -The recipe checks your connected account before publishing. If it needs you to choose a team, it asks. If it cannot reach your account, it stops and explains how to reconnect. +Review the page the AI tool creates, then ask for changes in the same conversation. Start with fictional or non-sensitive data while you explore. + +If your AI tool asks which account or team to use, choose where you want to keep the Space. If the connection fails, return to your tool’s setup guide and reconnect. ## Open and share the result -When publishing finishes, the agent returns a dashboard link and a viewer link for the same Space. Open the viewer link and check the page. Test the link in a private browser window where you are signed out, or ask someone else to open it. +When publishing finishes, open the link your AI tool returns and check the page. For a private Space, use a viewer link when sharing with someone who does not have account access. Test the link in a private browser window where you are signed out, or ask someone else to open it. If the agent does not return a viewer link, open the Space in [your dashboard](https://my.spacefast.com), choose **Access → Create share link → Can view**, and test that link while signed out. See [Sharing and access](/access) for other access options. diff --git a/scripts/docs-experience.test.mjs b/scripts/docs-experience.test.mjs index b699ecc..5f9ff69 100644 --- a/scripts/docs-experience.test.mjs +++ b/scripts/docs-experience.test.mjs @@ -56,13 +56,15 @@ test("Quickstart gives a no-install route before the CLI steps", async () => { assert.match(quickstart.slice(drop, install), /\[Drop\]\(\/docs\/publish#publish\)/u); }); -test("first Space guide points to the canonical recipe flow and keeps recovery optional", async () => { +test("first Space guide starts with the reader's idea and offers recipes as optional help", async () => { const guide = await builtPage("/workshop-start"); - const recipe = guide.indexOf("[open the recipe page](https://my.spacefast.com/first-recipe)"); const sameConversation = guide.indexOf("same conversation where you connected Spacefast"); - const viewer = guide.indexOf("the agent returns a dashboard link and a viewer link"); + const directPrompt = guide.indexOf("describe what you want to make and ask the AI tool to build and publish it with Spacefast"); + const recipe = guide.indexOf("If you are unsure where to start, [browse starter recipes](https://my.spacefast.com/first-recipe)"); + const viewer = guide.indexOf("For a private Space, use a viewer link when sharing"); const recovery = guide.indexOf("If the agent does not return a viewer link"); - assert.ok(recipe >= 0 && sameConversation > recipe && viewer > sameConversation); + assert.ok(sameConversation >= 0 && directPrompt > sameConversation && recipe > directPrompt); + assert.ok(viewer > recipe, "sharing follows the build rather than blocking it"); assert.ok(recovery > viewer, "dashboard share-link instructions are a recovery path"); assert.match(guide, /Publishing through your connected account saves the Space there; it does not require a claim step\./u); });