Skip to content

Docs

Everything Shipbetter does and how to use it. Reading this as an AI agent? The condensed version lives at /llms.txt.

Deploying an artifact

Shipbetter accepts single-file artifacts the way the Claude app produces them: React (.jsx, .tsx, .js), HTML, SVG, Markdown, and Mermaid diagrams — or a .zip that bundles code and images together. Create a site on your dashboard, upload the file, and deploy.

  • Each deploy replaces the site's frontend. Your database and images always carry over.
  • Check Add user accounts to give the site sign-up and log-in, with each visitor's data kept private to them.
  • Source files up to 400 KB; zips up to 20 MB with images up to 5 MB each.
  • TypeScript converts automatically. So do localStorage persistence and Claude AI calls — they become a real database and a metered AI endpoint.
  • Deploys containing API keys are blocked before they start — your site's backend doesn't need them.
  • Conversion takes a minute or two. A failed build gets one automatic AI repair pass, and you get an email either way.

Deploying from inside Claude

Connect once, and Claude can deploy or update your sites from the conversation where you built the artifact — no copying at all.

  1. On your dashboard, open the Deploy from inside Claude card and generate your connector URL.
  2. In the Claude app — iOS, desktop, or web — go to Settings → Connectors → Add custom connector, and paste the URL.
  3. From then on, tell Claude things like "deploy this to Shipbetter as chores" or "make the buttons on my recipes site bigger".

Claude gets four tools: deploy_artifact, edit_site, list_sites, and site_status. Your plan's limits and the secret scanner apply exactly as they do on the dashboard. The connector URL is a key to your account — treat it like a password, and generate a new one from the dashboard if it leaks.

The Shipbetter skill for Claude

Add the Shipbetter skill to Claude once (Settings → Capabilities → Skills, or paste it into a conversation) and Claude builds artifacts to Shipbetter's house rules: accounts by default, our SDK for data, AI, and photos, mobile-sized inputs that don't trigger iOS zoom, and installable app-like layouts. Skill-built artifacts take the fastest deploy path.

Deploying by email

Send the artifact to deploy@shipbetter.net from your account's email address. Put the site's subdomain at the end of the subject — "deploy recipes" — and attach the file, or paste the code in the body. You'll get a receipt with a live-progress link, then a second email when it's live. If you have exactly one site, you can skip the subdomain.

Improving a live site with AI

On the site page, describe a change in plain language — "add a dark mode toggle", "show newest entries first" — and Shipbetter edits the deployed source directly. No round-trip to the Claude app, and no data risk: every conversion and edit receives a contract listing your site's real collections and fields, and must keep them working. Saved records survive every update.

Templates and remixing

The templates gallery holds live example apps — a recipe box, a habit tracker, a guestbook. Open one to see it running, then deploy your own copy: fresh database, your subdomain, live in seconds. No artifact required.

Your own sites can do the same. Turn on Let visitors remix this app in the site's settings and a small “Remix this app” mark appears on the site; any visitor can claim their own copy from it. Remixing shares the app only — never your data. Every remix starts with a fresh, empty database.

The backend your site gets

Every site gets its own SQLite database. Data is grouped into named collections, such as recipes, messages, or checklists. Each saved item is a record; the API calls that record a JSON document.

Every site serves its own API on its own domain:

  • Accounts/api/auth/signup · login · logout · me. Cookie sessions, 30-day expiry.
  • Data/api/collections/<name>: list, create, update, or delete records, with per-visitor ownership when accounts are on.
  • AIPOST /api/ai/complete: your site's own metered Claude access. No API keys anywhere; limits by plan (25/day on the 1-site plan, 200/day per site on the 10-site plan).
  • Images — files you upload in the Images section serve at /assets/<filename>.
  • Photo uploadsPOST /api/uploads: visitors add images from your app (PNG, JPEG, GIF, or WebP, up to 5 MB each), served at /uploads/<filename>. Capped at 500 files and 200 MB per site, and included in the site's backup zip. Artifacts with a photo-upload UI get wired to this during conversion.

Realtime sync

Every deployed site syncs live across its visitors over WebSocket. When one person adds a grocery item or posts a message, everyone else's screen updates the moment it saves — phones included, no refresh.

  • Collections are live automatically — apps using the SDK's useCollection sync with zero code changes. Save a record on one device and every open screen shows it.
  • Custom channelsrealtime.publish and realtime.subscribe carry your own events: presence, “someone is typing…” indicators.
  • Short-term shared memorykv holds time-limited values shared across visitors, for things like drafts or locks. It's gone on restart — use collections for anything permanent.
  • Limits — up to 100 simultaneous connections per site and messages up to 8 KB. Family scale, included in both plans.
  • Existing sites — pick it up on their next deploy, or their next Improve with AI edit.

Installing a site on a phone

