[{"slug":"what-is-starjay","title":"What is Starjay","summary":"Starjay is a website builder where an AI builds your site, you refine it visually, and the result is a standard Astro and Tailwind CSS project.","section":"Get started","text":"How it works You describe the site you want. Type a few sentences, attach a screenshot, or give the AI the address of a site you like. The AI builds it. It writes the pages, sections, colors, and fonts. You watch the canvas update as it works. You review and decide. Every request becomes a version. Step between versions, then Save to keep the changes or Reject to undo the whole session. You refine it by hand. Double-click text to edit it, replace images, adjust styles in the Style panel, and add elements and sections. You publish. One click puts the site online at a free yourname.starjay.app address. You can connect your own domain at any time. What you can build A Starjay site can have: Pages, nested up to five levels deep, each with its own SEO settings. Shared components, such as a header and footer, that appear on every page. Collections of structured content (a CMS) for blog posts, products, team members, and similar repeating content. An image library, with images resized and served in modern formats automatically. Forms that save submissions, email you, or send them to a webhook. Redirects, a sitemap, and search engine settings. Your own domain, page view analytics, and checkpoints you can restore. Your site is real code Every Starjay site is a standard Astro project styled with Tailwind CSS. Pages are static by default, so they load fast. Your colors and fonts are stored once as design tokens and used everywhere. Because the code is standard, you can also work on your site from an AI app on your computer, such as Claude Code or Codex. That AI reads and edits the same files the editor does, and you still review its changes in the editor. There's no button to download your site's code. To get a copy of your data, contact support. Who it's for Business owners and creators who want a professional site without writing code. You describe; the AI builds; you adjust what you see. Designers who want precise visual control over spacing, type, and color without handing off to a developer. Developers who want a standard Astro and Tailwind codebase and want to use their own AI tools on it. AI agents that build sites on someone's behalf through a connection to Starjay. Starjay is in beta. Features are still changing. See Starjay is in beta for what that means for you. Next steps Quickstart: build and publish your first site Choose a path Core ideas"},{"slug":"limits","title":"Limits","summary":"Every limit you can run into in Starjay, in one table, with a link to the page that explains each one.","section":"Help","text":"All limits Area Limit Value Learn more Plans Active sites per workspace Free: 3. Pro: unlimited. Archived sites don't count. Create a site, Plans Plans Restoring an archived site Pro only. Rename, duplicate, archive, restore, delete a site Plans Sites that stay active when Pro ends 3. The rest are archived. Upgrade, switch to yearly, downgrade Plans Team members Pro only. Invite members Plans Invitation links Expire after 7 days. Invite members Credits AI credits per month Free: 1,000. Pro: 10,000. Unused credits don't carry over. How credits work Credits Credit packs 10,000 credits a month each, up to 10 packs. Pro only. Buy more credits Credits Daily AI limit Each workspace has a daily AI limit. When you reach it, the AI panel says Daily AI limit reached for your workspace. and when it resets. Credits for AI Traffic Page views per month Free: 1,000. Pro: 5,000. Shared across all sites in the workspace. Views above this aren't billed or limited during beta. Page view allowance AI AI models Free: GPT-6 Luna only. Pro: Claude Sonnet 5.5, GPT-6.1 Sol, and GPT-6 Luna. Choose an AI model AI Screenshots per message Up to 3. PNG, JPEG, or WebP. 5 MB each, 15 MB together. Show the AI what you mean: screenshots AI Steps per request A request that needs more steps than fit in one turn stops early; what's done is kept, and you can continue. Chat with the AI AI AI memory Each chat can hold a limited amount. When it's full, clear the AI memory to continue; your work is kept. AI memory AI Generated images 20 per hour and 60 per day, per site. Generate images Images Image formats JPEG, PNG, WebP, GIF, SVG. AVIF isn't accepted. The image library Images Image file size 20 MB per file, for uploads and imports from a web address. The image library Pages Page nesting Up to 5 levels in a page address, such as /a/b/c/d/e. Create, move and rename pages Pages Page address names Lowercase letters, numbers, and single hyphens. Up to 64 characters for each part of the address. Create, move and rename pages Pages Reserved page names index can't be used anywhere in an address. 404, 500, api, and preview can't be the first part. No part can start with _. Create, move and rename pages Sites Site name Up to 60 characters. Create a site Sites Workspace name 1 to 80 characters. Workspaces Domains Starjay address name 1 to 60 characters: lowercase letters, numbers, and hyphens, not starting or ending with a hyphen. Some names are reserved, such as www, app, admin, api, blog, docs, help, and support. Your free Starjay address Domains Custom domains per site One domain: its www address, plus the bare domain where your DNS provider allows it. Connect a custom domain Redirects Redirect rules per site 500. Checked when you publish. Redirects CMS Item size 256 KB per item. The item editor shows the size once an item passes about 80% of the limit. Edit items CMS Changing a saved field A field's name and type can't be changed after it's saved. Field types CMS Items per request in site code Up to 500. Reading CMS content in code Forms Forms per site 100. Checked when you publish. Add a form Forms Fields per form 100. Checked when you publish. Form field types Forms Choices per field 100 for a select or radio field. Checked when you publish. Form field types Forms Destinations per form 20. Checked when you publish. Where submissions go Forms Webhook addresses Must start with https://. Where submissions go Forms Uploaded file types Images (JPEG, PNG, WebP, GIF) or PDF documents, depending on the field. File uploads Forms Uploaded file size 10 MB per file by default. A field can allow up to 25 MB. File uploads Forms Files per upload field 1 by default. A field can allow up to 10. File uploads Forms Files per submission 20. File uploads Forms Upload storage per site 20 GB of uploaded files. File uploads Forms Uploaded file names Shortened to 128 characters. File uploads Forms Verified notification emails 5 per site. Verify notification emails Forms Verification codes 6 digits. A code expires after 15 minutes. Verify notification emails Editing Undo Up to 50 steps. Undo history doesn't last forever; use checkpoints for anything you need to keep. Undo and redo Checkpoints Number of checkpoints No limit. Checkpoints are kept permanently. Checkpoints Limits that aren't listed Starjay also has limits that protect the service from abuse, such as how often one visitor can submit a form. They aren't published. If you reach one, you see a message asking you to try again later. Related Plans FAQ Troubleshooting"},{"slug":"publish-your-site","title":"Publish your site","summary":"Put your site, or your latest changes, on the internet from the Publish panel.","section":"Publish and domains","text":"Your edits stay in the editor until you publish. Publishing builds your site and puts it live at your free Starjay address or your own domain. Before you publish Save or reject any open AI session. You can't publish while the AI is working or while a session has changes you haven't saved or rejected. See AI sessions: versions, Save and Reject. Check which pages are ready. Only pages marked ready go live. Draft pages are never published. See Draft, ready and live pages. Publish Open the Publish panel Click Publish in the editor's top bar. Review what will change If the site has been published before, a summary shows Changes ready to publish or No unpublished changes. Click View details to see the changed pages, forms and tokens. Click Publish The button says Publish the first time and Republish when the site is already live. Wait for it to finish The status line shows each stage of the publish as it runs. When it's done, the status changes to Live and a message offers Open to view the live site. After publishing, the panel shows your live addresses next to the status (click one to open it) and Last published with the time. Publish status Status Meaning Not published The site has never been published. Queued... The publish is waiting for its turn. Building site... and the stages after it The publish is running. The stages show its progress. Published The publish just finished. Live The site is online. Deployed (offline) The site was published before but is unpublished now. Failed The publish didn't finish. The panel shows what went wrong. What a publish includes A publish sends your whole site as it is in the editor: Every page marked ready, with its components, text and images. Your colors, fonts and styles. Forms and their settings. SEO settings, redirects and Google Analytics. Changes to which address serves your site, and a changed Starjay address. It also removes pages marked for deletion. The details list marks these in red: they're removed for good once the publish finishes. See Delete and restore a page. CMS items are separate: you publish them from the CMS, and they go live within seconds without a site publish. See Publish and unpublish items. Editing pauses while publishing While a publish runs, you can't change anything on the site. The canvas, panels and CMS are locked (the CMS shows Publishing — editing is paused). This makes sure the live site matches exactly what you saw when you clicked Publish. Editing unlocks when the publish finishes. When you can't publish What you see What to do Publishing locked — AI is generating Wait for the AI to finish. Publishing locked — accept or reject AI changes first. Click Review AI changes, then Save or Reject the session. CMS items are still publishing. Publish the site when they finish. Wait a moment, then publish. The Publish button is disabled with Queued... or a stage name A publish is already running. Wait for it to finish. If a publish fails, your live site stays exactly as it was. Nothing you edited is lost. Read the error in the panel, fix the problem (or ask the AI to), and publish again. Other ways to publish From your phone: see The phone review screen. From your own AI app: a connected AI app can publish, but it must ask you first. See Permissions and safety. The AI chat inside Starjay can't publish your site. It can mark pages as ready or draft for the next publish. Related Your free Starjay address Connect a custom domain Unpublish Checkpoints"},{"slug":"chat-with-the-ai","title":"Chat with the AI","summary":"How to send a request to the AI, follow what it does, queue a follow-up, stop it, and continue when it runs out of steps.","section":"Build with AI","text":"The AI panel is where you ask Starjay's AI to build and change your site. It works in the Canvas view. Open the AI panel Click AI (the chat icon) in the top-right corner of the editor. Click it again, or press Esc, to close the panel. Select something (optional) Click an element or section on the canvas if your request is about it. The AI receives your selection along with your message, and the chat labels your message with what was selected. Describe what you want Type in the box that says Describe changes.... Press Enter to send. Press Shift+Enter for a new line. Watch it work The canvas updates as the AI changes your site. You can keep reading the chat while it works. Review and keep or discard When you're happy, click Save in the session bar above the prompt box. To undo everything since your first request, click Reject. See AI sessions: versions, Save and Reject. What you see while it works A status line that says what the AI is doing right now, such as Evaluating request…, Building context…, Thinking…, Fetching reference site…, Responding… or Working around an error…. Step rows for each thing it does, such as Updated layout, Updated the brand guide or Visually inspected the page. When the AI takes a screenshot of your page to check its work, a thumbnail appears. Click any thumbnail to see it full size. A plan checklist for bigger builds. The AI lists what it will build (Planning…), then ticks items off as it builds them (Building…). Color Palette Changes and Typography Changes cards when it adds or changes colors or fonts. A summary when it finishes: a collapsed Changes list, how long the request took, and how many credits it used. Each new message you send is numbered (Request 2, Request 3, and so on) so you can find your way around a long chat. While the AI works, the rest of the editor is locked so your edits and the AI's don't collide. Panels show Editing locked — AI is generating. You can reload the page or close the tab while the AI works. It keeps going, and the chat reconnects when you come back. Ask from the canvas Double-click text or an image on the canvas. In the box that opens, type in Ask AI to change this… and press Enter. Your request goes to the AI panel with the element already selected. Queue a follow-up You don't have to wait for the AI to finish before typing your next message. While the AI works, type in the box. It now says Queue a follow-up.... Press Enter. Your message appears above the prompt box, marked Queued. It's sent automatically when the current request finishes. To cancel a queued message, click the × next to it. Only one message can wait at a time. Stop the AI Make sure the prompt box is empty. While the AI works and the box is empty, the send button turns into a red square. Click the red square (Stop generating). The message shows Cancelling…, then Cancelled. The step the AI is in the middle of finishes first, so stopping can take a moment. Changes it already made stay on your site as part of the session. Keep them with Save or undo them with Reject. Continue when it runs out of steps Each request can take up to 30 steps (reading files, editing, checking its work). A big request can need more. When that happens you see: That request needed more steps than fit in one turn (30 steps). Everything finished so far is saved — continue to pick up where it stopped, or send a smaller request. Click Continue — pick up where it stopped. The AI checks what it already did and finishes the rest. This is a new request and uses credits like any other. If a request is interrupted If you see Interrupted — partial changes kept. Continue with another message, or use Reject to undo., the request ended early for a reason other than you stopping it. Send another message to carry on, or click Reject to undo the whole session. If the AI provider is busy, you may see a message asking you to retry in a moment. Your work so far is kept. For other messages, see Messages you might see. Small, specific requests work best. See Write prompts that work. Related AI sessions: versions, Save and Reject Show the AI what you mean: screenshots Choose an AI model AI memory Credits for AI"},{"slug":"build-a-business-site","title":"Build a business site","summary":"Build and publish a small business site with a homepage, an About page and a Contact page, from your first prompt to a live address.","section":"Worked examples","text":"In this tutorial you build a site for a fictional bakery called Rise & Crumb. You'll describe the site to the AI, review what it builds, save it, adjust your colors and fonts, fix some wording by hand, and publish. It takes about 30 minutes. The AI uses credits from your workspace for each request. Before you start You need a Starjay account. If you're on the Free plan, you need a free slot (Free allows 3 active sites). Have two or three sentences ready about the business: what it sells, who it's for and how it should feel. Create the site Create a blank site On the dashboard, click New site. Under Start from, choose Blank. In Name, type Rise & Crumb, then click Create site. The new site appears in your list of sites. Open the editor Click the site to open it in the editor. You may see Starting your site for a few moments while the editor gets the site ready. Because the site is blank, the canvas shows a large Describe your site box. Describe the homepage Write your first prompt Click in the Describe your site box and paste this prompt, or write your own: A warm, modern homepage for Rise & Crumb, a neighborhood bakery in Portland that bakes sourdough daily and takes custom cake orders. Sections: a hero with the headline \"Baked this morning\", a short intro, three featured products (sourdough, pastries, celebration cakes), opening hours, customer testimonials, and a call to action to order a cake. Colors: warm cream background, deep brown text, a terracotta accent. Fonts: a friendly serif for headings, a clean sans-serif for body text. The model menu next to the box shows which AI model will do the work. Leave it as it is unless you have a reason to change it. Send it Click the arrow button (Generate page), or press Cmd+Enter (Mac) or Ctrl+Enter (Windows). The AI panel opens on the right. You see what the AI is doing as it works: a plan checklist, the steps it takes, and a short summary when it finishes. While it works, editing on the canvas is locked. Look at the result When the AI finishes, the canvas shows the new homepage. At the bottom of the AI panel, the AI Session bar shows 1 / 1: this is your first version, and the buttons Save and Reject appear. Don't save yet. You'll add more pages first. Add the About and Contact pages You can keep talking to the AI in the same session. Each request becomes another version. Ask for an About page In the AI panel's message box (Describe changes...), type: Add an About page that tells the story of the bakery: founded in 2015 by two sisters, everything baked on site, flour from a local mill. Include a photo placeholder area and a short team section. Add it to the header navigation. Press Enter to send. Ask for a Contact page When the AI finishes, send: Add a Contact page with the address, phone number, opening hours and a map placeholder. Add it to the header navigation too. Check the new pages Open the Pages panel from the left icon rail. You should see Home first, then the About and Contact pages. Click a page to open it on the canvas. You can also use the page switcher in the middle of the top bar. Work in small steps Ask for one change at a time. Small requests are easier to review, and if one goes wrong you can step back to the version before it. Review the versions and save Step through the versions In the AI Session bar, use the ‹ and › buttons to move between versions. The canvas shows the site as it was at that version. Click the version number to open a list that includes Original (the site before this session) and v1, v2, v3. Go back to the version you want to keep Click the newest version (v3) if you're happy with everything. If a later request made things worse, you can go back to an earlier version and keep asking from there. Save Click Save. Your changes are kept and the session ends. If you'd rather throw away everything from this session, click Reject instead. Reject puts the whole site back the way it was before the session started. There's no way to keep some requests from a session and drop others. Save keeps everything in the session; Reject removes everything. Step back to an earlier version first if you want to drop the last few requests. Adjust your colors and fonts Open the Tokens panel Click Tokens in the left icon rail, then the Colors tab. Under Color Scales, you see the color scales the AI created for your brand, each a row of shades from light to dark. Change a brand color Click the ⋯ button next to the accent scale and choose Regenerate scale. Pick a new base color, then confirm with Regenerate. Every part of the site that uses that color updates, on every page. Change a font Click the Typography tab. Click the heading font slot to open the font picker, filter by a category such as Serif, and pick a font. The canvas updates with the new font. You can also ask the AI: Make the accent color a little darker and more orange. Fix wording on the canvas Edit a heading Make sure Edit mode is on in the top bar. Double-click the hero headline on the canvas, change the text, then press Enter or click somewhere else to keep it. Press Esc to cancel. Check the shared header Your header and footer appear on every page. If you edit text inside them, the change applies to every page that uses them. The editor tells you when an edit affects more than one page. Publish Open the Publish panel Click Publish at the top right. The Publish panel opens. Publish the site Click the Publish button in the panel. The status changes through Building site..., Deploying... and Finishing routing.... Editing is paused while this happens. Visit your live site When the status shows Live, your site's address appears next to it, for example rise-and-crumb.starjay.app. Click it to open the live site in a new tab. If something goes wrong Problem What to do The Publish button is greyed out and says Publishing locked — accept or reject AI changes first. Open the AI panel and click Save or Reject in the AI Session bar, then publish. The AI changed something you didn't ask for. Step back with ‹ to the version before it, then ask again more precisely. A request ran out of steps before it finished. Click Continue in the AI panel to let it carry on. Your edit on the canvas changed every page. You edited the shared header or footer. Undo with Cmd+Z (Mac) or Ctrl+Z (Windows), then ask the AI to change only that page. The colors or fonts on the canvas didn't change. Click the Reload Site button in the top bar. Next steps Put your site on your own domain Collect inquiries with a form AI sessions: versions, Save and Reject Colors Write prompts that work"},{"slug":"site-settings","title":"Site settings","summary":"What's in the Settings view: navigation, page transitions and page defaults, Google Analytics, and checkpoints.","section":"Site settings","text":"To open site settings, open the view menu at the top-left of the editor (it shows Canvas while you're on the canvas) and choose Settings. The Settings view replaces the canvas. Choose Canvas from the same menu to go back. The left side lists three sections under Site Settings: Section Description General Navigation, page transitions, and site-wide defaults. Analytics Measure traffic on your published site with Google Analytics. Checkpoints Save and restore snapshots of your entire site. SEO settings aren't here; they have their own SEO view in the same menu. See Site SEO defaults. General Setting What it does Client-Side Router When on (the default), Pages swap without full reload. When off, visitors get Standard browser navigation. See Page transitions and navigation. Page Transition None, Fade or Slide. Only shown while Client-Side Router is on. Page Defaults Background, Text color and Font for every page, used when a component doesn't override them. See Page defaults. The note at the bottom reads Changes take effect on the next page navigation. That applies to the canvas. Visitors see the change after you publish. Analytics Connect Google Analytics 4 by entering your Measurement ID (it looks like G-XXXXXXXXXX). Tracking loads only on your published site, never in the editor. See Google Analytics. Checkpoints Save a checkpoint of your whole site, see the list of saved checkpoints, and restore one. Checkpoints are also saved automatically, for example before AI changes. See Checkpoints. Saving There's no Save button. Each setting saves as soon as you change it. The Measurement ID saves when you leave the field and shows Saving… then Saved. You can undo General changes with Cmd/Ctrl+Z. The AI can also change navigation and transitions when you ask it to. Related Page transitions and navigation Page defaults Publish your site"},{"slug":"pages-and-the-pages-panel","title":"Pages and the Pages panel","summary":"What the Pages panel shows: the page tree, how pages nest by address, and the icons and labels that show each page's publish state.","section":"Pages","text":"Click Pages in the left icon rail and open the Pages tab. The panel lists every page on your site as a tree. Click a page to open it on the canvas. Right-click a page for its actions. The tree Home is always first. It's the page at your site's main address (/). Other pages show their address, for example /about. Pages nest by address. A page at /services/design sits under /services. If a page has subpages but no page of its own exists at the parent address, the parent shows as a dimmed folder: No page at this URL yet — pages below it still work. Click its + button to create the missing page. Pages that show CMS items (such as a blog post page) appear with the collection's name and a collection icon, plus the number of items. Click the arrow next to a page to show or hide its subpages. Pages at the same level are listed alphabetically until you drag them into your own order. See Create, move and rename pages. Use the Search... box at the top to filter the list. Use the + button (Add page) next to it to create a page. Icons and labels You see Meaning Green page icon The page is live on your published site. Grey page icon Not yet published. Small yellow diamond on a green icon Published — Changed since the last publish. Publish again to put the changes live. Draft label The page won't go live when you publish. Deleted label The page is marked for deletion and will be removed on the next publish. Hover over a page's icon to see its status in words. A green icon with no diamond means Published — No changes since the last publish. Page actions Right-click a page to see: Action What it does Add subpage Create a page under this one. Change location Change the last part of the page's address. Mark for Publish / Unmark for Publish / Mark for Depublish Change whether the page goes live on the next publish. See Draft, ready and live pages. Mark for Delete Remove the page on the next publish. See Delete and restore a page. Undelete Shown instead of the others on a page marked for deletion. Home has no Change location or Mark for Delete. Your 404 page has neither of them either. Pages that show CMS items have no publish action. Related Create, move and rename pages Draft, ready and live pages Publish your site"},{"slug":"when-to-use-a-collection","title":"When to use a collection","summary":"Explains when content belongs in a collection and when it belongs on a page.","section":"Content (CMS)","text":"A collection is a set of items that all have the same fields. Blog posts, products, team members, events and job openings are typical collections. Each item is one post, one product or one person. Text that belongs to one page, such as your homepage headline or the paragraph on your About page, stays on the page. You edit it on the canvas. Use a collection when You have many entries of the same kind, and you expect to add more. Each entry has the same pieces of information (for example, a title, a date, an image and a body). You want a page that lists the entries, and often a page for each entry with its own address, like /blog/my-first-post. Someone should be able to add or update entries without touching the page design. Keep it on the page when The text appears once, in one place. It's part of the design, like a section heading or a button label. There are only a handful of entries that rarely change, such as three feature cards on the homepage. Content Where it goes Blog posts, news, case studies Collection Products, services, menu items Collection Team members, testimonials, FAQs you add to often Collection Homepage hero text Page Contact details in the footer Page A one-off \"About us\" story Page What a collection gives you A form for each item. The CMS view shows each item as a form with the right control for each field: a date picker for dates, an image picker for images, and so on. Publishing that's separate from your site. You publish an item on its own. It goes live within a few seconds, without republishing the whole site. See Publish and unpublish items. One design for every item. The listing page and the item page are built once. Every item uses them. Help from the AI. The AI can create collections, add fields and write items for you. Items the AI writes are drafts until you publish them. Collections and pages are published separately. Publishing your site publishes pages. Publishing an item publishes that item. See CMS pages on the live site. Related Create a collection Field types Start a blog"},{"slug":"using-your-own-ai","title":"Using your own AI","summary":"How working on your Starjay sites from Claude, Claude Code, Codex or another AI app fits alongside the editor.","section":"Use your own AI","text":"You can work on your Starjay sites from an AI app you already use, such as Claude Code, the Claude app, Claude.ai or Codex. The app connects to Starjay over MCP (Model Context Protocol), a standard way for AI apps to use outside tools. Once it's connected, your AI can read your site's files, change pages and components, manage colors and fonts, add images, work with the CMS, set up forms, SEO and redirects, look at screenshots of its own work, and publish your site when you say so. One connection for all your sites You connect once, and you sign in with your Starjay account. The connection then covers every site in every workspace you belong to. Your AI picks a site by its site ID, which you give it with a starter prompt from the editor (see Start working on a site). How it fits with the editor Your AI works the same way Starjay's built-in AI does: Each batch of changes your AI makes becomes a version in the editor's AI session, next to versions from the built-in AI. While your AI is working, the editor shows that it's editing and pauses your own editing so the two of you don't overwrite each other. You review the result in the editor and click Save to keep it or Reject to undo the whole session. Your AI can't Save or Reject for you. Your AI can publish, but only after you approve each publish in the conversation, and only after the session is saved or rejected. For the details, see How agent work shows up in the editor. What isn't available ChatGPT isn't supported. Custom domains can't be managed from your own AI; connect them in the editor. Starjay has no API tokens or public API. What it costs Your AI app's own thinking is paid for by your AI app, not by Starjay credits. A few things Starjay does on your AI's behalf use credits. See Credits when using your own AI. Next steps Connect Claude Code Connect the Claude app or Claude.ai Connect Codex Connect another MCP client Rules for agents Tool reference"},{"slug":"your-sites-traffic","title":"Your site's traffic","summary":"A guide to every number and chart on the Analytics page.","section":"Traffic and analytics","text":"Starjay counts visits to your published site for you. There's nothing to install. Open Analytics In the editor: choose Analytics from the view menu in the top bar. It shows the site you're editing. From the dashboard: click Analytics in the left menu, then pick a site from the menu next to the title. If the site hasn't had any visits yet, you see No traffic yet. Controls Control Options Range 7D, 30D (default), 90D, 6M (last 6 months) Group by Day (default), Week, Month. Changes how the two charts group the numbers. Summary numbers Number What it shows Page views All page views in the range. Avg / day The average number of page views per day. Direct Views of your pages, by people and by bots. Prefetched Pages a visitor's browser loaded ahead of time, expecting a click. Charts and lists Page views over time charts page views by day, week or month. Breakdown lists totals for the range: Row Meaning Direct views Views of your pages, by people and by bots. Prefetched views Pages loaded ahead of time by a browser. 404 pages Visits to addresses that don't exist on your site. A high number can mean a broken link or a missing redirect. Internal views Currently always zero. Total views All page views. Composition by day (or week or month) is a stacked bar chart splitting each period into Direct, Bots, Prefetch and Internal. Starjay doesn't tell bots apart from people today, so Bots and Internal stay at zero and bot visits are part of Direct. Top pages lists your eight most-viewed pages by path, with each page's views and share. Visitors by country lists the eight countries with the most views. How current the numbers are Numbers update about once an hour, so the latest hour's visits can take up to an hour to appear. Related How page views are counted Google Analytics Page view allowance"},{"slug":"checkpoints","title":"Checkpoints","summary":"Explains what checkpoints are, which ones Starjay saves for you, and how to save your own.","section":"Checkpoints","text":"A checkpoint is a saved copy of your whole site at one moment. If something goes wrong, you can put the site back exactly as it was. Undo covers recent edits one at a time; a checkpoint takes you back further, across many changes at once. Find checkpoints in the editor under Settings → Checkpoints. Checkpoints Starjay saves for you You don't have to remember to make checkpoints. Starjay saves one automatically before and after the moments that change a lot at once. The Type column shows why each was made: Type When it's saved Example name AI When an AI session starts, and before a checkpoint restore Before AI session, Auto-save before restore Structure Before page structure changes, and before Starjay updates your site to a newer project format Before structure: … Post-publish After each successful publish Published to … Pre-publish Only if a publish fails and Starjay can't undo its own partial changes Before failed publish Manual When you save one yourself Your own description Save your own checkpoint Save one before a big change you might want to undo, such as a redesign. Open Checkpoints In the editor, choose Settings from the view menu, then Checkpoints. Click Save checkpoint Click + Save checkpoint. Describe it Type a description you'll recognize later, such as Before new homepage, and click Save or press Enter. You see Checkpoint saved, and the checkpoint appears at the top of the list. See what's changed since a checkpoint The list shows each checkpoint's Created time, name, Type and Files (how many files it holds). Click a checkpoint's name to expand it. Changes since checkpoint lists the files that differ between the checkpoint and your site now: A gray arrows icon: changed since the checkpoint. A green plus: added since the checkpoint. A red minus: removed since the checkpoint. If nothing has changed, it says No changes since this checkpoint. Unlimited and permanent There's no limit on how many checkpoints a site can have, and old ones are never removed. There's also no way to delete a checkpoint. What a checkpoint covers A checkpoint holds your site's files: pages, components, colors and fonts, forms and their settings, SEO settings and redirects. Some things are stored separately and aren't part of a checkpoint. See Restore a checkpoint. Related Restore a checkpoint Undo and redo AI sessions: versions, Save and Reject"},{"slug":"design-tokens-why-your-site-has-them","title":"Design tokens: why your site has them","summary":"Why your site's colors and fonts are named once and used everywhere, and what that means when you change them.","section":"Design","text":"Every Starjay site has a small set of named colors and fonts called design tokens. Instead of each heading, button and background storing its own color, they all point to a name, such as primary or heading. Why this helps Change once, update everywhere. Change the value of primary, and every button, link and heading that uses it changes with it. Consistency. When you or the AI style something, you pick from your palette and fonts, so the site doesn't drift into slightly different shades of the same color. Better AI results. The AI builds with your tokens, so new sections match the rest of your site. Only colors and fonts are tokens Colors and fonts are the parts of a brand you want to keep consistent. Spacing, sizes, corner rounding and similar settings use a standard scale of steps instead (for example, padding of 4, 6 or 8). You pick those in the Style panel. Where to find them Click Tokens in the left icon rail. The Design Tokens panel has these tabs: Colors: color scales and single swatches. See Colors. Typography: your font families. See Fonts. Brand Guide: written instructions the AI follows. See Brand guide. How tokens grow You don't have to set up tokens before you start. When the AI uses a new color, it's added to your tokens automatically: a standard palette color becomes a color scale, and a one-off custom color becomes a named swatch. You can rename, change or delete any of them later. Renaming and deleting Renaming a color or font updates every place that uses it, so nothing breaks. Deleting one removes it from every element that uses it. To change how something looks without removing it, change the token's value instead. See Colors and Fonts. Related Colors Fonts Page defaults"},{"slug":"sign-in-and-your-account","title":"Sign in and your account","summary":"How to create a Starjay account, sign in and out, and find your profile details.","section":"Your account and dashboard","text":"Create an account or sign in Starjay uses one sign-in page for new and returning users. Open the sign-in page Go to app.starjay.com. If you aren't signed in, you see Sign in to Starjay. Select Continue Select Continue. New to Starjay? You create your account on the next screen. Finish signing in Follow the steps on the next screen. When you're done, Starjay opens your dashboard. If someone invited you to their workspace, open the link in the invitation email instead. The page shows who invited you and a Continue as button with the invited email address filled in. See Accept an invitation. If sign-in fails, you see Sign-in failed with a Try again button. A retry usually fixes it. If it keeps failing, contact support. Sign out Do either of these: In the dashboard's left menu, select Sign out at the bottom. Go to Settings > Account and select Sign out. You see You're signed out. You can close the tab or select Sign in to sign back in. Your Account tab Go to Settings > Account. Opening Settings from the left menu takes you here first. Card What it shows Profile Your name, email address and picture, taken from your sign-in. Organizations Every workspace you belong to, with your role in each (owner or member). A workspace whose Pro plan has ended shows Suspended. You can't change your name or email address in Starjay. To delete your account, email support@starjay.com with the subject \"Account deletion request\". Say whether you want one site or the whole workspace deleted. Support verifies your identity and confirms what will be deleted before anything is removed. The [Get support](/get-support) page has details. To delete a single site yourself, use **Delete** in the dashboard. See [Rename, duplicate, archive, restore, delete a site](/rename-duplicate-archive-restore-delete-a-site). Account deletion isn't available in the app Related The dashboard Workspaces Accept an invitation"},{"slug":"plans","title":"Plans","summary":"What the Free and Pro plans include, and what Pro costs.","section":"Plans, credits and billing","text":"Every workspace is on the Free plan or the Pro plan. The plan applies to the whole workspace: every site and every member. Compare them on the Subscriptions page. Free and Pro Free Pro Price $0 $12/month billed monthly, or $96/year billed annually ($8/month, save 33%) Active sites 3 Unlimited AI credits 1,000 per month 10,000 per month Extra credit packs Not available 10,000 credits per month per pack (see Buy more credits) Page views 1,000 per month, shared across all sites 5,000 per month, shared across all sites AI models GPT-6 Luna GPT-6 Luna, Claude Sonnet 5.5, GPT-6.1 Sol Team members Just you Invite as many people as you like Restore archived sites No Yes Custom domains Yes Yes AI builder and visual editor Yes Yes Image hosting Yes Yes Forms Unlimited Unlimited Use your own AI (Claude Code, Codex and others) Yes Yes Prices are in US dollars. Tax is added at checkout based on your location. Page views over your allowance aren't billed or limited during the beta. See Page view allowance. The plan comparison on the Subscriptions page doesn't list team members or the extra AI models under Pro. Pro includes both. Enterprise The plan comparison also shows an Enterprise column with Call us. Selecting it opens Starjay's support page. If your organization needs something the Pro plan doesn't offer, email support@starjay.com. Related How credits work Upgrade, switch to yearly, downgrade Choose an AI model Limits"},{"slug":"add-a-form","title":"Add a form","summary":"Shows how to add a form with the AI and change its fields, destinations and messages in the Forms panel.","section":"Forms","text":"Forms on Starjay sites are built for you. You describe the form, the AI creates it and places it on the page, and you fine-tune it in the Forms panel. Submissions are saved, and can also be emailed to you or sent to another service. Ask the AI for a form In the chat, say what the form is for, which fields it needs and where it goes. For example: Add a contact form to the Contact page with name, email, phone (optional) and message. Email each enquiry to hello@example.com. The AI creates the form, adds it to the page and styles it to match. If the form emails someone, that address must be verified before any email is sent. See Verify notification emails. Open a form in the Forms panel Click Forms in the left icon rail. If the site has no forms, you see \"No forms yet — ask the AI to create one.\" The panel has two tabs: Submissions: what visitors have sent. See Read and export submissions. Definitions: how each form is set up. On Definitions, the table lists each form with its number of Fields, whether Honeypot spam protection is on, and its Destinations. Click a form to open it. Change a form An open form has three sections: Fields, Destinations and Settings. Each has its own Edit button. Click Edit, make your changes, then click Save (or Cancel). Fields Change a field's label, type, or whether it's required (the Req checkbox). Reorder fields with the up and down arrows, or remove one with ×. Click a field's row to open more options, such as Placeholder, Help text, length limits and choices. Click + Add field to add one. See Form field types for every type and its options. Destinations Where submissions go. Submissions are always saved so you can read them in Starjay. Add + email or + webhook for more. See Where submissions go. Settings Setting What it does Submit label Text on the submit button. Default: Submit. Success message Shown to the visitor after a successful submission. Error message Shown if something goes wrong while submitting. Spam protection Honeypot field enabled. On by default. See Spam protection. Things you ask the AI for These aren't in the panel. Ask the AI to: Create, rename or delete a form. A form can't be deleted while a page still uses it. Show a field only when a visitor gives a certain answer. Send visitors to another page after they submit. Set the subject line or reply-to address of notification emails. Allow larger files on a file upload field. Move the form or change how it looks. Changes go live when you publish Form changes reach your live site on your next site publish. Until then, a marker next to the form's name shows it has changes that aren't live. See Publish your site. There's no CAPTCHA option for forms. See Spam protection for how forms are protected. Related Collect enquiries with a form Form field types Forms in code"},{"slug":"the-image-library","title":"The image library","summary":"Describes your site's image library: adding images, supported formats and sizes, search, tags and image details.","section":"Images","text":"Every site has its own image library. Every image on your site comes from it, whether you uploaded it, imported it from a web address, or the AI added it. To open it, click Images in the left icon rail. The panel is titled Assets. Add images Click Add images, then do one of these: Drop images here, or click or choose files to pick them from your computer. You can add several at once. Click Import from URL, paste the address of an image on the web, and click Import. You can also upload from the image picker while placing an image. See Place and replace images. Formats JPEG, PNG, WebP, GIF, SVG Maximum file size 20 MB per image Not accepted AVIF, HEIC and other formats. These are skipped with \"unsupported type\". Automatic tags and descriptions After you add an image, the AI looks at it and adds tags. If the image has no description yet, it writes one. While this happens you see a message such as \"Uploaded \"…\" — describing with AI…\", then what it added. This uses credits. If you're out of credits, the image is still added, with \"AI description skipped (no credits)\". You can add tags and a description yourself at any time. Find an image Search with the box at the top. It matches names, descriptions and tags. Filter by tags with the Tags button. Pick one or more tags to show images that have any of them. Image details Click an image to open its details. Click ← Assets to go back. Detail What it is Preview and size The image, its width and height in pixels, its format, and how it was added (for example, Uploaded or Imported). Name A label for finding the image. Renaming it doesn't change the image's address. Tags Words for finding the image. Type a tag and press Enter. Suggestions come from tags on your other images. Click × on a tag to remove it. Description Used in search, and as the default alt text when the image is placed. See Alt text and descriptions. Usage Where the image is used on your site. See Where an image is used, and deleting. URL The image's address on your published site, with Copy. Before you publish, you see \"Publish the site to get a shareable link.\" Allow hotlinking Whether other websites may show this image. Off by default. See Hotlink protection. To edit Name or Description, click it, make your change and click Save, or press Enter. Press Escape or click Cancel to undo the change. Images from the AI When the AI imports or generates an image, it goes into this library like any other. See Generate images. Related Image sizes and formats Images in code Limits"},{"slug":"how-a-starjay-site-is-built","title":"How a Starjay site is built","summary":"What a Starjay site is under the hood: a standard Astro and Tailwind CSS project that publishes as static pages by default.","section":"Site code reference","text":"Every Starjay site is an ordinary Astro project styled with Tailwind CSS v4. Pages and components are .astro files. There's no proprietary page format: what you see in the Code panel is the code that builds your site. This section is for developers and AI agents who read or write a site's code, either through Starjay's own AI or through your own AI. If you only use the visual editor, you don't need it. What the platform adds Starjay keeps the project close to vanilla Astro and Tailwind, and adds a few managed pieces around it: Piece What it does Where it lives Design tokens Your colors and fonts, compiled into Tailwind utilities such as bg-{name}-{shade} and font-{slot} brand/tokens.ts (managed) Base layout Wraps every page: the <head> with SEO tags, your header and footer, and four snippet files src/layouts/Base.astro (generated) Content files The visible wording of pages and components, stored as JSON next to the code content/pages/, content/components/ Text marks Named styles for part of a sentence (a highlighted word, a gradient phrase) src/marks.json Platform components Forms, CMS Markdown and marked text, imported from @starjay/design-system Not in your site's files Image library Every image is a managed asset with a site-relative address Managed through the image tools CMS collections Structured content (posts, products) read with Astro's live-collection functions Kept in the CMS, not in files Static by default Pages build to static HTML when you publish. A page that reads CMS content is different: it renders on request, and the live site caches it until the content changes. See Reading CMS content in code. Published sites carry no editor code The editor adds markers to your pages so you can click and edit them on the canvas. Those markers exist only in the editor's preview. The published site is just your pages, your styles and your scripts. Code and the visual editor are the same thing Canvas edits write to the same files the AI and your own tools write to. A change made one way shows up the other way. That's why the rules in this section matter: code that follows them stays editable on the canvas, and code that breaks them can stop the editor from finding things. Related Project files Pages and components Rules for agents What isn't supported"},{"slug":"page-seo","title":"Page SEO","summary":"Set the title, description and social preview image that search engines and social sites show for one page.","section":"SEO and addresses","text":"Each page has its own search title, description and social preview image. If you leave them empty, the page uses your site SEO defaults. Open a page's SEO settings Open the SEO view In the editor's top bar, open the view menu and choose SEO. Pick the page Under Page-level SEO in the left list, click the page. Home is your home page; other pages are listed by address, nested the same way as in the Pages panel. Each field saves when you click away from it. Fields Field What it does Search Engines When on, search engines may index this page and show it in results. Turn it off to hide just this page. Title The page's title in search results, browser tabs and social shares. The counter shows characters out of 60. URL The page's address. It's read-only here; rename a page from the Pages panel. Description The snippet under the title in search results and social shares. The counter shows characters out of 160. Preview A preview of how the page looks as a search result or shared link. Social Preview The image shown when someone shares this page (1200 × 630 pixels). The counters turn red when a field is empty and yellow when it's longer than the suggested length. A longer value still saves; search engines may shorten it. If you leave Description empty, the page uses the site's default description. If there's no default either, the preview says No description set — search engines generate a snippet from page content. How page titles are formatted Starjay builds the final title from the page title and your site title (set in Site SEO defaults): Situation Final title Home page with its own title The home page title, exactly as you typed it Any other page with its own title `Page title A page with no title of its own The site title alone No page title and no site title My website Social shares use the same title and description as search results. Only the image has its own setting. Generate a title and description with AI Click Generate Next to Search appearance, click Generate. Review the result If the page's title and description are both empty, the AI fills them in. If either already has text, the AI shows suggestions under the fields instead. Accept or dismiss each suggestion Click Accept to use a suggestion, or the X to dismiss it. Add a social preview image Open the image picker Under Page Images → Social Preview, click Upload (or Replace if there's already an image), or click the image area. Choose an image Pick an image from your image library, or add a new one. To remove the image, hover over it and click the X in its corner. The page then falls back to the site's default social image, if you've set one. You can also ask the AI, for example: \"Write SEO titles and descriptions for every page.\" Like other changes, SEO changes reach your live site the next time you publish. Related Site SEO defaults Search engines and AI crawlers What Starjay generates for you"},{"slug":"the-phone-review-screen","title":"The phone review screen","summary":"How to watch an AI work on your site, review its versions, Save or Reject, and publish from a phone.","section":"Review on your phone","text":"On a phone, Starjay opens a simpler screen made for reviewing work rather than editing. It's built for when a connected AI app, such as Claude, is working on your site and you want to check its work away from your computer. You get the phone screen automatically on a phone. Tablets and computers get the full editor. What you can do on a phone Watch an AI work on your site. Preview the site and click through its pages. Step through the session's versions. Save or Reject the session. Publish. Create a site and switch workspaces. What you can't do on a phone Edit the site yourself: no canvas, panels, styles or text editing. Chat with Starjay's own AI. Change settings, SEO, forms, domains, the CMS or images. Most dashboard pages. Analytics, Form responses, Subscriptions, Members and Settings show Open this on a computer. Pick a site The phone dashboard lists your sites, most recently edited first. Tap a site to open it. Archived sites are listed but can't be opened. Tap New site to create one; it opens straight away. At the top are the workspace picker, if you belong to more than one workspace, and Sign out. Invitations to other workspaces appear above the list. The review screen Part What it does Top bar The back arrow returns to your sites. The Full screen button hides everything but the preview; tap the floating button to bring the controls back. The menu (☰) has Publish and Desktop editor. Status While an AI is working, shows what it's doing and how many changes it has made so far. Tap the count to see the changes. If someone is editing on a computer, you see Someone is editing this site on a computer. Preview Your site, read-only. Links work, so you can move between pages. It reloads when the AI finishes, when you change versions, and when you return to the app. Controls Version stepping and Save / Reject. Opening a site on your phone starts its editing environment, the same as on a computer, so it uses credits. See How credits work. Review an AI's work Start the AI on your site If no session is open, the controls say Start working with Claude, Codex, or your favorite agent. Tap MCP, then Copy, and paste the text into your AI app. It tells the AI which site to work on. Watch it work The status line shows what the AI is doing. Version stepping and Save / Reject are locked until it finishes: Save and Reject are available when the AI finishes. Step through versions Use the arrows to move between versions, or tap the version label (for example Version 2 of 3) to pick one from a list. Original is your site before the session. The preview shows the version you pick. Save or Reject Tap Save to keep the session's changes. Tap Reject to discard all of them; confirm with Discard & reject. If the session made no changes, you see End session instead. Your AI app must already be connected to Starjay. Set up the connection once from the full editor's Use Claude or Codex button on a computer. See Connect the Claude app or Claude.ai. Publish from your phone Save the session first You can't publish while a session is open. The dialog says Save or reject the session to publish. Open Publish Tap the menu (☰), then Publish. The dialog shows where the site goes live and a summary of what's changed since the last publish. Publish Tap Publish (or Republish if the site is live). Progress shows on the button. When it's done, a message shows the live address with Open, and Live opens the site. On a phone, the site publishes to wherever it already publishes. A first publish goes to its free Starjay address. To change addresses, connect domains or unpublish, use a computer. See Publish your site. Switch to the full editor Tap the menu (☰) and select Desktop editor, or select Use desktop view at the bottom of the phone dashboard. Your phone remembers this choice. To go back to the phone screen, add ?shell=mobile to the end of the address and open it. Links in Starjay that lead to a computer-only page, such as Upgrade to Pro when you reach the Free site limit, show Open this on a computer on a phone. Related AI sessions: versions, Save and Reject How agent work shows up in the editor Start working on a site"},{"slug":"invite-members","title":"Invite members","summary":"How a Pro workspace owner invites people, shares invite links, and manages invitations and members.","section":"Team members","text":"Inviting members is part of Pro. On the Free plan, Invite member opens Invite members with Pro with an Upgrade to Pro button. Only the workspace owner can invite people. There's no limit on how many members a Pro workspace can have. Invite someone Open Members In the dashboard, select Members. Select Invite member Select Invite member. The Invite a member dialog opens. Enter their email address Type the email address they'll sign in with. Send Select Send invitation. The dialog then shows Invitation sent and the invite link, with a Copy invite link button. They get an email with the same link. The link expires in 7 days. If the email couldn't be sent, the dialog shows Email could not be sent. The invitation still exists: copy the link and send it to them yourself. The person must accept with an account that uses the invited email address. See Accept an invitation. Manage pending invitations Pending invitations are listed under Pending invitations on the Members page, with the date sent and the expiry date. Open an invitation's … menu: Action What it does Resend invitation… Creates a new link and emails it. The old link stops working immediately, and the 7 days start again. You see the new link so you can share it yourself. Revoke invitation Cancels the invitation. The link stops working. If you invite someone who already has a pending invitation, you see a notice instead of a second invitation. If you send too many invitations in a short time, you see Too many invitations right now. Try again in a little while. Remove a member Find the member On the Members page, find the person in the list. Select the remove button Select the trash icon on their row. Confirm Select Remove. They lose access to the workspace immediately. You can invite them again later. The owner can't be removed. Related Roles When Pro ends"},{"slug":"tour-of-the-editor","title":"Tour of the editor","summary":"A map of the editor: the top bar, the left icon rail, the canvas, and how to close and reopen the editor.","section":"The editor","text":"The editor has three parts: a top bar across the top, an icon rail down the left side, and the canvas in the middle, which shows your real site. Panels open from the rail on the left; the AI panel opens on the right. Top bar From left to right: Control What it does View menu Shows the name of the current view (for example Canvas). Open it to switch between Canvas, CMS, SEO, Settings and Analytics, or choose Back to Dashboard. Edit / Breakpoints / Browse How the canvas behaves. Edit lets you click to select and edit. Breakpoints shows your page at several screen widths. Browse lets you click around like a visitor. Shown in the Canvas view only. Page switcher In the middle of the bar. Shows the page you're on; open it to go to another page. Pages that have subpages open a submenu. Reload Site The circular arrow. Reloads the canvas. Publish Opens the Publish panel. The button turns green once your site is live, and shows progress (for example Building…) while a publish runs. Light/dark switch Switches the editor between light and dark mode. It doesn't change your site. AI The chat icon at the far right. Opens and closes the AI panel. A small green dot means the AI is working while the panel is closed. When you're on a page that shows a CMS item (for example a blog post), the page switcher becomes a three-part path: the page, the collection, and the item. Open the collection part and choose Edit in CMS to edit the items. Open the item part to preview the page with a different item (it reads Choose an item if none is showing). Left icon rail The rail is grouped like this, top to bottom: Icon Opens Pages Your pages and components, on two tabs: Pages and Components. Navigator The layer tree of the current page. Style Styling for whatever you've selected. Elements Elements, ready-made sections and your components to add to the page. Tokens Your site's colors and fonts. Images Your image library. Forms Your forms and their submissions. A number on the icon shows unread submissions. Code A read-only view of the code behind the page or your selection. Click an icon to open its panel. Click it again to close the panel. If your window is short, the icons that don't fit move into a More menu at the bottom of the rail. You can drag the right edge of a left panel to make it wider. Canvas The canvas is your actual site, running live. In Edit mode: Hover to see what's under the pointer. Click to select. A label shows what you selected, and a path of its parents appears at the bottom of the canvas. Double-click text, a link or an image to edit it in place. Right-click a selection for more actions, such as Create component…. See Selecting things on the canvas and Edit text, links and images in place. If the page you're on doesn't exist, the canvas shows This page doesn't exist yet with a Back to homepage button. Close and reopen the editor Closing the editor hides the top bar, rail and panels so you see only your site. To close it, click the X at the bottom of the icon rail (Close editor), or press Cmd/Ctrl+Shift+E. Pressing Esc on the canvas when nothing is selected and no panel is open also closes it. To reopen it, click Open editor in the bottom-left corner, or press Cmd/Ctrl+Shift+E again. The editor stays closed for the rest of that browser tab until you reopen it. Undo and redo have no buttons in the top bar. Use Cmd/Ctrl+Z and Cmd/Ctrl+Shift+Z. See Undo and redo. Related Keyboard shortcuts Preview different screen sizes Chat with the AI Messages you might see"},{"slug":"faq","title":"FAQ","summary":"Short answers to the questions people ask most about Starjay, with links to the full explanation.","section":"Help","text":"Building Do I need to know how to code? No. You describe what you want, the AI builds it, and you adjust it visually. If you do code, your site is a standard Astro and Tailwind CSS project. See What is Starjay. Can I use React components? No. React and other framework components don't work on Starjay sites. For interactivity, sites use plain <script>, <details>, and <dialog>. See What isn't supported. Can I undo what the AI did? Yes. Before you save a session, step back to an earlier version or select Reject to restore the site to how it was before the session. After you save, restore a checkpoint. See AI sessions: versions, Save and Reject. Can two people edit the same site at once? They can, but they can overwrite each other's changes. The editor shows a notice when someone else is also editing. See Working with others at the same time. Can I connect ChatGPT? No. You can connect Claude Code, the Claude app or Claude.ai, Codex, and other apps that support remote MCP with sign-in. See Connect Claude Code. Is there an API? No. There's no public API for Starjay. Publishing and domains Does anything change on my live site while I edit? No. Visitors see what you last published. Your changes go live when you publish. Collection items are the exception: each item goes live when you publish that item. See Publish your site. Can the AI publish my site? The AI in the editor can't publish. An AI app connected from your computer must ask you, and you must confirm, before it publishes. See What the AI can and can't do. Can I use my own domain? Yes, on every plan, including Free. See Connect a custom domain. Can I buy a domain through Starjay? No. Buy your domain from a domain provider, then connect it. Can I schedule a publish or share a preview link? No. Neither is available. Credits and billing What happens when I run out of credits? The AI stops until you have credits again. Your published sites keep working. See Running out of credits. Am I charged for page views over my allowance? Not during beta. Views over your allowance aren't billed or limited. See Page view allowance. Your data Can I download my site's code? There's no download button. Your own AI app can read every file of your site through its connection, and you can ask support for a data export. See Get support. Can I export my collection content? There's no button to export CMS content. Ask support for a data export. How long are form submissions kept? Until you delete them or delete the site. Submissions are deleted one at a time; there's no \"delete all\". See Read and export submissions. How do I delete my account? Email support; you can't delete your account yourself. You can delete individual sites from the dashboard. See Get support. How do I leave a workspace? Ask the workspace owner to remove you. Members can't leave a workspace themselves. See Roles. Related Limits FAQ"},{"slug":"choose-a-path","title":"Choose a path","summary":"There are four ways to start a Starjay site; this page helps you pick the one that fits.","section":"Get started","text":"Path Best when Start here Describe your site to the AI You know what you want and want a site built around it. Quickstart Start from a template You'd rather begin from a finished design and change it. Templates Rebuild an existing site You have a site (yours or one you admire) and want something similar. Rebuild or borrow from an existing site Build from Claude Code or Codex You already work with an AI app on your computer. Connect Claude Code All four paths lead to the same place: a site you can edit in the editor and publish. You can mix them. For example, start from a template, then ask the AI to restyle it. Describe your site to the AI Create a site from Blank. When you open it, the empty page shows a Describe your site box. Write what the site is for, who it's for, and how it should feel. The AI builds the first page, and you keep asking for changes from the AI panel. This is the fastest way to a site that's specific to you. Read Write prompts that work for tips. Start from a template When you create a site, pick a template under Start from instead of Blank. You get your own independent copy of the template, including its images. The copy starts unpublished, and its form delivery settings are removed so that you can add your own. See Templates. Rebuild an existing site In the AI panel, give the AI the address of a web page and ask it to recreate it. The AI captures the page's look, colors, fonts, and structure, then builds something similar on your site. It reads one page at a time, and each capture uses credits. See Rebuild or borrow from an existing site, or follow the worked example Rebuild an existing site. Build from Claude Code or Codex Connect Starjay to an AI app on your computer, such as Claude Code, the Claude app, or Codex. One connection covers all your sites. In the editor, the Use Claude or Codex button in the AI panel shows how to connect and gives you a starter prompt for the current site. Your AI's changes show up in the editor as versions, and you still Save or Reject them there. Your AI must ask you before it publishes. ChatGPT isn't supported. See Connect Claude Code or follow Build a site from Claude Code. Related Create a site Core ideas"},{"slug":"your-free-starjay-address","title":"Your free Starjay address","summary":"Explains your site's free starjay.app address, how to change it and the rules for the name.","section":"Publish and domains","text":"Every site gets a free address in the form yourname.starjay.app. It works as soon as you publish, with HTTPS included. There's no DNS to set up. You'll find it in the Publish panel under Connected Domains. The name part is based on your site's name when you created it, and you can change it. Change your Starjay address Open the address menu In the Publish panel, under Connected Domains, click ⋯ next to your Starjay address, then Change URL. Type the new name Type the part before .starjay.app. Starjay checks whether it's free as you type and shows ✓ Available or why it can't be used. Save Click the check mark or press Enter. Press Esc or click X to cancel. Republish if the site is live If the site is already published, the new address takes effect on your next publish. Until you republish, the panel shows both addresses: the new one marked as going live on the next publish, and the current one marked for removal. After the publish, the old address stops working; visitors who use it don't get sent to the new one. To keep your current address, open ⋯ and click Revert URL change before you republish. If the site has never been published, the change is immediate. Name rules Rule Message you see Lowercase letters, numbers and dashes only Lowercase letters, numbers, and dashes only Can't start or end with a dash Cannot start with a dash / Cannot end with a dash 60 characters at most Too long (max 60 chars) Can't be empty Pick a subdomain Some names are reserved for Starjay That subdomain is reserved — pick another Each address belongs to one site That subdomain is taken As you type, capital letters become lowercase and other characters are removed. Related Publish your site Connect a custom domain Choose which address serves your site"},{"slug":"ai-sessions-versions-save-and-reject","title":"AI sessions: versions, Save and Reject","summary":"How the AI's changes are grouped into a session of versions you can step through, and what Save and Reject do.","section":"Build with AI","text":"Everything the AI changes lands on your site right away, so you can see it on the canvas. Nothing is final until you decide. The changes are grouped into an AI session. When a session starts A session starts when you send your first message. The session bar appears just above the prompt box. It shows AI Session, the version controls, and the buttons to end the session. Versions Each request that changes your site becomes a new version. Edits you make yourself on the canvas during a session become versions too. Click ‹ (Previous version) and › (Next version) to step through them. The canvas changes to show that version. The counter shows where you are, for example 2 / 4. Original is your site as it was before the session. Click the counter to jump to any version. The list shows Original, v1, v2 and so on, with how many files and CMS changes each one made. If you step back to an earlier version and then send a new request, the AI builds on the version you're looking at. The list marks that version as based on v1 (or whichever version it started from), so you can still find the versions you stepped away from. Save Save keeps your site as it is on the canvas and ends the session. The chat clears and the next message starts a new session. Reject Reject puts your whole site back the way it was before the session started. It asks first: Discard this session's work? Rejecting permanently discards all changes from this session — every version and any pending edits. This can't be undone. Click Discard & reject to confirm, or Keep working to go back. Reject also undoes CMS changes made during the session: collections and items the AI created or edited, and items you deleted from a delete card. End Session If a session hasn't changed anything (for example, you only asked questions), the bar shows End Session instead of Save and Reject. While the AI is working Save, Reject and the version list are hidden or unavailable while the AI works. They come back when it finishes (Available when the AI finishes editing). Why there's no accept or reject for each request Requests build on each other. The third request often changes something the second one added, so keeping one and throwing away another rarely gives a working site. Instead: To change direction, send another message. To go back, step back to an earlier version and continue from there. To throw everything away, use Reject. Why you Save before publishing You can't publish while a session is open. The Publish panel shows Publishing locked — accept or reject AI changes first. with a Review AI changes link. This makes sure what goes live is something you chose to keep. Click Save (or Reject), then publish. If a session is interrupted If the session bar says Session interrupted — accept current state or reject to restore, the session lost track of its versions. Save keeps your site as it is now. Reject restores it to before the session. Starjay also saves a checkpoint of your whole site before the AI makes changes. If you ever need to go further back than a session, see Checkpoints. Related Chat with the AI Deletes the AI proposes Publish your site The phone review screen How agent work shows up in the editor"},{"slug":"start-a-blog","title":"Start a blog","summary":"Ask the AI for a blog, review the collection and pages it builds, then write and publish posts that go live without republishing your site.","section":"Worked examples","text":"In this tutorial you add a blog to an existing site. The AI creates a collection to hold your posts, a listing page and a page for each post. You then write a post in the CMS and publish it. Blog posts are content, not pages: each post is an item in the collection. Once your site has been published with the blog pages in it, you publish each post on its own, and it appears on your live site within a few seconds. You don't republish the site for each post. Before you start You need a site to add the blog to. Any site works, including the one from Build a business site. Save or Reject any open AI session before you start, so the blog work is a session of its own. Ask the AI for a blog Open the AI panel In the editor, click the AI button at the top right. Ask for the blog Send: Add a blog. Each post needs a title, a slug, a publish date, a cover image with alt text, a short excerpt and a Markdown body. Build a /blog page that lists posts newest first with their cover image, title, date and excerpt, and a page for each post. Add \"Blog\" to the header navigation. Create three sample posts about baking sourdough at home. Watch what it builds The AI creates the collection and its sample posts, then builds two pages: the listing page at /blog and a post page that shows one post at a time (for example /blog/your-first-loaf). Look at the pages Open the Pages panel. You see the blog listing page and the post page. Click the post page: the top bar shows a menu for choosing which post to preview. Pick a different post from it to see that post on the canvas. On the canvas, the pages show every post, including drafts, so you can see your work before it's published. Save the session In the AI Session bar at the bottom of the AI panel, click Save. Posts the AI created or changed in this session can't be published until you Save or Reject. Reject also covers the CMS. If you click Reject, the collection and its sample posts are removed along with the new pages. Publish the site once The blog pages are part of your site's code, so they reach your live site the next time you publish the site. Publish the site Click Publish at the top right, then the Publish (or Republish) button in the panel. Wait for the status to show Live. Check the live blog page Open your live address and go to /blog. The list is empty. That's expected: the sample posts are still drafts, and visitors only see published posts. Write and publish a post Open the CMS In the top bar, open the view menu (it shows Canvas) and choose CMS. Under Collections, click your blog collection. The table lists the posts, with a Status column showing Draft for each. Create a post Click the + button (New item). Fill in the title, publish date and excerpt. Write the body in the Markdown field. For the cover image, pick an image from your library and fill in its alt text. There is no Save button. The post saves itself as you type. If a value isn't the right kind, the field says Not saved: and what it needs. Check what publishing needs If a required field is still empty, the header says To publish: and what's missing. Fill it in. Publish the post Click Publish in the post's header. A dialog explains that the post Goes live on your site within a few seconds. The rest of the site isn't republished. Click Publish to confirm. See it live Reload /blog on your live site. Your post appears in the list. Click it to open its page. Publish the sample posts, or delete them To publish everything that's ready at once, open the collection and click Publish all changes. To remove a sample post, open it, click ⋯ and choose Delete. Deleting is permanent. Edit a published post Open the post and change it. The table's Status column shows Live · changed: visitors still see the published version. Click Publish again to put your changes live. In the post's header, the Published and Draft pills let you switch between the live version (read-only) and your draft. To take a post off your site, click ⋯ and choose Unpublish. Its draft stays, so you can publish it again later. When you do need to republish Changes to the collection's structure, such as adding a new field, reach your live site only when you next publish the site. Publishing posts alone doesn't carry structure changes. If something goes wrong Problem What to do Publish is greyed out on a post. Save or Reject the AI session first. Also check the header for To publish: and fill in what's missing. The post is published but /blog on the live site still doesn't show it. Make sure you published the site after the AI built the blog pages. Then reload the page. A post's address shows your 404 page. The post isn't published, or its slug changed. Check its Status in the collection. The publish dialog lists other items. The post links to items that aren't live yet. They publish together, so the link never points at a missing item. You can't delete a post. Something links to it. The delete message names what links to it. Remove those links first. Related When to use a collection Publish and unpublish items Edit items Item addresses and slugs CMS pages on the live site"},{"slug":"page-transitions-and-navigation","title":"Page transitions and navigation","summary":"How to choose whether pages swap without a full reload, and which animation plays between pages.","section":"Site settings","text":"By default, moving between pages on your site doesn't reload the whole page: the new page swaps in, which feels faster. You can turn that off, and you can choose an animation for the swap. Open the settings Open the view menu at the top-left of the editor and choose Settings, then General. Choose how pages load Under Navigation, turn Client-Side Router on or off. On: Pages swap without full reload. Off: Standard browser navigation, where every link loads a fresh page. Choose a transition With Client-Side Router on, choose a Page Transition: None (swap without animation), Fade (cross-fade between pages) or Slide (slide left/right between pages). Check it Your choice saves straight away and works on the canvas from the next page you open. Switch to Browse mode on the canvas and click a link to see it. Publish Publish your site so visitors get the new behavior. See Publish your site. The defaults are Client-Side Router on and Page Transition set to None. Page Transition isn't shown while Client-Side Router is off, because a full page load can't animate between pages. You can also ask the AI, for example: \"Use a fade transition between pages.\" Related Site settings Preview different screen sizes"},{"slug":"create-move-and-rename-pages","title":"Create, move and rename pages","summary":"How to create pages and subpages, change a page's address, and move or reorder pages by dragging.","section":"Pages","text":"Create a page Open the Pages panel Click Pages in the left icon rail. Start a new page Click the + button (Add page) and choose New Page. To create a page under an existing one, right-click that page and choose Add subpage instead. Enter its address In the New page dialog, type the last part of the address, for example about. The part before it is filled in for you. Create it Click Create or press Enter. The new page opens on the canvas. A new page starts with your site's header and footer and nothing in between. Add sections from the Elements panel, or ask the AI to build the page. New pages are ready to publish: they go live the next time you publish, unless you mark them as drafts. See Draft, ready and live pages. If the CMS is in use, New CMS Page lets you create a page that shows the items of a collection. See Create a collection. Address rules Addresses use lowercase letters, numbers and hyphens. As you type, capitals become lowercase, and spaces and other characters become hyphens. If the address is already taken, or the name is reserved, a number is added to it (for example about-1). Reserved names: index anywhere; 404, 500, preview and api as the first part of an address. Pages can nest up to 5 levels deep. Change a page's address Right-click the page and choose Change location. Type the new last part of the address and click Change. To move a page under a different parent, drag it (see below). Move or reorder pages by dragging Drag a page in the tree. Where you drop it decides what happens: Drop on the top or bottom edge of another page to place it before or after that page, at the same level. A line shows where it will land. Drop on the middle of another page to nest it under that page. The target page is highlighted. Dragging within the same parent only changes the order of the list. Dragging to a different parent changes the page's address. Subpages move with their parent. What happens when a page's address changes When you change a page's address, by Change location or by dragging it to a new parent: Links to the page from your other pages are updated to the new address. If the page is live, Starjay creates a redirect from the old address to the new one, so visitors and search engines still find it. If you're viewing the page, the canvas shows Moving page… and follows it to its new address. A message confirms the move, for example Moved to /product/pricing · 3 files updated · redirect created. It has an Undo button that puts everything back. When a redirect was created, Remove redirect removes just the redirect and keeps the move. You can also undo with Cmd/Ctrl+Z. See Redirects to manage redirects later. What you can't move Home can't be moved, renamed or deleted. Your 404 page can't be moved, renamed or deleted. You can't nest a page under one of its own subpages, under a page that shows CMS items, or deeper than 5 levels. You can't move a page to an address another page already uses: A page with this route already exists. Reserved names are refused, for example \"api\" is reserved as the first route segment. Related Pages and the Pages panel Redirects Header, footer and navigation"},{"slug":"connect-claude-code","title":"Connect Claude Code","summary":"Add Starjay to Claude Code in the terminal and sign in, so every Claude Code session can work on your sites.","section":"Use your own AI","text":"You need Claude Code installed and a Starjay account. You only do this once; the connection is available in every Claude Code session. Open a new terminal window Start from a fresh terminal so Claude Code picks up the new server. Add the Starjay server Run this command: claude mcp add --transport http -s user starjay https://app.starjay.com/mcp Open the server menu Type claude to open Claude Code. Then type /mcp and press Enter. Select starjay and press Enter. If its status is disabled, choose Enable. Authenticate In the same menu, choose Authenticate and complete sign-in in your browser with your Starjay account. If it already says authenticated, you're ready. You can also copy this command from the editor: in the AI panel, click Use Claude or Codex, then choose Claude Code (terminal) under AI client. Next steps Start working on a site Build a site from Claude Code"},{"slug":"how-page-views-are-counted","title":"How page views are counted","summary":"Explains how Starjay counts page views, what counts toward your allowance, and why the numbers can differ from other tools.","section":"Traffic and analytics","text":"Counted on the server Starjay counts each page view when your site sends the page, not with a script in the visitor's browser. That means: No cookies and no tracking script. Starjay's counting doesn't add a script to your pages or set cookies on your visitors. Ad blockers don't hide visitors. People who block trackers or turn off JavaScript are still counted. Your numbers may be higher than Google Analytics. Browser-based tools miss visitors who block them, and they usually leave out bots. Starjay counts both. What counts as a page view Counted Not counted Every page sent to a visitor, including CMS pages Images, stylesheets, fonts and other static files Visits to addresses that don't exist (shown as 404 pages) Form submissions Visits by bots and crawlers Redirects you set up in the Redirects panel Pages a browser loads ahead of time (Prefetched) Your own work in the editor Other addresses your site's code builds on request, such as a generated data file Every view counts as one Every counted view counts as one full view toward your allowance, whoever or whatever made it. That includes: people visiting your site, including you and your team when you visit the published site; bots and search engine crawlers; pages a browser loads ahead of time. Starjay doesn't tell bots apart from people today, so bot visits appear under Direct on the Analytics page. Your plan includes a monthly number of page views, shared across all the sites in your workspace. During the beta, page views above your allowance aren't billed or limited. See Page view allowance. Related Your site's traffic Page view allowance Plans"},{"slug":"restore-a-checkpoint","title":"Restore a checkpoint","summary":"Put your whole site back the way it was at a checkpoint.","section":"Checkpoints","text":"Restoring replaces your whole site with the copy saved in a checkpoint. You can't restore a single page or file. You can always undo a restore Before restoring, Starjay saves a checkpoint of your site as it is now, named Auto-save before restore. If you change your mind, restore that one. Open Checkpoints In the editor, choose Settings from the view menu, then Checkpoints. Find the checkpoint Click a checkpoint's name to expand it, and check Changes since checkpoint to see what restoring would change. Restore Click Restore this version, then Confirm restore. While Starjay restores, you see Restoring checkpoint.... When it's done, the editor reloads with the restored site. After a restore Your live site doesn't change until you publish. Publish to put the restored version online. Undo history is cleared. You can't undo past the restore with Cmd/Ctrl+Z; restore the Auto-save before restore checkpoint instead. What a restore doesn't change These aren't part of a checkpoint, so a restore leaves them as they are now: Form submissions you've received. Traffic and analytics numbers. Domains: your Starjay address and connected custom domains. Uploaded image files. They're stored separately from checkpoints, so restoring never deletes an image file. CMS collections and items. Use the CMS's own history instead. What's live. The published site stays as it is until you publish. Who can restore You restore checkpoints yourself, from the Checkpoints page. Neither the AI in the editor nor a connected AI app can restore a checkpoint. Related Checkpoints Undo and redo Publish your site"},{"slug":"colors","title":"Colors","summary":"How to add, change, rename and delete your site's colors in the Tokens panel.","section":"Design","text":"Your site's colors live in Tokens → Colors. There are two kinds: Color scales: a family of 11 shades (50, 100, 200 … 900, 950) generated from one base color. Good for brand colors you use in several strengths, such as a light tint for backgrounds and a dark shade for text. Color swatches: single colors, such as error or a specific accent. Every site has three swatches, white, black and transparent. You can change their values, but you can't rename or delete them. Add a color scale Open Colors Click Tokens in the left rail, then the Colors tab. Start a new scale Next to Color Scales, click Add scale. Name it Type a Scale name, such as brand. Names use letters, numbers and hyphens, and start with a letter. Pick the base color Choose the Base color. The Preview shows the 11 shades that will be generated. Create it Click Create Scale. Add a single swatch Next to Color Swatches, click Add swatch. Enter a Swatch name, pick the Color, then click Create Swatch. Change a color One shade of a scale: click the shade and enter the new color. A whole scale from a new base color: open the scale's menu (…), choose Regenerate scale, adjust the base color, and click Regenerate. Confirm in Regenerate color scale?. This replaces all 11 shades, and everything that uses the scale changes. A swatch: select it, open its menu, and choose Edit color. Changing a value is the safe way to recolor your site. Every element that uses the color keeps using it, with the new value. Rename a color Double-click a scale's name, or choose Rename from its menu. For a swatch, select it and choose Rename. Confirm in Rename color scale? or Rename color swatch?. Every place that uses the color is updated to the new name. See where a color is used Select a swatch to see how many places use it, such as 3 uses. Swatches nothing uses are marked Unused, which makes them easy to clean up. Delete a color Choose Delete scale or Delete swatch from the menu. If nothing uses the color, it's deleted right away. If it's in use, Token in use lists where. Click Remove Anyway to delete it. Elements that used it lose that color. If your site builds the color name in code in a way that can't be cleaned up automatically, Referenced dynamically appears. Click Copy AI prompt and paste it into the AI chat. The AI removes the color and fixes every place that used it. Deleting a color doesn't swap in another one. If you want things to look different but keep working, change the color's value instead of deleting it. Colors the AI adds When the AI uses a color your site doesn't have yet, it adds it to your tokens automatically. A standard palette color becomes a new scale. A custom color becomes a swatch with a descriptive name. Rename them whenever you like. Save a custom color from the Style panel You can create a swatch while styling an element. In the Style panel, open any color control. In the swatches row, click + (New color — pick or paste any value). Pick the color with the sliders (L for lightness, C for how vivid it is, H for hue, A for opacity), or type a value in hex, rgb, hsl or oklch. Click Save swatch. The new swatch gets a name based on its color and is applied to the element. Rename it in Tokens → Colors if you want a clearer name. Ask the AI instead Make the primary color a deeper green across the site. Add a soft yellow color for highlight boxes. Rename the \"blue\" scale to \"brand\". Related Design tokens: why your site has them Fonts The Style panel"},{"slug":"create-a-collection","title":"Create a collection","summary":"Shows how to create a collection with the AI or in the CMS view, add sample items, and show the collection on your pages.","section":"Content (CMS)","text":"You can ask the AI to create a collection, or create one yourself in the CMS view. Asking the AI is the quickest way, because it also builds the pages that show the collection. Ask the AI Describe what you want in the chat. For example: Add a blog. Each post needs a title, a publish date, a cover image, a short summary and the post body. The AI usually: Creates the collection and its fields. Writes a few sample items so the pages have something to show. Builds a listing page (for example, /blog) and an item page that shows one item (for example, /blog/my-first-post). The sample items are drafts. They show on the canvas, but not on your live site until you publish them. Items the AI changed in an open session can't be published until you Save or Reject the session. See AI sessions: versions, Save and Reject. Create a collection yourself Open the CMS view In the top bar, open the view menu and choose CMS. Make sure Collections is selected. Start a new collection If the site has no collections, click Create your first collection. Otherwise, click the + (New collection) button above the list of collections. Name it Enter a Collection name, such as Blog Posts. Add fields Under Fields, give each field a name and pick its type. The first field is used as each item's title. Tick Required for fields an item must have before it can be published. Click Add field for more. An Enum field needs its options, separated by commas. A Reference field needs at least one target collection. A Slug field can be generated from another field. Pick it under Generate from…. Create it Click Create collection. The collection opens, ready for items. The New collection form doesn't offer the Image type. To add an image field, open the collection, click Edit Schema and add it there. See Field types. You can change the collection's name, its fields and its Title field later with Edit Schema. Add sample items To fill a collection with example content, click Generate in the collection's toolbar, or Generate sample data when it's empty. Set Number of items (1 to 20). Optionally, add a Description of the content you want. Click Generate. Generating items uses credits. See Credits for AI. If some items fail, the dialog says how many were made and offers to generate the rest. Show the collection on your pages Ask the AI to build the pages, for example: Make a /blog page that lists the posts, newest first, and a page for each post. To create an item page yourself, open Pages, click the + (Add page) button and choose New CMS Page, then pick the collection. If the collection is empty, you see \"Template created. Add an item to the collection to preview it.\" Pages that show a collection are part of your site. Publish your site so visitors can see them, then publish the items. Related When to use a collection Edit items Publish and unpublish items Reading CMS content in code"},{"slug":"how-credits-work","title":"How credits work","summary":"What AI credits are, what uses them, when they refill, and where to see your usage.","section":"Plans, credits and billing","text":"Credits are how Starjay measures use. Each workspace has one pool of credits shared by every site and every member. What uses credits AI requests. Every request to Starjay's AI, plus AI helpers such as tagging images, writing sample content and rebuilding from another site's address. The AI panel shows what each request cost. See Credits for AI. Server time. While a site is open for editing, the editing environment behind it runs and uses credits, about 36 credits per hour. It runs while you, a member or a connected AI app works on the site, and stops on its own a while after the work stops. Your published sites never use credits. Visitors don't cost credits. Page views have their own allowance; see Page view allowance. How much you get Source Credits per month Free plan 1,000 Pro plan 10,000 Each credit pack 10,000 Credit packs add to your plan's credits. For example, Pro with two packs gives 30,000 credits a month. See Buy more credits. When credits refill Credits refill every month. On Free, they refill at the start of each calendar month. On Pro, they refill on your billing date each month, including on a yearly plan. Unused credits don't carry over. Each refill starts from your full monthly amount. Where to see your credits Where What it shows Subscriptions > AI credits used this billing period Credits used out of this period's total, how many are left, the split between AI requests and Server time, and the date your allowance refills. Settings > Spend Credits used, broken down By site and By user, with AI credits, Server credits, Server time, Sessions, Calls, Credits per session and Credits per call. Choose a Range. Settings > Usage AI activity in detail (calls and input, output and cached text amounts) By site and By user. Choose a Range: Last 7 days, Last 30 days, Last 90 days or All time. If a request is still running, part of your balance can show as reserved. Reserved credits free up when the request finishes. Related Running out of credits Credits when using your own AI Plans"},{"slug":"the-dashboard","title":"The dashboard","summary":"Everything on the dashboard: the Sites page, the left menu, and light and dark mode.","section":"Your account and dashboard","text":"The dashboard is the first thing you see after you sign in. It lists your workspace's sites and links to everything that isn't inside a single site. Left menu Item What it opens Workspace picker Appears at the top only if you belong to more than one workspace or have a pending invitation. See Workspaces. Sites Your sites (described below). Analytics Page views for your published sites. Pick a site at the top. See Your site's traffic. Form responses Form submissions for a site. See Read and export submissions. Subscriptions Your plan, AI credits, credit packs and page views. See Plans. Members The people in your workspace. See Invite members. Settings Four tabs: Workspace (the workspace name), Account (your profile), Usage (AI usage by site and by person), Spend (credits used). Support Starjay's support page. Light mode / Dark mode Switches the dashboard's color theme. Sign out Signs you out. Links to Privacy, Beta terms and Acceptable use sit below Sign out. If you have a pending invitation to another workspace, a banner at the top of every dashboard page shows it with Accept and Decline. Light and dark mode The dashboard follows your device's light or dark setting until you select the Light mode / Dark mode button. After that, it keeps your choice. The editor has its own light/dark switch. The Sites page The header shows how many sites the workspace has and a New site button. With no sites yet, you see No sites yet and a Create your first site button. Search Type in Search sites by name or ID… to filter the list. The header then shows how many sites match, for example \"2 of 7 sites\". If nothing matches, select Clear search. Grid and list views Use the two buttons beside the search box to switch between Grid view and List view. The dashboard remembers your choice on this device. View What you see Grid A preview image of each site's homepage, its name, and when it was last edited. Select the image or name to open the site. Hover to show the More actions (…) button. List One row per site with columns Site, Domain and Last edited, an Open button and a More actions (…) button. Select a row's small preview image to see it larger, with an Open button for the site. The preview image updates after you leave the editor, so it can take a moment to show your latest changes. Sorting Sites are sorted by last edit, newest first. In list view, select the Site column heading to sort by name or the Last edited heading to sort by date; select again to reverse the order. The sort you choose also applies in grid view. Archived sites always come after active ones. Filter by domain In list view, select the Domain column heading to filter: Option Shows All sites Every site. Custom domain Sites live on your own domain. SaaS subdomain only Sites live only on their free Starjay address. Unpublished Sites that aren't live anywhere. The Domain column shows a site's custom domain if it has one, otherwise its Starjay address. The domain filter also applies in grid view, but grid view doesn't show that a filter is on. If sites seem to be missing, switch to list view and set the filter back to All sites. Site actions Open a site's More actions (…) menu, or right-click its card or row: Action What it does Copy site ID Copies the site's ID, for example to give to support or to your own AI. Rename Changes the site's name. Duplicate Makes a copy of the site. Not shown for archived sites. Archive Archives the site. Shown for active sites. Restore Brings back an archived site. Shown for archived sites. Delete Deletes the site permanently. Details: Rename, duplicate, archive, restore, delete a site. Archived sites show an Archived label and can't be opened. Related Create a site Workspaces Review on your phone"},{"slug":"form-field-types","title":"Form field types","summary":"Lists every form field type, its options, and how to show a field only for certain answers.","section":"Forms","text":"Field types The Forms panel lists types by their short names. Type What visitors see text A single-line text box. email An email address box. The address must be in a valid format. textarea A multi-line text box for longer answers. select A drop-down menu. Visitors pick one option. checkbox A single yes/no checkbox. radio A set of choices. Visitors pick one. number A number box, with an optional minimum and maximum. url A web address box. The address must be in a valid format. tel A phone number box. Phones show a number pad. date A date picker, with an optional earliest and latest date. time A time picker, with an optional earliest and latest time. file A file upload. See File uploads. Any field can be required. A visitor can't submit the form until required fields are filled in. Field options Click a field's row while editing Fields to see its options. Option Applies to Notes Label All The field's name on the form. Placeholder text, email, number, url, tel, textarea Hint text inside an empty box. Placeholder (prompt option) select The first, empty choice, such as \"Choose one\". Help text All A short hint under the label. Options select, radio Comma-separated. To show one thing and send another, write label=value, for example United States=US. Rows textarea How tall the box is. Min / Max number, date, time The smallest and largest value allowed. Min length / Max length text, email, number, url, tel, textarea The shortest and longest answer allowed, in characters. File kind / Max files file See File uploads. Each field also has an ID, shown in the ID column. The AI sets it when it creates the field. Notification emails and exports use it to identify the field. Show a field only for certain answers A field can appear only when another field has a certain answer. For example, show \"Please describe\" only when \"How did you hear about us?\" is \"Other\". Ask the AI to set this up. The Forms panel shows the condition under the field, for example \"Shown when source = other\", but can't change it. The rules: The field that decides must be a select, radio or checkbox field. Each field can have one condition: equals one answer, or is one of several answers. A field that's shown only for certain answers can't itself decide whether another field is shown. There are no chains of conditions. For forms where whole groups of questions differ, such as separate forms for businesses and homes, ask the AI for two pages with a form each. Related Add a form File uploads"},{"slug":"alt-text-and-descriptions","title":"Alt text and descriptions","summary":"Shows how an image's description becomes its default alt text and how to set alt text for each place an image appears.","section":"Images","text":"Alt text describes an image for people who can't see it, such as screen reader users, and for search engines. Starjay has two levels of it: The description belongs to the image in your library. It's the default. Alt text for each placement belongs to one place the image appears. The same photo can have different alt text on different pages. Set an image's description Open the image Click Images in the left rail, then click the image. Edit the description Click Description (it shows missing in yellow when empty). Type a short description of what the image shows. Save Click Save or press Enter. The description is used: As the alt text when the AI places the image. As the alt text when you pick the image in a collection's image field and its alt text is empty. When you search the library. Changing the description doesn't change alt text that's already on your pages, because \"Existing placements keep their own alt text.\" If some placements still use the old description, a note says how many and offers Update all to change them too, or Dismiss to leave them. New images get a description automatically from the AI when you have credits. See The image library. Set alt text for one placement Open the image box On the canvas, double-click the image. Or select it and click the image icon (Change image) on its label. Edit the alt text Click the field under Alt text · describes this placement and describe the image in its context on this page. Save Click Save or press Enter. Revert or Escape cancels. Clicking away doesn't save. To mark an image as decorative, so screen readers skip it, save an empty alt text. If the field shows \"No editable alt text\", the alt text for this image can't be changed from the canvas. Ask the AI to change it. Alt text in collections A collection's image field has its own Alt text box under the image, in each item. See Field types. Tips for good alt text Say what matters about the image in this place, not every detail. Leave out \"image of\" or \"photo of\". If the image contains text that matters, include that text. There's no site-wide alt text report. To check your images, ask the AI to review the alt text on a page. Related Place and replace images Edit text, links and images in place"},{"slug":"project-files","title":"Project files","summary":"Which folders and files in a Starjay site you can read and write, which are managed by a tool, and what is refused.","section":"Site code reference","text":"All paths are relative to the site's root. An AI agent writes files with write_file and patch_file; both check every path against the rules on this page. A refused write changes nothing and returns a message saying where the change belongs instead. What you can read read_file and search_files can read anything under src/, content/ and brand/, plus site.json. Everything else is off limits to direct reads. Use the matching tool instead: list_forms for forms, list_components for the component list, browse_assets for images, redirects_list for redirects, seo_get_page for SEO. What you can write Path What goes there src/pages/ Pages. Astro file-based routing: src/pages/about.astro is /about, src/pages/blog/[slug].astro is /blog/:slug. src/components/sections/ Full-width page blocks: Hero, Features, CTA. src/components/layout/ Site-wide chrome reused across pages: Navbar, Footer, Container. src/components/ui/ Small reusable building blocks: Button, Card, Badge. src/lib/ Helpers, data and types. No components. src/styles/ Extra stylesheets. No components. src/head/ and src/body/ Exactly four snippet files. See Head and body snippets. src/marks.json Your text marks. See Pages and components. content/pages/**.json The wording of each page. content/components/**.json The default wording of each component. Subfolders inside the three component folders are fine. Files managed by a tool Writing these directly is refused. Use the tool named instead. Path Use instead brand/tokens.ts, brand/theme.css modify_tokens for colors and fonts, modify_element_defaults for site-wide element styles. brand/theme.css is generated from brand/tokens.ts. brand/brand-guide.md set_brand_guide src/layouts/Base.astro modify_layout for the header and footer; the four snippet files for raw <head> and <body> content src/styles/globals.css Generated from your design tokens. Use modify_tokens or modify_element_defaults. src/live.config.ts Declares your CMS collections automatically. Use modify_collection and modify_items. site.json modify_layout (header, footer, page navigation and transitions) and seo_set_defaults (site SEO) content/seo/ seo_set_page. A new page gets its SEO file automatically. Other files under content/ The CMS tools. Collections aren't files. platform/forms/ modify_form platform/redirects.json redirects_modify platform/assets.json import_asset and the other image tools platform/publish-state.json set_publish_state platform/components.json Nothing. It's rebuilt automatically when you create components. src/pages/robots.txt.ts seo_set_page and seo_set_defaults. The file is regenerated on every publish. Refused outright Path Why .env files and node_modules Protected. public/, astro.config.mjs, package.json, tsconfig.json and any other file outside src/ and content/ Only site source is writable. Anything in src/layouts/ other than Base.astro Alternative layouts aren't supported. A page that skips Base loses its SEO tags, snippets and theme. src/middleware.ts Published sites are static; redirects are managed with redirects_modify. src/content.config.ts Build-time content collections would create a second content system the CMS can't see. src/env.d.ts Not needed. src/fetch.ts (and .js, .mjs, .mts) Reserved by Astro's request pipeline. Use a name such as src/lib/fetch-data.ts. src/lib/seo.ts Platform SEO code. Any other file or folder directly under src/ src/ has a fixed structure. .astro, .tsx or .jsx files in src/lib/ or src/styles/ Components belong in the three component folders. .tsx or .jsx files in src/pages/ Not pages. React components don't work at all; see What isn't supported. A component outside src/components/sections/, layout/ or ui/ Components must live in one of the three folders. A page path with a segment starting with _ The underscore address space is reserved, and Astro never serves those files anyway. Any other file in src/head/ or src/body/ Those folders hold exactly the four snippet files. RSS feed files (content/rss/, src/pages/feeds/, rss.xml.ts) RSS feeds aren't available. Write rules (enforced) You MUST write only to the paths listed under \"What you can write\". The platform refuses everything else. You MUST use the named tool for a managed file. The platform refuses direct writes and tells you which tool to use. You MUST NOT delete src/layouts/Base.astro, brand/tokens.ts or any of the four snippet files. The platform refuses. Deleting files Deleting is a little more permissive than writing, so you can clean up stray files anywhere under src/ (for example a leftover file in src/layouts/ or a misplaced component). You still can't delete managed files or the four snippet files. To empty a snippet file, write it with an empty body. What happens automatically after a write New page: its SEO file is created, and the page starts Ready, so it goes live on the next publish. New component: it's added to the component list. Every page or component write: Starjay renders the file. If the render fails, the write still happens but the result reports success: false with the render error, so you can fix it. When the change ends: visible text in the .astro files you touched moves into content/pages/ and content/components/. See Pages and components. Related Component rules Head and body snippets Tool reference"},{"slug":"site-seo-defaults","title":"Site SEO defaults","summary":"Set the site title, language, default description and site images that every page falls back to.","section":"SEO and addresses","text":"Site defaults apply to every page that doesn't set its own value. To open them, choose SEO from the view menu in the top bar. Defaults opens first, under the heading Site-wide SEO Defaults. Each field saves when you click away from it. Text settings Field What it does Title Your site's name in search results and browser tabs. It's added after each page's title (for example, `About Language Tells search engines and browsers what language your site is written in. Description The default search description for any page that doesn't have its own. Preview How your home page looks as a search result or shared link with these defaults. The preview shows your live address once the site is published. Before then it shows example.com. Site images Click Upload (or Replace) next to an image, or click its image area, to choose an image from your library. Hover over an image and click the X to remove it. Image Size Where it appears Favicon — Light and Dark 64 × 64 pixels The small icon in browser tabs and bookmarks. Add a Dark version if your icon is hard to see on dark browser themes. Social Preview 1200 × 630 pixels The image shown when someone shares a page that has no social image of its own. Apple Touch Icon 180 × 180 pixels The icon used when someone adds your site to an iPhone or iPad home screen. If you set both favicons, browsers pick the one that matches the visitor's light or dark setting. If you set only one, it's used everywhere. What you can't set here The canonical address. Starjay sets it from the address your site is published at. See What Starjay generates for you. The title format. Titles always follow the pattern described in Page SEO. Search visibility. That's under Indexing. See Search engines and AI crawlers. You can also ask the AI to set these, for example: \"Set the site description to a one-sentence summary of what we do.\" Changes reach your live site the next time you publish. Related Page SEO The image library"},{"slug":"selecting-things-on-the-canvas","title":"Selecting things on the canvas","summary":"How to select elements on the canvas, reach their parents, work with repeated items, and follow links.","section":"The editor","text":"Select something before you style it, insert next to it, delete it, or ask the AI about it. Selecting works in Edit mode (the default). Choose Edit in the top bar if you're in another mode. Select an element Hover over the page. An outline and a small label show the element under the pointer. Click to select it. The outline stays, and a label shows the element's tag (for example h1 or section). Press Esc to clear the selection. The label can carry extra icons, depending on what you selected: Icon What it does Image Change image: opens the image editor for the selected image. Link Edit link: opens the link editor for the selected link. Sliders Show element tools: opens tools for flex and grid layouts, lists, tables and form fields. See Layout tools. + Add item Appears under a selected list or list item. Adds an item to the list. A Locked badge means you selected part of a component Starjay manages for you, such as a form field. You can style it, but you can't add or delete elements inside it. See Components. Select a parent When you select something small, such as a word inside a button, a path of its parents appears at the bottom-left of the canvas. Click any name in the path to select that parent instead. Click Defocus at the end of the path to clear the selection. You can also pick any element from the layer tree in the Navigator. Repeated items Some content repeats: cards in a grid, items in a list, blog posts in a listing. When you select one copy, the other copies are outlined too, because styling one copy styles them all. Press Enter to narrow the selection to just the item you clicked. Press Esc to step back out to all the copies. While the AI panel is open, the label also shows a small scope pill (for example item). Click it to choose whether your next AI request means this one item, its list, or every copy on the page. Follow a link Clicking a link in Edit mode selects it instead of following it. To follow it: Hold Cmd (Mac) or Ctrl (Windows) and click the link. Links to your own pages open in the canvas. Links to other websites open in a new browser tab. Or switch to Browse mode in the top bar. In Browse mode the canvas behaves like your live site: links work and nothing is selected. Switch back to Edit to select again. You can't follow links to your own pages while the AI is working. You'll see Navigation locked while AI is generating. To open another page without clicking a link, use the page switcher in the middle of the top bar, or click the page in the Pages panel. Related Edit text, links and images in place The Style panel Keyboard shortcuts"},{"slug":"roles","title":"Roles","summary":"Exactly what the workspace owner and members can each do.","section":"Team members","text":"A workspace has one owner. Everyone else is a member. The Members page shows each person's role. Action Owner Member Open, edit and publish sites Yes Yes Use the AI Yes Yes Create, rename, duplicate, archive, restore and delete sites Yes Yes Connect domains Yes Yes See the Members list Yes Yes See pending invitations Yes No Invite, resend and revoke invitations Yes No Remove members Yes No Rename the workspace Yes No Change the plan, buy credits, manage payments Yes No Members can open Subscriptions to see the plan and usage, but every billing button is for the owner only. They see Only the workspace owner can change billing. Credits are shared: every member's AI use and editing time comes out of the workspace's one pool. Settings > Spend shows credits used By user. What isn't available Starjay has only these two roles. There are no custom roles or per-site permissions. There's no way to transfer ownership in the app. A member can't leave a workspace. Ask the owner to remove you. The owner can't be removed. Related Invite members Working with others at the same time"},{"slug":"quickstart","title":"Quickstart: build and publish your first site","summary":"Create a site, have the AI build it, save the result, edit some text, and publish it to your free starjay.app address.","section":"Get started","text":"This tutorial takes about 15 minutes. You need a Starjay account; the Free plan is enough. Building with the AI uses some of your monthly AI credits. Create a site In the dashboard, open Sites in the left menu and select New site. Under Start from, choose Blank. In Name, type a name for your site, such as Corner Bakery. Select Create site. The new site appears in your list of sites. Select its card to open it in the editor. The first time you open a site, you see Starting your site while it loads. If you see Setting up a fresh workspace, wait; this usually takes about a minute. Describe your site Because the page is empty, the canvas shows a Describe your site box. Describe the site in a few sentences. Say what it's for, who it's for, and how it should feel. For example: A warm, modern website for a neighborhood bakery that takes custom cake orders. Include a hero with an order button, a section about our three bestsellers, opening hours, and a contact section. Optional: choose an AI model from the menu at the bottom left of the box. GPT-6 Luna is the default. Optional: attach up to three screenshots of designs you like with the image button, or paste them into the box. Select the arrow button (Generate page), or press Cmd+Enter (Mac) or Ctrl+Enter (Windows). Watch the AI work The AI panel opens on the right. It shows what the AI is doing, step by step, and the canvas updates as the page takes shape. To stop the AI, select the square stop button where the send button was. Ask for changes When the AI finishes, type a follow-up request in the box at the bottom of the AI panel, for example Make the hero image larger and use a darker brown for the buttons. Then send it with the arrow button or Cmd+Enter / Ctrl+Enter. Each request creates a new version. In the session bar at the bottom of the AI panel, use the ‹ and › arrows to step between Original (your site before this session) and each version. The canvas shows whichever version you pick. Save the session When you're happy with the result, select Save in the session bar. This keeps all the changes from the session. If you don't like the result, select Reject instead, then Discard & reject. This restores the site to how it was before the session. Save and Reject are hidden while the AI is working. Edit text on the canvas Double-click any text on the page. Type your change. Press Enter or click somewhere else to save it. Press Esc to cancel. Publish your site Select Publish in the top bar. The Publish panel opens. Select Publish in the panel. The panel shows the progress, for example Queued... and Building site.... When it's done, the status changes to Live and the address of your site appears next to it. If the panel says Publishing locked — accept or reject AI changes first., go back to the AI panel and select Save or Reject, then try again. Visit your site Select the address in the Publish panel to open your live site in a new tab. It looks like corner-bakery.starjay.app. Starjay makes the address from your site's name, and you can change it under Connected Domains in the Publish panel. Changes you make from now on stay in the editor until you publish again. The button then reads Republish. Visitors only ever see what you've published. You can keep experimenting in the editor; your live site doesn't change until you select Republish. Next steps Core ideas: understand sessions, components, tokens, and publishing. Edit text, links and images in place Write prompts that work Connect a custom domain Build a business site: a longer worked example."},{"slug":"troubleshooting","title":"Troubleshooting","summary":"Find the fix for a problem by what you see, with links to every troubleshooting section in the docs.","section":"Help","text":"By what you see What you see What to do Details Starting your site or Setting up a fresh workspace Wait. Setting up a fresh workspace usually takes about a minute. Messages you might see The editor went to sleep Select Refresh. Messages you might see You can't edit the canvas while the AI works Wait for the AI to finish, or stop it. Messages you might see Publishing locked — accept or reject AI changes first. Open the AI panel and select Save or Reject. Publish your site A publish fails Read the error in the Publish panel, then try again. Publish your site Your organization is out of AI credits. Wait for your credits to refill, buy a credit pack, or upgrade. Running out of credits Daily AI limit reached for your workspace. Wait until the time shown. Credits for AI This chat's model requires Pro. Clear the chat to continue. Clear the chat, or upgrade to Pro. Choose an AI model AI memory is full. Clear the AI memory. Your work is kept. AI memory The AI stopped because the request needed more steps Continue, or send a smaller request. Chat with the AI A screenshot won't attach Use PNG, JPEG, or WebP, 5 MB or less, and no more than 3. Show the AI what you mean: screenshots An image won't upload Use JPEG, PNG, WebP, GIF, or SVG, 20 MB or less. The image library You can't delete an image It's in use. Check where it's used first. Where an image is used, and deleting Too long to save on a collection item Shorten the item; the limit is 256 KB. Edit items A collection page is empty on the live site Publish the items. CMS pages on the live site Form notifications don't arrive Verify the email address. Verify notification emails A custom domain stays pending Check the DNS records against the ones shown. Domain troubleshooting That subdomain is taken or reserved Choose a different Starjay address. Your free Starjay address Your workspace has 3 active sites, the Free limit. Archive a site or upgrade to Pro. Create a site A payment failed Select Pay now in the banner. If a payment fails Your changes were overwritten Someone else may be editing the same site. Working with others at the same time Troubleshooting sections Messages you might see: messages in the editor and what to do about each. Domain troubleshooting: every domain status and error. Running out of credits: what stops and how to continue. If a payment fails: the banner and what changes while payment is overdue. The Troubleshooting page in the Use your own AI section: problems when working from Claude Code, Codex, or another AI app. Still stuck? Email support@starjay.com. See Get support for what to include."},{"slug":"unpublish","title":"Unpublish","summary":"Take your site offline without deleting it, and bring it back later.","section":"Publish and domains","text":"Unpublishing takes your site off the internet. Your site, its pages and its settings stay in the editor, and connected domains stay connected. Open the Publish panel Click Publish in the editor's top bar. Click Unpublish Next to Republish, click Unpublish. It takes effect right away, without a confirmation step. When it's done, you see Site unpublished and the status changes to Deployed (offline). What visitors see Visitors to any of your site's addresses see a Site Offline page saying the site is currently offline. What doesn't change Your site and everything in the editor. Your Starjay address. Nobody else can take it. Connected custom domains and their DNS setup. Form submissions you've already received. Forms on the site can't receive new submissions while it's offline. Bring the site back Click Publish. Your site goes live again at the same addresses, with any changes you've made since. Related Publish your site Disconnect a domain Rename, duplicate, archive, restore, delete a site"},{"slug":"show-the-ai-what-you-mean-screenshots","title":"Show the AI what you mean: screenshots","summary":"How to attach or paste screenshots to a message so the AI can see what you're describing.","section":"Build with AI","text":"A screenshot is often faster than a description. Attach a picture of a layout you like, a bug you see, or a sketch, and tell the AI what to do with it. Add the screenshot Click the image icon next to the send button (Attach screenshot (or paste)) and choose a file. Or copy an image and paste it into the prompt box. To add more, repeat. Check what's attached Thumbnails appear above the text. Click one to see it full size. Click the × on a thumbnail to remove it. Say what to do with it The box now says Describe what to do with these screenshots.... Tell the AI what to take from the image, then press Enter. Limits Limit Screenshots per message 3 File types PNG, JPEG, WebP Size of each screenshot 5 MB All screenshots in one message together 15 MB If a file doesn't fit, you see a message such as Screenshots must be PNG, JPEG, or WebP. or Up to 3 screenshots per message. Export a large image as WebP or JPEG to make it smaller. Screenshots are for the AI, not your site A screenshot you attach is something the AI looks at. It isn't added to your image library or placed on your page. To put an image on your site, add it to the image library, or ask the AI to generate one. Tips Say what matters: \"Copy the layout of the pricing table in this screenshot, not the colors.\" Circle or mark up the part you mean before you take the screenshot. For a page you can't share by address (for example, one behind a login), a screenshot is the way to show it. For a public page, you can give the AI its address instead. Related Chat with the AI Write prompts that work Limits"},{"slug":"collect-inquiries-with-a-form","title":"Collect inquiries with a form","summary":"Add a contact form, get an email each time someone submits it, test it, then read and export the submissions.","section":"Worked examples","text":"In this tutorial you add an inquiry form to your Contact page, verify the email address that should receive notifications, test the form on your live site, and export the results. Before you start You need a site with a Contact page, such as the one from Build a business site. You need access to the inbox of the email address that should get notifications. Starjay sends a 6-digit code to it. Ask the AI for a form Open the Contact page Open the Contact page on the canvas and click the AI button at the top right. Ask for the form Send: Add an inquiry form to this page with these fields: name (required), email (required), phone (optional), \"What can we help with?\" as a dropdown with Custom cake, Wholesale and Other, and a message (required). Send each submission to orders@example.com. The button should say \"Send inquiry\". Use your own email address instead of orders@example.com. Read the AI's reply The AI builds the form and places it on the page. Because the email address isn't verified yet, the AI tells you to verify it in the Forms panel. Save the session Click Save in the AI Session bar. Forms are built from Starjay's form components, not hand-written HTML. Ask the AI for form changes, or use the Forms panel. Verify your notification email Starjay only sends notifications to addresses you've verified for this site. Until then, submissions are still saved, but no email is sent. Open the form Click Forms in the left icon rail. Click the Definitions tab, then click your form. Find the email destination Under Destinations, the email row shows your address and the status unverified. Send the code Click verify on that row. The panel shows Code sent — check your inbox and a box labeled 6-digit code. Enter the code Copy the 6-digit code from the email, type it into the box and click Confirm. The status changes to verified. The code expires after 15 minutes. If it has expired, or the email didn't arrive, click resend to get a new one. Check your spam folder too. Check the form's settings On the Definitions tab you can also change the form yourself. Each section (Fields, Destinations, Settings) has an Edit button; make your changes and click Save. Fields — labels, types, required, placeholder and help text. Destinations — add another address with + email, or send submissions to another service with + webhook. Settings — Submit label, Success message (shown after a visitor submits), Error message, and Spam protection, which is on by default. Publish and test Publish the site Form changes reach your live site when you publish. Click Publish at the top right, then Publish or Republish in the panel, and wait for Live. Submit a test inquiry Open your live site's Contact page and fill in the form as a visitor would. After you submit, you see the success message. Check your email The verified address receives a notification with the submission. Read and export submissions Open the Submissions tab In the Forms panel, click the Submissions tab. The table shows each form with Total, Unread and Latest. Read a submission Click your form, then a submission. Unread submissions have a dot. Opening a submission shows every field. Use Mark as read or Mark as unread to keep track. Export to a spreadsheet Go back to the list of submissions for the form and click Export CSV. A CSV file downloads that you can open in any spreadsheet app. Submissions are kept until you delete them. You delete them one at a time; there's no \"delete all\". You can also see submissions from all your sites on the dashboard's Form responses page. If something goes wrong Problem What to do Submissions arrive in the Submissions tab but no email comes. Check the destination's status is verified. If it says pending, click enter code and finish verifying. Check your spam folder. Code expired. Request a new one. Click resend and use the new code within 15 minutes. Invalid code Check you typed the latest code. Each new code replaces the one before it. Too many attempts. Request a new code. Click resend and enter the new code. Maximum of 5 verified email addresses per site A site can have up to 5 verified addresses. Click revoke next to one you no longer need. The form on your live site doesn't have your latest changes. Publish the site again. The form looks unstyled or out of place. Ask the AI to restyle it, for example Make the form match the rest of the Contact page. Related Add a form Verify notification emails Where submissions go Read and export submissions Spam protection"},{"slug":"draft-ready-and-live-pages","title":"Draft, ready and live pages","summary":"How a page's publish state decides whether it goes live, and how to change it.","section":"Pages","text":"Each page has a publish state. It decides what happens to the page the next time you publish your site. State What it means How it shows in the Pages panel Ready The page goes live on the next publish. New pages start here. Grey icon until you publish. Live A ready page that's on your published site now. Green icon. A yellow diamond means it has changes you haven't published yet. Draft The page stays in the editor and never goes live. Draft label. Deleted The page is removed on the next publish. Deleted label. Nothing changes on your live site until you publish. Marking a page only decides what the next publish does. Change a page's state Right-click the page in the Pages panel. The publish action changes depending on the page's state: Unmark for Publish — on a ready page that isn't live yet. Turns it into a draft. Mark for Publish — on a draft. Makes it ready again, so it goes live on the next publish. Mark for Depublish — on a live page. The next publish takes it off your live site. It stays in the editor as a draft. Pages that show CMS items have no publish action of their own. Why drafts are useful Drafts let you work on a page while still publishing the rest of the site. A draft never goes live, however many times you publish. Visitors who go to a draft's address see your 404 page. The AI can also change a page's publish state when you ask it to. Related Publish your site Delete and restore a page Pages and the Pages panel"},{"slug":"connect-the-claude-app-or-claudeai","title":"Connect the Claude app or Claude.ai","summary":"Add Starjay as a connector in the Claude app or on Claude.ai and sign in.","section":"Use your own AI","text":"A connector you add in Claude is available both in the Claude app and on Claude.ai. Open Connectors In Claude, go to Settings → Connectors → Add. Add the connector Enter these values, then choose Continue: Field Value Name starjay URL https://app.starjay.com/mcp Sign in Sign in to Starjay when prompted and approve access. Turn it on in your conversation Enable the starjay connector in the conversation where you want to use it. Next steps Start working on a site Permissions and safety"},{"slug":"fonts","title":"Fonts","summary":"How to choose, add, change and remove the fonts your site uses.","section":"Design","text":"Your site's fonts live in Tokens → Typography, under Font families. Each entry is a font slot with a name, such as heading or body, and the font it uses. Elements on your site use a slot, so changing the slot's font changes every element that uses it. Change a slot's font Open Typography Click Tokens in the left rail, then the Typography tab. Open the font picker Open the slot's menu and choose Change font. Find a font Search by name (Search fonts…), or filter with Popular, Sans, Serif, Mono, Display, Handwriting or All. Hover over a filter to see what it means. Preview it Click a font to see it at different sizes, with its details: Weights, Italic, Variable and Languages. Use it Click Use this font, or Back to list to keep looking. Add a font slot Click Add. Enter a Slot name, such as display. Names use letters, numbers and hyphens, and start with a letter. Under Font, click Choose a font…, pick a font, and click Use this font. The new slot is added. To use the new slot, pick it in the Style panel under Typography → Font, or ask the AI. See a font's details Choose See font from the slot's menu. You see a specimen and Font details: Token, Source, CSS stack, Styles and Language support. Click Change font to pick a different one. Rename a slot Double-click the slot's name, type the new name, and confirm in Rename font slot?. Everything that uses the slot is updated to the new name. Delete a slot Choose Delete font from the slot's menu. If the slot is in use, Token in use lists where. Click Remove Anyway to delete it. Elements that used it fall back to your page's default font. Your site must keep at least one font slot. Fonts are hosted with your site Fonts you pick from the Google Fonts catalog are downloaded and hosted along with your site. Your visitors' browsers load them from your site, never from Google, so no visitor information is sent to Google. Fonts with many separate weights make your pages heavier. Variable fonts cover all weights in one file. Set the default font The font used for text that doesn't set its own is the Font in Page defaults. Ask the AI instead Use a classic serif for headings and a clean sans-serif for body text. Pick fonts that feel playful but stay readable. Related Design tokens: why your site has them The Style panel Page defaults"},{"slug":"field-types","title":"Field types","summary":"Lists every collection field type, what it's for, and what you can change after a field is saved.","section":"Content (CMS)","text":"Every field in a collection has a type. The type decides what kind of value the field holds and which control you see in the item editor. The 15 field types Type Use it for In the item editor Text Short, single-line text: a title, a name, a job role. A one-line text box. Long text Plain text over several lines, without formatting. A multi-line text box. Markdown Formatted text: an article body, a product description. A formatting editor with headings, bold, italic, lists, quotes, code blocks, tables, links and images. Edit markdown source shows the raw text. Number Prices, quantities, ratings, sort order. A number box. Boolean Yes-or-no values, like \"Featured\". An on/off control. Slug The part of an item's address that identifies it, like my-first-post. A text box, plus Generate when the slug is generated from another field. See Item addresses and slugs. Date & time Publish dates, event times. A calendar with a time box, Now and Clear. Shown in your local time. Enum One choice from a fixed list, like a category or a status. A drop-down of the options you set. Reference A link to an item in another collection, like a post's author. A search box to pick an item, with + New to create one. See References between collections. List Several values of the same kind, or several entries with their own fields. Entries with Move up, Move down, Remove and + Add item. Object A group of fields kept together, like an address. The group's fields, indented under the field name. Dictionary Named entries you make up as you go, like specifications (Weight: 2 kg). Key and Value rows with + Add entry. Keys can't be empty or repeated. Image A picture from your image library. Choose an image..., which opens the image picker, plus an Alt text box. Color A color value. A hex box (#rgb or #rrggbb) and a color swatch. Link A web address. A text box for the address. Notes on some types Image. When you add an image field in Edit Schema, Starjay also adds a matching alt text field, named after the image field (for example, \"Cover Alt Text\"). In the item editor, the alt text box sits under the image. When you pick an image and the alt text is empty, the image's description from the library fills it in. See Alt text and descriptions. List. A list has one item type, or several. With several, each entry can be a different kind. See Object types and mixed lists. Object. An object's fields can be your own, or come from a reusable object type. Markdown. Pages show Markdown with its formatting. See Showing Markdown. Settings every field has Field name. The label you see in the item editor. Required. The item can't be published without a value. It can still be saved. See Required fields. Help text. Open More options to add it. It's \"Shown to editors and the AI.\" Each collection also has a Title field. Its value is \"Shown as each item's name in lists.\" Changing a field after it's saved The name can change. Renaming a field doesn't affect its values. The type can't change, with one exception. A saved field's type shows a lock, with the tooltip \"You cannot change the type for this field. Create a new field instead.\" The exception: Text, Long text and Markdown. A saved field can switch between these three, and its values are kept. The editor warns you how pages that already show the field may be affected, for example that **bold** may appear as typed until the page is updated. A saved list keeps its kind. You can't switch a saved list between one item type and several. To change it, add a new field and delete the old one. To change a field's type, add a new field with the type you want, move the values across (or ask the AI to), then remove the old field. See Delete items, fields and collections. Related Create a collection Edit items Limits"},{"slug":"create-a-site","title":"Create a site","summary":"How to create a new site from a template or from a blank start.","section":"Your account and dashboard","text":"Select New site On the Sites page, select New site. The Create a new site dialog opens. Choose what to start from Under Start from, select a card. Blank is always first. The other cards are templates, each with a preview and a short description. See Templates. Name the site Type a name in Name (up to 60 characters). You can change it later. Create it Select Create site. The new site appears on the Sites page. Select it to open it in the editor. If the templates can't load, the dialog shows Couldn't load templates — starting blank. You can still create a blank site. The Free plan's three-site limit A Free workspace can have three active sites. Archived sites don't count. When you try to create a fourth, the dialog shows Your workspace has 3 active sites, the Free limit. You can then: archive a site you aren't working on, then create the new one, or select Upgrade to Pro for unlimited active sites. Duplicating a site counts as creating one, so the same limit applies. Next steps Quickstart: build and publish your first site Choose a path Plans"},{"slug":"buy-more-credits","title":"Buy more credits","summary":"How to add credit packs to a Pro workspace, what they cost, and how to reduce them.","section":"Plans, credits and billing","text":"Credit packs give your workspace extra credits every month, on top of your plan's credits. Each pack adds 10,000 credits a month. You can have up to 10 packs. Packs are available on Pro. On the Free plan, the way to get more credits is to upgrade to Pro. Only the workspace owner can buy credits. What packs cost Packs bill on the same schedule as your Pro plan: Your Pro plan Price per pack Monthly $12/month Yearly $96/year ($8/month) Add credit packs Open Subscriptions In the dashboard, select Subscriptions. Select Buy credits On the AI credits card, select Buy credits. The Add more AI credits dialog opens. Choose an amount In Additional credits, choose how many credits to add. The dialog shows the price and your Total per month. Pay Check Due today and select Pay. Tax is added to the amount shown. The new credits are available right away. Due today covers the rest of your current billing period; after that, the packs renew with your plan. Reduce or remove packs Open the dialog On Subscriptions, select Buy credits on the AI credits card. Choose a lower amount In Additional credits, choose a smaller amount, or None to remove all packs. Confirm Select Update plan. A reduction takes effect at your next renewal. You keep your current credits until then. The AI credits card shows the new amount and when it starts. To cancel a scheduled reduction, open the dialog again and choose your current amount, then select Keep current plan. Credit packs don't end when Pro ends. If you downgrade to Free, remove your packs separately. Related How credits work Payments and invoices"},{"slug":"place-and-replace-images","title":"Place and replace images","summary":"Shows how to swap an image on the canvas and how to pick images in other parts of the editor.","section":"Images","text":"Replace an image on the canvas Open the image box Double-click the image on the canvas. Or select it and click the image icon (Change image) on its label. A small box opens with the current image and its alt text. Open the chooser Click the thumbnail. Under Replace with... you see your library. Pick the new image Search with Search images… and click an image. Or click Upload new to add one from your computer and use it straight away. The new image is saved as soon as you pick it. The old image stays in your library, so you can switch back the same way. The placement's alt text doesn't change. Update it if the new image needs a different description. See Alt text and descriptions. If the thumbnail isn't clickable, this image can't be replaced from the canvas. Ask the AI instead. The \"unmanaged\" badge An unmanaged badge means the image on the page isn't from your library. Replace it with a library image to fix it. Every image on your site should come from the library, so it's sized and served properly. Pick an image elsewhere in the editor Other places use a larger picker titled Pick an image: An Image field in a collection item (Choose an image...). The Image button in a Markdown field's toolbar. Images in your site's SEO settings, such as the social image. In it you can search, filter by tag, click Upload, use From URL to import an image from a web address, or drop an image onto the grid. Ask the AI You can also describe what you want, for example \"Use the mountain photo as the hero background.\" The AI picks from your library, or imports or generates an image if you ask. Add a new image to a page To add an image where there isn't one, use the Elements panel, or ask the AI. See Add elements and sections. Related The image library Generate images Edit text, links and images in place"},{"slug":"pages-and-components","title":"Pages and components","summary":"How a Starjay site splits structure, presentation and wording across page files, component files and content files, and how to change text correctly.","section":"Site code reference","text":"A Starjay site keeps three things apart: Page files (src/pages/*.astro) hold structure: which sections appear, in what order, and what each one receives. Component files (src/components/{sections,layout,ui}/*.astro) hold presentation: markup, classes and responsive behavior. They take their content through Astro.props. Content files (content/pages/*.json and content/components/**/*.json) hold the visible wording. Where the wording goes After every AI change, whether from Starjay's AI or your own, Starjay moves the visible text out of the .astro files that change touched and into content files. It then rewrites the code to read the text from there: Text a page passes to a component goes into the page's content file, content/pages/{route}.json. The page passes it on as a prop: heading={content.ourStory.heading}. Text written directly in a page's own markup goes under copy in the same file: {content.copy.questions}. A component's default text and its own template text go into content/components/{category}/{Name}.json. The component imports that file and uses the values as prop defaults: heading = copy.heading. The content file mirrors the source path: src/pages/index.astro uses content/pages/index.json, src/pages/blog/[slug].astro uses content/pages/blog/[slug].json, and src/components/sections/Hero.astro uses content/components/sections/Hero.json. Not every string moves. Starjay only moves text it can prove renders exactly the same afterwards, so some text stays in code: link addresses, image alt text, text inside expressions, and anything it can't move safely. This happens as part of the change, so stepping back through versions or rejecting the session undoes it along with everything else. Styled phrases use named marks When a sentence mixes plain text with styled words, line breaks or simple variables, it's stored as one marked value and rendered by the <Text> component: <name>…</name> applies a mark. Marks can nest but not overlap. \\n is a line break. {name} is a variable that the code fills in. It always renders as text. To write a literal <, { or }, use <, { or }. Write & only where a literal & would otherwise start one of those escapes. strong, b, em and i work everywhere. Every other mark is defined once in src/marks.json as an element and a class. Changing a mark's class there restyles every place that uses it. Names that Starjay creates combine a readable stem with a short code, such as textAccent3k9f2a. The friendly names you see on the formatting toolbar are labels for these marks. In code, always use the mark's name, never its label. A value that names a mark missing from src/marks.json shows that phrase as plain text. A malformed value (an unclosed mark, say) shows the whole value as plain text. Neither breaks the page. Worked example An About page with one section. The page passes its section's text from its content file and has one line of its own copy: --- // src/pages/about.astro import Base from '../layouts/Base.astro' import StoryIntro from '../components/sections/StoryIntro.astro' import content from '../../content/pages/about.json' // An address returned by browse_assets, used as is const teamPhoto = '/_images/team-at-work~0c9e5b1a-6d2f-4e8a-9b47-2f1d8c3a7e60/public' --- <Base> <StoryIntro heading={content.ourStory.heading} body={content.ourStory.body} imageUrl={teamPhoto} imageAlt=\"Four people sketching around a workshop table\" /> <p class=\"mx-auto max-w-3xl px-6 py-12 text-ink-700\">{content.copy.questionsWriteToUs}</p> </Base> // content/pages/about.json { \"ourStory\": { \"heading\": \"Our story\", \"body\": \"We started in a garage in 2019, and we still answer every email ourselves.\" }, \"copy\": { \"questionsWriteToUs\": \"Questions? Write to us any time.\" } } The component declares its props, takes its defaults from its own content file, and renders marked text through <Text>: --- // src/components/sections/StoryIntro.astro import copy from '../../../content/components/sections/StoryIntro.json' import Text from '@starjay/design-system/components/text/Text.astro' interface Props { heading?: string body?: string imageUrl?: string imageAlt?: string } const { heading = copy.heading, body = copy.body, imageUrl, imageAlt = '' } = Astro.props as Props --- <section data-component=\"StoryIntro\" class=\"w-full bg-surface-50 py-24\"> <div class=\"mx-auto grid max-w-5xl gap-12 px-6 md:grid-cols-2\"> <div class=\"flex flex-col gap-6\"> <p class=\"text-sm uppercase tracking-wide text-ink-500\"> <Text value={copy.tagline} marks={['textAccent3k9f2a']} /> </p> <h2 class=\"font-display text-4xl text-ink-900\">{heading}</h2> <p class=\"text-lg text-ink-700\">{body}</p> <p class=\"text-ink-700\"><Text value={copy.signOff} /></p> </div> {imageUrl && <img src={imageUrl} alt={imageAlt} class=\"w-full rounded-lg object-cover\" loading=\"lazy\" decoding=\"async\" />} </div> </section> // content/components/sections/StoryIntro.json { \"heading\": \"Our story\", \"body\": \"Tell visitors how you started.\", \"tagline\": \"Built for <textAccent3k9f2a>small teams</textAccent3k9f2a>\", \"signOff\": \"See you soon,\\nThe <strong>Example Studio</strong> team\" } The page passes heading and body, so the page's values show. The tagline and sign-off are the component's own text: they're the same on every page that uses StoryIntro. // src/marks.json { \"textAccent3k9f2a\": { \"tag\": \"span\", \"class\": \"text-accent-600\" } } <Text> takes value (the marked string), marks (the custom marks this field offers on the formatting toolbar; it doesn't change what renders) and vars (values for {name} placeholders). It renders the text with no wrapper element. Token names are site-specific Color and font class names in these examples (bg-surface-50, text-ink-900, text-accent-600, font-display) are made up. Every site names its own tokens. Check the real names with get_tokens or in the Tokens panel before you write code. Change text correctly Edit the content file, not the code, whenever the text has already been moved there. write_file and patch_file both accept content/pages/**.json and content/components/**.json. Find where the text is read Open the page or component and look at the prop or expression that renders the text. content.ourStory.heading in a page means content/pages/about.json. copy.heading in a component means that component's own content file. Pick the right file for the scope you want A value in a page's content file changes that page only. A value in a component's content file is a default: it changes every page that uses the component without passing that prop. Layout components such as the header and footer usually take all their text from defaults, so editing their content file changes every page. Change the value, keep the key Edit only the string. The code reads each value by its key, so renaming or removing a key breaks the page. The file must stay valid JSON; a write that isn't valid JSON is refused. Keep marked values well formed Close every mark you open, use only mark names that exist in src/marks.json (or strong, b, em, i), and keep every {name} variable the code passes in vars. To add new text, write it directly in the .astro file as an ordinary string or element text. When your change ends, Starjay moves it into the right content file for you. You can also add the key to the content file yourself and read it in code. To add a new style for part of a sentence, add a mark to src/marks.json and use it in the value, or write the styled element in the markup and let Starjay convert it. Content rules You SHOULD change existing wording in the content file, not by rewriting the code that reads it. You MUST keep the keys in a content file unchanged when you edit values. Renamed or removed keys break the page. Content files MUST be valid JSON. The platform refuses invalid JSON. In marked values you MUST write mark names, never their toolbar labels. Text a page passes to a component MUST go on the component tag as a prop (or in a frontmatter const for arrays and objects). Don't hardcode page-specific text inside a shared component. A page MUST wrap its content in <Base> and import every component it uses. The platform refuses a page with no frontmatter or with a component that isn't imported. Related Component rules Astro syntax rules Edit text, links and images in place Shared components and \"used on N pages\""},{"slug":"file-uploads","title":"File uploads","summary":"Shows how to let visitors attach images or PDFs to a form, with the limits and where the files end up.","section":"Forms","text":"A file field lets visitors attach photos or documents, such as pictures of a problem or a certificate. Add a file field Ask the AI, for example \"Add a field where customers can upload up to 5 photos of the damage.\" Or, in the Forms panel, edit Fields, click + Add field, set its type to file and open the field's options: File kind: Images or PDF documents. Max files: how many files a visitor can attach to this field. What visitors can upload Images JPEG, PNG, WebP, GIF Documents PDF Files per field 1 by default, up to 10 Files per submission Up to 20 across all fields Size per file Up to 10 MB by default. Ask the AI to raise it, up to 25 MB. Where the files go File fields need submissions to be saved, which they are unless you've asked the AI to turn that off. In the Forms panel: open the submission. Each file shows its name, size and type, with Download. Images show a small preview. In notification emails: files aren't attached. The email lists each file's name and size, with a link \"View files in Starjay\". Opening it needs you to sign in. In webhooks: the file's name, size and type are sent, not the file itself. In a CSV export: the file names are listed. Files come from your site's visitors and aren't scanned for viruses. Only open files you expect, and treat downloads with care. How long files are kept Files stay with their submission. Deleting the submission deletes its files. Deleting the site deletes them all. Related Form field types Read and export submissions Limits"},{"slug":"search-engines-and-ai-crawlers","title":"Search engines and AI crawlers","summary":"Explains the three search visibility settings and when a change takes effect.","section":"SEO and addresses","text":"One setting controls who may read your whole site: search engines, AI crawlers, both or neither. Find it in the SEO view under Indexing. The three options Option What it does Public Search engines and AI can access your content. This is the default. Block AI crawlers Asks AI crawlers not to read your site, which blocks AI training and reduces how often your site appears in AI-generated answers. Search engines are unaffected. Hidden from search Asks all crawlers to stay away and tells search engines not to list any page. Your site won't appear in search results. These settings work by publishing instructions that well-behaved crawlers follow: rules in your site's robots.txt file and, for Hidden from search, a \"don't index\" tag on every page. A crawler that ignores the rules can still read a public website. To keep a site completely private, don't publish it. When a change takes effect The setting saves as soon as you pick an option, but your live site changes only when you publish again. Until then, the Publish panel shows Indexability changes pending — republish to apply. You can't change this setting while a publish is running. Hiding a single page To keep one page out of search results while the rest of the site stays public, open that page under Page-level SEO and turn off Search Engines. See Page SEO. Hidden from search overrides every page's own setting. Hidden pages are also left out of your sitemap. See What Starjay generates for you. Related Verify your site with Google and Bing Publish your site"},{"slug":"edit-text-links-and-images-in-place","title":"Edit text, links and images in place","summary":"How to change text, link destinations, images and alt text directly on the canvas, and what to do when something can't be edited there.","section":"The editor","text":"You edit content by double-clicking it on the canvas. There's no separate content panel. Your changes save as soon as you confirm them, and you can undo them with Cmd/Ctrl+Z. Edit text Double-click the text In Edit mode, double-click a heading, paragraph, button label or other text. A cursor appears in the text. Type your change Edit the text as you would in a document. Save or cancel Press Enter or click somewhere else to save. Press Esc to cancel and put the old text back. Text you empty completely isn't saved; the old text comes back. To remove an element, select it and press Delete instead. Styled phrases and the formatting toolbar Some text mixes styles, such as a heading with one highlighted word or a sentence with a bold phrase. When you edit text like this, a small toolbar appears above it with the styles that text offers: Bold, Italic, and any styles your site uses there (for example a gradient). Select some words and click a style to apply or remove it. Cmd/Ctrl+B and Cmd/Ctrl+I apply bold and italic. Shift+Enter adds a line break. The toolbar only appears for text that already supports styled phrases. For plain text, Enter saves. Edit a link Double-click the link (or select it and click the link icon on its label). A small box opens with a Link section. Open the destination list and choose one of your pages, or choose External URL... and type a web address such as https://example.com. Picking a page saves straight away. For an external address, press Enter or click Save. Click Revert to go back to the saved address. If the link's text is editable, you can type in it at the same time; the box opens next to the text. Replace an image or change its alt text Double-click the image (or select it and click the image icon on its label). A box opens with an Image section. To replace the image, click the thumbnail. Pick an image from your library, search with Search images…, or click Upload new. Picking an image saves straight away. To change the alt text, click the Alt text field, type a description of the image in this spot, then press Enter or click Save. Press Esc or click Revert to discard your change. An unmanaged badge means the image isn't in your image library. Replace it with a library image to fix that. See Place and replace images and Alt text and descriptions. Add items to a list Select a list or one of its items. If you can add to it on the canvas, a + Add item button appears below the selection. Click it to add a new item, then double-click the new item to change its text. When something can't be edited in place Some content can't be changed by double-clicking, for example text that's calculated or assembled from several values, or a link that isn't a simple address. When you double-click it, the box shows only Ask AI to change this…. Type what you want and press Enter. Your request goes to the AI with your selection attached, and the AI panel opens so you can follow along. That Ask AI to change this… row appears in every box, so you can always hand a change to the AI instead. Text that comes from a component's default wording may show Edit {ComponentName} with the note Changes affect every use of this default. Click it to open the component on its own and edit the default there. Text that comes from a CMS collection item is edited in the CMS view. Some text belongs to a component that appears on several pages. When you edit it, a yellow notice tells you how many pages change. See Shared components and \"used on N pages\". Related Selecting things on the canvas Header, footer and navigation Undo and redo"},{"slug":"accept-an-invitation","title":"Accept an invitation","summary":"How to join a workspace you've been invited to.","section":"Team members","text":"An invitation is for one email address. To accept it, you must be signed in to Starjay with an account that uses that address. Accept from the dashboard If you're signed in with the invited address, the invitation waits at the top of your dashboard: \"[name] invited you to [workspace]\". Find the banner Open the dashboard. The invitation shows at the top of the page. Accept Select Accept. The dashboard switches to the new workspace. Select Decline if you don't want to join. You can also accept from the workspace picker in the left menu: select Join plus the workspace name. Accept from the email link Select the link in the invitation email: If you aren't signed in, the page shows who invited you and a Continue as button with the invited address. Sign in, or create an account with that address. The invitation is then waiting on your dashboard. If you're signed in with the invited address, the page says the invitation is waiting on your dashboard. Select Open dashboard and accept it there. If you're signed in with a different address, the page says This invitation is for the invited address. Select Sign out, then sign in or create an account with the invited address. The link works on a phone too. Problems What you see What it means You have an invitation waiting. with a request to verify your email Your email address isn't verified with your sign-in yet. Verify it, then the invitation appears. This invitation isn't valid It expired (links last 7 days), was revoked, or was already used. Ask the owner to send a new one. \"...isn't accepting members right now (its Pro plan has ended).\" The workspace isn't on Pro. Ask the owner to renew Pro. After you join, you belong to more than one workspace. Use the workspace picker to switch. See Workspaces. Related Roles Sign in and your account"},{"slug":"shared-components-and-used-on-n-pages","title":"Shared components and \"used on N pages\"","summary":"Why some edits change more than one page, the notices that warn you, and how to change only one page.","section":"The editor","text":"Your site is built from pages and components. A page decides which sections appear and in what order. A component is a reusable building block, such as a header, a footer, a pricing table or a card. When the same component appears on several pages, each page shows that one component. That's what keeps a site consistent: change the footer once and every page gets the new footer. It also means an edit inside a shared component isn't limited to the page you're looking at. The warnings you'll see Header and footer. When you select the site header or footer, a notice appears at the bottom of the canvas: Editing the site Header — changes affect all N pages. (or Footer). The Style panel shows the same notice. Text in a component used on several pages. When you double-click text that belongs to a component on more than one page, a yellow notice opens under it, for example Testimonials appears on 3 pages with This edit changes all 3 of them. To change only this page, ask AI and make this requirement explicit. In the Navigator, a link icon on a row means Shared component — edits affect every page. In the Components tab, each component shows how many pages it's on (for example 3 pages). Styling works the same way. A style you set on an element inside a shared component applies wherever that component appears. Change only one page Ask the AI. Say which page and that the change must apply to that page only, for example: \"On the About page only, change the testimonial heading to 'What our clients say'. Don't change other pages.\" The AI can give that page its own wording or its own version of the section. If a component instance on the page is itself the problem, you can also right-click it and choose Convert to regular element. That replaces the component with ordinary, editable elements on that page. If the component sits inside another shared component, a dialog tells you how many pages the conversion reaches before you confirm. Related Header, footer and navigation Components Edit text, links and images in place"},{"slug":"core-ideas","title":"Core ideas","summary":"The handful of ideas that explain how Starjay behaves: workspaces, AI sessions, pages and components, tokens, publishing, checkpoints, and credits.","section":"Get started","text":"Workspaces and sites A workspace holds your sites, your plan and billing, your AI credits, and your team members. Everyone in a workspace shares its credits. If you belong to more than one workspace, you can switch between them in the dashboard. A site is one website with its own pages, images, forms, content, and address. On the Free plan a workspace can have three active sites; archived sites don't count. Learn more: Workspaces, Plans. The AI session When you ask the AI for something, Starjay starts an AI session. Every request in the session becomes a version. You can step back and forth between the versions and the Original (the site before the session started). A session ends when you choose: Save: keep everything from the session. Reject: put the whole site back the way it was before the session, including any collection content the AI changed. You decide once, for the whole session, not after every request. While a session is open, you can't publish; save or reject it first. Learn more: AI sessions: versions, Save and Reject. Pages and components A page is one address on your site, such as /about. It decides which sections appear and in what order, and holds that page's content. A component is a reusable building block, such as a header, a footer, a hero, or a pricing table. Pages are made of components. When a component is used on several pages, changing its design changes it everywhere. The editor shows a notice such as \"Used on N pages\" so you know before you edit. Learn more: Pages and the Pages panel, Shared components and \"used on N pages\". Design tokens Your site's colors and fonts are design tokens: each one is named once (for example, a primary color or a heading font) and used everywhere. Change a token and every place that uses it updates. Spacing, sizes, and similar settings aren't tokens; they're set directly on each element. Learn more: Design tokens: why your site has them. Drafts and published The editor is your working copy. Visitors see only what you last published. Nothing you change in the editor reaches your live site until you publish. Pages have their own state too. A page can be a draft (never published), ready (goes live on the next publish), or live. Collection items are different: each item publishes on its own and goes live within seconds, without republishing the whole site. Learn more: Publish your site, Draft, ready and live pages, Publish and unpublish items. Checkpoints A checkpoint is a saved copy of your whole site at one moment. Starjay saves checkpoints automatically at important moments, such as before the AI starts work and when you publish, and you can save your own at any time. Checkpoints are kept permanently, and there's no limit on how many you have. Restoring one puts the whole site back to that moment. Learn more: Checkpoints. Credits Credits are what you spend to use Starjay. The AI uses credits, and so does the time your site is open for editing. Published sites don't use credits. Each workspace gets a monthly allowance that refills every period. Learn more: How credits work. Related Glossary Quickstart: build and publish your first site"},{"slug":"connect-a-custom-domain","title":"Connect a custom domain","summary":"Put your site on a domain you own by connecting it and adding the DNS records Starjay shows you.","section":"Publish and domains","text":"In this tutorial you connect a domain you already own, such as yourbusiness.com, or a subdomain of it, such as shop.yourbusiness.com, add a few records at the company that manages your domain's DNS, and make the domain your site's live address. Custom domains are included on every plan. You need: A domain you've bought from a domain company (registrar), such as Namecheap, GoDaddy or Porkbun. Starjay doesn't sell domains. Access to that domain's DNS settings. Usually that's your registrar's dashboard; if you've moved DNS elsewhere (for example, to Cloudflare), use that. No open AI session. Domain controls are locked while the AI is working or a session is waiting for Save or Reject. What you get depends on what you enter: A domain (yourbusiness.com): your site is served at www.yourbusiness.com, and visitors who type yourbusiness.com are sent there too. Follow steps 1 to 5 below. A subdomain (shop.yourbusiness.com): your site is served at exactly that address, with no www. Follow step 1, then Using a subdomain, then step 4 onwards. Starjay never asks for A records Some website builders tell you to add an \"A record\" with an IP address. Starjay doesn't. You only add the records Starjay shows you. If your DNS host can't point the bare domain at a name, you forward it to www instead (step 3). Step 1: Connect the domain Open the Publish panel Click Publish in the editor's top bar. Enter your domain Under Add a custom domain, type your domain without www or https://, for example yourbusiness.com, or a subdomain such as shop.yourbusiness.com. Click Connect Starjay shows Domain connected — configure DNS to activate. The domain now appears under Connected Domains with a yellow dot and a status such as Pending DNS, and a DNS configuration card lists the records to add. Starjay looks up which company runs your DNS. If it recognizes it, the card is titled with its name, for example DNS configuration for Porkbun, and the records are written the way that company expects. Step 2: Add the records Sign in to your DNS host in another tab and open the DNS settings for your domain. Add each record from the card. Click any value in the card to copy it. Record Host / Name Value What it's for CNAME www sites.starjay.app Points www.yourbusiness.com at your Starjay site. TXT _starjay starjay-verify=… (your own code) Proves you own the domain. Starjay won't serve your site on the domain until it finds this record. The bare domain @ Depends on your DNS host (see step 3) Makes yourbusiness.com (without www) work. Copy the values from your card, not from this page. Your starjay-verify= code is unique to your domain. Some DNS hosts want the host name in full (www.yourbusiness.com) instead of just www. If yours does, add your domain to the end. Step 3: Set up the bare domain The DNS standard doesn't allow a CNAME on a bare domain, so DNS hosts handle it differently. The card shows the right row for yours: Your DNS host The card shows What to do Cloudflare CNAME @ → sites.starjay.app Add it. Cloudflare makes it work at the root automatically. Namecheap, Porkbun, DNSimple, Gandi ALIAS @ → sites.starjay.app Add an ALIAS record. Name.com, DNS Made Easy ANAME @ → sites.starjay.app Add an ANAME record. GoDaddy, Squarespace Domains, Hover, Network Solutions, IONOS, Wix, Hostinger, Bluehost, HostGator, DreamHost, SiteGround, OVH, Amazon Route 53, Azure DNS, DigitalOcean, Linode, and hosts Starjay doesn't recognize FORWARD yourbusiness.com → https://www.yourbusiness.com Use your provider's domain forwarding (sometimes called redirect) to send the bare domain to the www address. Choose a permanent (301) forward and keep the path if offered. For forwarding, the card's note tells you where to find the setting when Starjay knows it, for example In GoDaddy, open the domain and use Forwarding. Amazon Route 53, Azure DNS, DigitalOcean and Linode have no forwarding feature: set the forward up at your domain registrar instead, or move your DNS to a host that supports ALIAS records. If your DNS host is Cloudflare The card uses Cloudflare's labels: Name and Target / Content. For each CNAME record, set Proxy status to DNS only (grey cloud). Click the orange cloud until it turns grey. Starjay handles your hosting and HTTPS. Paste the TXT value into Cloudflare's Content field. Using a subdomain If you entered a subdomain, such as shop.yourbusiness.com, the card shows just two records. Starjay writes their names the way most DNS hosts want them: just the part before your domain. Record Host / Name Value What it's for CNAME shop sites.starjay.app Points shop.yourbusiness.com at your Starjay site. TXT _starjay.shop starjay-verify=… (your own code) Proves you own the subdomain. Starjay won't serve your site on it until it finds this record. Add both records in your domain's DNS settings, the same place you'd manage yourbusiness.com. If your DNS host wants the full name, add your domain to the end: shop.yourbusiness.com and _starjay.shop.yourbusiness.com. There's no www record and no bare-domain record for a subdomain, so skip step 3. Your main domain, yourbusiness.com, isn't changed. If your DNS host is Cloudflare, set Proxy status to DNS only (grey cloud) for the CNAME. Step 4: Check the records Click Check DNS now At the bottom of the DNS card, click Check DNS now. Watch the records turn green Each record gets a green check mark as Starjay finds it. The domain's status moves from Pending DNS through Verifying... and Pending SSL (Starjay is setting up the HTTPS certificate) to Live. Check again if needed DNS changes can take a few minutes to appear, sometimes longer. Click Check DNS now again after a while. When every record is verified, the DNS card disappears and the domain shows a selectable button instead of a yellow dot. Step 5: Make the domain your live address Under Connected Domains, your Starjay address and your domain each have a round button. Exactly one is selected: that's the address your site is served at. If your site isn't published yet: select your domain, then click Publish. If your site is already live: select your domain. Starjay asks you to confirm Republish to switch domains, because switching republishes your site. Any changes you've made since your last publish go live too. Click Republish. When the publish finishes, your site is live at www.yourbusiness.com, or at your subdomain, such as shop.yourbusiness.com. Your Starjay address stops serving the site, so visitors there no longer reach it. See Choose which address serves your site. You can ask the AI You can also ask the AI in the editor to connect a domain, for example \"Put my site on yourbusiness.com.\" It asks for your OK before connecting, then tells you the records to add. Related Domain troubleshooting Disconnect a domain Put your site on your own domain"},{"slug":"rebuild-or-borrow-from-an-existing-site","title":"Rebuild or borrow from an existing site","summary":"How to give the AI a web address so it can recreate or borrow the look and structure of an existing page.","section":"Build with AI","text":"You can point the AI at any public web page and ask it to recreate the page, or to borrow just part of it, such as the color scheme or the layout of one section. What the AI captures When you include a web address in your message, the AI opens that page in a browser and looks at it. The status line shows Fetching reference site…. It can: Take screenshots of the page at desktop, tablet and phone sizes, of the whole page, or of one section. Open menus, tabs and accordions on the page to see what's inside them. Read the page's colors (which ones are used for text, backgrounds and buttons), fonts, spacing and layout patterns. Read the page's structure: its sections and their order. The AI then builds with your site's own colors and fonts. It adds new colors and fonts to your design tokens when it needs them, rather than copying raw values into your pages. Copy the address Copy the full address of the page, for example https://example.com/pricing. Tell the AI what to take from it Paste the address into your message and say what you want. For example: Rebuild the homepage at https://example.com as my homepage. Keep the section order and layout, but use my brand colors and fonts. Use the color palette from https://example.com for my site. Make my pricing section look like the pricing table on https://example.com/pricing. Review the result Step through the versions, then Save or Reject. See AI sessions: versions, Save and Reject. Make it your own Replace the text and images with your own, and adjust colors and fonts in Tokens. One page at a time Each address is one page. The AI doesn't click through to other pages on its own. To rebuild several pages, give it the address of each one, ideally one page per request. What it can't do It can't sign in. Pages behind a login, paywall or cookie wall may not show their real content. Use screenshots instead. It can't open private or internal addresses, such as addresses on your own network. It doesn't capture video or step through animations. Credits Opening a reference page uses credits, on top of the AI's own work on your request. The credit badge on the finished request shows the total. Only reuse text, images and logos you have the right to use. Recreating another site's look is a starting point. Replace its content with your own. Related Rebuild an existing site (a worked example) Show the AI what you mean: screenshots Write prompts that work Credits for AI"},{"slug":"get-support","title":"Get support","summary":"How to contact Starjay for help, billing questions, problem reports, security reports, data exports, and deletion requests.","section":"Help","text":"During beta, support is a direct route to a person. One address handles everything: support@starjay.com. You can also open the Support page from the dashboard: select Support at the bottom of the left menu, or go to app.starjay.com/support. You don't need to be signed in to see it. Choose the right request Use these subjects so your request reaches the right place quickly. Request Email subject Include Product and account help Starjay support request The page or site involved, what you expected, what happened, and the approximate time. Billing help Starjay billing request Your account email and the invoice or subscription identifier. Never send full card details. Report abuse Abuse report The published address and the harmful or prohibited behavior. Attach only safe evidence. Security report Security report The vulnerability, the affected address, steps to reproduce it, and its impact. Don't access other users' data. Data export Data export request The workspace and sites to include. Account or workspace deletion Account deletion request Whether you want one site or the whole workspace deleted. When a request concerns your account data, send it from the email address on your account. Never send passwords, session cookies, API keys, payment card details, or AI provider credentials to support. What to include Your Starjay account email. The site name, address, or site ID, if the request is about one site. The approximate time and your time zone, for an error or incident. A short description of how to reproduce the problem, the exact error text, and a screenshot when it helps. Whether publishing, billing, a custom domain, or possible data loss is involved. Request a data export Email support@starjay.com with the subject Data export request. Say which workspace and sites to include. Starjay verifies that you control the account before preparing the export. An export doesn't include secrets, internal security material, Starjay's own platform code, or information that would affect another person's rights. Request account or workspace deletion There's no button to delete your account. Email support@starjay.com with the subject Account deletion request, and say whether you want one site or the whole workspace deleted. Starjay verifies your identity and confirms the scope and consequences with you before starting a deletion, because it can't be undone. Some records may be kept as needed for legal, security, or billing purposes. The Privacy Notice explains this. To delete a single site yourself, use the dashboard. See Rename, duplicate, archive, restore, delete a site. Canceling a paid plan is different from deleting data. To stop your plan from renewing, use Subscriptions in the dashboard or ask for billing help. See Upgrade, switch to yearly, downgrade. Reports from your own AI If you work on your site from Claude Code, Codex, or another connected AI app, that AI can send reports about Starjay problems straight to the team. These reports don't get a reply. If you need an answer, email support. Related Starjay is in beta Troubleshooting FAQ"},{"slug":"delete-and-restore-a-page","title":"Delete and restore a page","summary":"How to mark a page for deletion, bring it back before you publish, and what happens when you publish.","section":"Pages","text":"Deleting a page is a two-step process: you mark it, and the next publish removes it. Until then you can change your mind. Delete a page Right-click the page In the Pages panel, right-click the page you want to delete. Choose Mark for Delete A Delete page dialog explains: This will be carried out on the next publish. It is reversible until then. Confirm Click Delete. The page shows a Deleted label in the tree. The page stays in the editor until you publish. When you publish, it's removed from your live site and from the editor. Visitors who go to its address after that see your 404 page. You can't delete Home or your 404 page. Restore a page before you publish Right-click the page and choose Undelete. The page returns to the state it was in at your last publish: ready if it was live, or a draft if it wasn't. You can also press Cmd/Ctrl+Z straight after marking it. After you publish Once a publish has removed the page, you can't undelete it. To get it back, restore a checkpoint from before the publish. Restoring a checkpoint brings back the whole site as it was at that point. If you might want the page again, mark it as a draft instead of deleting it. A draft stays in the editor but never goes live. See Draft, ready and live pages. Related Draft, ready and live pages Restore a checkpoint Redirects"},{"slug":"connect-codex","title":"Connect Codex","summary":"Add Starjay as an MCP server in Codex and sign in.","section":"Use your own AI","text":"Open the MCP server settings In Codex, open Settings → Plugins → Add → Add MCP server. Enter the server details Field Value Name starjay Type Streamable HTTP URL https://app.starjay.com/mcp Leave all other fields blank, including Bearer token env var, Headers and Headers from environment variables. Click Save. Restart Codex Restart Codex when it asks you to. Authenticate Go to Settings → Plugins → MCPs and click Authenticate next to starjay. Complete sign-in in your browser. Starjay doesn't use API keys or bearer tokens. You always sign in through your browser. Next steps Start working on a site"},{"slug":"page-defaults","title":"Page defaults","summary":"How to set the background color, text color and font your pages use when a component doesn't set its own.","section":"Design","text":"Page defaults are the starting look of every page: the page background, the text color, and the font. A component that sets its own color or font overrides them. Open Settings In the top bar's view menu, choose Settings, then General. Find Page Defaults Scroll to Page Defaults (\"Used when a component doesn’t override them.\"). Set the background Click Background and pick a color. This is the color all components sit on top of. Set the text color Click Text color and pick a color. All text uses it unless something sets its own. Set the font Click Font and pick one of your font slots. The choices are your site's colors and fonts. To add new ones, see Colors and Fonts. Changes take effect on the next page navigation. If the canvas doesn't update right away, switch to another page and back. There's no button to reset page defaults. To go back, use undo, ask the AI, or restore a checkpoint. Other site-wide defaults For other site-wide settings, such as smooth scrolling to links on the same page or smoother font rendering, ask the AI: Turn on smooth scrolling for links within a page. Related Site settings Colors Fonts"},{"slug":"build-a-product-or-services-catalog","title":"Build a product or services catalog","summary":"Build a catalog of products with images, prices and categories, with a listing page, a page per product and links between products and categories.","section":"Worked examples","text":"In this tutorial you build a cake catalog. You'll have two collections: Categories (such as Birthday and Wedding) and Cakes. Each cake has a photo, a price and a link to its category. The AI builds a catalog page and a page for each cake. The same approach works for services, menus, team members or anything else you list many of. Before you start You need a site. Any site works. Upload a few product photos to the image library: click Images in the left icon rail and drag the files in. Give each a clear description, which becomes its default alt text. Ask the AI for the catalog Describe the two collections Open the AI panel and send: Create a catalog of our cakes. First make a Categories collection with a name, a slug and a short description. Then make a Cakes collection with: name, slug, photo (with alt text), price in US dollars, a category that links to an item in Categories, serves (a number of people), a short description and a longer Markdown description. Add sample categories (Birthday, Wedding, Everyday) and six sample cakes. Ask for the pages When it finishes, send: Build a /cakes page that shows all cakes in a grid with photo, name, price and category, with buttons to filter by category. Build a page for each cake with a large photo, price, serves, category and the long description, plus a link back to /cakes. Show prices as $45.00. Add \"Cakes\" to the header. Check the result Open the Pages panel and look at the catalog page and the cake page. On the cake page, use the item menu in the top bar to preview different cakes. Save Click Save in the AI Session bar. Ask the AI to create the collection that's linked to first (Categories), then the one that links to it (Cakes). A link field can only point at a collection that already exists. Look at the collections in the CMS Open the CMS In the top bar, switch the view from Canvas to CMS. Under Collections, you see Categories and Cakes. Look at the fields Open Cakes and click Edit Schema. You see each field and its type: Text for the name, Slug, Image with its alt text field, Number for the price and serves, Reference for the category, Long text and Markdown. Once a field is saved, its type can't change, so choose carefully. The one exception: you can switch a field between Text, Long text and Markdown. To change anything else, add a new field. Add your real products Create a cake In Cakes, click the + button (New item). Type the name; the slug fills in from it. Enter the price as a plain number, such as 45. Add the photo Click the image field and pick a photo from your library. Check the alt text describes the photo. Choose the category Click the category field and pick a category from the list. You can also create a new category from the picker. Publish the cake Click Publish. The dialog lists anything that goes along with it, such as a category that isn't live yet. Linked items publish together, so a live cake never points at a category that isn't live. Click Publish to confirm. Publish the site The catalog pages are part of your site's code. Publish the site once so they exist on your live site: click Publish at the top right, then Publish or Republish in the panel. After that, publishing a cake or a category in the CMS puts it on your live site within a few seconds, without republishing the site. Generate more sample items To try the layout with more products, open the collection and click Generate. Choose how many items, optionally describe them, and generate. The new items are drafts until you publish them. Generating uses credits. If something goes wrong Problem What to do The catalog page on your live site is empty. Publish the cakes in the CMS. Visitors only see published items. A cake's page shows your 404 page. The cake isn't published, or its slug changed. The publish dialog says something needs attention first. A linked item can't be published, for example a category missing a required field. Open it from the link in the dialog and fix it. Unpublish is blocked on a category. Live cakes still link to it. Change or unpublish those cakes first. You can't delete a category. Something links to it. The message names what. Prices show as 45 instead of $45.00. Ask the AI to format the price on the catalog and cake pages. A new field doesn't show on the live site. Changes to a collection's fields reach the live site when you next publish the site. Related When to use a collection Field types References between collections Publish and unpublish items The image library"},{"slug":"object-types-and-mixed-lists","title":"Object types and mixed lists","summary":"Explains reusable groups of fields and lists whose entries can be different kinds.","section":"Content (CMS)","text":"Object types An object type is a group of fields you can reuse. An \"Address\" with street, city and postcode is a typical example. Once it exists, any collection can use it, and so can other object types. To see your object types, open the CMS view and switch from Collections to Object Types. From there you can: Create one with New object type (or Create your first object type). Give it an Object type name, add fields, and pick a Title field, which is \"Shown as each one's name in tables and lists.\" See where it's used under Used in. Turn a group of fields that already lives inside a collection into an object type. Groups like this appear under Found in collections. Open one and click Make reusable. To use an object type in a collection, open Edit Schema, set a field's type to Object, and choose the object type from Custom object. Object types are shared, not copied A field that uses an object type stays linked to it. When you change the object type, every field that uses it changes too. In the collection, the field lists the object type's fields with the note \"Edit these in the object type.\" You can't delete an object type while any field uses it. The delete dialog says how many fields use it. Mixed lists A normal list holds entries of one kind, such as a list of tags or a list of team members. A mixed list holds entries of different kinds. A page-builder-style \"sections\" field is the classic case: one entry is a quote, the next is an image with a caption, the next is a call to action. To make one, add a List field in Edit Schema, choose Several item types, then use Add item type to add each kind. Each kind can have its own fields (Custom fields) or use an object type. In the item editor, + Add item on a mixed list asks which kind to add. Each entry shows its number and kind. A saved list keeps its kind. To switch a list between One item type and Several item types, add a new field and delete the old one. Related Field types Delete items, fields and collections"},{"slug":"templates","title":"Templates","summary":"What you get when you start a site from a template.","section":"Your account and dashboard","text":"A template is a finished site you can start from instead of a blank page. You pick one in the Create a new site dialog. See Create a site. Your copy is yours Starting from a template gives you your own, independent copy: Pages, components, colors and fonts are copied into your site. Change anything you like. Images are copied into your site's image library. They belong to your site, not the template. Later changes to the template don't reach your site, and your changes never affect the template. The site starts unpublished. Nothing is live until you publish it. See Publish your site. Forms need your own delivery settings A template's forms keep their fields and keep saving submissions to the Submissions tab. Email notifications and webhooks are removed, because they pointed at the template author's inbox or server. Add your own in the Forms panel. See Where submissions go. Blank Blank starts a site with nothing designed yet. Describe what you want to the AI and it builds the site. See Chat with the AI. Related Rebuild an existing site Choose a path"},{"slug":"running-out-of-credits","title":"Running out of credits","summary":"What stops and what keeps working when your workspace runs out of credits, and how to continue.","section":"Plans, credits and billing","text":"When your workspace's credits run out, the AI and the editor stop until you get more credits. Your published sites keep working. What stops The AI. You can't send new requests. The AI panel shows AI credits used up with a Manage credits link. If the AI was in the middle of a request, it stops partway and keeps the changes it already made. The editor, after a while. If a site is open for editing when credits run out, you can keep working on it by hand for about an hour, sometimes up to an hour and a half. Then the editor stops. The time you keep working uses credits like normal editing time. Opening sites for editing. While you have no credits, a site can't be opened for editing. You see This workspace is out of credits. What keeps working Your published sites. Visitors can still see every live site, and forms keep collecting submissions. The dashboard. You can still see your sites, form responses, analytics and billing. How to continue Do one of these: On Pro: buy credit packs. See Buy more credits. On Free: upgrade to Pro for 10,000 credits a month. See Upgrade, switch to yearly, downgrade. Wait for your refill. The Subscriptions page shows the date in AI credits used this billing period. Only the workspace owner can buy credits or upgrade. If you're a member, ask the owner. Related How credits work Messages you might see"},{"slug":"where-an-image-is-used-and-deleting","title":"Where an image is used, and deleting","summary":"Shows how to see where an image appears on your site and how to delete an image that's no longer used.","section":"Images","text":"See where an image is used Open Images, click the image, and look under Usage & delivery → Usage. It shows: \"Used in N places\", with a list of where. Uses in your site's code show the file and line. Uses in collection items show the collection, the item and the field. \"Not used in this site\" when nothing uses it. \"Also in N other sites\" when the same image is also used by other sites, for example a site you duplicated. Delete an image Open the image Open Images and click the image. Check it isn't used Wait for Usage to load. If the image is used anywhere, you can't delete it yet. See below. Delete it Click Delete asset. When asked Remove from library?, click Remove. The image leaves your library and its address stops working. Why delete is blocked You can't delete an image while it's in use. The detail view says \"Cannot delete — used in N places\" and what to do: On a page or component: replace or remove the image on the canvas, or ask the AI to. See Place and replace images. In a collection item: replace or clear the image in each item listed. When the count reaches zero, Delete asset becomes available. This rule keeps your site from showing broken images. Every image your site shows must stay in the library. If Starjay couldn't check your collection items, delete stays off, with \"Couldn't check whether CMS items use this image. Delete is off until they can be checked.\" Try again later. The AI can't delete images. It can stop using them, and then you can delete them. Related The image library"},{"slug":"component-rules","title":"Component rules","summary":"Where components live, how they're named and registered, and which components you must reuse or can't change.","section":"Site code reference","text":"The three folders Folder Holds Examples src/components/sections/ Full-width page blocks Hero, Features, Pricing, CTA src/components/layout/ Site-wide chrome reused across pages Navbar, Footer, Container src/components/ui/ Small reusable building blocks Button, Card, Badge Subfolders inside these are fine for organizing. A component anywhere else is refused. Component rules A component MUST live under src/components/sections/, layout/ or ui/. The platform refuses other locations. A component's name (its file name) MUST be unique across the whole site, including subfolders. Creating a second component with an existing name is refused. A component's root element MUST carry data-component=\"ComponentName\", matching the file name. The platform adds it when it's missing and corrects it when it doesn't match. A section component MUST render its own <section> element as its root. Don't wrap it in another layout component. You MUST NOT recreate a component that already exists, especially the header and footer. Import the existing one. Every component SHOULD declare a Props interface and read its content from Astro.props, with defaults. Naming and identity The editor identifies a component by its name, not its path: clicking something on the canvas finds the nearest data-component and looks that name up. Two components with the same name would make selection pick the wrong one, which is why duplicates are refused. When a component's root isn't a single HTML element (its root is another component, a fragment, a condition or several siblings), Starjay wraps the body in one <div data-component=\"ComponentName\" style=\"display:contents\"> so the editor can still find it. The wrapper doesn't affect layout. Registration is automatic There's no registry to edit. Starjay scans the three component folders and builds the component list from the files. A new component appears in the Components tab and the Elements panel after you create it. Its description is written automatically. Header and footer The header and footer render on every page through the Base layout. To use a component as the header or footer, create it in src/components/layout/ and connect it with modify_layout (addComponent with slot header or footer). Don't import the header or footer into individual pages. Layout components own their text as prop defaults, which Starjay moves into their content file. Editing a layout component changes every page. Components used on several pages A section component can be imported by more than one page. Before changing one that is, read each page that uses it. If the change would alter what visitors see (fields added or removed, restyled cards, required props without defaults), create a new component instead of rewriting the shared one. Adding an optional prop whose default keeps the current look is fine. After a write to a component used on several pages, the result includes a multiImporterWarning listing the affected pages. Locked platform components Some components come from Starjay itself and are imported from @starjay/design-system: Component Import FormBase, FormField, FormSubmit @starjay/design-system/components/forms/… Markdown @starjay/design-system/components/cms/Markdown.astro Text @starjay/design-system/components/text/Text.astro You can't edit their source. The form components and Markdown show a Locked badge in the editor, and adding or deleting elements inside them is refused. You style them through their props. See Forms in code and Showing Markdown. Related Pages and components Components Header, footer and navigation"},{"slug":"where-submissions-go","title":"Where submissions go","summary":"Shows how to save submissions, email them to you, and send them to another service with a webhook.","section":"Forms","text":"Each form has Destinations: the places a submission goes when a visitor sends it. To change them, open the form in the Forms panel (Definitions tab) and click Edit next to Destinations. Saved \"All submissions are saved and viewable in the Submissions tab.\" This is on for every form, and it's how you read and export submissions. See Read and export submissions. Email \"This address will receive an email each time someone submits this form.\" Add the address Click + email and enter the address. Save Click Save. If the address isn't verified yet, Starjay sends it a code and you see \"Form saved. Verification email sent to …\". Verify it Enter the 6-digit code. See Verify notification emails. Until the address is verified, no emails are sent to it. Submissions are still saved. Each email: Has the subject \"New submission: \" followed by the form name. You can ask the AI for a different subject, which can include answers from the form, or for a reply-to address. Lists every field by its label, with the visitor's answer. Lists uploaded files by name and size, with a link to view them in Starjay. Webhook \"Send submission data to an external URL for integrations.\" Use a webhook to send submissions to another service, such as a spreadsheet tool, a CRM or an automation service. Add the webhook Click + webhook and paste the address the other service gave you. Test it Click test. Starjay sends a sample submission and shows the result, such as \"Success (HTTP 200)\". Save Click Save. Webhook rules: The address must start with https://. Addresses on private networks aren't allowed. Each submission is sent as JSON with formId, formName, fields (the answers, by field ID) and submittedAt. The test also includes \"_test\": true, with sample answers. Starjay can't add a password, token or signature to webhook requests. To remove an email or webhook destination, click × next to it while editing, then Save. Destination changes reach your live site on your next site publish. Related Verify notification emails Add a form"},{"slug":"verify-your-site-with-google-and-bing","title":"Verify your site with Google and Bing","summary":"Add Google Search Console or Bing Webmaster Tools verification codes so you can prove you own your site.","section":"SEO and addresses","text":"Google Search Console and Bing Webmaster Tools show how your site performs in search. Before they show you anything, they ask you to prove you own the site. Starjay supports their HTML tag (meta tag) method. Your site must be published at the address you're verifying. Get the code from the search engine In Google Search Console or Bing Webmaster Tools, add your site's address and choose the HTML tag verification method. You get a tag like <meta name=\"google-site-verification\" content=\"abc123…\" />. Copy only the value inside content=\"…\". Open the verification settings In Starjay, choose SEO from the view menu, then Indexing. Scroll to Search Console Verification. Paste the code Paste the value into the Google or Bing row, then click away from the field. The status changes to Code saved. Publish Publish your site so the code is on the live pages. Finish in the search engine Go back to Google Search Console or Bing Webmaster Tools and click Verify. Status messages Status Meaning Not configured No code is saved for this search engine. Unsaved changes You've typed a new value but haven't clicked away yet. Saving… The code is being saved. Code saved Starjay saved the code. This doesn't mean the search engine has verified it; that happens in the search engine. Save failed The code didn't save. Try again. To remove a code, clear the field and click away. Related Search engines and AI crawlers What Starjay generates for you"},{"slug":"when-pro-ends","title":"When Pro ends","summary":"What happens to members when a workspace's Pro plan ends, and how they get access back.","section":"Team members","text":"Members are part of Pro. When a workspace's Pro plan ends, whether by downgrade or an unpaid payment, member access is paused. Members aren't removed. What members see A paused member who opens the workspace sees one screen: \"[workspace] is paused\", explaining that the Pro plan has ended and member access is paused. They can switch to another workspace they belong to, or sign out. On the Members page and in the workspace picker, the paused workspace shows Suspended. What the owner keeps The owner keeps full access to the workspace on the Free plan. Free limits apply: three active sites, 1,000 credits a month, and GPT-6 Luna only. See Upgrade, switch to yearly, downgrade. While the workspace isn't on Pro: The owner can't send new invitations or resend old ones. Pending invitations can't be accepted. Getting access back When the owner upgrades to Pro again, paused members reconnect automatically. Nobody needs to be invited again. Related Roles If a payment fails"},{"slug":"preview-different-screen-sizes","title":"Preview different screen sizes","summary":"How to see your page at several screen widths side by side, set a custom width, and zoom.","section":"The editor","text":"Breakpoints mode shows the current page at more than one screen width at once, so you can check how it looks on a phone and a laptop together. Switch to Breakpoints In the top bar, click Breakpoints. The canvas shows your page in several frames, side by side. Mobile and Laptop are shown at first. Choose which sizes to show Use the device buttons next to the mode switch. Each one turns a size on or off. You can show several at once. Add a custom width (optional) Click the arrows button (Custom breakpoint width) and type a width in pixels, between 200 and 3840. Turn the button off to remove it. Zoom Use the minus and plus buttons to zoom out or in, from 25% to 200%. Click the percentage to go back to 100%. You can also pinch on a trackpad, or hold Cmd/Ctrl and scroll. The sizes available are: Button Width Mobile 375 px Tablet 768 px Laptop 1024 px Desktop 1440 px Wide 1920 px You can select and edit in any frame, just like in Edit mode. To leave, click Edit in the top bar. Pressing Esc also returns to Edit once no panel is open. To style something differently at a particular screen size, use the breakpoint bar in the Style panel. See Responsive design. Related Responsive design The Style panel Tour of the editor"},{"slug":"starjay-is-in-beta","title":"Starjay is in beta","summary":"What being in beta means for you: what's still changing, what's free for now, and how to report problems.","section":"Get started","text":"What beta means Starjay works, and people run real sites on it. It's also still changing: Features change. Screens, labels, and behavior can change from one week to the next. These docs describe the product as it is today. Some things aren't built yet. Where you might expect a feature that doesn't exist, the docs say so plainly. Things can go wrong. If something breaks or behaves strangely, tell us. Reports during beta directly shape what gets fixed. Using Starjay during beta is covered by the beta terms. What's free during beta Each plan includes a monthly page view allowance, shared across all the sites in your workspace. During beta, page views above your allowance aren't billed or limited. Your sites keep serving visitors. See Page view allowance. Report a problem Email support@starjay.com. Support is handled by a person, and the same address takes product, billing, security, abuse, data export, and deletion requests. To help us fix the problem quickly, include: Your Starjay account email. The site name or address. What you did, what you expected, and what happened. The exact error text, and a screenshot if it helps. The approximate time and your time zone. See Get support for more. See what's changed The Changelog lists what changes in Starjay, by date. Related Limits FAQ"},{"slug":"choose-which-address-serves-your-site","title":"Choose which address serves your site","summary":"Pick whether your site is served at your Starjay address or your custom domain.","section":"Publish and domains","text":"Your site is served at one address at a time: either your free Starjay address or your custom domain. Once you've connected a domain, the Connected Domains list in the Publish panel shows a round button next to each address. The selected one is your live address. The other address doesn't serve your site. You can only select a custom domain once all its DNS records are verified. Until then it shows a yellow dot and its status. Open the Publish panel Click Publish in the editor's top bar. Select an address Under Connected Domains, click the address you want. Confirm if the site is live If the site is published, Starjay asks Republish to switch domains. Switching republishes the site, so any changes made since your last publish go live too. Click Republish. If the site isn't published (never published, or unpublished), your choice is saved and takes effect when you next publish. There's no confirmation. What switching changes Visitors at the address you switched away from no longer reach your site. Every page's canonical address is updated to the new address. That's why switching republishes. Your sitemap and social sharing tags use the new address. See an address's DNS state Click ⋯ next to your custom domain. The top of the menu shows DNS configured or Verifying DNS. Related Connect a custom domain Your free Starjay address"},{"slug":"generate-images","title":"Generate images","summary":"How to ask the AI to create an image for your site, what quality options exist, the limits, and what it costs.","section":"Build with AI","text":"The AI can create new images for your site, such as hero backgrounds, illustrations or product scenes. Each image is added to your image library and placed where you asked. Describe the image and where it goes For example: Generate a wide hero image of a sunlit bakery counter with fresh bread, warm tones, no people, and use it as the homepage hero background. Wait for it Image generation can take a while, sometimes a few minutes at higher quality. The chat shows Generated and the image name, with a thumbnail, when it's done. Click the thumbnail to see it full size. Review it on the canvas If you don't like it, ask for changes (\"make it brighter, more space on the left for the headline\") or step back to the previous version. What you can ask for Quality: low, medium or high. If you don't say, the quality is chosen automatically. Low is quick and cheap and fine for drafts. High costs much more. Size and shape: say what it's for (\"a square product shot\", \"a wide banner\"). Images can be up to 3,840 pixels on the longest side, and no more than three times as wide as they are tall (or the other way round). Transparent background: ask for one if you need a cut-out, such as a logo-style illustration. These are saved as PNG. Where the image goes The image is added to your image library, named after its description, with tags and alt text. You can rename it, change its alt text, or reuse it anywhere, like any other image. Limits Limit Images per hour, per site 20 Images per day, per site 60 When you reach a limit, the AI tells you. Try again later. Some requests are refused by the image generator's safety checks. The AI may rephrase the request once, or ask you how to proceed. Credits The cost depends on the image's size and quality. Higher quality costs much more than low quality. As a guide: Image Low Medium High Square (1024 × 1024) about 12 credits about 105 credits about 420 credits Wide (1536 × 1024) about 10 credits about 80 credits about 330 credits The exact amount is included in the credits shown on the finished request, together with the AI's own work. See Credits for AI. Ask for low quality while you're trying ideas, then ask for the final version at high quality. Related The image library Alt text and descriptions Place and replace images Limits"},{"slug":"your-404-page","title":"Your 404 page","summary":"What visitors see at an address that doesn't exist, and how to give your site its own 404 page.","section":"Pages","text":"A 404 page is what visitors see when they go to an address on your site that doesn't exist. They also see it at the address of a draft page, a page you've deleted and published, and a CMS item that doesn't exist or isn't published. New sites don't have one A new site has no 404 page of its own. Until you add one, visitors who reach a missing address get a plain \"not found\" response with none of your site's design. Create your 404 page Ask the AI, for example: \"Create a 404 page in our site's style, with a short message and a link back to the homepage.\" You can't create it from the Pages panel, because 404 is a reserved name there. Once it exists, your 404 page appears in the Pages panel like any other page. Edit it on the canvas the same way. Publish your site to put it live. What you can't do with it You can't rename it or change its address. You can't move it or drag it. You can't delete it. These actions don't appear in its right-click menu. Give visitors a way forward: a link to your homepage, your main sections, or a search of your blog. Related Draft, ready and live pages CMS pages on the live site Redirects"},{"slug":"connect-another-mcp-client","title":"Connect another MCP client","summary":"Connect any AI app that supports remote MCP servers with browser sign-in.","section":"Use your own AI","text":"Any AI app can connect if it supports remote HTTP MCP servers with OAuth sign-in. Apps that only support local servers, or that need an API key, can't connect, because Starjay has no API keys. Add a remote HTTP MCP server Field Value Name starjay Server URL https://app.starjay.com/mcp Sign in When your app asks, sign in to Starjay in your browser and approve access. ChatGPT isn't supported. Next steps Start working on a site Tool reference"},{"slug":"the-style-panel","title":"The Style panel","summary":"Every control in the Style panel: the breakpoint bar, Typography, Spacing, Background and Border, and how values show where they come from.","section":"Design","text":"The Style panel changes how the selected element looks. Select an element on the canvas, then click Style in the left icon rail. If nothing is selected, the panel says Click an element on the canvas to edit its styles. The panel is locked while the AI is working. If you select something in your site's header or footer, a notice reminds you that changes affect every page, for example Editing the site Header — changes affect every page. The panel has five parts: Breakpoint, Typography, Spacing, Background and Border. Click a section's title to collapse or expand it. Breakpoint Websites change layout at certain screen widths, called breakpoints. The breakpoint bar chooses which screen size your changes apply to. Icon Name Applies from Typical devices Phone Phone 0px and up Mobile phones Phone on its side Landscape phone 640px and up Landscape phones, small tablets Tablet Tablet 768px and up Tablets Laptop Laptop 1024px and up Low-resolution laptops, large tablets Monitor Desktop 1280px and up Laptops, monitors Large monitor Large monitor 1536px and up High-resolution laptops, monitors A setting applies at the size you pick and every larger size, unless a larger size sets its own value. That's why the sizes to the right of your choice are highlighted too. Phone is the base: a value set there applies everywhere. The panel title shows the size you're editing (for example 768px+) and the canvas's current width. See all breakpoints (the icon at the left of the bar) shows every value the element has at every size. Click + Breakpoint to add a value for another size, or the × next to a size to remove its values. Highlight controls that have breakpoint overrides (the highlighter button) outlines every control whose value changes at some screen size. This won't change what you see: a small warning icon on a control means the value you're editing isn't the one showing on the canvas, because the canvas is at a different width. The tooltip explains, for example This setting applies up to 767px, but your canvas is 1280px. Click Switch to the … breakpoint to edit the value that's showing. See Responsive design for a walkthrough. How values show where they come from Set on this element: the value is shown in normal text with an × in front. Click the × to clear it at this breakpoint. Not set: the value is grayed out. It's what the element shows anyway, inherited from a parent element, a smaller breakpoint or your page defaults. Colors show the color's name from your tokens, with a swatch. Typography Control What it sets Font One of your font slots. See Fonts. Size Text size. Type a number, or pick a standard size from X-small to 9X-large. Color Text color. Opens the color picker. Weight Thin, Extra light, Light, Normal, Medium, Semibold, Bold, Extra bold or Black. Only weights your font includes look different. Emphasis Italic, Underline, Strikethrough. The ⊘ button forces emphasis off, for example to remove a link's underline. Its menu lets you strip only underline and strikethrough. Align Align left, Align center, Align right, Justify. Case Uppercase, Lowercase, Capitalize, Normal. Leading Line height. Type a number or pick a standard value. Tracking Letter spacing. Type a number or pick a standard value. The color picker Every color control opens the same picker: Scale rows: each color scale's shades. Click one to use it. swatches: your single colors. Click + (New color — pick or paste any value) to make a new one. Pick it with the L (lightness), C (how vivid), H (hue) and A (opacity) sliders, or type a value in hex, rgb, hsl or oklch, then click Save swatch. The new color is added to your tokens. opacity: makes the chosen color partly transparent. The current color has a solid outline. An inherited color has a dashed outline. Spacing A diagram shows the element's margin (space outside it) and padding (space inside it), with a value on each side. Click a value to pick a new one from the spacing scale or type your own. Margins can also be Auto or negative. The center button in the margin area centers the element horizontally. Background Control What it does Color Solid background color. + Gradient Adds a gradient. Choose Linear, Radial or Conic. Set the direction with the arrows or switch to an angle dial. Set the From and To colors, and click + Middle for a third. Radial gradients also have a shape and a size (Closest side, Closest corner, Farthest side, Farthest corner or Custom). The trash button (Remove gradient) removes it. + Image Picks a background image from your image library. Then set Size (Cover, Contain, Auto), Repeat (No repeat, Repeat, Repeat X, Repeat Y) and Attachment (Scroll, Fixed, Local). Use Replace image… to change it and Remove image to remove it. + Overlay On a background image, adds a color overlay from Start to End, to make text on top easier to read. Blend How the overlay mixes with the image, such as Multiply, Screen or Overlay. A background color and a gradient or image can be used together. If the AI made a gradient the panel can't break into these controls, you see This is a custom gradient — use the AI panel to modify it. (or Custom overlay — use the AI panel to modify the gradient.). Border Control What it sets Width Border thickness. Style Solid, Dashed, Dotted, Double or None. Color Border color. Set a thickness first. Radius How rounded the corners are. Click Per side to set width and color for each side, and radius for each corner, separately (Sides and Corners). What isn't here Sizing, position, shadows, opacity, hover states and some other settings aren't in the Style panel. See What the Style panel doesn't cover yet. Flex and grid layout, lists, tables and form fields have their own layout tools on the canvas. Related Responsive design Layout tools Colors Shared components and \"used on N pages\""},{"slug":"rebuild-an-existing-site","title":"Rebuild an existing site","summary":"Give the AI the address of an existing website, have it recreate the look and structure one page at a time, then make it your own.","section":"Worked examples","text":"In this tutorial you rebuild a site from its web address. This is useful when you're moving your own site to Starjay, or when you want a new site that borrows the feel of one you like. The AI opens the address in a browser, takes screenshots, and reads the page's colors, fonts and structure. It then rebuilds the page with your site's own colors and fonts, so you can change them later in one place. Before you start The site must be public. The AI can't open pages behind a login, or addresses on a private network. Make a list of the pages you want. The AI looks at one page per web address you give it, so you'll rebuild the site page by page. Each look at a site uses credits, on top of the credits for the AI's work. Only copy text and images you have the right to use. Rebuild the homepage Create a blank site On the dashboard, click New site, choose Blank, name it and click Create site. Open the site. Give the AI the address In the Describe your site box, paste: Recreate the homepage of https://www.example-bakery.com as closely as you can: the same layout, section order, colors, fonts and spacing, on desktop and mobile. This is my own site, so keep the original headings and text. Replace the address with the site you want to rebuild. Watch it work In the AI panel, the activity line shows Fetching reference site…, then Building context…, while the AI looks at the page. It then builds your homepage. Compare the two Open the original site in another browser tab and compare. Use the Breakpoints mode in the top bar to check the phone and tablet layouts too. Ask for corrections Be specific about what's different: The hero on the original has the image on the right and the text on the left, and the headline is much larger. The testimonials are in a three-column row, not a slider. Fix those. If you don't say otherwise, the AI may write placeholder text in the same tone instead of copying the original wording. If it's your own site and you want your text kept, say so in the prompt, as in the example above. Rebuild the other pages Give the AI one address per request: Now recreate https://www.example-bakery.com/about as a new About page. Reuse the header, footer and colors you already made. Repeat for each page. Asking it to reuse what it already built keeps the header, footer and colors consistent across pages. You can also attach screenshots instead of, or as well as, an address. Paste or attach up to 3 images (PNG, JPEG or WebP, up to 5 MB each) with your message. This works for pages the AI can't open, such as pages behind a login. Bring in your images The rebuilt pages need images in your own image library. Either upload them in the Images panel, or ask the AI: Import the hero photo and the three product photos from the original homepage into my image library and use them on the homepage. Make it your own and save Review and save Step through the versions in the AI Session bar, then click Save. Adjust colors and fonts Open Tokens in the left icon rail. The AI mapped the original's colors and fonts to your site's own color scales and font slots. Change them under Colors and Typography, and every page follows. Write down the brand rules In Tokens, open Brand Guide and describe your brand's voice and style. The AI reads it on every request, which keeps new pages consistent. Publish Click Publish at the top right, then Publish in the panel. If something goes wrong Problem What to do The AI says it couldn't open the address. Check the address works in a private browser window without signing in. Some sites block automated browsers; attach screenshots instead. The result looks different from the original. Name the specific differences, one or two at a time. Screenshots of the part that's wrong help. The text is placeholder text. Ask: Use the exact text from the original page. Pages look inconsistent with each other. Ask the AI to reuse the existing header, footer and sections, and to use the site's color and font tokens. You used up credits quickly. Each look at a site uses credits. Rebuild one page at a time and review before moving on. Menus, tabs or sliders on the original don't work the same. Ask the AI to rebuild that part. Simple interactive parts are built with plain page scripts. Related Rebuild or borrow from an existing site Show the AI what you mean: screenshots Brand guide Credits for AI Write prompts that work"},{"slug":"references-between-collections","title":"References between collections","summary":"Shows how to link items across collections, such as a post to its author, and how linked items publish together.","section":"Content (CMS)","text":"A Reference field links an item to an item in another collection. A blog post can link to its author. A product can link to its category. Add a reference field Open the collection's schema In the CMS view, open the collection and click Edit Schema. Add the field Click Add field, name it (for example, Author) and set its type to Reference. Choose the target collections Open Choose target collections and tick one or more collections. To create a new one on the spot, choose New collection…, enter a Label and click Create and select. A new collection made this way starts with a title field only. Save Click Save changes. A reference field can point at more than one collection. For example, a \"Featured\" field could link to either a post or a product. Link an item In the item editor, click the reference field and search. Pick an item from the results to link it. To link a different item, click the current one and search again. Clear removes the link. If the item you want doesn't exist yet, click + New (or + Create new … at the bottom of the results). A panel opens with the other collection's fields. Fill them in and click Create and link. When a field links to several collections, choose which one to create in first. Linked items publish together A live item never links to an item that isn't live. So when you publish an item: Items it links to through a required reference that aren't live yet are published with it. The publish dialog lists them under \"Also published\". Items it links to through an optional reference that aren't live are listed with a checkbox. Tick the ones to publish too. Those you leave out show as missing on the live site. If a linked item can't be published (for example, it's missing a required value), the publish is blocked until you fix it. The dialog names the item and has Open to go to it. The same rules apply to linked items of linked items. Unlinking before you unpublish or delete You can't unpublish an item while live items link to it. The dialog lists them. You can't delete an item while anything links to it, in a draft or a live version. Remove the links first. If a live item links to it, publish that item again without the link. Related Publish and unpublish items Delete items, fields and collections"},{"slug":"rename-duplicate-archive-restore-delete-a-site","title":"Rename, duplicate, archive, restore, delete a site","summary":"How to rename, copy, archive, restore or delete a site, and exactly what each action does.","section":"Your account and dashboard","text":"All of these actions are in a site's More actions (…) menu on the Sites page. You can also right-click a site's card or row. Owners and members can use them. These actions aren't available on a phone. Use a computer, or select Use desktop view at the bottom of the phone dashboard. Rename a site Open the menu Open the site's More actions menu and select Rename. The Edit site details dialog opens. Type the new name Change Name (up to 60 characters). Save Select Save changes. Renaming changes the name you see in Starjay. It doesn't change the site's address. Duplicate a site Open the menu Open the site's More actions menu and select Duplicate. Name the copy The name starts as \"Copy of\" plus the original name. Change it if you like. Create the copy Select Duplicate. The copy gets the original's pages, components, images and forms. Domains and the published site stay with the original: the copy starts unpublished. Duplicating counts toward the Free plan's three active sites. Archived sites can't be duplicated. Archive a site Archive a site you aren't working on, for example to make room under the Free plan's limit. Any plan can archive. Open the menu Open the site's More actions menu and select Archive. Read what happens The dialog lists what archiving does (below). Confirm Select Archive site. When you archive a site: It's unpublished on every address it's live on. Its custom domains are disconnected. Your DNS records and the site's content aren't touched. It stays on the Sites page with an Archived label, but you can't open or duplicate it. It no longer counts toward the Free plan's three active sites. Restore an archived site Restoring needs the Pro plan. Open the menu Open the archived site's More actions menu and select Restore. Confirm Select Restore site. You can open and edit the site again right away. On the Free plan, the dialog says restoring requires Pro and offers Go to Subscriptions instead. Restoring doesn't republish the site. Publish it again when you're ready. Domains that were disconnected need to be connected and verified again. See Connect a custom domain. Delete a site Deleting is permanent. You can't undo it, and support can't bring the site back. Open the menu Open the site's More actions menu and select Delete. Confirm Select Delete site. The site and all its content are deleted. If it's published to a custom domain, it's taken offline. Any plan can delete a site, including an archived one. To take a site offline without deleting it, unpublish or archive it instead. Related The dashboard Upgrade, switch to yearly, downgrade Checkpoints"},{"slug":"upgrade-switch-to-yearly-downgrade","title":"Upgrade, switch to yearly, downgrade","summary":"How to move between Free and Pro, switch to yearly billing, and what happens to your sites when you downgrade.","section":"Plans, credits and billing","text":"Only the workspace owner can change the plan. Members see Only the workspace owner can change billing. on the Subscriptions page. Plan changes aren't available on a phone. Upgrade to Pro Open Subscriptions In the dashboard, select Subscriptions. On the Free plan you see the plan comparison. Choose monthly or yearly Use the Annual / Monthly switch above the plans. Yearly saves 33%. Select Upgrade to Pro In the Pro column, select Upgrade to Pro. A dialog lists what Pro includes and the price. Go to checkout Select Continue to checkout. Payment is handled on a Stripe checkout page, where you see tax and can enter a promo code. Return to Starjay After paying, you come back to Subscriptions. You may see Confirming your purchase… for a moment. Pro starts as soon as the payment goes through. If your workspace already pays for credit packs, upgrading charges you in the app instead: the dialog shows the amount and a Pay button, and Pro starts immediately. Switch to yearly billing You can switch a monthly Pro plan to yearly. Find Next renewal On Subscriptions, find the Next renewal card. Select Switch to annual Select Switch to annual. The dialog shows Due today and when the plan renews. Pay Select Pay. Your full monthly payment is credited toward the yearly charge. Credit packs switch to yearly billing with your plan. There's no button to switch from yearly back to monthly. Switch to annual isn't shown while another billing change is scheduled. Downgrade to Free Open your plan On Subscriptions, select Manage on the Current plan card. The Manage your plan dialog opens. Select Downgrade to Free In the Free column, select Downgrade to Free. Review what will happen The dialog explains what happens to your sites and lists which sites are Likely to be archived and Likely to stay active. Confirm Select Downgrade. You keep Pro until the end of the period you've paid for. The Current plan card shows when Pro ends. What happens when Pro ends Extra sites are archived. Free includes three active sites. Any others are archived and unpublished, and their custom domains are disconnected. They stay on your dashboard with their content, but can't be opened until you're on Pro again. Which sites stay active: sites with a verified custom domain first, then published sites, then the most recently edited. Starjay decides from your sites as they are on the day Pro ends, so the list in the dialog is an estimate. Members are paused. See When Pro ends. Credits drop to 1,000 a month, and only GPT-6 Luna is available. Credit packs keep renewing until you remove them. See Buy more credits. Change your mind Until Pro ends, select Keep Pro on the Current plan card. Your workspace stays on Pro and nothing is archived. Related Plans Rename, duplicate, archive, restore, delete a site Payments and invoices"},{"slug":"image-sizes-and-formats","title":"Image sizes and formats","summary":"Lists the fixed sizes Starjay makes of every image and how it picks a format for each visitor.","section":"Images","text":"You upload one image. Starjay serves it in several sizes and in the best format each visitor's browser supports. You don't need to resize or convert anything. Sizes Size Dimensions Used for thumbnail 200 × 200, cropped to a square Small previews. w640 640 wide Phones. w1024 1024 wide Tablets and small screens. w1920 1920 wide Large screens. public Fits within 1366 × 768 The default size. og 1200 × 630, cropped Social previews when a page is shared. Images are never enlarged. An 800-pixel-wide photo served at w1920 stays 800 pixels wide. The cropped sizes (thumbnail and og) fill their exact shape, so edges may be trimmed. When the AI places an image, it lists the sizes so each browser loads the smallest one that looks sharp. It also sets the image's width and height so the page doesn't jump while images load. Formats For each request, Starjay picks a format the visitor's browser supports: AVIF for sizes up to 1200 pixels, when the browser supports it. WebP otherwise, when the browser supports it. The original format for browsers that support neither. SVG images are served exactly as uploaded, at every size. Where images are served from Images are served from your own site's address, so they load from the same place as your pages. You can see an image's address under URL in its details once your site is published. Related The image library Images in code Hotlink protection"},{"slug":"astro-syntax-rules","title":"Astro syntax rules","summary":"The Astro syntax a Starjay site uses, the React habits to avoid, and which mistakes the platform refuses.","section":"Site code reference","text":"Starjay sites are pure Astro. Write .astro components, not React components, and use Astro's syntax rather than JSX habits. Use Not Why class=\"…\" className=\"…\" Astro uses the HTML attribute. <slot /> {children} Astro passes child content through slots. set:html={…} on an element dangerouslySetInnerHTML Astro's directive. Reserved for trusted HTML; see below. Plain <a href=\"/about\"> next/link or other router links Links are ordinary links. <script> in the component 'use client', hooks Astro components render on the server; behavior goes in scripts. Props from Astro.props in the frontmatter export function Component(props) An .astro file is a single template, not a function. { and } in template text A bare { or } A literal { starts an Astro expression. Syntax rules Pages MUST have frontmatter fences (--- … ---). The platform refuses a page without them. Every component used in a page's template MUST be imported in its frontmatter. The platform refuses a page that uses a component it doesn't import. Every .astro file MUST parse as valid Astro. The platform refuses a file with a syntax error and reports the line. Directives such as set:html and client:load MUST be used as attributes, never as tags. <set:html={x} /> is refused; write <div set:html={x} />. You MUST use class, <slot /> and plain <a>, never className, {children} or framework link components. You MUST NOT use set:html to show ordinary text or user-written strings. Render text with an expression such as <h2>{title}</h2>. You MUST NOT convert markdown to HTML in site code. Use the <Markdown> component. Props Declare a Props interface in the frontmatter and destructure Astro.props with defaults: --- interface Props { label?: string href?: string } const { label = '', href = '#' } = Astro.props as Props --- <a data-component=\"TextLink\" href={href} class=\"underline underline-offset-4\">{label}</a> Prop names must not be JavaScript reserved words (default, export, new, class and so on). Choose descriptive names such as exportLabel. The one common exception is passing class through to an element, which Astro supports by renaming it locally: const { class: className } = Astro.props If a component destructures a reserved word as a local name, Starjay renames the local variable automatically and keeps the prop name. Classes Write classes as plain string literals: class=\"flex gap-4\". Avoid cn(), clsx() and template literals for classes; the editor's style tools read and rewrite literal class strings. Literal braces Inside template text, { and } start and end an expression. To show a literal brace, write { and }. Starjay writes them this way when you type braces on the canvas. Related Component rules Styling rules Interactivity"},{"slug":"what-starjay-generates-for-you","title":"What Starjay generates for you","summary":"Lists the search-related files and tags Starjay creates automatically when you publish.","section":"SEO and addresses","text":"When you publish, Starjay adds these to your site automatically. You don't need to create or maintain them, and there's nothing to set up. What What it does Where it comes from Sitemap A list of your pages that search engines read to find your content. Published at /sitemap-index.xml. Every published page that search engines are allowed to index. Pages hidden from search, draft pages and deleted pages are left out. Live CMS item pages are listed too. robots.txt Instructions for crawlers, at /robots.txt. It points to your sitemap. Your search visibility setting. Canonical address A tag on every page naming its one official address, so search engines don't treat copies at other addresses as duplicates. The address your site is published at, plus the page's path. Title and description tags The page's title and description for search results. Page SEO, falling back to site defaults. Social sharing tags The title, description and image used when a page is shared on social sites and in messaging apps. The same title and description, plus the page's or the site's Social Preview image. Favicons and the Apple touch icon Browser and home-screen icons. Site SEO defaults. Search engine verification tags Prove you own the site to Google and Bing. Verification codes. Language Tells browsers and search engines your site's language. Language in site defaults. Canonical addresses Canonical addresses are automatic. There's no per-page override and no way to type your own. If you switch which address serves your site (for example, from your Starjay address to your own domain), Starjay republishes so every canonical address uses the new one. See Choose which address serves your site. What isn't generated RSS feeds aren't available. Structured data (schema.org markup) isn't added automatically. You can ask the AI to add it. See Structured data. Related Search engines and AI crawlers Publish your site"},{"slug":"verify-notification-emails","title":"Verify notification emails","summary":"Shows how to verify an email address so it can receive form notifications.","section":"Forms","text":"Before Starjay emails form submissions to an address, someone with access to that inbox must confirm it. This stops forms from sending email to people who didn't ask for it. Verify an address Open the form Click Forms in the left rail, open the Definitions tab and click the form. Find the address Under Destinations, each email address shows its status: unverified, pending or verified. Send a code Click verify. Starjay emails a 6-digit code to the address. If you just added the address and saved, a code is already on its way. Enter the code Type the code and click Confirm, or press Enter. The status changes to verified. If the code doesn't arrive or doesn't work Click resend to get a new code. For an address that's pending, click enter code to type a code you already have. Codes expire after 15 minutes. If you see \"Code expired. Request a new one.\", click resend. After several wrong codes you see \"Too many attempts. Request a new code.\" Check the spam folder of the inbox. Limits and scope A site can have up to 5 verified addresses. If you need another, revoke one you no longer use. Verification is per site. Once an address is verified, every form on that site can email it. Stop emails to an address Click revoke next to a verified address. It goes back to unverified and stops receiving emails until it's verified again. To stop a form emailing an address at all, remove the email destination. See Where submissions go. Related Where submissions go Collect enquiries with a form"},{"slug":"add-elements-and-sections","title":"Add elements and sections","summary":"How to add single elements, ready-made sections and your own components to a page from the Elements panel.","section":"The editor","text":"Open the Elements panel from the left icon rail. It has a search box and these tabs: Tab What's in it All Every element and pattern below. Text Heading 1 to Heading 6, Paragraph, Span. Interactive Link, Button. Container Div, Section. List Unordered List, Ordered List, List Item. Media Image, Horizontal Rule. Patterns Small ready-made groups: CTA Group, Feature Card, Hero Block, Nav Links, Stats Row, Testimonial. Sections Ready-made page sections: Hero, Features, CTA, Stats, Testimonials, Blank. Components Your site's own components. The Dark Magic switch at the top of the panel is on by default. While it's on, the AI restyles what you add so it fits your brand. See Dark Magic. Add an element or pattern You can drag or click: Drag an element from the panel onto the canvas. A line shows where it will land. You don't need to select anything first. Click an element to insert it next to your selection. Select something on the canvas first. If you selected an element inside a section, the new element goes right after it. If you selected a whole section or component, the new element goes inside it, at the end. The panel briefly shows Inserted!. With nothing selected, the panel says Drag an element onto the canvas — or select one to insert beside it. To add an element with the keyboard, use Quick insert. Add a ready-made section Open the Sections tab. Drag a section onto the page. Sections drop between the existing sections of the page, not inside them. Or right-click a section in the list. A menu titled Insert {name} lets you choose At the top, After {section}, or At the bottom. Section What you get Hero Headline, subtitle, and call-to-action buttons Features Three-column feature card grid CTA Call-to-action with heading, text, and button Stats Key metrics displayed in a row Testimonials Customer testimonial cards with quotes Blank Empty section wrapper — add your own content Add one of your components The Components tab lists your site's section components and UI components (smaller pieces such as cards or badges). Header, footer and other layout components aren't listed; see Header, footer and navigation. Section components go between sections, like ready-made sections. Drag one onto the page, or click Insert and choose where to place it (At the top, After {section}, At the bottom). UI components go next to your selection. Drag one onto the page, or select something and click Insert. If a component needs some values before it can be placed, a Configure {name} card asks for them. Fill in the required fields and click Continue. When Dark Magic is off, the card shows all of the component's options; leave optional ones blank to use the component's defaults. Replace your selection with a component For UI components, a second button replaces what you've selected: Replace selection swaps the selected element for the component. Swap component appears instead when your selection is itself a component. With Dark Magic on, you confirm with Replace with Magic or Swap with Magic. The AI carries your content and links into the new component, and the original stays visible until the replacement is ready. With Dark Magic off, you confirm with Replace, and nothing is carried over: Raw replacement removes the selected element's content, links, behavior, and styling. Nothing is copied into {name}. You can also right-click a selection on the canvas and choose Replace with component…. What gets refused, and why Starjay won't insert something where it would break the page. You'll see a short message instead: Message Why Select an element on the page first You clicked to insert with nothing selected. Select something, or drag instead. Can't add <div> inside <p> — would break the page layout (and similar) That element isn't allowed inside the selected one in HTML. Select a different spot. Can't insert here — element is inside a decorative container The selection is inside an image, video, icon or similar. Cannot add elements to a structure-locked component The selection is inside a component Starjay manages, such as a form. Editing is currently locked. The AI is working, or the site is publishing. Wait until it finishes. While the AI is working, the panel shows Editing locked — AI is generating and you can't add anything. To build a whole section from a description instead, ask the AI. See Write prompts that work. Related Quick insert Dark Magic Components The Navigator"},{"slug":"glossary","title":"Glossary","summary":"Every Starjay term, defined in one line each.","section":"Get started","text":"Term Meaning 404 page The page visitors see at an address that doesn't exist on your site. See Your 404 page. AI credits See Credits. AI memory How much of the current chat the AI can hold at once. A meter shows how full it is. See AI memory. AI panel The chat panel on the right of the editor where you talk to the AI. Open it with the chat icon in the top bar. AI session A run of AI changes you review as a whole and then Save or Reject. See AI sessions: versions, Save and Reject. Alt text A text description of an image for people who can't see it and for search engines. See Alt text and descriptions. Archive Setting a site aside: it's unpublished, its domains are disconnected, and it no longer counts toward your active sites. Brand guide Written instructions about your brand that the AI reads every time it works on your site. See Brand guide. Breakpoint A screen width at which a style starts to apply, from phone up to large monitor. See Responsive design. Browse mode An editor mode where you click around your site like a visitor instead of selecting things. Canvas The live view of your site in the middle of the editor. Checkpoint A saved copy of your whole site that you can restore. See Checkpoints. CMS The part of Starjay that manages collections of structured content. Collection A set of items that share the same fields, such as blog posts or products. See When to use a collection. Component A reusable building block, such as a header, footer, or section, that pages are made of. See Components. Credits What you spend to use the AI and to keep a site open for editing. Each workspace gets a monthly allowance. See How credits work. Credit pack Extra monthly credits you can add to a Pro plan. See Buy more credits. Custom domain Your own address, such as www.example.com, connected to your site. See Connect a custom domain. Dark Magic An option that has the AI restyle inserted elements and sections to match your brand. See Dark Magic. Dashboard The screen where you manage your sites, analytics, form responses, subscriptions, members, and settings. See The dashboard. Design tokens Your site's named colors and fonts, defined once and used everywhere. See Design tokens: why your site has them. Draft page A page that has never been published and won't go live until you mark it for publish. See Draft, ready and live pages. Element A single piece of a page, such as a heading, a paragraph, a button, or an image. Field One piece of information in a collection item, such as a title, a date, or an image. See Field types. Form A form on your site that visitors fill in. See Add a form. Free The plan every workspace starts on. See Plans. Hotlink protection A setting that controls whether other websites can display your images. See Hotlink protection. Image library All the images uploaded to a site. See The image library. Item One entry in a collection, such as one blog post. See Edit items. Live Published and visible to visitors. Locked component A component provided by Starjay whose structure you can't change, such as the form components. MCP connection The connection that lets an AI app on your computer, such as Claude Code or Codex, work on your Starjay sites. See Connect Claude Code. Member A person who belongs to a workspace. See Roles. Navigator The panel that shows the structure of the current page as a tree. See The Navigator. Object type A reusable group of fields in the CMS. See Object types and mixed lists. Original The state of your site before the current AI session started. Owner The workspace role that manages billing, members, and workspace settings. See Roles. Page One address on your site, such as /about. See Pages and the Pages panel. Page view allowance The number of page views a month your plan includes, shared across all your sites. See Page view allowance. Pro The paid workspace plan. See Plans. Publish Make the current state of your site visible to visitors. See Publish your site. Quick insert Adding an element by pressing / and searching. See Quick insert. Redirect A rule that sends visitors from one address to another. See Redirects. Reference A field that links one collection item to another, such as a post to its author. See References between collections. Reject Discard everything from an AI session and restore the site to its Original state. Republish Publish again after making changes to a site that's already live. Save Keep everything from an AI session. Section A full-width part of a page, such as a hero or a testimonials block. Shared component A component used on more than one page, so editing it changes all of them. See Shared components and \"used on N pages\". Slug The part of an address that identifies a page or item, such as my-first-post. See Item addresses and slugs. Starjay address Your site's free address, yourname.starjay.app. See Your free Starjay address. Style panel The panel for changing how the selected element looks. See The Style panel. Submission One filled-in form sent by a visitor. See Read and export submissions. Template A ready-made site you can start from. See Templates. Unpublish Take your site offline without deleting it. See Unpublish. Verified email An address that has confirmed it can receive form notifications. See Verify notification emails. Version One step in an AI session. Each request creates a version. Workspace The account that owns sites, billing, credits, and members. See Workspaces."},{"slug":"disconnect-a-domain","title":"Disconnect a domain","summary":"Remove a custom domain from your site and understand what happens right away.","section":"Publish and domains","text":"Open the Publish panel Click Publish in the editor's top bar. Open the domain menu Under Connected Domains, click ⋯ next to your domain. Click Disconnect domain Confirm by clicking Disconnect. You see Domain disconnected. Both www and the bare domain are disconnected together. What happens immediately If your domain was… Then… Your site's live address Your site goes offline right away, and visitors can no longer reach it at that domain. The confirmation warns you: Your site will be immediately depublished… Connected but not the live address Nothing changes for visitors. You can no longer publish to that domain. To put the site back online after disconnecting its live domain, click Publish. It's served at your Starjay address. What Starjay doesn't change Starjay doesn't touch the records at your DNS host. Remove the www CNAME, the bare-domain record and the _starjay TXT record yourself if you no longer need them, especially if you're moving the domain to another service. To connect the domain again later, connect it as new and add the records the card shows. See Connect a custom domain. Related Unpublish Domain troubleshooting"},{"slug":"choose-an-ai-model","title":"Choose an AI model","summary":"The AI models you can pick, who can use each one, and how a chat keeps its model.","section":"Build with AI","text":"You choose the AI model in the prompt box. The picker is on the left, under the text you type. The models Model Good for Plans GPT-6 Luna Everyday edits and high-volume work. Fast, and uses far fewer credits per request than the other models. This is the default. Free and Pro Claude Sonnet 5.5 A strong general-purpose site builder. Pro GPT-6.1 Sol Complex, site-wide builds that need more reasoning. Pro The picker remembers your last choice for new chats. Free plan Free workspaces, and Pro workspaces with an overdue payment, can use GPT-6 Luna only. The other models stay in the list, grayed out and marked Pro. See Plans. A chat keeps its model Once you send the first message, the model is locked for that chat. The picker shows the model's name and the tooltip Locked for this chat. Clear the chat to switch models. To use a different model, end the session with Save or Reject, then pick the new model before you send your next message. A chat is never switched to a different model behind your back. If its model can't be used, you're told, and you decide what to do. When a chat's model can't be used What happens What you see What to do Your workspace is no longer on Pro, and the chat uses a Pro model This chat's model requires Pro. Clear the chat to continue. A request that's already running still finishes. Save or Reject the session, then continue with GPT-6 Luna. Or upgrade to Pro. The chat's model has been retired This chat's AI model is no longer available. End the session to keep its changes, or reject it, then start a new chat — your message is back in the box. Save to keep the changes, or Reject, then send your message again with a current model. The model is briefly unavailable This AI model is temporarily unavailable. Try again shortly, or pick another model in a new chat — your message is back in the box. Wait and send again, or end the session and pick another model. When a newer version of a model replaces an older one, chats that are already open on the older version carry on with it. New chats get the newer version. Related Credits for AI AI memory Plans"},{"slug":"start-working-on-a-site","title":"Start working on a site","summary":"Tell your connected AI which Starjay site to work on, using the starter prompt from the editor.","section":"Use your own AI","text":"Your connection covers all your sites, so your AI needs to know which one you mean. The editor gives you a ready-made prompt with the site's name and ID. Open the site in the editor Open the site from your dashboard. Keep the editor open while your AI works. Your AI can only work on a site while its editor is running. Open the connect dialog In the AI panel, click Use Claude or Codex. The Work on this site with an AI agent dialog opens. Go to the starter prompt If you've connected before, the dialog opens on Start on this site. Otherwise finish Connect Starjay, then click I’ve connected. Copy the prompt Under Copy and paste this into your AI agent, click the copy button. The prompt looks like this: Use the starjay MCP connection to work on my Starjay site named “Bakery” (site ID: 0APMiuxGY2yB4xJm5BilJ). Paste it and describe your change Paste the prompt into your AI app, then describe what you want to change. On a phone, tap MCP at the bottom of the review screen to copy the same prompt. Set up the connection itself from the desktop editor first. Naming the site yourself You can also ask your AI to list your sites. It calls list_sites and sees each site's name, workspace and ID. Naming the site exactly avoids mix-ups when two sites have similar names. Related How agent work shows up in the editor Rules for agents"},{"slug":"put-your-site-on-your-own-domain","title":"Put your site on your own domain","summary":"Move a published site from its free starjay.app address to www.yourdomain.com, using Porkbun as the worked example.","section":"Worked examples","text":"In this tutorial you connect a domain you own, risecrumb.com, add the DNS records Starjay shows you at Porkbun, wait for them to be checked, and switch your live site to www.risecrumb.com. Custom domains are included on every plan, including Free. Before you start You need a domain you've already bought. Starjay doesn't sell domains. You need to sign in to the company that manages your domain's DNS. In this tutorial that's Porkbun. If your domain is with another company, the steps are similar; see Other DNS hosts below. Your site should already be published at its free starjay.app address. See Publish your site. Save or Reject any open AI session first. Domain controls are locked while a session is open. No A records Starjay never asks you to add an A record. If a guide, a support article or your DNS host suggests adding an A record for Starjay, don't. Use only the records the Publish panel shows you. Connecting a subdomain? This tutorial connects a whole domain. To put a site on a subdomain, such as shop.risecrumb.com, enter the subdomain instead: the card then shows just two records. See Using a subdomain. Connect the domain in Starjay Open the Publish panel In the editor, click Publish at the top right. Scroll to Add a custom domain. Enter your domain Type your domain, such as risecrumb.com, and click Connect. You can type the bare domain or the www version; Starjay sets up both. You see Domain connected — configure DNS to activate. Find your DNS records The panel now shows a card titled DNS configuration for Porkbun (Starjay looks up who manages your DNS and names them). It has three rows, each with a Type, Host and Value: Type Host Value CNAME www sites.starjay.app ALIAS @ (blank) sites.starjay.app TXT _starjay starjay-verify=… (a code unique to your domain) Click any value to copy it. Hover over a value to see it in full. What each record does: CNAME www points www.risecrumb.com at Starjay. ALIAS @ points the bare domain, risecrumb.com, at Starjay. TXT _starjay proves you own the domain. Starjay won't serve your site on the domain, or set up its security certificate, until it finds this record. Add the records at Porkbun Open your domain's DNS records Sign in to Porkbun. In Domain Management, find risecrumb.com and open its DNS records. Remove conflicting records If there are existing records for the bare domain or for www (for example Porkbun's default parking records, or records from your old website host), delete them. A host name can't have a CNAME or ALIAS and other records pointing elsewhere at the same time. Don't delete MX or TXT records you use for email. Add the CNAME record Choose type CNAME. In the host field, type www. In the answer field, paste the value from Starjay. Add the record. Add the ALIAS record Choose type ALIAS. Leave the host field blank, which means the bare domain. Paste the value from Starjay into the answer field and add the record. Add the TXT record Choose type TXT. In the host field, type _starjay. Paste the full starjay-verify=… value into the answer field and add the record. Porkbun adds your domain to the host automatically. Type www and _starjay, not www.risecrumb.com or _starjay.risecrumb.com. Wait for the check Check DNS Back in the Publish panel, click Check DNS now. DNS changes can take a few minutes to appear, so if nothing changes, wait a few minutes and try again. Watch the records turn green As each record is found, its type turns green with a check mark. The domain row shows its progress: Pending DNS, then Verifying..., then Pending SSL while the security certificate is set up. See the domain become active When everything is ready, the DNS card disappears and the domain row shows a check mark. The ⋯ menu on the row says DNS configured. Switch your live site to the domain With a custom domain connected, the rows under Connected Domains let you choose which address serves your site. Exactly one address is selected at a time; the other one stops serving the site. Select your domain Under Connected Domains, click your domain's row. A domain can be selected only once it's active. Confirm the republish If your site is live, a dialog asks you to Republish to switch domains. Republishing also puts live any changes you've made since your last publish. Click Republish. If your site isn't published yet, your choice is saved and used the next time you publish. Open your site When the status shows Live, the panel shows www.risecrumb.com next to it. Visit both https://www.risecrumb.com and https://risecrumb.com; the bare domain sends visitors to the www address. Your free starjay.app address stops serving the site when your domain is selected. Select it again at any time to switch back. Other DNS hosts Starjay shows different records depending on who manages your DNS: DNS host Record for the bare domain Porkbun, Namecheap, DNSimple, Gandi ALIAS record with host @ Name.com, DNS Made Easy ANAME record with host @ Cloudflare (as your DNS host) CNAME record with name @, which Cloudflare flattens. Set Proxy status to DNS only (grey cloud), and paste the TXT value into Cloudflare's Content field. GoDaddy, Squarespace, Hover, Network Solutions, IONOS, Wix, many web hosts, Amazon Route 53 and others A FORWARD row: these hosts can't point the bare domain at another name, so you set up forwarding from risecrumb.com to https://www.risecrumb.com in your provider's settings (permanent, 301, keeping the path if offered). The row's note says where to find forwarding at your provider. If Starjay doesn't recognize your DNS host, it shows a FORWARD row for the bare domain. The www CNAME and the _starjay TXT record are the same everywhere. If something goes wrong Problem What to do Invalid domain format Type only the domain, such as risecrumb.com, with no https:// or slashes. The domain stays on Pending DNS for a long time. Check the records at your DNS host match the card exactly, with no extra domain added to the host. Remove old records for www and the bare domain. Wait, then click Check DNS now again. The TXT row never turns green. Check the host is exactly _starjay and the value starts with starjay-verify=. Some hosts wrap the value in quotes; that's fine. You can't select the domain row. It isn't active yet. A domain row with a yellow dot is still being checked. The bare domain doesn't open your site (forwarding hosts). Check the forwarding at your provider sends risecrumb.com to https://www.risecrumb.com. Domain controls are greyed out. Save or Reject the open AI session. You want to stop using the domain. Click ⋯ on the domain row and choose Disconnect domain. If the site is live on that domain, it goes offline there immediately. Related Connect a custom domain Choose which address serves your site Disconnect a domain Domain troubleshooting Your free Starjay address"},{"slug":"edit-items","title":"Edit items","summary":"Shows how to add, find and edit collection items, how autosave works, and what the save messages mean.","section":"Content (CMS)","text":"Find an item Open the CMS view and pick a collection. Its items are listed in a table. Search with the box at the top left. Sort by clicking a column heading. Click again to reverse the order. Updated and Status can be sorted too. The table shows 25 items at a time. Use Prev and Next to page through. If some items lack a required value, a yellow chip like \"12 missing Summary\" appears. Click it to show only those items. Click × to clear the filter. Click a row to open the item. While an item is open, a short list of the collection's items stays on the left so you can switch between them. Add an item Click the + (New item) button in the collection's toolbar, or + Create item in an empty collection. The item is created as soon as you change something. Autosave There's no Save button. Your changes save themselves. Next to the item's title you see: Message Meaning Saving… Your latest change is being saved. Saved Everything is saved. Waiting for the AI to finish The AI is working. Your change saves when it's done. Couldn't save: … Something went wrong. Click Retry. Not saved: … A value is the wrong kind, such as text in a number field. Fix the field shown in red. To publish: … The item is saved, but needs this before it can be published. An empty required field doesn't stop the item from saving. It only stops it from being published. See Required fields. If you try to leave an item with changes that can't be saved, you're asked Discard unsaved changes? Choose Keep editing to fix them, or Discard changes. Undo and redo While an item is open, press Cmd+Z (Ctrl+Z on Windows) to undo and Cmd+Shift+Z (Ctrl+Shift+Z) to redo. Typing in one field counts as one step. For older versions, use History and restore. If someone else changes the item If the item changed somewhere else while you were editing (another person, another tab or the AI), you see \"This item changed elsewhere…\" with Reload. Reloading shows the latest version and discards your unsaved edits. Item size limit An item can hold up to 256 KB of content. From about 80% of the limit, the header shows the size, for example \"This item is 215 KB of 256 KB\". Over the limit, the item doesn't save and you see \"Too long to save — this item is … KB; the limit is 256 KB.\" Shorten long text or split the content into several items. More actions The ⋯ (More actions) menu on an open item has: History: see and restore earlier versions. Copy item ID: copy the item's unique ID. Unpublish: take a live item off your site. Delete: delete the item permanently. When editing is locked The CMS view is read-only at times, with a red banner: \"Editing locked — AI is generating\": the AI is working on your site. \"Publishing — editing is paused\": your site is being published. Let the AI write items Ask in the chat, for example \"Add five posts about winter gardening\". Items the AI creates or changes are drafts. You decide when to publish them. To fill a collection with sample content without the chat, use Generate (see Create a collection). Related Field types Publish and unpublish items Limits"},{"slug":"layout-tools","title":"Layout tools","summary":"The element tools on the canvas for flex and grid layouts, lists, tables and form fields.","section":"Design","text":"Some elements have extra tools that the Style panel doesn't show: flex and grid layouts, lists, tables and form fields. You open them from the element's label on the canvas. Open the tools Select an element on the canvas. If the element has tools, its label (the tag above the selection) shows a small sliders icon. Click it (Show element tools). The tools open next to the element. Click the icon again (Hide element tools) to close them. The icon only appears on elements that use a flex or grid layout, and on lists, tables and form fields. The tools are hidden while the AI is working. Clicking the × in the tools also clears your selection. Most settings work like toggles: click a highlighted option to remove it. A value marked (inherited) comes from a smaller screen size. Flex Shown for elements that lay out their children in a row or column. Control Options Breakpoint row Base, sm, md, lg, xl, 2xl — the screen size your change applies to, from that size up. These match Phone, Landscape phone, Tablet, Laptop, Desktop and Large monitor in the Style panel. A green dot marks sizes that have their own settings. The size the canvas is showing is underlined. direction Row, Column, Row Reverse, Column Reverse justify How items spread along the direction: Start, Center, End, Between, Around, Evenly align How items line up across it: Start, Center, End, Stretch gap Space between items. XY sets one gap for both directions; X/Y sets them separately. Click More sizes (8-64) for larger gaps. Advanced → wrap None, Wrap, Rev (wrap in reverse) Advanced → grow / shrink Yes or No: whether the element can grow or shrink to fill space Grid Shown for elements that lay out their children in a grid. Control Options Show grid lines Draws the grid's columns and rows on the canvas. Breakpoint row Same as for flex. columns 1 to 4, or More columns (5-12) gap Same as for flex. Advanced → rows 1 to 6 Advanced → flow How items fill the grid: Row, Col, Dense (fills holes), R+D (row dense), C+D (column dense) Advanced → justify items How each item sits in its cell: S (start), C (center), E (end), St (stretch) A common use: set columns to 1 at Base and 3 at lg so cards stack on phones and sit in three columns on larger screens. Lists Shown for bulleted and numbered lists and their items (labeled LIST). Control Options style none, disc (bullets), 123 (numbers), and more styles...: circle, square, a, b, c, A, B, C, i, ii, iii and I, II, III position outside or inside: whether bullets sit outside the text or in line with it Marker Color The bullet or number color: inherit, white, black, or any shade from your color scales item value On an item in a numbered list: the number it shows. Reset to auto-numbering goes back to counting normally. Tables Shown for tables and their parts (rows, header and body sections, cells, caption). Control Options borders collapse (shared borders) or separate spacing With separate borders: space between cells (0, 1px, 0.25, 0.5, 1, 2) layout auto (columns size to content) or fixed (equal columns) caption top or bottom empty cells show or hide For a single cell: Control Options colspan / rowspan How many columns or rows the cell spans (1 to 6) scope On header cells: col, row, colgrp, rowgrp (helps screen readers) vertical align top, mid, bot, base Form fields Shown for form elements, text fields, text areas and drop-down lists. Element Controls Form method (GET or POST), action, autocomplete (on or off), validation Text field type (text, email, pass, num, search, tel, url, date), Convert to <textarea>, default value, placeholder, required Text area placeholder, rows (2, 3, 4, 6, 8), required Drop-down multiple, required To collect submissions, use a Starjay form from the Forms panel. It handles delivery, spam protection and verification for you. See Add a form. What the tools can't do The tools only appear on elements that already use a flex or grid layout. To turn an element into a flex or grid layout, or to change a layout in ways these tools don't offer, ask the AI. For example: Put these three cards in a row on desktop and stack them on phones. Buttons and links don't have element tools. Edit links by double-clicking them on the canvas. See Edit text, links and images in place. Related The Style panel Responsive design What the Style panel doesn't cover yet"},{"slug":"workspaces","title":"Workspaces","summary":"What a workspace is, what it owns, and how to switch between and rename workspaces.","section":"Your account and dashboard","text":"A workspace is the account your sites belong to. When you sign up, you get a workspace of your own, and you're its owner. What a workspace owns Everything in these lists belongs to the workspace, not to a single site or person: Sites. Everyone in the workspace sees the same sites. The plan and billing. Free or Pro applies to the whole workspace. See Plans. AI credits. One shared pool for every site and every member. See How credits work. Page views. One allowance shared across every site. See Page view allowance. Members. On Pro, the owner can invite people. See Invite members. Belonging to more than one workspace If someone invites you to their workspace and you accept, you belong to both. A workspace picker then appears at the top of the dashboard's left menu. Select it and choose a workspace to switch; the dashboard reloads with that workspace's sites. Pending invitations also appear in the picker as Join plus the workspace name. Settings > Account lists every workspace you belong to, with your role in each. Rename a workspace Only the owner can rename a workspace. Open the Workspace tab Go to Settings > Workspace. Type the new name Change Workspace name (1 to 80 characters). Members see this name, and it appears in invitations and in the workspace picker. Save Select Save. Members see the name but can't change it. What isn't available There's no way to transfer ownership of a workspace in the app. A member can't leave a workspace on their own. Ask the owner to remove you. See Roles. There's no button to delete a workspace. Email support@starjay.com with the subject \"Account deletion request\". See Get support. Related Roles When Pro ends"},{"slug":"payments-and-invoices","title":"Payments and invoices","summary":"How to update your payment method, find invoices and receipts, and use promo codes.","section":"Plans, credits and billing","text":"Payments for Starjay are handled by Stripe. Invoices and receipts come from Stripe. Update your card or download invoices Only the workspace owner can do this, and only once the workspace has a paid plan or credit packs. Open Subscriptions In the dashboard, select Subscriptions. Open payment management Select Manage payment & invoices at the top right. A Stripe page opens. Make your changes Update your payment method, or view and download past invoices. Promo codes If you have a promo code, enter it on the checkout page when you first upgrade to Pro. The upgrade dialog reminds you: Have a promo code? You can enter it on the checkout page. While a discount applies, the Next renewal card shows the discount and what you'll pay at renewal. Prices and tax All prices are in US dollars and don't include tax. On your first purchase, tax is shown on the checkout page before you pay. For charges made inside Starjay, such as adding credit packs or switching to yearly billing, the dialog shows + applicable taxes below the amount. Billing questions For billing help, email support@starjay.com. Include your account email and the invoice or subscription number. Never send card details. See Get support. Related If a payment fails Upgrade, switch to yearly, downgrade"},{"slug":"hotlink-protection","title":"Hotlink protection","summary":"Explains why other websites can't show your images by default, and what changes when you allow it.","section":"Images","text":"Hotlinking is when another website shows your image by pointing at its address on your site. Their page shows your image, but your site serves it. Off by default By default, each image is \"Restricted to your own site.\" Your own pages show it normally. Other websites that try to embed it get nothing. Opening an image's address directly in a browser tab still works. Protection is about other sites embedding your images, not about hiding them. Allowing hotlinking for an image Some images are meant to be shared, such as a logo for press or a badge partners put on their sites. To allow it: Open Images and click the image. Under Usage & delivery, turn on Allow hotlinking. The note changes to \"Image may be embedded on other websites. Third-party views count toward your pageview total.\" This is set per image. Your other images stay protected. Why it matters Every time another site shows your image, your site serves it. A popular site embedding your images could add a lot of traffic to your account. Keeping protection on for most images avoids that. Related Page view allowance How page views are counted"},{"slug":"structured-data","title":"Structured data","summary":"Add schema.org structured data to your site by asking the AI.","section":"SEO and addresses","text":"Structured data is code that describes your content to search engines in a standard format (schema.org, usually as JSON-LD). Search engines can use it for rich results, such as business details, product information or article dates. Starjay doesn't add structured data automatically, and there's no structured data field in the SEO view. Ask the AI to write it for you. Describe what you want In the AI chat, say what the structured data should describe and where it applies. For example: \"Add LocalBusiness structured data with our name, address, phone number and opening hours to the home page.\" Review the change The AI adds the code to your site's head section. Review the version and click Save to keep it. See AI sessions: versions, Save and Reject. Publish Publish your site. Test it Check the published page with a structured data testing tool, such as Google's Rich Results Test. Tips Give the AI the real facts (address, hours, prices). Structured data must match what's visible on the page. Say which page it belongs on. Data about one product or article should apply to that page only. When the facts change, ask the AI to update the structured data too. Related What Starjay generates for you Head and body snippets"},{"slug":"read-and-export-submissions","title":"Read and export submissions","summary":"Shows how to read, mark, delete and export form submissions in the editor and on the dashboard.","section":"Forms","text":"Read submissions in the editor Click Forms in the left rail. The Submissions tab lists each form with: Total: all submissions received. Unread: submissions not yet marked as read. Latest: when the most recent one arrived. Click a form to see its submissions, newest first. Unread ones have a dot and bold text. Click a submission to see every answer, when it arrived, and the visitor's browser details. In a submission you can: Click Mark as read or Mark as unread. Click Delete, then Confirm delete. This can't be undone. Download any uploaded files. See File uploads. Export to CSV Open a form on the Submissions tab and click Export CSV. The file includes every submission for that form, with one column per field, plus the submission ID, when it arrived, when it was read, and the visitor's browser details. Uploaded files are listed by name. Open the file in any spreadsheet app. Read submissions on the dashboard On the dashboard, click Form responses in the left menu. Pick a site, and a form if the site has several. You see Total, Unread and Last 7 days, a list of responses, and the details of the one you select. Opening a response marks it as read. The dashboard is for reading. To delete or export, use the Forms panel in the editor. How long submissions are kept Submissions are kept until you delete them. There's no automatic deletion. You delete submissions one at a time. There's no option to delete all of them at once. Deleting a site deletes all of its submissions. If you need to keep a record and clear out old submissions, export to CSV first, then delete. Related Where submissions go The dashboard"},{"slug":"styling-rules","title":"Styling rules","summary":"How to style a Starjay site: colors and fonts only from design tokens, stock Tailwind values for everything else.","section":"Site code reference","text":"Only colors and fonts are design tokens. Everything else (spacing, sizing, radius, shadows, breakpoints) uses Tailwind's stock utilities. Colors Your site's colors are defined in brand/tokens.ts and become Tailwind utilities: A scale has 11 shades, 50 to 950: bg-{name}-{shade}, text-{name}-{shade}, border-{name}-{shade}. A swatch is a single color: bg-{name}, text-{name}. The names are whatever the site chose. Read them with get_tokens before you write classes, and never assume a scale called primary or neutral exists. If the color you need isn't in the palette, add it first with modify_tokens, then use the new class in the same change. importTailwindScale copies one of Tailwind's built-in scales exactly; addScale builds a scale from a base color. A name such as stone is fine once the site has registered it as a token. Fonts Fonts are slots, used as font-{slot}. Slot names are site-specific (one site has font-display and font-body, another only font-default). Add or change a font with modify_tokens. Only Google Fonts are supported. Everything else Use stock Tailwind values: p-6, gap-8, rounded-lg, max-w-4xl, shadow-md. There are no named spacing tokens (p-lg doesn't exist). Site-wide element styles Element defaults style every bare element of a type across the site, such as body background and text color or every h2. Don't repeat those classes in components. Change them with modify_element_defaults. The page background, text color and font can also be changed in Settings → General → Page Defaults. Styling rules Colors MUST come from the site's token classes. You MUST NOT use hex, rgb() or hsl() values in classes or style attributes. The write goes through, but the result carries a warning, and the color won't follow token changes. You MUST NOT use Tailwind's default color names (gray, slate, blue, red, emerald and so on) unless the site has registered that name as a token. They compile, so nothing stops you, but they bypass the token system. Font families MUST come from font-{slot} classes. You MUST NOT write font-family in styles or arbitrary values such as font-[\"Comic Sans\"]. You SHOULD use stock Tailwind values and SHOULD NOT use arbitrary values such as p-[32px] or max-w-[48rem]. In a component's <style> block you MUST NOT use @apply. The block compiles without the site's theme, so token classes fail there and break the page. Write plain CSS with token variables instead. You MUST NOT edit brand/theme.css or src/styles/globals.css. Both are generated, and the platform refuses the write. Token variables in CSS Each token is also a CSS variable, for the rare case where you need plain CSS: <style> .pull-quote { border-left: 2px solid var(--color-accent-500); font-family: var(--font-display); } </style> Colors are --color-{name}-{shade} (or --color-{name} for a swatch); fonts are --font-{slot}. Token names are site-specific Color and font class names in these examples (bg-surface-50, text-ink-900, text-accent-600, font-display) are made up. Every site names its own tokens. Check the real names with get_tokens or in the Tokens panel before you write code. Related Colors Fonts Design tokens: why your site has them Page defaults"},{"slug":"quick-insert","title":"Quick insert","summary":"How to add an element right after your selection using only the keyboard.","section":"The editor","text":"Quick insert adds an element or pattern from a searchable list without opening the Elements panel. Select an element Click an element on the canvas. The new element will go right after it, so select something inside a section rather than a whole section. Press `/` A list opens with the search box Search elements.... Find the element Type to filter the list. Use ↑ and ↓ to move through it. Insert it Press Enter. The element is added right after your selection. Press Esc to close the list without inserting. Quick insert lists the same elements and patterns as the Elements panel (text, links and buttons, containers, lists, media and patterns). It doesn't include ready-made sections or your components; add those from the Elements panel. The list only shows elements that are allowed at that spot. If nothing fits, it says No valid elements for current selection. If you selected a whole section or component, you'll see Can't insert here — select an element inside the component. Select something inside it and try again. If Dark Magic is on, the AI restyles the new element to fit your brand. / doesn't open Quick insert while you're typing in a text field or editing text on the canvas. Related Add elements and sections Keyboard shortcuts"},{"slug":"redirects","title":"Redirects","summary":"Send visitors and search engines from old addresses to new ones.","section":"SEO and addresses","text":"A redirect sends anyone who visits an old address to a new one. Use redirects when you rename or remove a page, so old links and search results keep working. To manage redirects, choose SEO from the view menu, then Redirects. Redirects only work on the published site Redirects take effect when you publish, and only on your live site. They don't run in the editor's preview. To check a rule before publishing, use Test a path. Create a redirect Enter the old address Under Create redirect, type the old path in Old URL, for example /old-page. Enter the new address Type the destination in New URL. It can be a path on your site (/new-page) or a full web address on another site (https://shop.example.com). Choose the type (optional) Click Advanced to change Redirect type. New redirects are Permanent (301) unless you change it. Click Add The rule appears under Redirect rules. Publish Publish to make the rule live. If you type an address without a leading slash, Starjay adds one. Permanent or temporary Type Use it when Permanent (301) The old address is gone for good, for example after renaming or retiring a page. Search engines update their index to the new address and pass the old page's ranking to it. Temporary (302) The move may be undone, for example a maintenance page or a short link whose destination may change. Search engines keep the old address in their index. If you're not sure, choose Permanent (301). Manage your rules Each rule in Redirect rules has these controls: From and To: click to edit, then press Enter or click away to save. Press Esc to cancel. Type: switch between Permanent (301) and Temporary (302). Enabled: turn a rule off to pause it without deleting it. Delete rule (trash icon): remove it. Order matters. Drag a rule by its handle to move it. When more than one rule could match an address, the rule higher in the list wins. Test a path Under the list, type a path in Test a path and click Test. Starjay shows where that path would go and which type of redirect applies, or No match. The matching rule is highlighted in the list. How addresses match Matching ignores capital letters and a trailing slash: /About/ matches a rule for /about. If a visitor's address has a query string (such as ?ref=newsletter), it's carried over to the new address, unless the destination has its own. An exact rule applies even if a page exists at the old address. Patterns: redirect a whole section A From address can include one placeholder segment written as :name. It matches any single segment in that position, and you can reuse it in To: From To Example /blog/:slug /journal/:slug /blog/hello → /journal/hello Rules for patterns: Only one :name segment per rule, and it must be a whole segment, like /blog/:slug. To can only use the placeholder names that From has. A pattern never applies to an address where a real page exists. An exact rule beats a pattern rule for the same address. There are no other wildcards. Errors and warnings Message What to do From must start with a single \"/\" and contain no spaces, consecutive slashes, \"?\", or \"#\". Enter a plain path such as /old-page. Paths starting with \"/_\" are reserved for the platform — a redirect from there would never run. Choose a different old address. To must be a path starting with \"/\" or an absolute http(s):// URL. Use /new-page or a full address starting with https://. From and To are the same path — this rule would loop. Change one of them. Another enabled rule already redirects \"…\" Delete or pause one of the two rules. \"…\" is itself redirected by another rule — visitors hit two redirects. (warning) Point this rule straight at the final address. Redirects Starjay creates for you When you move or rename a live page, Starjay creates a permanent redirect from the old address to the new one and tells you so. The message includes Remove redirect if you don't want it. Pages that were never published don't get a redirect. See Create, move and rename pages. When you change the address of a published CMS item, a redirect appears under From content. These are live right away, without republishing. Removing one takes it off the live site at once. Your own rules win over these for the same address. See Item addresses and slugs. You can also ask the AI to create, change, reorder or remove redirects. Related Create, move and rename pages Publish your site"},{"slug":"domain-troubleshooting","title":"Domain troubleshooting","summary":"What each custom domain status and error means, and what to do about it.","section":"Publish and domains","text":"Domain statuses The status appears next to your domain under Connected Domains. Status What it means What to do Pending DNS Starjay hasn't found your records yet, or they don't point at your site. Check each record against the DNS card, then click Check DNS now. DNS changes can take a few minutes to appear, sometimes longer. Verifying... Your DNS is pointing at Starjay and the domain is being verified. Wait a few minutes and click Check DNS now. Pending SSL The domain is verified and Starjay is setting up its HTTPS certificate. Wait a few minutes and click Check DNS now. No status, and a round button you can select Everything is set up. Select it to make it your live address. See Choose which address serves your site. Error There's a problem with the domain's HTTPS certificate. Check that your records are still in place. If it doesn't clear, contact support. Common problems Problem Likely cause Fix The TXT record never gets a check mark. The record's name or value is wrong. Use the name exactly as the card shows it: _starjay for a domain, or _starjay. plus your subdomain's first part for a subdomain (for example _starjay.shop). Some hosts want the full name instead: add your domain to the end, for example _starjay.shop.yourbusiness.com. The value must be the full starjay-verify=… text from your card, with nothing else. The CNAME record never gets a check mark. An old record for www is still there, or the value is mistyped. Remove any other www record (CNAME or A) and make sure the value is exactly sites.starjay.app. Using Cloudflare, the domain stays pending. The record is proxied (orange cloud). Set Proxy status to DNS only (grey cloud). www.yourbusiness.com works but yourbusiness.com doesn't. The bare domain isn't set up. Add the ALIAS/ANAME/CNAME row from the card, or set up forwarding to https://www.yourbusiness.com at your provider. My provider asks for an A record. Starjay doesn't use A records. Use your provider's ALIAS or forwarding feature, as the card shows. If it has neither, forward at your registrar or move DNS to a host with ALIAS support. I can't select the domain. Not every record is verified yet. Finish setting up DNS until the yellow dot is gone. The domain menu and Check DNS now are disabled. An AI session is open. Save or Reject the session first. My live site shows Site Offline. The site is unpublished, or you disconnected its live domain. Click Publish. Error messages Message What to do Invalid domain format Enter just the domain, such as yourbusiness.com, without https://, slashes or spaces. We couldn't look up this domain's DNS settings… Starjay couldn't tell where your domain's DNS is managed, so it can't tell whether you entered a subdomain. Check the spelling. If you just bought the domain, wait a few minutes and try again. Domain already in use: … The domain is connected to another Starjay site. If it's one of your sites, disconnect it there first. Otherwise, contact support. Failed to connect domain or Network error Try again. If it keeps happening, contact support. Related Connect a custom domain Disconnect a domain"},{"slug":"ai-memory","title":"AI memory","summary":"What the AI memory meter shows, why a full memory slows the AI down, and the difference between clearing its memory and clearing the chat.","section":"Build with AI","text":"The AI remembers your whole conversation while it works: your messages, its replies, and what it has read from your site. That memory has a limit. The memory meter The bar at the bottom of the AI panel, labeled AI memory, shows how full the AI's memory is, as a percentage. It turns yellow at 70% and red at 90%. Hover over it to see the details. The fuller the memory, the slower each reply gets and the more credits each request uses, because the AI rereads everything it remembers every time. Clearing memory When nothing is running, a Clear menu appears next to the meter. It has two choices: Free up AI memory empties the AI's memory so replies stay fast and cheap, and helps it focus on what's next. Your messages stay visible in the chat. Free up AI memory + clear chat does the same and also clears the messages shown in the panel. After clearing, a line appears in the chat: ⟲ AI memory cleared — it can't see above this line. The AI can still look at your site, so it can catch up on anything it needs by reading your pages again. It just won't remember what you said earlier, so restate anything important. Your edits are never lost Clearing memory doesn't change your site, your versions, or your session. Save and Reject work exactly as before. When memory is full If the memory fills up, you see AI memory is full. Clear AI memory/history before sending another prompt — your existing work is safe. Click Clear AI memory & continue. If a single request is too big for the AI to handle at once, you may see Trim context & continue. If trimming isn't enough, the message suggests making the request smaller, and Restore prompt to edit puts your message back in the box so you can shorten it or remove some screenshots. When to clear When you move on to a different part of the site. When the meter turns yellow and you don't need the earlier conversation. When the AI keeps returning to an idea you've moved away from. Related Chat with the AI Credits for AI Write prompts that work"},{"slug":"how-agent-work-shows-up-in-the-editor","title":"How agent work shows up in the editor","summary":"What you see in the editor while your own AI works, and how you review, keep or undo its changes.","section":"Use your own AI","text":"Turns Your AI works in turns. It opens a turn before it changes anything and closes it when it's done. While a turn is open, the site is reserved for your AI: nobody else, including you and Starjay's built-in AI, can change it. If your AI stops making calls for about five minutes, its turn lapses and the site is released. Your AI can open a new turn and carry on. What you see while your AI works On the canvas: Claude is editing — locked, with a running count such as · 3 files so far. At the top of the left panels: Claude is editing — 3 files changed so far. In the AI panel, the message box says An AI agent is editing this site… and you can't send a message. Save and Reject are unavailable until the turn ends (Available when the AI finishes editing). The editor says \"Claude\" for every connected AI, including Codex. Versions Each turn your AI finishes becomes a version in the AI session, the same way each request to the built-in AI does. You can step back and forward through versions in the editor. Between your AI's turns you can edit the site yourself or keep going with the built-in AI. Save or Reject Only you can end the session. Click Save to keep all the changes, or Reject to restore the site to how it was before the session started. Your AI can't do either. See AI sessions: versions, Save and Reject. You have to Save or Reject before the site can be published, by you or by your AI. Take back control To stop your AI in the middle of a turn, click Take back control on the canvas banner, then click Cut off Claude? to confirm. You'll see one of these: Editing unlocked — Claude's changes saved as a step: the changes it had already made became a version you can review. Editing unlocked — Claude was cut off: it hadn't changed anything yet. Your AI's next change is refused, and it has to open a new turn. Reviewing on your phone You can follow along, step through versions, and Save or Reject from your phone. See The phone review screen. Related Permissions and safety Working with others at the same time"},{"slug":"build-a-site-from-claude-code","title":"Build a site from Claude Code","summary":"Connect Claude Code to Starjay, have it edit a site, review and save its work in the editor, and publish after you confirm.","section":"Worked examples","text":"In this tutorial you connect Claude Code on your computer to your Starjay account, ask it to change a site, watch the changes arrive in the editor, save them, and publish. Claude Code works on your site through a Starjay connection. Its edits show up in the editor as versions, the same way the editor's own AI works, and you still decide what to keep. Before you start Install Claude Code and sign in to it. Have a Starjay site to work on, open in the editor in your browser. Connect Claude Code (once) You connect once, and the connection works for every site and workspace you can access. Open the setup dialog In the editor, click the AI button at the top right. Under the AI panel's header, click Use Claude or Codex. A dialog opens: Work on this site with an AI agent. Choose Claude Code Under 1 Connect Starjay, set AI client to Claude Code (terminal). Add the server Open a new terminal window and run the command shown in the dialog. Click the copy button to copy it: claude mcp add --transport http -s user starjay https://app.starjay.com/mcp Enable the connection Type claude to open Claude Code, then type /mcp and press Enter. Select starjay and press Enter. If its status is disabled, choose Enable. Authenticate In the same menu, choose Authenticate. Your browser opens; sign in to Starjay and approve access. If the menu already says it's authenticated, you're ready. Because the command uses -s user, the connection is available in every Claude Code session on this computer, in any folder. Start on your site Copy the starter prompt Back in the dialog, click I’ve connected. Step 2 Start on this site shows a prompt like this: Use the starjay MCP connection to work on my Starjay site named “Rise & Crumb” (site ID: …). Click the copy button next to it. The site ID tells Claude exactly which site to use, even if you have several with similar names. Paste it with your request In Claude Code, paste the starter prompt, then describe what you want: Add a \"Wholesale\" page for cafés and restaurants that want to stock our bread. Include a short pitch, a table of products with minimum order quantities, and a call to action linking to the Contact page. Add it to the header navigation. Match the existing style. Let Claude work Claude reads your site, then makes its changes. Approve its tool requests in Claude Code if it asks. Watch the work arrive in the editor While Claude is editing, the editor shows Claude is editing — locked over the canvas, with a count of files changed so far. You can't edit by hand during this time, so your edits and Claude's don't collide. If you need to stop Claude, click Take back control, then confirm with Cut off Claude?. Anything Claude already changed is kept as a version you can review. When Claude finishes a batch of edits, the canvas updates and a new version appears in the AI Session bar at the bottom of the AI panel. Review and save Look at the changes Open the new Wholesale page from the Pages panel. Use ‹ and › in the AI Session bar to compare versions, including Original. Ask for fixes Keep talking to Claude in your terminal. Each further batch of edits becomes another version. Save When you're happy, click Save in the editor. Or click Reject to put the site back the way it was before Claude started. You Save or Reject in the editor, not in Claude Code. Claude can't save or reject a session for you. Publish Ask Claude to publish In Claude Code, type Publish the site. Confirm Claude must ask for your permission first, naming the site. Reply yes to confirm. Claude won't publish without your reply in the same conversation. Check it's live Claude reports when publishing has finished. In the editor, the Publish panel shows Live and the address. Publishing is refused while an AI session is open. If Claude says the publish was refused, click Save (or Reject) in the editor, then ask again. You can also publish yourself from the editor's Publish button. Credits Claude's own work runs on your Claude plan, not on Starjay credits. Some things Starjay does for Claude still use Starjay credits, such as looking at a reference website or taking screenshots of your site. If something goes wrong Problem What to do starjay doesn't appear in /mcp. Run the claude mcp add command again in a new terminal, then restart Claude Code. Claude says it isn't signed in. Type /mcp, select starjay and choose Authenticate. Claude works on the wrong site. Paste the starter prompt from the dialog again; it includes the site ID. Claude says the site is busy or locked. Someone, or the editor's own AI, is working on the site. Wait until it finishes, or check the AI panel. Claude's publish is refused. Save or Reject the session in the editor first. The editor still shows the old page. Click Reload Site in the top bar. Related Connect Claude Code Start working on a site How agent work shows up in the editor Permissions and safety Credits when using your own AI Tool reference"},{"slug":"publish-and-unpublish-items","title":"Publish and unpublish items","summary":"Shows how to publish one item or all changes, what the publish dialog tells you, and how to take an item off your site.","section":"Content (CMS)","text":"Every item has a draft, where your edits save. Once you publish it, it also has a published version, which is what visitors see. Publishing an item doesn't republish your site, and it goes live within a few seconds. Only people publish items. The AI can create and change items, but its changes stay as drafts until you publish them. See an item's state In the item editor, two pills sit next to the title: Published is green when a version of the item is live, and dim before the first publish. Draft is orange while the draft has changes that aren't published. Click Published to view the live version, read-only. Click Draft or Back to draft to return to editing. You can't pick Published before the first publish, or when the draft and the live version are the same. In the item list, the Status column shows: Status Meaning Draft Never published. Live Published, and the draft is the same. Live · changed Published, but the draft has changes that aren't live. Queued… / Publishing… A publish is waiting or running. Publish failed The last publish didn't finish. Open the item and click Retry. Publish one item Open the item Open the item in the CMS view. Click Publish Click Publish in the item's header. Pending edits are saved first. Check the dialog The dialog says what will happen: Linked items that aren't live yet and must go along, under \"Also published\". Linked items you can choose to publish too, with a checkbox each. Items you leave out show as missing on the live site. Anything that stops the publish. The title changes to \"Can't publish … yet\" and each problem has Open to go to the item. Confirm Click Publish. The item goes live within a few seconds. You can keep working while it publishes. Publish all changes In a collection's toolbar, click Publish all changes. Every change that's ready goes live. Items that aren't ready, for example because a required value is missing, are left out and listed in the dialog under \"Left out, not ready yet\". If there's nothing to publish, you see \"Every ready change is already live.\" Unpublish an item Open the item, open ⋯ and choose Unpublish. The item comes off your live site. Its draft stays, and you can publish it again later. You can't unpublish an item while live items link to it. The dialog lists them. What can block a publish A missing required value. Fill it in. See Required fields. A linked item that can't be published. Fix that item first. An open AI session that changed the item. Save or Reject the session first. The message says \"The open AI session changed this item. Accept or reject the session first.\" Accept means Save. A slug another live item already uses. See Item addresses and slugs. Your site is being published. Item publishes wait until it's done. Two kinds of change need a site publish, not an item publish: The pages that show items, such as a new listing page or a redesigned item page. Changes to a collection's fields. The live site keeps using the fields as they were at your last site publish. See Publish your site. Related CMS pages on the live site References between collections Publish your site"},{"slug":"responsive-design","title":"Responsive design","summary":"How to make an element look right on phones, tablets and desktops by styling it per screen size.","section":"Design","text":"Your site is seen on screens of every width. Starjay lets you give an element different styles at different sizes, such as a big heading on desktop and a smaller one on phones. How screen sizes work Styles are set from small to large. A value set for Phone applies to every size. A value set for Tablet applies to tablets and everything larger, and replaces the Phone value there. So style for phones first, then add changes for larger screens where you need them. Style an element for different sizes See several sizes at once In the top bar, switch to Breakpoints mode. The canvas shows your page at more than one width side by side, and you can edit in any of them. See Preview different screen sizes. Select the element Click it on the canvas and open the Style panel. Set the phone style In the breakpoint bar, choose Phone, then set the value. For example, set Size to 36. Set the larger-screen style Choose the size where the change should start, such as Laptop, and set the new value. For example, set Size to 60. Check each size Look at each canvas, or change the canvas width. The value showing at each width comes from the largest breakpoint that's not wider than the screen. When a change doesn't seem to do anything If you edit a value and the canvas doesn't change, the canvas is probably showing a value from a different breakpoint. The control shows a warning icon, This won't change what you see, with an explanation such as This setting applies up to 767px, but your canvas is 1280px. Click Switch to the … breakpoint to edit the value that's actually showing. Review and clean up Click See all breakpoints to see every value the element has at every size, side by side. Use + Breakpoint to add a value for another size, and × to remove a size's values. Turn on Highlight controls that have breakpoint overrides to outline every control that changes at some size. Layouts per screen size The layout tools for flex and grid have their own breakpoint row. Use them to, for example, show one grid column on phones and three on laptops. Ask the AI for responsive changes For changes the panel doesn't cover, such as hiding an element on phones or reordering sections on small screens, ask the AI. It can take screenshots at phone, tablet and desktop sizes to check its work. Hide the large hero image on phones and make the headline smaller there. Check it on a phone afterwards. Related The Style panel Layout tools Preview different screen sizes"},{"slug":"spam-protection","title":"Spam protection","summary":"Explains how Starjay keeps spam out of your forms without making visitors solve puzzles.","section":"Forms","text":"Every Starjay form has spam protection built in. Visitors don't see any of it. The honeypot field Each form has a hidden field that people never see or fill in. Many spam bots fill in every field they find. When the hidden field has a value, Starjay quietly drops the submission. The bot gets a normal \"thank you\" response, so it has no reason to try again. The honeypot is on by default. You can see it under Settings as Honeypot, and turn it off with Spam protection while editing. Keep it on unless you have a reason not to. Only your site can send submissions A form accepts submissions only from pages on your own site. A script on another website can't post to your form. Limits per visitor Each form limits how many submissions one visitor can send in an hour. A visitor who goes over sees an error until the hour has passed. This stops one person or bot from flooding your inbox. If a form legitimately needs more, such as a sign-in sheet at an event, ask the AI to raise the limit for that form. What isn't available There's no CAPTCHA (the \"I'm not a robot\" checks) for forms. If spam still gets through Make sure the honeypot is on. Delete the spam submissions one at a time. Tell us through Get support. Related Add a form Read and export submissions"},{"slug":"if-a-payment-fails","title":"If a payment fails","summary":"What you see when a payment doesn't go through, what changes while it's overdue, and how to fix it.","section":"Plans, credits and billing","text":"If a payment for your workspace fails, the Subscriptions page shows a banner: Your latest payment did not go through. Your workspace stays on Pro for now. Update your card or pay the invoice to keep Pro. Your latest payment needs verification before it can complete. Your bank needs you to confirm the payment. Select Pay now in the banner to open the invoice and pay it. To change your card first, select Manage payment & invoices. See Payments and invoices. While the payment is overdue Stays the same Changes Unlimited active sites Your monthly credits are the Free plan's 1,000 instead of Pro's 10,000 Members keep access Only GPT-6 Luna can be used for new AI requests Pro page view allowance Once the payment goes through, everything returns to normal. If the payment is never made If the payment is retried and still doesn't go through, the Pro plan ends and the workspace returns to Free. Extra sites are archived and members are paused, exactly as when you downgrade. See When Pro ends and Upgrade, switch to yearly, downgrade. Disputed payments If a payment is disputed with your card issuer, the subscription is canceled and the workspace returns to Free. The Subscriptions page explains this. If it was a mistake, contact support@starjay.com, or upgrade again. Related Running out of credits Plans"},{"slug":"images-in-code","title":"Images in code","summary":"How to place library images in a Starjay site's code: exact addresses, alt text and responsive sizes.","section":"Site code reference","text":"Every image on a Starjay site comes from the site's image library. An image's address looks like this: /_images/team-photo-a7f3~5f6971ec-d438-4a5e-a03b-8d3e272baa01/public It's site-relative, and the part between /_images/ and the last segment is opaque. Get addresses from browse_assets or import_asset (or request_asset_upload for a file on your computer) and use them exactly as returned. Image rules (guidance) Image addresses MUST come from the image library, used exactly as returned. You MUST NOT build, guess, shorten or make absolute an image address. Every <img> MUST have an alt attribute. A decorative image uses alt=\"\". In a component, an image and its alt text SHOULD be props (imageUrl, imageAlt) so each use can show its own image. In a repeated list, each item MUST carry its own image address in its data. A literal address inside .map() makes every item show the same image. For an empty image area with no real image yet, use a colored <div> with token classes, never a placeholder or broken image address. These are rules the platform expects you to follow; it doesn't refuse a write that breaks them. Following them keeps images replaceable on the canvas and keeps the delete protection in the image library accurate. Write alt text that describes what the image actually shows. Sizes Replace the last segment of the address to get another size: Segment Size public The original w640, w1024, w1920 640, 1024 and 1920 pixels wide og 1200 × 630 crop, for social previews thumbnail 200 × 200 crop Browsers get a modern image format automatically. Responsive images Give large images (heroes, banners, feature images) a srcset. Work out the base address in the frontmatter, and keep src a direct reference to the prop. The editor's image picker looks for src={imageUrl}; a computed src stops Replace image from working. --- interface Props { imageUrl?: string imageAlt?: string } const { imageUrl, imageAlt = '' } = Astro.props as Props const imageBase = imageUrl?.replace(/\\/[^/]+$/, '') ?? '' --- {imageUrl && ( <img src={imageUrl} srcset={`${imageBase}/w640 640w, ${imageBase}/w1024 1024w, ${imageBase}/w1920 1920w`} sizes=\"100vw\" alt={imageAlt} loading=\"lazy\" decoding=\"async\" /> )} Set sizes to match the layout, for example (max-width: 768px) 100vw, 50vw for a two-column image. Images visible when the page first loads use loading=\"eager\" fetchpriority=\"high\" instead of loading=\"lazy\". Inside .map(), work out the base inside the callback (const base = item.imageUrl?.replace(/\\/[^/]+$/, '') ?? '') and keep src={item.imageUrl}. Small images that always show at one size (avatars, logos, icons) don't need a srcset. Social preview images A page's social preview image is set with seo_set_page, not in code. Use the og version of the image's address. Related The image library Image sizes and formats Where an image is used, and deleting"},{"slug":"dark-magic","title":"Dark Magic","summary":"What the Dark Magic switch does to elements, sections and components you add, and what changes when you turn it off.","section":"The editor","text":"The elements and ready-made sections in the Elements panel are plain building blocks with neutral styling. Dropped onto a finished page, they usually look out of place. Dark Magic fixes that. When it's on, the AI restyles each thing you insert so it matches your brand and the section around it: your colors, your fonts, and the look of nearby content. A hero stays a hero; it just looks like it belongs on your site. The switch is at the top of the Elements panel, labeled Dark Magic with a sparkle icon. It's on by default, and the editor remembers your choice in this browser. What you see The element or section appears straight away with its plain styling. An outline with Applying dark magic… sits over it while the AI works. When the AI is done, the restyled version replaces it. Each restyle is a normal change. If you don't like the result, press Cmd/Ctrl+Z. If a component insertion is still running, press Esc to cancel it; the inserted component is removed. Components For components, Dark Magic does more than restyle: Inserting a component: the AI fills in the component's options so it fits the spot (you'll see Dark Magic configured {name} when it's done). Replacing or swapping your selection with a component: the AI carries your existing text, links and behavior into the new component. The original stays visible until the replacement is ready. If it fails, the panel says Original selection kept (or Raw {name} kept for an insertion) with Retry Dark Magic and Dismiss buttons. Credits Dark Magic uses the AI, so it uses a small number of credits each time it runs. See Credits for AI. When Dark Magic is off Elements and sections keep their plain styling. Style them yourself in the Style panel, or ask the AI. Components are inserted with their default options. If a component has options, a Configure {name} card shows them all so you can fill them in. Replacing a selection with a component is a plain swap. You're warned first: Raw replacement removes the selected element's content, links, behavior, and styling. Nothing is copied into {name}. Related Add elements and sections Components Credits for AI"},{"slug":"google-analytics","title":"Google Analytics","summary":"Connect Google Analytics 4 to your published site with your measurement ID.","section":"SEO and addresses","text":"Starjay counts page views on its own (see Your site's traffic). If you also want Google Analytics, add your Google Analytics 4 measurement ID. Find your measurement ID In Google Analytics, open Admin → Data streams, choose your web stream, and copy the Measurement ID. It starts with G-. Open the Analytics settings In the editor, choose Settings from the view menu, then Analytics. Paste the ID Paste it into Measurement ID (for example, G-XXXXXXXXXX) and click away from the field. Saved appears below it. Publish Publish your site. The Google Analytics script is added to your live pages. The tracking script loads only on your live site, never in the editor, so your own editing doesn't show up in Google Analytics. If you see Enter a valid Measurement ID (e.g. G-XXXXXXXXXX)., check that you copied a GA4 measurement ID, not an older Universal Analytics ID (UA-…) or a Google Tag Manager ID (GTM-…). To turn Google Analytics off, clear the field, click away and publish again. Privacy is your responsibility Google Analytics uses cookies and collects visitor data. As the site owner, you're responsible for handling visitor data in line with privacy laws such as the GDPR, including any consent banner you need. You can ask the AI to add a consent banner. Related Your site's traffic How page views are counted Site settings"},{"slug":"what-the-ai-can-and-cant-do","title":"What the AI can and can't do","summary":"A list of what Starjay's AI can change on your site, and what it can't do or needs you for.","section":"Build with AI","text":"What the AI can do Area What it can do Pages Create pages, edit them, and mark pages as draft, ready or deleted. A page marked for deletion is removed on your next publish. Components and sections Create, edit and rearrange components and sections, including your header and footer. Site layout Add or change the header and footer, and change page navigation and transitions. Colors and fonts Add, change and rename colors and fonts in your design tokens. Page defaults Set site-wide defaults such as the page background, text color and font. Brand guide Read your brand guide on every request, and update it when you ask. CMS Create and change collections and items, and add sample items. It can't delete them without you. See Deletes the AI proposes. Images Import images from a web address, generate new images, and rename, tag and write alt text for images in your library. Forms Create and change forms. Email notification addresses still need you to verify them. SEO and redirects Set page titles, descriptions and site SEO defaults, and create and change redirects. Domains Connect or disconnect a custom domain, after asking you first. Checking its work Take screenshots of your unpublished pages at desktop, tablet and phone sizes, and fix what it sees. References Look at a public web page you give it. See Rebuild or borrow from an existing site. Reading your site Read and search all of your site's pages and components. Everything the AI changes is part of the current AI session, so you can step back or Reject it. What the AI can't do It can't What to do instead Publish or unpublish your site Use the Publish panel. See Publish your site. Restore a checkpoint Use Settings → Checkpoints. See Restore a checkpoint. Delete CMS content on its own It shows a delete card, and nothing is deleted until you click Delete. Delete images from your image library Delete them in the Images panel. Verify a form's notification email Enter the code in the Forms panel. See Verify notification emails. Store passwords, API keys or other secrets There's no place on your site to store secrets. Sign in to other websites Send screenshots of pages behind a login. Change billing, plans, workspace members or account settings Use the dashboard. Buy a domain Buy it from a domain provider, then connect it. Related Chat with the AI What the Style panel doesn't cover yet Permissions and safety (for AI apps you connect yourself)"},{"slug":"permissions-and-safety","title":"Permissions and safety","summary":"What a connected AI can and can't do with your Starjay account, and how to disconnect it.","section":"Use your own AI","text":"What a connected AI can do When you sign in, your AI app acts as you. It can work on every site in every workspace you belong to, including: Read all of a site's files, pages, components, colors, fonts, CMS content, images, forms, SEO settings, redirects and checkpoint list. Change pages, components, colors, fonts, the brand guide, header and footer, CMS collections and items, images and alt text, forms, SEO, redirects and page publish states. Take screenshots of your unpublished site and of other public websites. Publish a site, after you approve it. Safeguards Publishing always asks you first. Before every publish, your AI must ask you in the conversation, name the site, and wait for your yes. Starjay refuses a publish that isn't marked as approved. Marking a page for deletion asks you first, the same way. Deleting CMS content needs your click. When your AI asks to delete a collection or items, Starjay asks you, and nothing is deleted unless you confirm. Every change is reviewable. Changes land in an AI session that you Save or Reject in the editor. A checkpoint is taken before each AI session starts. You can stop it at any time with Take back control in the editor. What a connected AI can't do Save or Reject an AI session. Publish while an AI session is waiting for Save or Reject. Connect, change or disconnect custom domains. Restore a checkpoint. Manage billing, plans or members. Add secrets or API keys to your site. Disconnecting To disconnect, remove the starjay server or connector in your AI app. In Claude Code, run claude mcp remove starjay. Related Rules for agents Checkpoints"},{"slug":"required-fields","title":"Required fields","summary":"Explains what Required means for collection fields and how to fill values when you make a field required.","section":"Content (CMS)","text":"In a collection, Required means required to publish. An item with an empty required field still saves, so you never lose work. It just can't be published until the field has a value. What you see In the item editor, the field name has a red asterisk, and the header shows what publishing still needs, for example \"To publish: Summary is required\". In the item list, a yellow chip such as \"12 missing Summary\" counts the items that lack a required value. Click it to list only those items. If you publish an item that lacks a value, the publish dialog says what needs attention. Making a field required when items already exist When you tick Required on a field in Edit Schema, Starjay checks which items have no value. You may briefly see \"Checking which items have no …\". Then, under the field, you see something like: 5 items in Blog Posts have no Summary. They can't be published until they have one. You can fill them now: You can: Set all to one value. The control matches the field type, for example a date picker or an item picker. Or let the AI write each value from each item's own content. This is offered for Text, Long text, Markdown and Enum fields, and it uses credits. Do nothing. The items save as they are and can't be published until each has a value. The fill happens when you click Save changes, and applies to the items' drafts. Items that are already live Live items keep showing without the value until they're published again. After you save, if live items lack the new required value, a bar offers to fill them: 3 live items have no Summary. The live site shows them without it until they're published again. For Text, Long text, Markdown, Slug, Link, Color and Number fields, type a value and click Fill live items. This changes only the live versions, and leaves drafts as they are. Click Not now to skip it. You can't fill live items while an AI session is open. Save or reject the session first. Because any live item might lack a newly required value, pages that show a collection should still look right when a field is empty. Related Field types Publish and unpublish items Credits for AI"},{"slug":"brand-guide","title":"Brand guide","summary":"How to write and edit your brand guide, the instructions the AI follows on every request.","section":"Design","text":"The brand guide is a written set of instructions about your brand: how you sound, how things should look, and rules to follow. The AI reads it on every request and follows it when it designs and writes for your site. Your colors and fonts are set in Colors and Fonts. The brand guide explains how to use them, and everything else that can't be set with a control. Edit the brand guide Open it Click Tokens in the left rail, then the Brand Guide tab. Start editing Click Edit. Write your guidance Write in plain language. You can use headings and bullet lists. Save Click Save changes, or Cancel to discard your edits. What to put in it An empty brand guide suggests these sections: Brand Voice: tone, personality, writing style Visual Style: rounded vs sharp, minimal vs decorative Color Usage: when to use primary, accent, neutral Typography: heading styles, body text preferences Layout Patterns: max widths, spacing feel, grid preferences Do / Don't: specific rules the AI should follow Example ## Brand Voice - Friendly and plain-spoken. Short sentences. - Say \"you\", not \"customers\". No exclamation marks. ## Visual Style - Lots of white space. Rounded corners on cards and buttons. - Photos of real food, never illustrations. ## Color Usage - Primary for buttons and links only. - Accent only for small highlights, never large backgrounds. ## Do / Don't - Do keep headlines under 8 words. - Don't use stock photos of people. Let the AI add to it Ask the AI to \"remember\" a decision, for example Remember that buttons are always fully rounded. It suggests adding it to the brand guide. You can also ask it to write a first draft: Write a brand guide for my site based on how it looks now. Tips Be specific. \"Buttons are fully rounded\" works better than \"make it modern\". Keep it short. The guide is part of every request, so long guides make each request a little slower and costlier. The brand guide is for design and writing preferences. To have the AI do something, ask in the chat. Related Write prompts that work Design tokens: why your site has them"},{"slug":"page-view-allowance","title":"Page view allowance","summary":"How your plan's page view allowance works and what happens if you go over it.","section":"Plans, credits and billing","text":"Each plan includes a number of page views per month: Plan Page views per month Free 1,000 Pro 5,000 One allowance for all your sites The allowance is shared across every site in your workspace. It's not per site. Five sites with 200 views each use 1,000 views in total. Going over During the beta, views above your allowance aren't billed and your sites aren't limited. Your sites keep serving every visitor. See Starjay is in beta. Where to see it On Subscriptions, the Page views this billing period card shows views used out of your allowance, the dates of the period, and how far over you are, if you are. Counts are updated hourly and can be up to an hour behind. For page views by site, page and country, see Your site's traffic. To learn what counts as a page view, see How page views are counted. Related Plans Hotlink protection"},{"slug":"forms-in-code","title":"Forms in code","summary":"How to put a form on a Starjay site with the three form components, and how to style them.","section":"Site code reference","text":"A form has two parts: A form definition, created and changed with modify_form. It holds the fields (type, label, required, placeholder, help text, options), where submissions go, and the messages. You can't write it as a file. Markup built from three platform components, which you place and style: --- import FormBase from '@starjay/design-system/components/forms/FormBase.astro' import FormField from '@starjay/design-system/components/forms/FormField.astro' import FormSubmit from '@starjay/design-system/components/forms/FormSubmit.astro' --- The components handle the data and accessibility: labels, error messages, the spam-protection field, the status message after sending, and submission. You handle layout and style. Form rules You MUST NOT write a raw <form> element. The platform refuses the write. You MUST NOT hand-write <input>, <textarea>, <select> or submit buttons for visitor input. Use <FormField> and <FormSubmit>. formId MUST match an existing form definition, and each <FormField name> MUST match a field id in it. Otherwise the page fails to build. You MUST NOT pass type, label, required, placeholder, help or options to <FormField>. Change them with modify_form. You MUST NOT remove focus rings. Restyle them (for example focus:ring-accent-400) instead. You SHOULD NOT add validation or submit scripts. Validation happens when the form is submitted, and the components handle the rest. Props <FormBase> Prop What it styles formId (required) Which form definition to use class The <form> element. Use it for layout: flex flex-col gap-4, grid grid-cols-2 gap-6. statusErrorClass The status line after a failed send statusSuccessClass The status line after a successful send Put the fields, the submit button, and any headings, wrappers or <fieldset> groups inside it. <FormField> Prop What it styles formId (required) Must match the parent FormBase name (required) The field's id in the form definition class The wrapper <div>. Use it for grid spans and flex sizing. labelClass The <label> inputClass The input, text area or select (also radio and checkbox controls) helpClass The help text errorClass The field's error message <FormSubmit> takes class. The button label goes inside it. Styling The components come unbranded: black and white only. Brand them with the site's token classes through the props above. Your classes replace conflicting base classes, so inputClass=\"border-accent-300\" replaces the base border color without any reset. Example --- // src/components/sections/ContactForm.astro import FormBase from '@starjay/design-system/components/forms/FormBase.astro' import FormField from '@starjay/design-system/components/forms/FormField.astro' import FormSubmit from '@starjay/design-system/components/forms/FormSubmit.astro' interface Props { heading?: string } const { heading = '' } = Astro.props as Props --- <section data-component=\"ContactForm\" class=\"w-full bg-surface-50 py-20\"> <div class=\"mx-auto max-w-xl px-6\"> <h2 class=\"mb-8 font-display text-3xl text-ink-900\">{heading}</h2> <FormBase formId=\"contact\" class=\"grid grid-cols-1 gap-4 sm:grid-cols-2\" statusSuccessClass=\"text-accent-700\"> <FormField formId=\"contact\" name=\"name\" inputClass=\"border-ink-200 focus:ring-accent-400\" /> <FormField formId=\"contact\" name=\"email\" inputClass=\"border-ink-200 focus:ring-accent-400\" /> <FormField formId=\"contact\" name=\"message\" class=\"sm:col-span-2\" inputClass=\"border-ink-200 focus:ring-accent-400\" /> <FormSubmit class=\"justify-self-start rounded-md bg-accent-600 px-8 py-3 text-white hover:bg-accent-700\"> Send message </FormSubmit> </FormBase> </div> </section> Token names are site-specific Color and font class names in these examples (bg-surface-50, text-ink-900, text-accent-600, font-display) are made up. Every site names its own tokens. Check the real names with get_tokens or in the Tokens panel before you write code. Definitions Form ids and field ids start with a lowercase letter and use lowercase letters, digits, hyphens and underscores, up to 64 characters. A new form should save submissions (the store destination) so nothing is lost before email or webhooks are set up. A form with a file field must save submissions. A field can appear only for certain answers with showWhen, based on one select, radio or checkbox field. modify_form refuses to delete a form that a page or component still uses. Remove the <FormBase> first. Related Add a form Form field types Where submissions go Spam protection"},{"slug":"header-footer-and-navigation","title":"Header, footer and navigation","summary":"How your site's header and footer work, how to change which ones you use, and how to edit menu links.","section":"The editor","text":"Your site's header and footer are shared components that appear on every page. You edit them once, and every page updates. Add or change the header or footer You choose the header and footer by asking the AI. There's no menu for it in the editor. For example: \"Add a header with our logo on the left and links to Home, About and Contact.\" \"Replace the footer with a simpler one: copyright line and social links.\" \"Remove the footer from the site.\" The AI builds the component if needed and sets it as the site's header or footer. Edit menu links Menu links are ordinary links, so you edit them the same way as any link: Double-click a menu link on the canvas (or select it and click the link icon on its label). Change the text in place, and pick a new destination in the Link section: one of your pages, or External URL... for another website. See Edit text, links and images in place for details. Add a menu item Select the menu, or one item in it. If you can add items on the canvas, a + Add item button appears below the selection. Click it, then double-click the new item to set its text and link. If + Add item doesn't appear, ask the AI to add the item, for example: \"Add a Pricing link to the header menu, after About.\" Changes affect every page When you select the header or footer, the canvas shows Editing the site Header — changes affect all N pages. (or Footer). That's expected: there's one header and one footer for the whole site. See Shared components and \"used on N pages\". In the Navigator, the header and footer always sit at the top and bottom of the page. You can't drag them, delete them, or move other content above the header or below the footer. Related Shared components and \"used on N pages\" Create, move and rename pages Page transitions and navigation"},{"slug":"deletes-the-ai-proposes","title":"Deletes the AI proposes","summary":"Why the AI asks before deleting CMS content, and how the Delete and Keep card works.","section":"Build with AI","text":"Deleting CMS content is permanent once you save, and your collections often hold work you can't easily recreate. So the AI never deletes CMS content itself. It asks you. The delete card When you ask the AI to remove a collection or items, or it decides they should go, a card appears in the chat, for example: Delete \"Spring sale\" from Blog posts? Nothing is deleted until you click Delete. You can undo it with Reject. The card lists up to five of the items, and how many more there are. For a whole collection, it says how many items the collection has. Click Delete to delete them. Click Keep to leave them. Afterwards the card shows what you chose, such as Deleted \"Spring sale\" from Blog posts or Kept the Authors collection and its 4 items. The AI is told your choice on its next request. If the AI is still working when you click, you see Wait until the AI finishes, then try again. Deleting inside a session can still be undone The delete is part of the current AI session. Until you Save, clicking Reject brings the deleted content back. Some deletes are refused A collection can't be deleted while a page still shows it, or while another collection links to it. The AI tells you what's in the way. Ask it to remove those pages or links first. Other things the AI removes Pages and site files the AI removes are covered by the session like any other change: step back or Reject to bring them back. A page the AI marks for deletion stays on your live site until your next publish. See Delete and restore a page. Related Delete items, fields and collections AI sessions: versions, Save and Reject"},{"slug":"credits-when-using-your-own-ai","title":"Credits when using your own AI","summary":"Which parts of working with your own AI use Starjay credits and which don't.","section":"Use your own AI","text":"Your AI's thinking is free on Starjay The model your AI app runs is paid for through your AI app's own plan. It doesn't use Starjay AI credits, however much it reads or writes. What does use credits Some tools ask Starjay to do work on your AI's behalf. These use your workspace's credits, just as they would for Starjay's built-in AI: Fetching a reference site (fetch_reference): loading another website and capturing its screenshots, colors and fonts. Sample content when your AI creates a CMS collection and asks for sample items. Your site's editor also needs to be running while your AI works, and a running editor uses Server time from your credits, whether you or your AI is doing the work. A published site never uses credits. When you're out of credits Tools that use credits return insufficient_credits, with your balance. Your AI can keep making edits that don't use credits as long as the editor can run. See Running out of credits. Related How credits work Buy more credits"},{"slug":"history-and-restore","title":"History and restore","summary":"Shows how to see an item's earlier versions and restore one.","section":"Content (CMS)","text":"Every item keeps a history of its versions. You can preview any version and restore it. Open the history Open the item, open ⋯ (More actions) and choose History. The History panel opens beside the item, newest first. Each version shows: What happened: Created, Edited or \"Restored from version …\". Who did it: You, a workspace member's name, AI, Starjay, or A former member. When, for example \"5 min ago\". Hover to see the version number and the exact time. The newest version is marked Current. Edits you make in one sitting are grouped, so the list doesn't show every keystroke. Preview and restore a version Pick a version Click a version in the History panel. The item shows that version, read-only, with \"Previewing version …\" at the top. Nothing is saved yet. Restore it, or go back Click Restore this version to make it the current draft. Or click Back to current to return to your draft unchanged. Restoring adds a new version at the top of the history. Your other versions stay. Restoring changes the draft only. To put the restored version on your live site, publish the item. See Publish and unpublish items. You can also restore the live version: click the Published pill, then Restore this version. What history doesn't cover Deleted items. Deleting an item deletes its history too. Collection fields. The history is for an item's values. While you edit a collection's fields in Edit Schema, you can undo and redo, but there's no history of saved field changes. The whole site. To go back to an earlier state of everything, use checkpoints. Related Edit items AI sessions: versions, Save and Reject"},{"slug":"what-the-style-panel-doesnt-cover-yet","title":"What the Style panel doesn't cover yet","summary":"The styling the Style panel doesn't offer today, and how to get each one by asking the AI.","section":"Design","text":"The Style panel covers typography, spacing, backgrounds and borders, and the layout tools cover flex and grid layouts, lists, tables and form fields. For everything else, ask the AI. Select the element first, so the AI knows what you mean. Not in the panel Ask the AI, for example Width and height, including maximum and minimum sizes Make this section's content no wider than 1000px and center it. Turning an element into a flex or grid layout Lay out these items in a row with space between them. Position, such as a sticky header or an element layered on top of another Make the header stay at the top when you scroll. Layering order (what appears in front) Put the badge in front of the image. Shadows Give the cards a soft shadow. Opacity of a whole element Make this image 80% transparent. (To make just a color see-through, use opacity in the color picker.) Hover, focus and pressed states Make the buttons darken slightly and lift when you hover over them. Transitions and animations Fade the hero text in when the page loads. Rotating, scaling and moving Tilt the photo slightly to the left. Hiding an element at some screen sizes Hide this image on phones. How images fill their frame (crop vs fit) and aspect ratio Show the product photos as squares, cropped to fill. Overflow (scrolling or clipping content that doesn't fit) Let this table scroll sideways on phones. Cursor style Show a pointer cursor over the whole card. Gradients the gradient builder can't make Make the background a gradient from navy through purple to pink, at a 120° angle. If you'd like to adjust a value afterwards and it shows up in the panel (for example, a color or padding the AI set), you can fine-tune it there. Related The Style panel Layout tools Write prompts that work What the AI can and can't do"},{"slug":"reading-cms-content-in-code","title":"Reading CMS content in code","summary":"How a page reads CMS collections with getLiveCollection and getLiveEntry, what it must declare, and how to handle missing items and fields.","section":"Site code reference","text":"CMS collections aren't files. A page reads them with Astro's live-collection functions, imported from astro:content. Every collection is declared for you; you never write src/live.config.ts. A listing page --- // src/pages/blog.astro export const prerender = false import Base from '../layouts/Base.astro' import { getLiveCollection } from 'astro:content' const { entries: posts = [] } = await getLiveCollection('blogPost', { sort: 'publishedAt', order: 'desc', limit: 10, }) --- <Base> <ul class=\"mx-auto flex max-w-3xl flex-col gap-6 px-6 py-16\"> {posts.map((post) => ( <li> <a href={`/blog/${post.data.slug}`} class=\"font-display text-2xl text-ink-900 hover:text-accent-600\"> {post.data.title ?? 'Untitled'} </a> </li> ))} </ul> </Base> Each entry is { id, data }; data holds the item's fields. An item page Item pages have no getStaticPaths(): --- // src/pages/blog/[slug].astro export const prerender = false import Base from '../../layouts/Base.astro' import { getLiveEntry } from 'astro:content' import Markdown from '@starjay/design-system/components/cms/Markdown.astro' const { entry } = await getLiveEntry('blogPost', { slug: Astro.params.slug }) if (!entry) return new Response(null, { status: 404 }) const post = entry.data --- <Base> <article class=\"mx-auto max-w-2xl px-6 py-16\"> <h1 class=\"font-display text-4xl text-ink-900\">{post.title}</h1> {post.body && <Markdown value={post.body} class=\"mt-8 text-lg text-ink-700\" />} </article> </Base> Look an item up by { slug } when its collection has a slug field. Otherwise look it up by id: getLiveEntry('blogPost', Astro.params.id). Token names are site-specific Color and font class names in these examples (bg-surface-50, text-ink-900, text-accent-600, font-display) are made up. Every site names its own tokens. Check the real names with get_tokens or in the Tokens panel before you write code. CMS rules getLiveCollection and getLiveEntry from astro:content MUST be the only way you read collections. getCollection, listItems and getStaticPaths with collections don't work here. Every page that reads a collection, directly or through a component it uses, MUST start its frontmatter with export const prerender = false. A prerendered page can't read the CMS, and the site publish fails on one. A missing item MUST return new Response(null, { status: 404 }), which shows the site's 404 page. You MUST NOT use Astro.rewrite('/404'); it fails on the live site. You MUST treat every field as possibly missing, required or not. You MUST NOT filter, sort or search by a field that isn't queryable. The page fails. You MUST NOT start using a field, choice, link target or collection that is marked as removing on the next publish. The platform refuses the write. Query options All options are optional. Option What it does where Field → value, or an operator object: $eq, $ne, $gt, $gte, $lt, $lte, $in, $contains, $all, $exists search Text search sort A field to sort by order 'asc' or 'desc' limit, offset Paging expand Reference fields to replace with the item they point to const { entries: featured = [] } = await getLiveCollection('product', { where: { category: 'chairs', price: { $lte: 500 } }, expand: ['designer'], }) Which fields can be queried where, search and sort work only on short top-level fields: text, slugs, numbers, dates, true/false, choices, links, images, references, and plain lists of those. Long text, Markdown and grouped fields (objects, mixed lists) can't be queried. Read the items, then use those fields in the page. Why every field may be missing A draft item may be incomplete. A published item doesn't have a field that was added, or made required, after it was published. Guard every field: {post.data.subtitle && <p>{post.data.subtitle}</p>}. How these pages behave Pages that read collections render on request. The live site caches them until the content changes. A page that must differ for each visitor (because it reads cookies or request headers) calls Astro.cache.set(false). A collection needs at least one item before its item page has anything to show. Listings show only published items on the live site; see CMS pages on the live site. Related Showing Markdown Field types Create a collection Your 404 page"},{"slug":"view-the-code","title":"View the code","summary":"How to see the code behind the page or your selection in the read-only Code panel.","section":"The editor","text":"Every Starjay site is a standard Astro and Tailwind project. The Code panel shows you the code behind what you're looking at. It's read-only. Open the Code panel Click Code at the bottom of the left icon rail. Pick what to look at With nothing selected, the panel shows the code of the whole page. Select something on the canvas to see its code instead. Switch the level When something is selected, tabs at the top let you switch between Element (just the selected element), Component (the whole component it belongs to) and Page (the page file). The header shows the name of the page or component, and the line number of your selection (for example L24). The selected line is highlighted and scrolled into view. Hovering over the canvas highlights the matching lines. Change the code You can't type in the Code panel. To change code: Ask the AI in the editor. Paste or describe the part you want changed. Or connect your own AI app, such as Claude Code, which can read and edit your site's files. See Overview. Related How a Starjay site is built The Navigator Chat with the AI"},{"slug":"write-prompts-that-work","title":"Write prompts that work","summary":"Practical ways to ask Starjay's AI for what you want, with example prompts for common site-building tasks.","section":"Build with AI","text":"The AI does its best work when it knows exactly what you want, where, and what to leave alone. These habits make the biggest difference. Start with the whole site, then go section by section For a new site, give the AI the essentials in one message: what the business is, who it's for, which pages you need, and the feel you want. Build a site for Northside Bakery, a neighborhood bakery in Portland. Pages: Home, Menu, About, Contact. Home: hero with a photo and \"Order for pickup\" button, three featured breads, opening hours, and a short story about the bakery. Feel: warm, handmade, lots of white space. Cream background, dark brown text, one terracotta accent color. Serif headings. After that, work on one section or one page per request. Smaller requests are faster, cost fewer credits, and are easier to review. Select first, then ask Click the section or element on the canvas before you type. The AI receives your selection, so you can say \"this\" instead of describing where something is. Make this section two columns: the text on the left, the image on the right. Stack them on phones. Be specific about what to change and what to keep Vague requests get the AI's guess. Name the thing, the change, and the limits. Instead of Try Make it look better. Add more space between the testimonial cards, make the quotes larger, and put the customer names in bold. Fix the header. In the header, move the logo to the left and the menu to the right. Keep the colors as they are. Add some content. Add a FAQ section above the footer on the Contact page with 5 questions about delivery, allergens and opening hours. Say whether a change is for one page or all pages Your header, footer and other shared sections appear on many pages. Say which you mean: On the About page only, change the hero heading to \"Our story\". Don't change the hero on other pages. See Shared components and \"used on N pages\". Show, don't just tell Screenshots: attach up to 3 per message. \"Make the pricing section look like this screenshot.\" See Show the AI what you mean: screenshots. Web addresses: \"Use the layout of https://example.com/features for my features page.\" See Rebuild or borrow from an existing site. Talk in your site's colors and fonts Your colors and fonts have names in Tokens. Use them, so the AI reuses your palette instead of inventing new colors. Make the \"Order now\" buttons use the accent color, and the section headings use the heading font. To change a color everywhere, change it in Colors or ask: Make the primary color a deeper green across the whole site. Put lasting rules in the brand guide Anything the AI should always follow belongs in your brand guide, which it reads on every request. For example: \"Buttons are always fully rounded\", \"Never use exclamation marks\", \"Headlines are short, under 8 words\". You can also say Remember that we never use stock photos of people. and the AI will suggest adding it to the brand guide. Ask it to check its own work The AI can take screenshots of your unpublished pages at different screen sizes. Check the homepage on a phone and fix anything that overflows or looks cramped. Use the right tool for collections, forms and SEO Add a blog with posts that have a title, date, cover image and body, a blog listing page, and a page for each post. (creates a collection) Add a contact form with name, email and message that emails me. (creates a form) Write SEO titles and descriptions for every page. Iterate instead of starting over If a result is close, ask for adjustments: \"Good. Now make the images smaller and the headline shorter.\" If it went the wrong way, step back to the previous version with ‹ and ask differently. If the whole session went wrong, Reject and start again. Keep the conversation focused When you move on to a new part of the site, clear the AI's memory with Clear → Free up AI memory. Replies get faster and cheaper, and the AI stops returning to earlier ideas. See AI memory. Know what to do yourself Some things are quicker by hand: fixing a typo (double-click the text), swapping an image, or nudging spacing in the Style panel. Use the AI for anything structural or site-wide. Related Chat with the AI What the AI can and can't do Build a business site (a worked example)"},{"slug":"rules-for-agents","title":"Rules for agents","summary":"The rules an AI agent follows when it changes a Starjay site over MCP.","section":"Use your own AI","text":"These rules are for AI agents connected over MCP, and for people who write instructions for them. Starjay enforces many of them and refuses changes that break them. The Site code reference explains each area in depth. Working in turns You MUST call start_turn before any change and end_turn when you're done. Every change belongs to a turn. You MUST pass the siteId of the site the user named. If you aren't sure, call list_sites and confirm with the user. You SHOULD call get_session_state first to see whether someone else is working on the site. You SHOULD keep turns short and end them promptly, so the user can review each step in the editor. You MUST NOT try to Save or Reject the session. Tell the user to review your changes in the editor and click Save or Reject. Publishing Before EVERY publish you MUST ask the user, name the site, and wait for a clear yes in the current conversation. Only then call publish with _confirmed: true. You MUST NOT treat finished edits, \"wrap it up\", or an earlier approval as permission to publish. The same applies to set_publish_state with status deleted. You SHOULD call get_publish_status until the publish finishes and report the result. Files you may edit You MAY write site code only under src/: src/pages/, src/components/sections/, src/components/layout/, src/components/ui/, src/lib/, src/styles/, and the four snippet files in src/head/ and src/body/. You MAY also edit the text files in content/pages/ and content/components/. You MUST use the dedicated tool for managed data, and MUST NOT write those files directly. You MUST NOT edit src/layouts/Base.astro or src/styles/globals.css. They're generated. To change… Use Colors and fonts (brand/tokens.ts, brand/theme.css) modify_tokens Page defaults (background, text color, default font) modify_element_defaults The brand guide (brand/brand-guide.md) set_brand_guide Header, footer, page transitions (site.json) modify_layout CMS collections and items modify_collection, modify_items Forms (platform/forms/) modify_form Images and the image library import_asset, request_asset_upload, modify_asset, assets_apply_alt Page SEO (content/seo/) and site SEO seo_set_page, seo_set_defaults Redirects redirects_modify Page draft / ready / deleted status set_publish_state See Project files. Components and pages Components MUST live in src/components/sections/, src/components/layout/ or src/components/ui/. A component's root element MUST carry data-component=\"ComponentName\", and the name MUST be unique across the site. You MUST call list_components before creating a component, and import an existing one instead of recreating it. Never recreate the header or footer. You MUST NOT change the structure of locked platform components (the form components). Pages SHOULD hold structure and content (which sections, in what order, with what props). Components SHOULD hold presentation and read content from Astro.props. When a component reads its wording from a file in content/components/ or content/pages/, you SHOULD change the wording there. See Component rules and Pages and components. Styling Colors and fonts MUST come from the site's tokens: use utilities such as bg-primary-600, text-ink or font-heading. You MUST NOT use hex, rgb or other raw color values in classes or styles, and MUST NOT use Tailwind's default color names (such as bg-blue-500). To add a color, use modify_tokens first. Spacing, sizing, radius, shadows and breakpoints MUST use stock numeric Tailwind utilities (p-6, gap-8, max-w-4xl). There are no named spacing tokens. You MUST NOT use @apply in <style> blocks. See Styling rules. Astro syntax Use class, not className; <slot />, not {children}; set:html, not dangerouslySetInnerHTML; and plain <a> links. A literal { or } in text starts an expression; escape it. React and other framework components don't work. Use <script>, <details> or <dialog> for interactivity. See Astro syntax rules and Interactivity. Images, forms and CMS content Images MUST come from the site's image library. Use the image URL exactly as browse_assets, import_asset or an upload returns it. Never hand-write image URLs. Alt text SHOULD describe what the image actually shows. Look at it with view_asset first. You MUST NOT write <form> or <input> markup. Create the form with modify_form and place it with <Form formId=\"…\" />. Collections are managed only with modify_collection and modify_items. Pages read them with getLiveCollection and getLiveEntry from astro:content. See Images in code, Forms in code and Reading CMS content in code. Head and body snippets, and limits Raw <head> content goes in src/head/HeadStart.astro or src/head/HeadEnd.astro; raw <body> content in src/body/BodyStart.astro or src/body/BodyEnd.astro. You MUST NOT delete these four files. You MUST NOT hand-write SEO tags (titles, descriptions, social tags, robots, verification codes). Use seo_set_page and seo_set_defaults. Middleware, environment variables, secrets, new npm packages, config file edits and alternative layouts aren't supported. See Head and body snippets and What isn't supported. Checking your work After visible changes you SHOULD call get_preview to see the result, including on mobile. If a write returns success: false with a render error, the file was saved but the page doesn't render. You MUST fix it before ending the turn. If something about Starjay itself is broken, you MAY report it with send_feedback. Don't use it for your own mistakes."},{"slug":"delete-items-fields-and-collections","title":"Delete items, fields and collections","summary":"Shows how to delete items, fields and collections, what stops a delete, and what \"Removing on next publish\" means.","section":"Content (CMS)","text":"Deleting in the CMS is permanent. A deleted item, collection or object type can't be brought back, and its history goes with it. Delete an item In the item list, click the trash icon on the item's row. Or open the item, open ⋯ and choose Delete. The dialog Delete \"…\" explains that this \"permanently deletes it and its history, and takes it off the live site if it's published.\" Click Delete to confirm. When an item can't be deleted If anything links to the item, from another item's draft or its live version, you see Cannot delete \"…\" with a list of the links. Remove those links first. If a live item links to it, publish that item again without the link. Deleting while an AI session is open If you delete a live item while an AI session is open, it comes off your live site at once. If you then Reject the session, the item comes back as a draft. Deletes the AI asks for The AI can't delete CMS content on its own. When it wants to, it shows a card in the chat, and nothing is deleted until you click Delete. See Deletes the AI proposes. Remove a field Open the collection, click Edit Schema, click the trash icon (Remove field) on the field, then click Save changes. What happens depends on who uses the field: Who uses the field What happens A page or component in the editor You can't remove it. The trash icon is disabled, and its tooltip names the pages, for example \"Your Blog item pages use this field. Take it out there first, or ask the AI to.\" Only your live site It shows under Removing on next publish. It stays, and works as normal, until your next site publish removes it. Click Undo to keep it. Nothing It's removed when you save. The same rules apply to removing a choice from an Enum field, a target collection from a Reference field, and an item type from a mixed list. Delete a collection Open the collection, click Edit Schema, then Delete. The dialog Delete …? says how many items will be deleted. Click Delete collection to confirm. A collection can't be deleted while: Pages or components show it. Remove it from them first, or ask the AI to. Fields in other collections or object types can link to it. Change or remove those fields first. If only your live site still uses the collection, it shows \"Removing on next publish\" and is deleted after your next site publish. Click Undo to keep it. Delete an object type Open Object Types, pick the object type and click Delete, then Delete object type. You can't delete it while any field uses it. Exporting before you delete There's no button to export CMS content. If you need a copy, ask the AI to list the items, or contact support. See Get support. Related Deletes the AI proposes References between collections Publish your site"},{"slug":"showing-markdown","title":"Showing Markdown","summary":"How to show a CMS Markdown field with the Markdown component, get its plain text, and restyle code blocks.","section":"Site code reference","text":"A CMS Markdown field is shown with the <Markdown> platform component: --- import Markdown from '@starjay/design-system/components/cms/Markdown.astro' --- <Markdown value={post.body} class=\"flex flex-col gap-4 text-lg text-ink-700\" /> Prop What it does value The Markdown field class Classes for the block's wrapper <div> It works anywhere the field appears: at the top level, inside a list ({post.sections.map((block) => <Markdown value={block.markdown} />)}), or in a component that receives the field as a prop. The Markdown is converted when the item is saved. HTML typed inside it shows as text, and links and images keep only safe destinations. The component's content is edited in the CMS, not on the canvas. On the canvas, <Markdown> is locked; only its class can change. Markdown rules Markdown fields MUST be shown with <Markdown value={…} />. You MUST NOT print a Markdown field as plain text where you mean to show it formatted ({post.body}). You MUST NOT convert Markdown to HTML in site code (for example with a Markdown library and set:html). Plain text for excerpts For the field's words without formatting (an excerpt, a card summary) use .text: <p class=\"line-clamp-3 text-ink-600\">{post.body.text}</p> Styling the content The elements inside the block are plain HTML (h2, p, ul, blockquote and so on), so the site's element defaults style them. For styles that apply only inside Markdown, target the wrapper with a global style in plain CSS: <style is:global> .post-body h2 { margin-top: 2.5rem; color: var(--color-ink-900); } .post-body a { text-decoration: underline; } </style> Code colors Code blocks come out with their words tagged and a default color scheme that follows the site's light or dark color scheme. These are the only default colors Starjay provides, and any site rule overrides them. To restyle code, set Astro's --astro-code-* variables anywhere above the block, for example in src/styles/ or a global style: :root { --astro-code-background: var(--color-ink-950); --astro-code-foreground: var(--color-surface-50); --astro-code-token-keyword: var(--color-accent-300); --astro-code-token-string: var(--color-accent-200); } Token names are site-specific Color and font class names in these examples (bg-surface-50, text-ink-900, text-accent-600, font-display) are made up. Every site names its own tokens. Check the real names with get_tokens or in the Tokens panel before you write code. Related Reading CMS content in code Field types"},{"slug":"the-navigator","title":"The Navigator","summary":"How to use the Navigator's layer tree to select, reorder and delete things on the current page.","section":"The editor","text":"The Navigator shows the current page as a tree: sections, the components inside them, and the elements inside those. Open it from the left icon rail. Select something Click a row to select that element on the canvas. Hovering over a row highlights it on the canvas, and selecting something on the canvas opens the tree to its row. Use the buttons in the panel header to Open all or Close all rows. Click the arrow on a row to expand or collapse it. Reorder by dragging Hover over a row. A drag handle appears on its left. Drag the row up or down. A line shows where it will land: before or after another row, or highlighted to drop inside it. Release to move it. You can drag components and elements. You can't drag the header or footer, and you can't move anything above the header or below the footer. Delete Hover over a row and click the trash icon (Delete). Confirm in the dialog, which reminds you You can undo this. Press Cmd/Ctrl+Z to bring it back. What the rows and badges mean You see Meaning A name in bold color A component, such as Hero or Footer. <div>, <h2> and so on An HTML element. Its text, if any, follows in grey. {…} A value filled in by code. ×3 (any number) This part repeats once per item in a list, and the list has that many items right now. if This part only shows in certain cases, depending on your content. locked A component Starjay manages, such as a form. You can't add or remove things inside it. CMS This part shows content from a CMS collection. Link icon Shared component — edits affect every page. While the AI is working, the Navigator is dimmed and you can't change anything. Related Selecting things on the canvas Add elements and sections Components"},{"slug":"credits-for-ai","title":"Credits for AI","summary":"What uses credits when you work with the AI, where to see what each request cost, and what happens when you run out.","section":"Build with AI","text":"AI work is paid for with credits from your workspace's shared pool. Costs are always shown in credits. What uses credits AI requests in the chat. The cost depends on the model, how much the AI reads and writes, and how full its memory is. Opening a reference page when you give the AI a web address. Generating images. See Generate images. Dark Magic, when it restyles inserted elements and sections to fit your brand. See Dark Magic. Smaller AI helpers, such as automatic tags and alt text for uploaded images, Generate with AI for page SEO, sample CMS items, and filling in missing required CMS fields. Credits are also spent on editing time. See How credits work. Where you see the cost Each finished request shows how long it took and how many credits it used, for example 42 credits (or <1 credit). This total includes everything the request did, such as reference pages and generated images. For your workspace's overall usage, see How credits work. Ways to use fewer credits Use GPT-6 Luna for everyday edits. It uses far fewer credits per request than the Pro models. See Choose an AI model. Keep the AI's memory lean: clear it when you move to a new task. Make small, specific requests. Generate images at low quality while you're exploring. Make simple changes yourself on the canvas or in the Style panel. They don't involve the AI. When you run out If your workspace runs out of credits, the AI panel shows AI credits used up with a Manage credits link, and the send button is unavailable (Out of AI credits). Before you send: Add credits to keep using AI. If it happens during a request: The AI stopped partway through. Changes made so far are kept. Add credits to continue. Changes the AI already made stay in your session. You can still Save or Reject them, edit your site by hand, and your published site keeps working. Sometimes you see Credits are reserved instead. That means credits are set aside for a request that's still running, and they free up when it finishes. The daily limit To protect your workspace from runaway use, AI requests have a daily limit. If you reach it, you see Daily AI limit reached for your workspace. with the time it resets. Related How credits work Buy more credits Running out of credits Plans"},{"slug":"tool-reference","title":"Tool reference","summary":"Every Starjay MCP tool at a glance, plus the conventions and errors they all share.","section":"Use your own AI","text":"Starjay's MCP server, starjay, offers the 48 tools below. Your AI app lists them with their exact input schemas when it connects, so it always has the current inputs. The pages in this section explain each tool in plain terms, with examples and the errors you might see. Conventions siteId on every call. Every tool except list_sites needs siteId (string), the ID of the site to work on. Get it from list_sites or the editor's starter prompt. The tables on these pages leave siteId out, but the examples include it. Paths are site-relative, such as src/pages/index.astro or brand/tokens.ts. Turns. Tools that change the site need an open turn: call start_turn first and end_turn when you're done. Read-only tools work at any time. See How agent work shows up in the editor. Results are JSON text. Some tools also return images (screenshots, image previews), which your AI app shows or reads directly. Confirmation. publish, and set_publish_state with status deleted, need the user's explicit approval. Your AI asks you, then calls again with _confirmed: true. All tools Tool Group Needs an open turn list_sites sites and turns No get_session_state sites and turns No start_turn sites and turns Opens one end_turn sites and turns Must hold one cancel_turn sites and turns No get_recent_changes sites and turns No get_editor_focus sites and turns No list_pages reading your site No get_site_structure reading your site No inspect_page reading your site No list_components reading your site No inspect_component reading your site No list_files reading your site No read_file reading your site No search_files reading your site No get_tokens reading your site No get_brand_guide reading your site No list_backups reading your site No write_file editing Yes patch_file editing Yes modify_layout editing Yes modify_tokens editing Yes modify_element_defaults editing Yes set_brand_guide editing Yes list_items CMS No modify_collection CMS Yes modify_items CMS Yes browse_assets images No view_asset images No import_asset images Yes request_asset_upload images Yes modify_asset images Yes assets_usage images No assets_apply_alt images Yes list_forms forms, SEO and redirects No modify_form forms, SEO and redirects Yes seo_list forms, SEO and redirects No seo_get_page forms, SEO and redirects No seo_set_page forms, SEO and redirects Yes seo_set_defaults forms, SEO and redirects Yes redirects_list forms, SEO and redirects No redirects_modify forms, SEO and redirects Yes set_publish_state publishing Yes publish publishing No; refused during a session get_publish_status publishing No get_preview preview, references and feedback No fetch_reference preview, references and feedback No send_feedback preview, references and feedback No Errors any tool can return When Starjay refuses a call, the result is marked as an error and its JSON has an error value and usually a message. These can come from any tool: You see What it means What to do site_required The call didn't include siteId. Call list_sites, then pass the site's ID. forbidden: \"You do not have access to this site\" The signed-in account isn't a member of the workspace that owns the site. Check the site ID, or ask the workspace owner to invite you. site_archived: \"This project is archived. Restore it from the dashboard to use it again.\" The site is archived. Restore it from the dashboard. Restoring needs Pro. editor_unavailable: \"The editor for this site is not running. Ask the user to open … then retry.\" The site's editor isn't running, so the tool can't reach the site. Open the site in the editor (the message gives the link), wait for it to load, then retry. not_lock_holder A change was attempted without an open turn, or the turn lapsed after about five minutes without calls. Call start_turn, then retry. lock_lost The user clicked Take back control, or the turn expired and was reopened by someone else. Call start_turn to resume, then retry. site_publishing: \"The site is publishing. Editing is paused until it finishes.\" A publish is running. Wait, check with get_publish_status, then retry. cancelled The turn was cancelled while this call was running. Stop. Ask the user before starting again. confirmation_required The action needs the user's approval. Ask the user. If they say yes, call again with _confirmed: true. insufficient_credits The workspace doesn't have enough credits for this action. The result shows balance_credits. Ask the user to buy more credits or wait for the next refill. spend_authorization_unavailable Starjay couldn't check credits just now. Retry in a moment. \"Tool … failed: …\" (dispatch_failed) Something went wrong while running the tool. The message has details. Retry once. If it keeps failing, report it with send_feedback. If your AI app says it's signed out or asks you to authenticate again, sign in again from the app's MCP settings. See Troubleshooting your own AI."},{"slug":"item-addresses-and-slugs","title":"Item addresses and slugs","summary":"Explains how slugs make each item's address, and what happens when you change the slug of a live item.","section":"Content (CMS)","text":"An item page shows one item at an address like /blog/winter-gardening. The last part, winter-gardening, is the item's slug. It comes from the collection's Slug field. How a slug is made A slug field is usually generated from another field, often the title. Until the item is first published, the slug follows that field as you type. Type \"Winter Gardening\" in the title and the slug becomes winter-gardening. Once you edit the slug by hand, it stops following the title. Click Generate next to the slug to make it again from the source field. After the item is live, the slug no longer follows the title. Change it by hand if you need to. If an item has no slug, its address uses the item's ID instead. Two items can't share a live address A slug that another item's live version uses is taken. A slug that follows the title gets a suffix to keep it unique. A slug you type by hand is refused, with a message such as \"Can't save: \"winter-gardening\" is still the live URL of Winter Gardening\". At publish time, a clash blocks the publish: \"Its slug \"…\" is already the live URL of \"…\".\" Changing the slug of a live item You can change a live item's slug. When you publish the change, Starjay adds a permanent redirect from the old address to the new one, so links and search results keep working. If you rename it again later, the old addresses point straight at the newest one. There are no chains of redirects. If you unpublish or delete the item, its redirects are removed. Like all redirects, these only work on your published site, not on the canvas. Pick a good slug before the first publish. Changing it later works, but the new address has to earn its place in search results again. Related Redirects Publish and unpublish items CMS pages on the live site"},{"slug":"interactivity","title":"Interactivity","summary":"Add interactive behavior to a Starjay site with scripts and built-in HTML elements, site-wide or per component.","section":"Site code reference","text":"Starjay sites add behavior with plain browser features. React and other framework components aren't supported (see What isn't supported). Use HTML first Many common patterns need no script at all: Accordions and FAQs: <details> and <summary>. Dialogs and modals: <dialog>, opened with one line of script. <details class=\"border-b border-ink-200 py-4\"> <summary class=\"cursor-pointer font-display text-lg text-ink-900\">Do you ship abroad?</summary> <p class=\"mt-2 text-ink-700\">Yes, to most countries.</p> </details> Add a script to a component Put a <script> at the end of the component. Astro bundles it, runs it as a module, and includes it once per page even when the component appears several times, so select elements by attribute rather than by a single id: <div data-component=\"MenuToggle\"> <button type=\"button\" data-menu-button class=\"md:hidden\" aria-expanded=\"false\">Menu</button> <nav data-menu class=\"hidden md:block\"> <slot /> </nav> </div> <script> function setUpMenus() { document.querySelectorAll('[data-component=\"MenuToggle\"]').forEach((root) => { const button = root.querySelector('[data-menu-button]') const menu = root.querySelector('[data-menu]') button?.addEventListener('click', () => { const open = menu?.classList.toggle('hidden') === false button.setAttribute('aria-expanded', String(open)) }) }) } setUpMenus() document.addEventListener('astro:after-swap', setUpMenus) </script> Pages that swap without a full reload The Client-Side Router setting is on by default: moving between pages swaps the content without a full reload. A bundled script then runs only once, on the first page a visitor opens. Run your setup code once directly and again on Astro's astro:after-swap event, as above, so it also runs after every page change. With the setting off, every navigation is a full page load and the direct call is enough. See Page transitions and navigation. Add behavior to every page Put site-wide scripts in src/body/BodyEnd.astro instead of repeating them in every component: scroll animations, dark mode, a cookie banner, a back-to-top button, a chat widget. A snippet file can import components, so you can render <CookieBanner /> there. See Head and body snippets. Add a third-party snippet Analytics tags, embeds and widgets usually come as a <script> you paste in. Astro processes scripts by default; add is:inline so it runs exactly as written: <script is:inline async src=\"https://widgets.example.com/chat.js\"></script> Third-party scripts that belong in the <head> go in src/head/HeadEnd.astro. For Google Analytics, use the built-in setting instead; see Google Analytics. Interactivity rules (guidance) You SHOULD use <details>, <dialog> and <script> for interactivity. You MUST NOT use React or other framework components. They don't render on Starjay sites. Behavior needed on every page SHOULD live once in src/body/BodyEnd.astro, not in every component. Third-party snippets SHOULD use <script is:inline>. You MUST NOT write form handling scripts. See Forms in code. Related Head and body snippets What isn't supported"},{"slug":"components","title":"Components","summary":"How to browse, view, describe, rename, organize, create and delete your site's components in the Components tab.","section":"The editor","text":"A component is a reusable building block: a section such as a hero or a pricing table, a smaller piece such as a card, or a layout piece such as the header. Pages are assembled from components. See Shared components and \"used on N pages\" for why that matters when you edit. To see your components, click Pages in the left icon rail and open the Components tab. Browse components Components are grouped into Sections, UI and Layout. Use the buttons under the search box (All, Sections, UI, Layout) to show one group, or type in Search components or usage.... Each row shows the component's name and how many pages use it (for example 2 pages). Components can sit in folders; click a folder's arrow to open or close it. If you have none yet, the tab says No components yet. Components appear here when you create one from a selection, insert a section, or ask the AI to build one. View a component on its own Click a component's row (or right-click it and choose View). The canvas shows just that component, and the top bar shows its name with Component. The component is shown with sample values. A bar above it says Component view or, when sample values are filled in, how many preview values are injected. Click Edit values to change the sample values. They're for previewing only and aren't saved to the component. To go back to your pages, choose a page from the page switcher in the top bar. Describe, rename or delete Right-click a component's row: Describe has the AI write a short description of what the component is for. Descriptions help you and the AI choose the right component, for example in Replace with component…. Rename opens a dialog. Names must be in PascalCase, such as PricingTable, and unique on your site. The dialog tells you how many pages will be updated; every page that uses the component is updated for you. Delete removes the component. If it's in use, the dialog lists where (Where it is used) and warns This can damage your site. Confirming with Delete component and its uses removes every instance and its content; they aren't turned back into regular elements. Delete is undoable with Cmd/Ctrl+Z for a while afterwards. A read-only badge means the component can't be renamed, described or deleted here. Organize into folders Drag a component onto another component in the same group to put them in a folder together. Drag a component onto a folder to move it there, or onto the group heading (Sections, UI, Layout) to move it back out. Components can only move within their own group. Right-click a folder to Rename or Delete it. Deleting a folder deletes the components inside it and removes their instances everywhere. Create a component from a selection Select an element or group of elements on the canvas. Right-click and choose Create component…. Enter a Component name, then click Create component. The AI turns your selection into a component while keeping its content and behavior, and puts the new component in its place. Whether it becomes a section or a UI component depends on what you selected; the dialog shows the Category. You can also ask the AI to create components for you. Replace something with a component Right-click a selection on the canvas and choose Replace with component…, then pick a component. With Preserve with AI on, the AI carries your content and links into the component. With it off, you get a plain component and the original content isn't copied. See Dark Magic. To go the other way, right-click a component instance and choose Convert to regular element. The component is replaced on that page by ordinary elements you can edit freely. Locked components Some components are managed by Starjay, such as the building blocks of forms. They don't appear in the Components tab. On the canvas they show a Locked badge. You can style them, but you can't add or delete elements inside them; you'll see Cannot delete elements in a structure-locked component. They're locked so a form keeps working: its fields, labels and submit button have to stay connected. Related Add elements and sections Header, footer and navigation Component rules"},{"slug":"tools-sites-and-turns","title":"Tools: sites and turns","summary":"Reference for the tools that find your sites and open, close and cancel turns.","section":"Use your own AI","text":"These tools find your sites, open and close turns, and show what's happening on a site. See the Tool reference for conventions and shared errors. list_sites Lists every site you can access across all your workspaces, with each site's ID, address name (slug), name, workspace ID and name, and when it was last edited. When to use it: First, to find the siteId for the site the user means. Needs an open turn: No. No inputs. Example call {} Example result { \"ok\": true, \"sites\": [ { \"id\": \"0APMiuxGY2yB4xJm5BilJ\", \"slug\": \"bakery\", \"name\": \"Bakery\", \"orgId\": \"org_…\", \"orgName\": \"Dana's workspace\", \"lastEditedAt\": \"2026-10-17T21:38:22.739Z\" } ] } Errors You see What it means What to do \"list_sites failed: …\" Starjay couldn't load your sites. Retry in a moment. get_session_state Shows the site's AI session and who, if anyone, holds the site right now. When to use it: Before start_turn, to see whether the user, Starjay's built-in AI or another agent is working. Also useful for polling. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"active\": true, \"sessionId\": \"sess_…\", \"currentIterationId\": \"iter_…\", \"lastTurnAt\": \"2026-10-17T21:40:22.634Z\", \"lockHolder\": { \"kind\": \"external\", \"id\": \"…\", \"source\": \"external\", \"acquiredAt\": \"2026-10-17T21:53:29.038Z\", \"expiresAt\": \"2026-10-17T22:01:43.322Z\" }, \"generationId\": 3, \"turnCount\": 0, \"canvasLocked\": true, \"userEditable\": false, \"lastTurnWriteCount\": 0 } active is true while there's an AI session waiting for Save or Reject. lockHolder is null when nobody holds the site; kind is external for a connected agent and in_product for Starjay's built-in AI. start_turn Opens a turn: reserves the site for your agent so it can make changes. On a site with no AI session, it first takes a checkpoint and starts a new session. If your agent already holds an unfinished turn on the site, start_turn resumes it. When to use it: Before the first change, and again after end_turn when there's more to do. Needs an open turn: No. It opens one. Input Type Required Meaning prompt string No The user's request. It's recorded in the session's chat so the user sees what the turn is for. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"prompt\": \"Make the hero headline shorter\" } Example result { \"ok\": true, \"turnId\": \"4\", \"sessionId\": \"sess_…\", \"iterationCount\": 2 } Errors You see What it means What to do session_locked Someone else holds the site: the user, the built-in AI, or another agent. retryAfterSeconds says when to try again. Wait and retry, or ask the user to finish what they're doing. site_publishing The site is publishing. Wait for the publish to finish, then retry. snapshot_unavailable Starjay couldn't take the safety checkpoint, so it won't allow changes. Retry after a few seconds. org_concurrent_session_limit_exceeded Too many AI sessions are running in this workspace at once. Wait for another to finish, then retry. end_turn Closes the turn. Everything written during the turn becomes one version in the session, and the site is released so the user can review it. When to use it: When you've finished a piece of work. Then tell the user to review it in the editor and click Save or Reject. Needs an open turn: Must hold one. Input Type Required Meaning summary string No A short description of what the turn changed. It's shown on the version. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"summary\": \"Shortened the hero headline\" } Example result { \"ok\": true, \"iterationId\": \"iter_…\", \"filesWritten\": [ \"src/components/sections/Hero.astro\", \"brand/tokens.ts\", \"brand/theme.css\" ], \"autoTokenized\": { \"files\": [ \"brand/tokens.ts\", \"brand/theme.css\" ], \"surfaced\": [ \"red\" ] } } If the turn used a Tailwind color or a raw color that isn't one of the site's colors yet, Starjay adds it as a site color automatically. Those files and colors are listed under autoTokenized. Errors You see What it means What to do not_lock_holder: \"No active turn — call start_turn first\" There's no open turn. Nothing to close. Call start_turn before making changes. not_lock_holder: \"Turn lease expired …\" The turn lapsed while your agent was idle. Call start_turn, then end_turn again. no_active_session The session ended during the turn (for example, the user saved or rejected). Call get_session_state and start again if needed. snapshot_unavailable Starjay couldn't record the version. Call end_turn again. cancel_turn Asks whoever holds the site to stop. It works on any open turn, including the built-in AI's. Changes already made stay in the session until the user rejects them. When to use it: When the user asks you to stop work that's in progress. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"accepted\": true, \"holdingTier\": \"external\" } holdingTier is who held the site when you cancelled, or null if nobody did. get_recent_changes Lists the session's recent versions, newest first, with the files each one changed and its summary. When to use it: To catch up on what changed since you last looked, including the user's own edits. Needs an open turn: No. Input Type Required Meaning sinceIterationId string No Return versions after this one. Use nextCursor from the previous result. limit number No How many to return. Default 50, maximum 200. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"limit\": 1 } Example result { \"iterations\": [ { \"id\": \"iter_…\", \"parentIterationId\": null, \"source\": \"external\", \"filesChanged\": [ \"src/pages/about.astro\" ], \"turnSummary\": \"Added an About page\", \"createdAt\": \"2026-10-17T19:55:51.094Z\" } ], \"nextCursor\": \"iter_…\" } get_editor_focus Shows what the user has selected in the editor right now: the page, component and element, with a pointer to the exact place in the source. When to use it: When the user says \"this section\" or \"fix this\" and you need to know what they mean. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"focus\": null } It returns {\"focus\": null} when the user doesn't have the site open in the editor, or hasn't interacted with it in the last 30 seconds. Ask the user to click the element and try again. It only ever returns your own selection, never another member's. Related How agent work shows up in the editor Tools: reading your site"},{"slug":"cms-pages-on-the-live-site","title":"CMS pages on the live site","summary":"Explains what visitors see on pages that show collections, and why the canvas can look different from your live site.","section":"Content (CMS)","text":"Pages that show a collection, such as a blog listing or a product page, work a little differently from your other pages. The canvas shows drafts; the live site shows published items On the canvas, pages show the current draft of every item, published or not. This lets you see changes before they go live. On your live site, pages show only published items, as they were when you last published them. So a listing can look full in the editor and empty on your live site. That's expected until you publish the items. What visitors see Listings are empty until you publish items. A new blog shows no posts until you publish some. See Publish and unpublish items. An item that isn't published has no page. Visiting its address shows your 404 page. The same happens for an unpublished or deleted item. See Your 404 page. Linked items you didn't publish show as missing. For example, a post whose author isn't live shows without the author. The sitemap lists published items, so search engines can find them. What updates when Change When it reaches your live site Publishing, unpublishing or deleting an item Within a few seconds. No site publish needed. A new or changed listing page or item page On your next site publish. Adding, renaming or removing fields in a collection On your next site publish. A slug change on a live item When you publish the item. The old address redirects. Pages that show a collection are built when a visitor asks for them, rather than ahead of time. That's what lets a published item appear without a site publish. Previewing an item page in the editor When you open an item page from Pages, the editor shows it with the collection's first item. If the collection has no items, you see \"Add an item to the collection to preview this page.\" Related When to use a collection Publish your site Reading CMS content in code"},{"slug":"head-and-body-snippets","title":"Head and body snippets","summary":"The four snippet files that add raw content to every page's head and body, what goes in each, and what is refused.","section":"Site code reference","text":"Every page renders inside the Base layout, which you can't edit. For raw content that belongs on every page, Base includes four snippet files. They start empty and are entirely yours. File Renders Use it for src/head/HeadStart.astro At the start of <head>, before the SEO tags <base href>, <link rel=\"preconnect\">, Content-Security-Policy <meta http-equiv> src/head/HeadEnd.astro At the end of <head> Analytics and tag-manager scripts, <link rel=\"preload\">, custom structured data (JSON-LD), custom non-SEO <meta> and <link> tags, inline critical CSS src/body/BodyStart.astro First thing in <body>, before the header A skip link (<a href=\"#main\">), a tag manager's <noscript> iframe src/body/BodyEnd.astro Last thing in <body> Site-wide scripts, end-of-body analytics, floating widgets such as a cookie banner, back-to-top button or chat A snippet file can import components. For structured data that differs per page, use Astro.url.pathname to tell pages apart. Third-party scripts usually need is:inline so they run exactly as written. --- // src/head/HeadEnd.astro const isHome = Astro.url.pathname === '/' --- {isHome && ( <script type=\"application/ld+json\" is:inline set:html={JSON.stringify({ '@context': 'https://schema.org', '@type': 'LocalBusiness', name: 'Example Bakery', })} /> )} Snippet rules You MUST NOT put SEO tags in src/head/HeadStart.astro or src/head/HeadEnd.astro: <title>, <meta name=\"description\">, <meta name=\"robots\">, <link rel=\"canonical\">, og: and twitter: meta tags, or search-engine verification tags (<meta name=\"…-site-verification\">). The platform refuses the write. You MUST NOT delete any of the four snippet files. The platform refuses. To clear one, write it with an empty body. You MUST NOT add other files to src/head/ or src/body/. The platform refuses. Put shared markup in src/components/ui/ and import it from a snippet file. You MUST NOT edit src/layouts/Base.astro. The platform refuses. Where SEO tags come from instead The Base layout writes every page's SEO tags from your SEO settings: Per-page title, description, robots, social image: seo_set_page, or the SEO view. Site name, default description, search visibility, verification codes, default social image, favicons: seo_set_defaults. Canonical addresses come from your live domain and the page's path. You can't override them. Pages don't pass SEO data to <Base> and don't read SEO files. Related Page SEO Site SEO defaults Verify your site with Google and Bing Structured data Interactivity"},{"slug":"what-isnt-supported","title":"What isn't supported","summary":"Astro and web-project features that don't work on a Starjay site, and what to do instead.","section":"Site code reference","text":"Starjay sites are Astro projects, but not every Astro feature is available. This page lists what doesn't work and the alternative for each. Not supported What happens Do this instead React, Vue, Svelte, Solid and other framework components No framework integration is installed, so they don't render. .tsx and .jsx files are refused as pages. Write .astro components; add behavior with <script>, <details> and <dialog>. See Interactivity. New npm packages package.json can't be written, so new packages can't be installed. Write the code in src/lib/, or load a third-party script in a snippet file. Config edits (astro.config.mjs, tsconfig.json, package.json) Refused. None; the configuration is managed. Middleware (src/middleware.ts) Refused. Use redirects (redirects_modify). Server endpoints and API routes Not supported. Use forms for visitor input, and third-party services from the browser. Environment variables and secrets There's nowhere to set them, and site code has no access to any. Never put keys in site code. Anything in a page is public. Alternative layouts (src/layouts/ other than Base.astro) Refused. Put shared chrome in src/components/layout/; per-page structure goes in the page. Editing Base.astro Refused. Use modify_layout for the header and footer, and the snippet files for raw <head> and <body> content. Build-time content collections (src/content.config.ts, getCollection) Refused. Use CMS collections with getLiveCollection and getLiveEntry. See Reading CMS content in code. Files in public/ Refused. Images go through the image library. Astro.rewrite('/404') Fails on the live site. return new Response(null, { status: 404 }). Converting Markdown to HTML in code Not supported. Use the <Markdown> component. Raw <form> elements Refused. Use the form components. Pages under an _ path segment Refused. Choose a path without a leading underscore. RSS feeds Not available. None. Rules You MUST NOT write React or other framework components. They don't work on Starjay sites. You MUST NOT try to add packages, change configuration, add middleware or create alternative layouts. You MUST NOT put secrets, API keys or tokens in site code. Everything in site code can reach visitors. Related Project files How a Starjay site is built Rules for agents"},{"slug":"undo-and-redo","title":"Undo and redo","summary":"How undo and redo work in the editor, what they cover, and why you should rely on checkpoints for safety.","section":"The editor","text":"Action Mac Windows Undo Cmd+Z Ctrl+Z Redo Cmd+Shift+Z Ctrl+Shift+Z There are no undo or redo buttons in the top bar; use the keyboard. Some messages, such as the one after you delete an element or move a page, include an Undo button too. After each undo or redo, a short message names what changed, for example Undid: … or Redid: …. What undo covers Undo steps back through changes you make yourself in the editor, such as: text, link and image edits on the canvas styling changes elements and sections you add, move or delete page moves, renames, deletes and publish-state changes component renames, moves and deletes site setting changes The editor keeps your most recent 50 changes. What undo doesn't cover The AI's work. Each AI request becomes a version in the AI panel. Step back through versions or click Reject there instead. See AI sessions: versions, Save and Reject. CMS items. The CMS has its own history. See History and restore. Text you're typing. While you're editing text on the canvas or typing in a field, Cmd/Ctrl+Z undoes typing in that text, as usual. Undo history doesn't last forever Undo history is short-lived. It's cleared when your changes are saved into a version (for example when you send the AI a new request), when you restore a checkpoint, and when the editor restarts after going to sleep. Don't rely on undo to get back to something from earlier in the day. Before a big change, save a checkpoint. Checkpoints are permanent and you can restore any of them. See Checkpoints. Related Checkpoints Keyboard shortcuts"},{"slug":"tools-reading-your-site","title":"Tools: reading your site","summary":"Reference for the tools that read a site's pages, components, files, tokens and brand guide.","section":"Use your own AI","text":"These tools read a site without changing it. None needs an open turn. See the Tool reference for conventions and shared errors. list_pages Lists the site's pages: each page's address (route), file, whether it's a CMS item page, and the components it uses. The entry with route __layout is the layout shared by every page, including the header and footer. When to use it: To see what pages exist before adding or changing one. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"pages\": [ { \"route\": \"/\", \"filePath\": \"src/pages/index.astro\", \"components\": [ { \"name\": \"Hero\", \"importPath\": \"../components/sections/Hero.astro\", \"isRegistered\": true, \"structureLocked\": false, \"props\": {}, \"contentKey\": null, \"line\": 21 } ] }, { \"route\": \"/:slug\", \"filePath\": \"src/pages/[slug].astro\", \"components\": [], \"isDynamic\": true, \"contentType\": \"post\" } ] } get_site_structure A one-call overview: the top-level pages with the components each uses, plus all components grouped as layout, sections and ui. When to use it: As a starting point on a site you haven't seen. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result The result lists pages with their components, and the component list grouped by category. inspect_page Shows a page's structure: its sections in order, what it imports, and the props passed to each section. When to use it: Before editing a page. It's quicker to read than the raw file. Needs an open turn: No. Input Type Required Meaning page string Yes The page's address (/, /about) or file name (index.astro). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"page\": \"/about\" } Example result The result lists the page's sections in order with their props. Errors You see What it means What to do Page not found No page matches. Check the address with list_pages. list_components Lists every component on the site with its file, description, props and category. When to use it: Before creating a component, to reuse one that already exists. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result The result lists each component's name, path, description, props and category. inspect_component Shows one component: its category, description, editable props, the pages that use it, and its source. When to use it: Before editing a component or passing it new props. Needs an open turn: No. Input Type Required Meaning component string Yes The component's name (Hero) or path (src/components/sections/Hero.astro). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"component\": \"DocsHome\" } Example result COMPONENT: DocsHome Category: sections Description: Docs home Editable props: heading, intro, sections Used on: / (line 21) --- Source --- --- import copy from '../../../content/components/sections/DocsHome.json' … Errors You see What it means What to do Component not found No component has that name or path. Check the name with list_components. list_files Lists the files and folders in one folder of the site. Hidden files, installed packages and build output are left out. When to use it: To browse the site when you don't know a file's path. Needs an open turn: No. Input Type Required Meaning path string No Folder to list, relative to the site root, such as /src/components. Default /. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"path\": \"/\" } Example result { \"path\": \"/\", \"entries\": [ { \"name\": \"brand\", \"type\": \"dir\" }, { \"name\": \"content\", \"type\": \"dir\" }, { \"name\": \"src\", \"type\": \"dir\" }, { \"name\": \"site.json\", \"type\": \"file\", \"size\": 282 } ] } read_file Reads a site file. With startLine and endLine, it returns only those lines, numbered. When to use it: To read code before changing it. After a search_files hit, read just the lines around it. Needs an open turn: No. Input Type Required Meaning path string Yes File path relative to the site root, such as src/pages/index.astro. startLine integer No First line to return (from 1). endLine integer No Last line to return. Leave out to read to the end. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"path\": \"src/pages/index.astro\", \"startLine\": 1, \"endLine\": 4 } Example result 1 --- 2 export const prerender = false 3 4 import { getLiveCollection } from 'astro:content' Errors You see What it means What to do File not found There's no file at that path. Check the path with list_files or search_files. search_files Searches the site's code and text for a pattern and returns each match with its file, line and column. It searches src/, content/, brand/ and site.json. When to use it: To find where some text, a class, a component or an import lives, before reading files. Needs an open turn: No. Input Type Required Meaning pattern string Yes A regular expression, or plain text with literal. Up to 256 characters. Lookaround and backreferences aren't supported. literal boolean No Treat pattern as plain text. Default false. ignoreCase boolean No Ignore upper and lower case. Default false. path string No Limit the search to one file or folder, such as src/components. glob string No Only search file names matching this, such as *.astro. maxResults integer No Most matches to return. Default 50, maximum 200. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"pattern\": \"data-component=\\\"DocsHome\\\"\", \"literal\": true } Example result { \"pattern\": \"data-component=\\\"DocsHome\\\"\", \"path\": \"/\", \"matches\": [ { \"path\": \"src/components/sections/DocsHome.astro\", \"line\": 19, \"column\": 10, \"text\": \"<section data-component=\\\"DocsHome\\\" class=\\\"bg-cream\\\">\" } ], \"totalMatches\": 1, \"truncated\": false } Errors You see What it means What to do truncated: true There were more matches than maxResults. Narrow the search with path or glob. Invalid pattern The pattern isn't a valid regular expression. Fix it, or set literal to true. get_tokens Reads the site's design tokens: colors (scales and single swatches), font families, and page defaults. When to use it: Before styling anything, to know which color and font names exist. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"colors\": { \"scales\": {}, \"swatches\": { \"white\": \"#ffffff\", \"ink\": \"#141B2D\", \"accent\": \"oklch(0.8396 0.2522 27.01)\" } }, \"textStyles\": {}, \"typography\": { \"fontFamily\": { \"heading\": \"'DM Sans', ui-sans-serif, system-ui, sans-serif\", \"body\": \"Inter, ui-sans-serif, system-ui, sans-serif\" } }, \"elementDefaults\": { \"body\": { \"classes\": \"min-h-screen bg-white font-body text-ink antialiased\" }, \"h1\": { \"classes\": \"font-heading\" } } } Use the names as Tailwind utilities: swatch ink gives text-ink and bg-ink; font heading gives font-heading. textStyles is always empty; text styles aren't available. get_brand_guide Reads the site's brand guide, the instructions Starjay's built-in AI reads on every request. When to use it: Before making design or writing decisions, to follow the site's voice and style. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"content\": \"# Voice\\nWarm, plain, short sentences…\", \"exists\": true } list_backups Lists the site's checkpoints: the automatic ones and the ones the user saved. When to use it: To tell the user which checkpoints exist. Your agent can't restore one; the user restores checkpoints in the editor. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"backups\": [ { \"id\": \"bp_…\", \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"description\": \"Before AI session\", \"trigger\": \"auto-ai\", \"createdAt\": \"2026-10-17T19:54:33.584Z\", \"fileCount\": 35 } ] } Related Tools: editing Project files"},{"slug":"keyboard-shortcuts","title":"Keyboard shortcuts","summary":"Every keyboard shortcut in the editor.","section":"The editor","text":"On Windows, use Ctrl wherever this page says Cmd/Ctrl. Editor Shortcut What it does Cmd/Ctrl+Shift+E Close or reopen the editor. Cmd/Ctrl+Z Undo. Cmd/Ctrl+Shift+Z Redo. Esc Step back one level. In order, it closes an open box or menu, steps out of a single repeated item, closes the AI panel, closes the open left panel, leaves Breakpoints mode, clears the selection, and finally closes the editor. Canvas (Edit mode) Shortcut What it does Click Select an element. Double-click Edit text, a link or an image in place. Cmd/Ctrl+click Follow a link. Right-click Open the actions menu for the selection. Delete or Backspace Delete the selected element. / Open Quick insert (something must be selected). Enter Narrow the selection to a single repeated item. While editing text on the canvas Shortcut What it does Enter Save. Esc Cancel and restore the old text. Shift+Enter Line break (text with styled phrases only). Cmd/Ctrl+B Bold (text with styled phrases only). Cmd/Ctrl+I Italic (text with styled phrases only). ← / → Step the cursor in or out of a styled phrase. Edit boxes (link, alt text, Ask AI) Shortcut What it does Enter Save an external address or alt text, or send an Ask AI to change this… request. Shift+Enter New line in the Ask AI to change this… box. Esc Discard your change; press again to close the box. Quick insert Shortcut What it does ↑ / ↓ Move through the list. Enter Insert the highlighted element. Esc Close without inserting. Breakpoints mode Shortcut What it does Cmd/Ctrl + scroll, or pinch Zoom in or out. Pages panel Shortcut What it does Shift+F10 or the menu key Open the actions menu for the focused page. Related Tour of the editor Undo and redo"},{"slug":"tools-editing","title":"Tools: editing","summary":"Reference for the tools that change site code, colors, fonts, layout and the brand guide.","section":"Use your own AI","text":"These tools change site code, colors, fonts, layout and the brand guide. They all need an open turn. Follow the Rules for agents. See the Tool reference for shared errors. write_file Creates, replaces or deletes one file. A new page starts as ready to publish. A new component is added to the component list automatically. When to use it: To create a file, delete one, or rewrite more than half of an existing one. For small changes use patch_file. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning path string Yes File path relative to the site root, such as src/components/sections/Hero.astro. content string Yes The file's complete content. Send an empty string when deleting. action string: create, update or delete Yes What to do with the file. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"path\": \"src/components/ui/Badge.astro\", \"action\": \"create\", \"content\": \"---\\ninterface Props { label?: string }\\nconst { label = 'New' } = Astro.props\\n---\\n<span data-component=\\\"Badge\\\" class=\\\"rounded-full bg-accent px-3 py-1 text-sm text-white\\\">{label}</span>\\n\" } Example result { \"success\": true, \"path\": \"src/components/ui/Badge.astro\", \"action\": \"create\", \"errors\": [], \"fixes\": [] } The result can also include multiImporterWarning when the file is a component used on several pages, so a change affects all of them. Errors You see What it means What to do success: false with errors The change broke a site rule (for example, a raw color or a component outside the three folders). Nothing was written. fixes may suggest the correction. Fix the content and call again. \"… is generated — don't edit it\" or \"use … instead\" The file is managed by a dedicated tool. Use the tool the message names. See Rules for agents. \"Components must live under src/components/{sections,ui,layout}/\" Components can only go in those three folders. Move the file into one of them. \"write_file/patch_file can only write site source (src/**)\" The path is outside the code you can edit. Use the dedicated tool for structured data, or pick a path under src/. \"SSR render error …\" with success: false The file was saved, but the page doesn't render. Fix the error before calling end_turn. Check with get_preview. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. patch_file Makes search-and-replace edits to an existing file. Each search text must appear exactly once. Patches apply in order, so later ones see earlier changes. When to use it: For most edits: changing classes, text or props. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning path string Yes File path relative to the site root. patches array of {search, replace} Yes Each search is exact text that appears once in the file; replace is the new text. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"path\": \"src/components/sections/Hero.astro\", \"patches\": [ { \"search\": \"class=\\\"text-5xl font-bold\\\"\", \"replace\": \"class=\\\"text-4xl font-bold\\\"\" } ] } Example result { \"success\": true, \"path\": \"src/components/sections/Hero.astro\", \"errors\": [], \"fixes\": [] } Errors You see What it means What to do \"Search string not found: …\" The search text isn't in the file. Read the file again and copy the text exactly. \"Ambiguous: … found N times\" The search text appears more than once. Include more surrounding text so it's unique. \"File not found: …\" There's no file at that path. Check the path, or create it with write_file. success: false with errors The change broke a site rule (for example, a raw color or a component outside the three folders). Nothing was written. fixes may suggest the correction. Fix the content and call again. \"… is generated — don't edit it\" or \"use … instead\" The file is managed by a dedicated tool. Use the tool the message names. See Rules for agents. \"Components must live under src/components/{sections,ui,layout}/\" Components can only go in those three folders. Move the file into one of them. \"write_file/patch_file can only write site source (src/**)\" The path is outside the code you can edit. Use the dedicated tool for structured data, or pick a path under src/. \"SSR render error …\" with success: false The file was saved, but the page doesn't render. Fix the error before calling end_turn. Check with get_preview. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. modify_layout Changes the parts of the layout every page shares: which component is the header and which is the footer, and page navigation settings (client-side routing and the page transition). When to use it: To add, swap or remove the header or footer, or when the user asks to change page transitions. The component must already exist in src/components/layout/. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning actions array Yes One or more changes, applied together. Each has an action (below). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"actions\": [ { \"action\": \"addComponent\", \"slot\": \"header\", \"componentName\": \"Navbar\" }, { \"action\": \"updateSettings\", \"fields\": { \"clientRouter\": true, \"pageTransition\": \"fade\" } } ] } Example result { \"success\": true } Each action: Field Type Meaning action addComponent, removeComponent or updateSettings What to change. slot header or footer Needed for addComponent and removeComponent. componentName string The layout component to place. Needed for addComponent. fields.clientRouter boolean Swap pages without a full reload. fields.pageTransition none, fade or slide The animation between pages while client-side routing is on. Only change clientRouter or pageTransition when the user asks for it. See Page transitions and navigation. Errors You see What it means What to do applied with error Some actions failed; the message says which. Fix those actions and call again. Component not found The header or footer component doesn't exist. Create it in src/components/layout/ with write_file first. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. modify_tokens Adds, changes, renames or removes the site's colors and fonts. Renames update every use across the site. Changing a value keeps every use working. When to use it: Whenever the design needs a color or font that isn't in get_tokens, or the user asks to change one. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning changes array Yes One or more operations, applied together. Each has an operation and the fields it needs (below). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"changes\": [ { \"operation\": \"addScale\", \"scaleName\": \"primary\", \"baseHex\": \"#2563eb\" }, { \"operation\": \"modifyFont\", \"slotName\": \"heading\", \"font\": \"Playfair Display\" } ] } Example result { \"success\": true } Operations: operation Fields What it does addScale scaleName, baseHex Adds an 11-shade color scale generated from the 500 shade. importTailwindScale tailwindColor, optional scaleName Adds a stock Tailwind palette (such as emerald) with exact values. modifyScale scaleName, baseHex Shifts a whole scale to a new 500 shade. modifyShade scaleName, shade, hex Changes one shade, such as 700. addSwatch / modifySwatch name, hex Adds or recolors a single color. hex takes any CSS color. renameScale / renameSwatch scaleName or name, newName Renames and updates every use. removeScale / removeSwatch scaleName or name Removes the color and strips every class that used it. addFont / modifyFont slotName, font Adds or changes a font from Google Fonts by name. It's hosted with your site. renameFont slotName, newName Renames a font slot and updates every use. removeFont slotName Removes a font slot and strips its classes. Name scales by role (primary, accent, neutral), not by color. To recolor, modify; don't remove and re-add. See Colors and Fonts. Errors You see What it means What to do Font slot name rejected Font names that clash with Tailwind (bold, light, sans, serif, mono and similar) aren't allowed. Pick another name, such as display. Can't remove the last font A site needs at least one font. Change it with modifyFont instead. Name already exists A color with that name exists. Pick another name, or modify the existing one. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. modify_element_defaults Sets default styling for plain HTML elements, such as the page's background, text color and font (body) or every h1. Classes on an element override its defaults. When to use it: For site-wide defaults. Use body for the page background, text color and default font. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning changes array Yes Each item has operation (add, modify or remove), element (such as body or h2) and classes (Tailwind classes). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"changes\": [ { \"operation\": \"modify\", \"element\": \"body\", \"classes\": \"bg-cream text-ink font-body antialiased\" } ] } Example result { \"success\": true } In the editor these appear under Settings → General → Page Defaults. See Page defaults. Errors You see What it means What to do not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. set_brand_guide Replaces the site's brand guide with new Markdown. The old version can be restored by rejecting the session. When to use it: When the user asks to record brand voice, style or rules for future work. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning content string Yes The complete new brand guide, in Markdown. It replaces the old one. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"content\": \"# Voice\\nWarm and plain. Short sentences.\\n\\n# Colors\\nUse accent only for calls to action.\" } Example result { \"success\": true } Read it first with get_brand_guide and keep what's there unless the user wants it gone. See Brand guide. Errors You see What it means What to do not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. Related Rules for agents Styling rules Project files"},{"slug":"tools-cms","title":"Tools: CMS","summary":"Reference for the tools that list, create and change CMS collections and items.","section":"Use your own AI","text":"These tools work with CMS collections and their items. Collections and items aren't files; manage them only with these tools. See When to use a collection and Reading CMS content in code. list_items Lists or searches the items in a collection. When to use it: To browse a collection or find items before updating them. Needs an open turn: No. Input Type Required Meaning collection string Yes The collection's name, such as blogPost. filter object No Match field values exactly or with operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $contains, $all, $exists. Example: {\"publishedAt\": {\"$gte\": \"2026-01-01\"}}. search string No Full-text search across the collection's text fields, ranked by relevance. sort object No {\"field\": \"publishedAt\", \"direction\": \"desc\"}. Ignored when search is used. limit number No Most items to return. Default 20. offset number No Items to skip, for paging. Default 0. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"collection\": \"docPage\", \"limit\": 1 } Example result { \"success\": true, \"collection\": \"docPage\", \"total\": 2, \"returned\": 1, \"offset\": 0, \"items\": [ { \"id\": \"docPage-bxxr7i\", \"title\": \"Quickstart\", \"revision\": 1, \"slug\": \"quickstart\", \"updatedAt\": \"2026-10-17T21:38:22.739Z\" } ] } Errors You see What it means What to do \"Collection … not found\" There's no collection with that name. Check the name. Collection names are camelCase, such as blogPost. \"Unknown field …\" or \"Operator … is not supported on …\" The filter uses a field or operator the collection doesn't support. Fix the filter. modify_collection Creates a collection, changes its fields, or asks the user to delete it. Creating can also generate sample items. When to use it: For structured, repeating content such as blog posts, products or team members. After creating one, build the pages that show it. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning action string: create, update or delete Yes What to do. name string Yes The collection's name in camelCase, such as blogPost. label string For create Human-readable name, such as Blog Post. fields object For create Field definitions keyed by field name. Each has type, label and optional required, plus type-specific settings (below). displayField string No The field shown as each item's title. Default: the first text field. contentDescription string No What sample items should be about, such as blog about sourdough baking. sampleItemCount number No How many sample items to generate. Default 3. addFields object No For update: new fields, in the same shape as fields. updateFields object No For update: changes to existing fields' settings, keyed by field name. removeFields array of strings No For update: fields to remove. fillMissing object No For update: values to give existing items when a field becomes required, keyed by field name (dotted path for nested fields). Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"action\": \"create\", \"name\": \"blogPost\", \"label\": \"Blog Post\", \"fields\": { \"title\": { \"type\": \"string\", \"label\": \"Title\", \"required\": true }, \"slug\": { \"type\": \"slug\", \"label\": \"Slug\", \"slugFrom\": \"title\" }, \"cover\": { \"type\": \"image\", \"label\": \"Cover\", \"altField\": \"coverAlt\" }, \"coverAlt\": { \"type\": \"string\", \"label\": \"Cover alt text\" }, \"body\": { \"type\": \"markdown\", \"label\": \"Body\" } }, \"contentDescription\": \"blog about sourdough baking\", \"sampleItemCount\": 3 } Example result { \"success\": true, \"collection\": \"blogPost\" } Field types: string, text, markdown, slug, color, enum, link, number, boolean, datetime, image, reference, array, object, dictionary. See Field types. An image field SHOULD have a companion text field for alt text, named in altField. A reference field lists the collections it can link to in targetTypes. Those collections must exist first. An array field has items (one element shape) or itemTypes (named alternatives for a mixed list). _key and _type are reserved names. A saved field's name and type never change. Delete doesn't delete anything by itself. Starjay asks the user, who confirms with a click. Your agent learns the outcome on its next turn. Sample items are generated by Starjay and use credits. Errors You see What it means What to do already_exists A collection with that name exists. Use update, or pick another name. collection_in_use: \"… is used by /blog. Remove it there first.\" A page reads the collection, so it can't be deleted. Remove its use from those pages first. field_in_use The site's code uses a field, choice or item type you tried to remove. The message names the pages. Change those pages first. validation_failed A field definition isn't valid. Fix the field definitions using the message. insufficient_credits Not enough credits for sample items. Create without contentDescription, or ask the user to add credits. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. modify_items Creates or updates items in a collection, or asks the user to delete items. When to use it: To add or change specific content the user asks for. For sample content when creating a collection, use modify_collection. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning action string: create, update or delete Yes What to do. collection string Yes The collection's name. items array of objects For create and update For create: each item's field values. For update: {\"id\": …, …changes}. A list field is replaced whole, so send the full list and keep each entry's _key. ids array of strings For delete The IDs of the items to ask the user to delete. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"action\": \"update\", \"collection\": \"blogPost\", \"items\": [ { \"id\": \"blogPost-a1b2c3\", \"title\": \"Our first loaf\" } ] } Example result { \"success\": true, \"updated\": 1 } Items are saved as drafts. The user publishes them in the CMS view. See Publish and unpublish items. Deleting works like collections: the user confirms each delete. Errors You see What it means What to do validation_failed A value doesn't fit its field, or a reference points at an item that doesn't exist. Fix the values using the message. not_found An item ID doesn't exist. Find the right ID with list_items. delete_blocked Another item links to it through a required field. Change or remove the link first. revision_conflict or edit_conflict The item changed at the same time, for example in the CMS view. Read it again with list_items and retry. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. Related Create a collection Reading CMS content in code"},{"slug":"working-with-others-at-the-same-time","title":"Working with others at the same time","summary":"What the \"also editing\" notice means and why two people editing the same site at once can overwrite each other's work.","section":"The editor","text":"Members of a workspace can open the same site at the same time. When someone else has the site open, a notice appears: {Name} is also editing this site. {Name1} and {Name2} are also editing this site. {Name} and {N} others are also editing this site. Under it: Edits from two people can overwrite each other. Click the X to dismiss it. It comes back if a different set of people joins. Why edits can overwrite each other The notice is only a heads-up. It doesn't stop either of you from editing, and there's no lock that gives one person control. Both of you change the same site, so: If you both edit the same text or the same element, the last save wins. The AI session is shared. If one person asks the AI for changes, everyone sees the AI working, and editing pauses for everyone until it finishes. Saving or rejecting the session applies to everyone's work in it. Undo steps back through the most recent changes on the site, which may include the other person's. How to avoid problems Agree who is editing which pages. Avoid editing at the same time as someone who is working with the AI. Save a checkpoint before a big change, so you can return to it. An AI app editing the site If someone is working on the site from an AI app such as Claude Code, you see a different message, Claude is editing — locked, and editing is paused until it finishes. See How agent work shows up in the editor. Related Invite members AI sessions: versions, Save and Reject"},{"slug":"tools-images","title":"Tools: images","summary":"Reference for the tools that list, view, add and organize images in a site's library.","section":"Use your own AI","text":"These tools manage the site's image library. Every image on the site must come from the library; see Images in code. Supported formats are JPEG, PNG, WebP, GIF and SVG, up to 20 MB per file. AVIF isn't supported. browse_assets Lists the images in the site's library with each image's ID, name, URL, size, alt text, file type and tags. When to use it: Before placing an image, to use one that's already there. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"success\": true, \"assets\": [ { \"id\": \"storefront-k2j9\", \"name\": \"Storefront\", \"url\": \"/_images/storefront~4f1c9a/public\", \"width\": 1920, \"height\": 1280, \"alt\": \"Bakery storefront at dawn\", \"mimeType\": \"image/jpeg\", \"source\": \"upload\", \"tags\": [ \"storefront\", \"exterior\" ] } ] } Use url exactly as given in <img src>. id is the library ID that modify_asset takes. The image ID that assets_usage and assets_apply_alt take is the part of url between ~ and the next / (4f1c9a above). view_asset Returns the image itself so your AI can look at it. When to use it: To check what an image shows, especially before writing alt text. Needs an open turn: No. Input Type Required Meaning url string Yes The image URL from browse_assets or import_asset. size string: thumbnail, small, medium or full No thumbnail is a 200×200 crop; small, medium and full show the whole image at 640 px, 1024 px or original width. Default medium. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"url\": \"/_images/storefront~4f1c9a/public\", \"size\": \"small\" } Example result The image, plus {\"ok\": true, \"size\": \"small\"}. Errors You see What it means What to do invalid_url That isn't an image URL from the library. Use the URL from browse_assets. fetch_failed The image couldn't be loaded. Check the URL and retry. import_asset Copies an image from a public web address into the library and returns its URL. The result includes a small preview so your AI can check the image and write accurate alt text. When to use it: When the image is already online. For a file on the user's computer, use request_asset_upload. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning url string Yes The image's web address. alt string No Alt text describing what the image shows. Base it on the image, not the file name. tags array of strings No Lowercase tags, such as [\"team\", \"office\"]. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"url\": \"https://example.com/photos/storefront.jpg\", \"alt\": \"Bakery storefront at dawn\", \"tags\": [ \"storefront\" ] } Example result { \"success\": true, \"asset\": { \"id\": \"storefront-k2j9\", \"name\": \"Storefront\", \"url\": \"/_images/storefront~4f1c9a/public\", \"width\": 1920, \"height\": 1280 } } Errors You see What it means What to do \"Unsupported image type: …\" The file isn't JPEG, PNG, WebP, GIF or SVG. Use another image. Download failed The address couldn't be fetched. Check that the address is public and points to an image. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. request_asset_upload Gives your AI a short-lived upload link for adding an image file from the user's computer. Your AI then uploads the file from its own terminal. When to use it: When the user has an image file on disk, such as a logo. Only works in AI apps that can run shell commands, such as Claude Code and Codex. Needs an open turn: Yes. Call start_turn first. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"success\": true, \"upload_url\": \"https://app.starjay.com/…\", \"token\": \"…\", \"expires_at\": \"2026-10-17T22:10:00.000Z\", \"max_bytes\": 20971520 } Upload the file with one request, using the returned values: curl -X POST \"<upload_url>\" \\ -H \"Authorization: Bearer <token>\" \\ -F \"file=@/path/to/logo.png\" \\ -F \"alt=Bakery logo\" The response is the new library image. The link works for 10 minutes, only for this site, and only while your agent's turn is open. If it expires, ask for a new one. Upload errors you might see: \"File too large\", \"Unsupported image type\", \"File content does not match a supported image format\", and site_upload_rate_exceeded (wait a while before uploading more). Errors You see What it means What to do \"Could not mint an upload token right now.\" Starjay couldn't create the link. Retry in a moment. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. modify_asset Renames an image in the library or replaces its tags. The image's URL never changes. When to use it: To tidy up the library. For alt text, use assets_apply_alt. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning action string: rename or tags Yes What to change. id string Yes The image's library id from browse_assets (not its URL). name string For rename The new display name, up to 200 characters. tags array of strings For tags The complete new tag list. It replaces the old one. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"action\": \"tags\", \"id\": \"storefront-k2j9\", \"tags\": [ \"storefront\", \"exterior\", \"morning\" ] } Example result { \"success\": true } Errors You see What it means What to do Image not found No library image has that id. Use the id from browse_assets. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. assets_usage Shows where images are used: in the site's code (file, line and snippet) and in CMS items. When to use it: Before replacing or asking the user to delete an image. With assetId it checks one image, which is much faster. Needs an open turn: No. Input Type Required Meaning assetId string No The image ID (the part of the URL between ~ and the next /). Leave out for every image. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"assetId\": \"4f1c9a\" } Example result { \"locations\": [ { \"file\": \"src/components/sections/Hero.astro\", \"line\": 12, \"snippet\": \"<img src=\\\"/_images/storefront~4f1c9a/public\\\" …\" } ], \"cmsItems\": [] } If the result has cmsUsageError: true, the CMS couldn't be checked. Don't assume the image is unused. assets_apply_alt Changes alt text everywhere an image is placed with a particular alt text. Placements with different, hand-written alt text are left alone. When to use it: After renaming or re-describing an image, to update its default alt text across the site. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning assetId string Yes The image ID (the part of the URL between ~ and the next /). matchAlt string Yes Only placements whose current alt text is exactly this are changed. newAlt string Yes The new alt text. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"assetId\": \"4f1c9a\", \"matchAlt\": \"Storefront\", \"newAlt\": \"Bakery storefront at dawn\" } Example result { \"success\": true, \"updated\": 2 } Errors You see What it means What to do not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. Related The image library Alt text and descriptions"},{"slug":"messages-you-might-see","title":"Messages you might see","summary":"What each status screen and notice in the editor means and what to do about it.","section":"The editor","text":"While your site opens Message What it means What to do Starting your site — Booting the site server… The editor is starting up your site. Wait. A progress bar shows how far along it is. Almost there — Loading the canvas… Your site is ready and the canvas is loading. Wait. Setting up a fresh workspace You haven't opened this site in a while, or it needs a fresh start. This usually takes about a minute. Wait. Couldn't load the site — The site server didn't respond in time. Starting took too long. Click Retry, or Refresh to reload the page. Sign in again Your sign-in expired. Refresh the page, sign in, and reopen the site. You do not have access to this site You're signed in to an account or workspace that can't open this site. Check which account you're signed in with. This project is archived The site is archived. Click Back to dashboard. Restoring an archived site needs Pro. See Rename, duplicate, archive, restore, delete a site. This workspace is paused The workspace's Pro plan has ended, so members can't open its sites. Ask the workspace owner to renew Pro. You reconnect automatically when they do. See When Pro ends. This workspace is out of credits The editor needs credits to run, and there are none left. Published sites keep working. Add credits, or wait for your next allowance. See Running out of credits. This site is temporarily unavailable Changes can't be saved right now, so the editor is paused to protect your work. Try refreshing in a few minutes. This site couldn't be opened An update your site needs failed, and retrying won't help. Contact support. Couldn't verify this site or Couldn't identify this site The editor couldn't confirm which site it's opening. Refresh, or reopen the site from the dashboard. While you work Message What it means What to do The editor went to sleep — It paused while you were away. Refresh to continue. The editor stops when you leave it for a while. Your work is kept. Click Refresh. Loading preview… The canvas is loading the page. Wait. Preview has an error — details in the canvas above. The page has an error, usually from a recent code change. The error details show in the canvas. Ask the AI to fix it (paste the error into the chat), or step back to an earlier version in the AI panel. Click Retry to reload. This page doesn't exist yet The canvas is on an address with no page. Click Back to homepage, or create the page. AI generating — editing locked and Editing locked — AI is generating The AI is changing your site. You can look around but not edit. Wait for it to finish, or stop it from the AI panel. Editing locked — accept or reject changes The AI's changes are waiting for you. Save or reject the session in the AI panel. See AI sessions: versions, Save and Reject. Loading version… / Saving changes… You're stepping to another version, or a session is being saved. Wait. Navigation locked while AI is generating You tried to open another page while the AI was working. Wait for the AI to finish. Claude is editing — locked An AI app connected to your account is working on this site. Wait, or click Take back control and confirm with Cut off Claude?. See How agent work shows up in the editor. Publishing — editing is paused Your site is publishing. Wait for the publish to finish. {Name} is also editing this site. Someone else has the site open. See Working with others at the same time. Editing the site Header — changes affect all N pages. You selected the shared header or footer. Continue, or see Shared components and \"used on N pages\". AI credits used up There aren't enough credits for the AI request. Click Manage credits. See Credits for AI. Content changed — canvas refreshed, try again The page changed while you were editing. Make your change again. Related Undo and redo Troubleshooting"},{"slug":"tools-forms-seo-and-redirects","title":"Tools: forms, SEO and redirects","summary":"Reference for the tools that manage forms, page and site SEO, and redirects.","section":"Use your own AI","text":"These tools manage forms, SEO and redirects. See the Tool reference for shared errors. list_forms Lists the site's forms with their field counts and where submissions go. When to use it: Before adding or changing a form. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"success\": true, \"forms\": [ { \"id\": \"contact\", \"name\": \"Contact\", \"fieldCount\": 3, \"destinations\": [ \"store\", \"email\" ] } ] } modify_form Creates, updates or deletes a form. Place a form on a page with <Form formId=\"contact\" />; never write <form> or <input> markup. When to use it: Whenever the user wants visitors to send something: contact, enquiries, sign-ups, uploads. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning action string: create, update or delete Yes What to do. formId string Yes The form's ID: lowercase letters, digits, - and _, starting with a letter, up to 64 characters. name string For create The form's name. fields array For create The fields. On update, sending fields replaces them all. Each field has id, type, label, and optional required, placeholder, options, showWhen, fileKind, maxFiles and others. settings object No submitLabel, successMessage, errorMessage, redirectUrl, honeypot (default true). Merged with existing settings on update. destinations array No Where submissions go: {\"type\": \"store\"}, {\"type\": \"email\", \"to\": …} or {\"type\": \"webhook\", \"url\": …}. On update, leaving it out keeps the current ones; an empty list removes them. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"action\": \"create\", \"formId\": \"contact\", \"name\": \"Contact\", \"fields\": [ { \"id\": \"name\", \"type\": \"text\", \"label\": \"Name\", \"required\": true }, { \"id\": \"email\", \"type\": \"email\", \"label\": \"Email\", \"required\": true }, { \"id\": \"message\", \"type\": \"textarea\", \"label\": \"Message\" } ], \"destinations\": [ { \"type\": \"store\" }, { \"type\": \"email\", \"to\": \"owner@example.com\" } ] } Example result { \"success\": true, \"formId\": \"contact\", \"verificationNeeded\": [ \"owner@example.com\" ] } Field types: text, email, textarea, select, checkbox, radio, number, url, tel, date, time, file. select and radio need options. file fields need fileKind (image or document), maxFiles from 1 to 10, and a store destination. A field can have one showWhen condition, {\"field\": …, \"equals\": …} or {\"field\": …, \"in\": [ … ]}, based on a select, radio or checkbox field that isn't itself conditional. Webhooks are sent unsigned. Sites have no secrets, so never put keys or tokens in destinations. See Add a form and Form field types. Errors You see What it means What to do \"Invalid formId …\" The ID has characters that aren't allowed. Use lowercase letters, digits, - and _, starting with a letter. \"Form … already exists. Use action: \"update\" to modify it.\" That ID is taken. Use update, or pick another ID. \"Form … not found.\" There's no form with that ID. Check the ID with list_forms. \"Cannot delete form … — still referenced by N file(s).\" A page or component still shows the form. Remove the <Form formId=\"…\" /> uses first, then delete. verificationNeeded in the result Notification emails go only to verified addresses. Tell the user to verify each address in the Forms panel. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. seo_list Shows the site's SEO defaults and, for every page, its SEO settings and a health status: good, warning or missing. When to use it: To find pages that need titles and descriptions. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"siteDefaults\": { \"siteName\": \"Bakery\", \"locale\": \"en\" }, \"pages\": [ { \"slug\": \"index\", \"status\": \"missing\", \"seo\": { \"ogType\": \"website\", \"noIndex\": false, \"keywords\": [] } } ] } seo_get_page Reads one page's SEO settings and its health status. When to use it: Before changing a page's SEO. Needs an open turn: No. Input Type Required Meaning slug string Yes The page's address without the leading /: about for /about, index for the home page. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"slug\": \"index\" } Example result { \"slug\": \"index\", \"seo\": {}, \"status\": \"missing\" } seo_set_page Sets a page's SEO title, description and other fields. Values are merged with what's there. When to use it: To give a page its own title and description, social image or indexing setting. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning slug string Yes The page's address without the leading /; index for home. title string No The page's SEO title. description string No The page's SEO description. fields object No Other page SEO fields, such as ogImage or robots. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"slug\": \"about\", \"title\": \"About us\", \"description\": \"A family bakery in Portland since 1998.\" } Example result { \"slug\": \"about\", \"seo\": { \"title\": \"About us\", \"description\": \"A family bakery in Portland since 1998.\" }, \"status\": \"good\" } See Page SEO. Errors You see What it means What to do not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. seo_set_defaults Sets site-wide SEO: site name, default description, language, social image, icons, search engine verification codes, crawler settings and Google Analytics. Only the fields you send change. When to use it: For anything site-wide. Never hand-write these tags into a snippet file. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning siteName string No Used in page titles and social previews. description string No Description for pages that don't have their own. locale string No Site language, such as en or en-GB. ogImage string No Default social preview image: a library image URL. favicon string No Favicon: a library image URL. faviconDark string No Favicon for dark mode: a library image URL. appleTouchIcon string No Apple touch icon: a library image URL. verificationCodes object No {\"google\": …, \"bing\": …}: the content values from Google Search Console and Bing Webmaster Tools. blockAiCrawlers boolean No Block known AI training crawlers. Search engines aren't affected. hideFromSearch boolean No Hide the whole site from search engines. googleAnalyticsId string No Your GA4 measurement ID, such as G-XXXXXXXXXX. Added to the published site only. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"siteName\": \"Bakery\", \"locale\": \"en\", \"verificationCodes\": { \"google\": \"abc123\" } } Example result { \"success\": true } Crawler and search settings take effect on the next publish. See Site SEO defaults and Search engines and AI crawlers. Errors You see What it means What to do not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. redirects_list Lists the site's redirect rules in the order they're checked, plus redirects created automatically when CMS item slugs changed. When to use it: Before adding or reordering redirects. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"rules\": [ { \"id\": \"r_…\", \"from\": \"/old-menu\", \"to\": \"/menu\", \"status\": 301, \"enabled\": true, \"note\": \"Old menu page\" } ] } contentRedirects lists the automatic CMS redirects. Only the user can remove those, in the Redirects panel. redirects_modify Adds, changes, deletes or reorders redirect rules. Rules take effect on the published site at the next publish. When to use it: When a page moves or the user asks for a redirect. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning action string: create, update, delete or reorder Yes What to do. rule object For create and update from, to, optional status (301 permanent or 302 temporary), enabled and note. For update, only the fields to change. id string For update and delete The rule's ID from redirects_list. orderedIds array of strings For reorder Every rule ID, once each, in the new order. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"action\": \"create\", \"rule\": { \"from\": \"/blog/:slug\", \"to\": \"/journal/:slug\", \"status\": 301 } } Example result { \"success\": true } from can include one :name part that matches any single segment and can be reused in to. An exact rule wins over a pattern, and a pattern never redirects a page that exists. See Redirects. Errors You see What it means What to do Invalid rule The from or to isn't valid, or the rule duplicates another. Fix the rule using the message. Missing or extra IDs on reorder orderedIds must list every rule exactly once. Call redirects_list and send the full list. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry."},{"slug":"tools-publishing","title":"Tools: publishing","summary":"Reference for the tools that set page status, publish a site, and follow a publish.","section":"Use your own AI","text":"These tools control what goes live. Publishing always needs the user's explicit approval. Before EVERY publish, your agent MUST ask the user, name the site, and wait for a clear yes in the current conversation. Only then may it call publish with _confirmed: true. Finished edits or an earlier approval are never permission. set_publish_state Marks pages as draft, ready or deleted. New pages start as ready, so you only need this when the user asks. When to use it: When the user asks to make a page a draft, mark it ready, or delete it. Deleted pages disappear from the live site at the next publish and can be restored until then. Needs an open turn: Yes. Call start_turn first. Input Type Required Meaning targets array Yes The pages to change. Each is {\"kind\": \"page\", \"ref\": \"/pricing\"}. Only pages have a publish status; CMS items are published in the CMS view. status string: draft, ready or deleted Yes The status to set on every target. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"targets\": [ { \"kind\": \"page\", \"ref\": \"/pricing\" } ], \"status\": \"draft\" } Example result { \"success\": true, \"updated\": 1, \"status\": \"draft\", \"results\": [ { \"key\": \"page:/pricing\", \"status\": \"draft\" } ] } See Draft, ready and live pages. Errors You see What it means What to do confirmation_required deleted needs the user's approval. Ask the user. If they agree, call again with _confirmed: true added. \"page ref must start with \"/\"\" The page address is missing its leading /. Use the address as list_pages shows it. \"no valid targets\" None of the targets could be changed. errors explains each. Fix the targets and retry. not_lock_holder Your agent has no open turn on this site, or its turn lapsed. Call start_turn, then retry. lock_lost Someone took the site back (for example with Take back control) or the turn expired and was reopened. Call start_turn to begin a new turn, then retry. site_publishing The site is publishing. Editing is paused until it finishes. Wait for the publish to finish, then retry. publish Builds the site and puts it live at its Starjay address and any connected domains. It returns as soon as the publish starts. When to use it: Only after the user approves this publish, and after they've saved or rejected the AI session in the editor. Needs an open turn: No. Publishing is refused while an AI session is waiting for Save or Reject, so end your turn and ask the user to review first. Input Type Required Meaning _confirmed boolean Yes, in practice Set to true only after the user approves publishing this site in the current conversation. Without it, the call is refused with confirmation_required. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"_confirmed\": true } Example result { \"accepted\": true, \"jobId\": \"pub_…\" } While a site publishes, editing is paused for everyone. See Publish your site. Errors You see What it means What to do confirmation_required The call didn't carry the user's approval. Ask the user. Call again with _confirmed: true only after a clear yes. accepted: false: \"Accept or reject current AI changes before publishing.\" There's an AI session waiting for review. Ask the user to click Save or Reject in the editor, then publish. accepted: false: \"The site is already publishing.\" A publish is running. Follow it with get_publish_status. accepted: false: \"CMS items are still publishing. Publish the site when they finish.\" A CMS publish is running. Wait a few seconds, then retry. accepted: false with site_archived The site is archived. The user restores it from the dashboard first. get_publish_status Shows the site's most recent publish: whether it's still running, its status and stage, the live address, and any error. When to use it: After publish, every few seconds until active is false. Then report the result and address to the user. Needs an open turn: No. No inputs besides siteId. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\" } Example result { \"active\": false, \"status\": \"done\", \"phase\": \"…\", \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"jobId\": \"pub_…\", \"startedAt\": \"2026-10-17T22:05:00.000Z\", \"url\": \"https://bakery.starjay.app\", \"error\": null } status is queued, running, done, failed or cancelled. A site that has never been published returns {\"active\": false}. If the status is failed, tell the user what error says; they can retry from the editor's Publish panel. Related Publish your site Permissions and safety"},{"slug":"tools-preview-references-and-feedback","title":"Tools: preview, references and feedback","summary":"Reference for the tools that screenshot your site, capture other websites, and report problems to Starjay.","section":"Use your own AI","text":"These tools let your AI see its work and other websites, and report problems with Starjay. get_preview Takes a screenshot of the site as it is right now in the editor, including unpublished changes. If the page fails to render, it returns the error instead. When to use it: After visible changes, to check the result. Use devices to check several screen sizes in one call. Needs an open turn: No. Input Type Required Meaning pagePath string No The page's address, such as /about or /blog/my-post. Default /. device string: desktop, tablet or mobile No Screen size: 1280×800, 834×1112 or 390×844. Default desktop. devices array of device names No Several screen sizes in one call; one image each. Overrides device and viewport. viewport object No Exact width (320–3840) and height (320–2160) in pixels. fullPage boolean No Capture the whole page, not just the first screen. Default false. selector string No Capture only one element, such as [data-component=\"Hero\"]. scrollTo string No Scroll an element or #anchor into view before capturing. click string No Click an element first, such as a menu button. hover string No Hover over an element first. focus string No Focus an element first, such as a form field. waitForSelector string No Wait for an element to appear before capturing. waitMs number No Extra wait before capturing, 0–5000 ms. format string: png or jpeg No Image format. Default png. Use jpeg for full-page captures. quality number No JPEG quality, 1–100. Default 80. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"pagePath\": \"/\", \"devices\": [ \"desktop\", \"mobile\" ], \"selector\": \"[data-component=\\\"Hero\\\"]\" } Example result One screenshot per device, plus a short JSON summary. Errors You see What it means What to do preview_capture_failed The preview couldn't be captured. The site may still be starting, the page may have an error, or the selector matched nothing. Read the message. Fix any page error, or retry without selector. rate_limited Too many screenshots in a short time. Wait the number of seconds the message gives, then retry. fetch_reference Loads another public website in a browser and returns screenshots, a summary of its colors, fonts and layout, and/or its HTML. When to use it: When the user points to a site they want to borrow from or rebuild. Map what you find to the site's own colors and fonts; never copy raw values. Needs an open turn: No. Input Type Required Meaning url string Yes The public web address to load. include array: screenshot, css, html Yes What to return. css is a summary of colors, typography and layout; html is the page after scripts run, cut to 50 KB. viewport object No preset (desktop, tablet or mobile) or exact width and height. Default 1280×800. capture object No mode: viewport, fullPage, selector or clip, with position (top, middle, bottom), selector or clip as needed. wait object No until, selector, timeoutMs and additionalMs for slow or lazy-loading pages. views array No 1–6 named screenshots in one call, each with its own viewport, capture, wait and simple actions (click, hover, focus, scroll into view, wait). Needs screenshot in include. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"url\": \"https://example.com\", \"include\": [ \"screenshot\", \"css\" ], \"viewport\": { \"preset\": \"desktop\" } } Example result A screenshot, plus JSON with url, title, a text version of the page, and the css summary. This uses credits. See Credits when using your own AI and Rebuild or borrow from an existing site. Errors You see What it means What to do invalid_url No address was given, or it isn't a public http or https address. Pass a public web address. include_required include is missing or empty. Say which of screenshot, css and html you want. screenshot_required views was used without screenshot in include. Add screenshot. conflicting_render_controls Both views and top-level viewport, capture or wait were sent. Use one or the other. fetch_failed The site couldn't be loaded. Check the address, or try a simpler capture. insufficient_credits Not enough credits. Ask the user to add credits. send_feedback Sends a problem report or suggestion about Starjay to the Starjay team. It doesn't go to the user, and nobody replies through it. When to use it: When a tool gave a wrong or confusing result, the preview is broken in a way your AI didn't cause, or something about Starjay blocked the user's request. Not for your AI's own mistakes. Needs an open turn: No. Input Type Required Meaning feedback string Yes A clear Markdown explanation: what you tried, what you expected, what happened. Include the tool name and error text. kind string: problem or suggestion No What kind of feedback it is. Example call { \"siteId\": \"0APMiuxGY2yB4xJm5BilJ\", \"kind\": \"problem\", \"feedback\": \"get_preview on /menu returns a blank image on mobile, though the page renders on desktop.\" } Example result { \"success\": true, \"message\": \"Thanks — your feedback was sent to the Starjay team.\" } Errors You see What it means What to do \"feedback is required …\" feedback was empty. Write the report. \"feedback is too long …\" The report is too long. Summarize it and send again. \"feedback rate limit reached …\" Too many reports in a short time. Try again shortly. Related Get support Rules for agents"},{"slug":"troubleshooting-your-own-ai","title":"Troubleshooting your own AI","summary":"Fixes for the problems people most often hit when working on a Starjay site from their own AI app.","section":"Use your own AI","text":"Problem What's happening What to do Your AI app says it's signed out, asks you to authenticate, or Starjay's tools disappear The sign-in expired or was never completed. Authenticate again: in Claude Code, /mcp → starjay → Authenticate; in Codex, Settings → Plugins → MCPs → Authenticate; in Claude, reconnect the connector under Settings → Connectors. starjay doesn't appear in Claude Code The server was added in another way, or Claude Code wasn't restarted. Run the claude mcp add … command from Connect Claude Code in a new terminal, then start claude again. \"The editor for this site is not running\" Your AI can only work on a site while its editor is running. Open the site in the editor and wait for it to load, then ask your AI to retry. Your AI is working on the wrong site It picked a site by name and chose another one. Give it the starter prompt with the site ID from Use Claude or Codex. Ask it to call list_sites and confirm. \"You do not have access to this site\" The account you signed in with isn't a member of that site's workspace. Sign in with the right account, or ask the workspace owner to invite you. \"This project is archived\" The site is archived. Restore it from the dashboard (needs Pro). session_locked when your AI starts Someone else is working on the site: you in the editor, the built-in AI, or another agent. Let the other work finish, then ask your AI to try again. not_lock_holder or lock_lost on a change Your AI's turn wasn't open, lapsed after about five minutes without calls, or you clicked Take back control. Ask your AI to call start_turn and continue. The editor still says Claude is editing — locked Your AI didn't end its turn. Ask your AI to call end_turn, or click Take back control. The lock also clears on its own after about five minutes without calls. Save and Reject are grayed out Your AI's turn is still open. Wait for it to finish, or click Take back control. Publish refused: \"Accept or reject current AI changes before publishing.\" The AI session hasn't been reviewed. Click Save or Reject in the editor, then ask your AI to publish again. Publish refused with confirmation_required Your AI tried to publish without your approval. That's the safeguard working. Say yes in the conversation if you want to publish. \"The site is publishing\" A publish is running and editing is paused. Wait for it to finish. insufficient_credits Your workspace is out of credits for a Starjay-side action. See Running out of credits. ChatGPT can't connect ChatGPT isn't supported. Use Claude, Claude Code, Codex or another app that supports remote MCP with sign-in. Your AI says it can't manage your domain Custom domains can't be managed over MCP. Connect domains in the editor. See Connect a custom domain. Related Tool reference — every error, tool by tool How agent work shows up in the editor Get support"}]