Start here
How your AI starts a LazyFrog project: a template (Next.js, Python FastAPI, static, blank) or any other stack, and the first steps to a working preview.
project_readlistto see the user's projects, orproject create(name, template) to start one. Templates are starting stacks, not apps:nextjs-app(Next.js 16, React 19, TypeScript, Tailwind CSS 4, PostgreSQL),python-fastapi(FastAPI, uvicorn, psycopg),static-site(HTML and CSS) andblank(a database and nothing else). Another stack (SvelteKit, Astro, Remix, Django, Rails, Laravel, Phoenix, Go, Rust, .NET, Spring…): start fromblank, pin the toolchain in.tool-versions(mise installs any language:go 1.27,ruby 3.4,java temurin-21…; PHP 8.5 with Composer is already installed; Erlang compiles on first use, several minutes on a paid plan, and another PHP version longer: runmise installwithexecbackground: trueand follow it withjob), use the framework's own generator and commands, and pointservices.jsonat them (dev,build,start, the port from$PORT, amigratecommand if the framework has one), and rewriteDockerfileandcompose.ymlfor the stack: never just delete them, they are how the code runs outside LazyFrog (preflight warns without a Dockerfile). Existing code:project importfrom its repository; a prototype made in the chat (a Claude artifact, a ChatGPT preview or Site): see "Make it real: from a chat prototype to a project".- Read
README-for-AI.mdin the project (fs_read, pathworkspace/README-for-AI.md) for the template's specifics. - Build with
fs_write/fs_edit, run things withexec, check withhttp_getandpreview_screenshot, and readlogs_tailwhen something fails. - Whenever you install or set up an app the owner will use (CMS, shop, dashboard, admin tool),
call
projectaboutwith where to sign in or manage it (the admin or login address), what it is and its version, where its data lives, how to update it and what the owner must do next; credentials go insecrets, never here (write "Admin password: stored as secret WP_ADMIN_PASSWORD, change it on first login"); keep it current when anything changes. The owner sees it at the top of the project's page, andproject_readgetshows it to the next session. Put the site's conventions in its facts too: the currency prices are in, the languages, the time zone, who the visitors are, so the next session keeps them.
Every tool takes project (slug or id). The workspace wakes automatically (about a second) when a
tool needs it and sleeps after 15 idle minutes; files, databases and logs are kept.
On Free there is a preview and no live site. Build it, check it with preview_screenshot,
and show the user the preview's own address (project_read get: https://p-….lazyfrog.app).
Anyone with that link can open it while the month's preview hours last (40 on Free; past them it
still wakes for your tool calls, not for visitors); it sleeps after 15 quiet minutes, search
engines don't list it, and it carries the small "Built with LazyFrog" badge. Going live (a
publish, the site at https://<slug>.lazyfrog.app or the user's own domain) needs a paid plan:
when the user asks to publish, or wants an address to give out, say so plainly once, in their
words ("Going live needs a paid plan. Your preview stays free: share its address while it's
awake. Upgrade to put it at <slug>.lazyfrog.app or your own domain.") and give the plans page,
https://app.lazyfrog.dev/upgrade (the upgrade_url of the refusal). Don't keep raising it, and
never present the preview as the finished, public site. account get says the plan; a
publish on Free is refused with plan_limit and limit: "live_sites". A Free project nobody
works on for 14 days (their own actions: your work for them, the portal, signing in; visits to
the preview don't count) is archived after two emails, and can be brought back.
For your AI: this page as Markdown · llms.txt