Every site is installable. On iPhone: open the site in Safari, tap Share, then Add to Home Screen. On Android: browser menu, then Add to Home Screen (or Install). The site opens full-screen with its own icon — set the name and icon under the site's settings (upload the icon in the Images section first).

Web Push notifications

Apps can offer notifications to logged-in visitors. Import push from @/lib/sdk and call push.subscribe() only after an explicit user action such as an “Enable notifications” button — never on page load. Use push.unsubscribe() to opt the device out. A logged-in visitor can call push.sendTest() from a button to send the fixed Shipbetter test message only to their own subscribed devices. The self-test accepts no message or recipient input and is limited to once every 30 seconds. Always show permission or browser-support errors. On iPhone and iPad the site must first be installed to the Home Screen. Site owners can still send custom messages from the Shipbetter dashboard.

Site settings and identity

  • Name, description, favicon, social image — shown in browser tabs, search results, link previews, and the home-screen icon. Changes apply to the live site immediately.
  • Visitor password — one shared password that gates the whole site. Blank means public.

Data, backups, and rollback

  • Data browser — see everyone who signed up and every record your app saves; delete rows; export any collection as CSV.
  • Stats — a 30-day visit chart and top pages. No cookies, nothing tracked about visitors.
  • Backup — one click downloads your site's entire database and images as a zip.
  • Rollback — restore any previous deploy from the site's history.

Scheduled automations rolling out

A schedule creates one record in one of your app's own collections on a fixed rhythm — a fresh checklist every morning, a weekly marker your app reacts to. Because useCollection is live, the new record appears in every open browser the moment it's created. Manage schedules from your site page (Schedules) or through the Claude connector's schedule_* tools.

  • Rhythms — hourly (on the hour), daily, weekdays, and weekly (Mondays); the daily variants run at 9:00 in your schedule's IANA timezone.
  • One time — Claude can supply an exact future UTC RFC3339 run_at (ending in Z, up to one year ahead) instead of a rhythm. It runs once, then becomes completed and inactive. The time can be changed only before a run is queued.
  • Optional launch push — a schedule may include one fixed title, body, and same-origin path. Only after its record is created, Shipbetter makes one durable at-most-once delivery attempt to every opted-in, logged-in user of that site. It never retries the push (avoiding duplicates); delivered, failed, expired, or interrupted status stays visible in run history, while the record run remains successful.
  • Scheduled owner email alerts (controlled beta) — approved canary sites may set email: true on that fixed notification to attempt one Shipbetter-branded email to an explicitly approved subscribed owner's Shipbetter account address after the record is created. This is not broadly available: Shipbetter must allowlist both the exact site and account address. The app cannot choose recipients, sender, HTML, or external links. Attempts are limited to 10/site/day and 100/site/month, never retried automatically, and their accepted, failed, or interrupted state stays in run history. Outbound bounce/complaint suppression is not yet complete, so this remains a controlled owner-only canary.
  • Daylight saving — a local time skipped by a DST change is skipped; a repeated one runs once. If the platform is down when a run was due, it's recorded as missed rather than executed late — no surprise backfill.
  • Bounded on purpose — schedules only create records in your app's own database. They never run code, install packages, or call URLs, and each run is signed, one-at-a-time per site, and capped at a 12-second deadline with 2 retries.
  • Plan limits — 1-site plan: 3 active schedules, hourly at the fastest. 10-site plan: 10 per site. History keeps 14 days / 100 runs on the 1-site plan or 30 days / 500 runs on the 10-site plan. These starting limits may be tuned as the rollout is load-tested.
  • Run history and safety — every run is an immutable record with status, duration, and error detail. "Run now" triggers a manual run through the same rules. Five consecutive failures pause the schedule automatically and email you.
  • Rolling out — you can create and manage schedules today; automatic execution is being switched on gradually and your schedules start running when the rollout reaches your site.

Error reporting and AI fixes

When a visitor's browser hits a JavaScript error, the site reports it automatically and it appears on your site page. One click on Fix with AI asks the AI to repair the code and redeploy. Failed deploys already get one automatic repair pass, and every deploy emails you the result either way.

Custom domains 10-site plan

Set your domain on the site page, then at your DNS provider point a CNAME at shipbetter.net (or an A record at 167.233.129.219 for an apex domain), unproxied. HTTPS issues automatically on the first visit.

Plans and limits

The 1-site plan is $19/month. The 10-site plan is $39/month and includes custom domains, 8× the AI allowance, and monetization — your sites can charge subscriptions through your own Stripe account (see the Stripe setup guide). Enterprise customers can contact support for a tailored plan. Everything else is in both monthly plans, and both start with a 7-day free trial. Honest limits: site payments are subscriptions only (via your own Stripe), sites can't send email, and one well-kept server suits personal traffic — thousands of visits a day, not launch-day spikes. Your data is yours: download a backup anytime; everything is deleted 30 days after cancellation.