Recipes
Turn the TinyShip starter into a specific SaaS product with tinyship-recipe
Use tinyship-recipe to turn the starter into a specific product: an AI image or video app, a directory, a digital product store, a waitlist, and more. A recipe is a playbook your coding agent follows, not another hard-coded sub-template in the repo.
Why recipes instead of templates
Every extra sub-template would need its own copy for each of the three frameworks, and those copies drift as soon as the main starter changes. So instead:
- Skills lock the contracts: schema, migration names, credit rules, which nav items to hide or keep, and acceptance checks
- Your agent does the rest: homepage copy, page details, and brand-facing text for your product
- Existing modules are reused: auth, payments, credits, and AI pages, with no duplicate stacks
Framework (Next.js / Nuxt / TanStack Start) and database (PostgreSQL / SQLite / D1) stay your choice, or you can pick them with tinyship-setup. A recipe never picks them for you.
Install and run
Recipes ship with the other TinyShip Agent Skills and work in Cursor, Claude Code, Codex, and other agents that support skills:
npx skills add TinyshipCN/tinyship-skillsThen just ask your agent, for example:
- "Use a recipe to build a directory site"
- "Turn this into an AI image app"
- "Build an AI video generator"
- "Build a waitlist page"
- "Build a digital product store"
- "Make a GPT wrapper with TinyShip"
This starts the tinyship-recipe wizard: detect the project → pick a recipe → run setup if needed → ask about scope, brand, and copy → apply → verify.
Available recipes
| ID | Product | What it does |
|---|---|---|
ai-image | AI image app | Reuses /image-generate, credits, and paid plans |
ai-video | AI video app | Reuses /video-generate, credits, and paid plans; a failed video returns its credits |
ai-chat | AI chat / GPT wrapper | Reuses /ai, credits, and paid plans |
membership-content | Paid membership site | Reuses the blog, pricing, and premium pages |
waitlist | Pre-launch waitlist | Sign-up first; hides payments and demos |
directory | Directory site | New tables plus submit/review flow; paid listings with credits and ad slots |
digital-product | Digital product store | Multi-product catalog; real-money one_time unlock + download; no license in v1 |
Complex recipes (like directory and digital-product) add tables, pages, and acceptance scripts. Simple ones mostly rework navigation and copy around features TinyShip already has.
Recipe intros
ai-image
AI image app. Users sign in, spend credits on /image-generate, and buy more via plans. Other demos are hidden; Generate is promoted in the nav. After apply, configure an image provider key with tinyship-ai.
ai-video
AI video app on /video-generate + credits + plans. Needs a starter recent enough to store video jobs in the ai_video_task table (libs/ai/video-task-service.ts must exist). That is what lets a failed generation return its credits. If your project is older, the recipe stops and asks you to update the starter first.
After applying it, run tinyship-ai to add a video provider key (FAL_API_KEY, QWEN_API_KEY, or VOLCENGINE_ACCESS_KEY_ID). See AI video generation for models and per-model credit costs.
The recipe deliberately ships a minimal product: one generate page, credits, and plans. Your agent will suggest optional extensions at the end (a "My videos" list, a task detail page, an admin video list, clearer failure copy); it only builds them if you ask.
ai-chat
AI chat / GPT wrapper. Reuses /ai with credits and plans. Promotes Chat in the nav and hides image/video demos. After apply, configure a chat provider key with tinyship-ai.
membership-content
Paid membership site. Public blog teasers, pricing plans, and a gated premium page. Primary CTA goes to /pricing; Blog and Pricing stay in the nav. Configure a payment provider with tinyship-payment.
waitlist
Pre-launch waitlist. Auth is the product: hide pricing and demos, collect accounts via Better Auth signup (no extra waitlist schema). Switch to another recipe when you open the product.
directory
Directory site (complex). Home becomes the listing; signed-in users submit, admins approve; credits pay for listings and featured slots, plus hand-entered ads. Ships new tables, a migration, acceptance scripts, and an admin Directory entry.
digital-product
Digital product store (complex). Multi-product catalog; real-money one_time checkout on the product page; delivery is a purchase entitlement plus file download — no license key in v1. Hides Pricing, Demos, and Blog from the nav. New tables plus payment fulfillment hooks (providers untouched). Acceptance uses fake orders only — never live payment providers.
Verify the result
After the recipe is applied, check the running app in every locale you ship:
- The homepage describes your product, not the TinyShip starter pitch
- The primary CTA goes to the recipe's target page (image generator, submit form, sign-up, product page, etc.)
- Hidden demo links are gone from the header and footer (including mobile); the route files stay in place
- Sign-in and sign-up titles use your product name
- For complex recipes: required pages return 200, and migrations and seeds match the playbook
The logo text may still say TinyShip until you run tinyship-brand. That is expected and not a recipe failure.
How the skills divide the work
| Need | Skill |
|---|---|
| Env, database, framework cleanup | tinyship-setup |
| App name, logo, theme | tinyship-brand |
| Sign-in providers (OAuth, email) | tinyship-auth |
| Payment providers | tinyship-payment |
| AI provider keys | tinyship-ai |
| Turn the starter into a product type | tinyship-recipe |
| Brand-new tables and pages | tinyship-feature |
| Deployment | tinyship-deploy / tinyship-cloudflare |
For where the product is heading, see the roadmap.