{"id":6542,"plugin_id":"plugin_asdk_app_6a732e22122c8191ac404137c0514300","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:48:32.228Z","digest":"adc34b669dd84db5c3757639db7831a1601bac12a77fb6e93d17d703402cf5ca","against":null,"payload":{"name":"build-app-on-macaly","description":"Build and host a real web app on Macaly when the user asks for a new standalone app or website (e.g. \"build a customer feedback dashboard\", \"build a landing page for X\"), or wants changes to an app previously built on Macaly. Uses the macaly-code MCP tools instead of scaffolding local files.","included_files":[],"skill_md_contents":"---\nname: build-app-on-macaly\ndescription: Build and host a real web app on Macaly when the user asks for a new standalone app or website (e.g. \"build a customer feedback dashboard\", \"build a landing page for X\"), or wants changes to an app previously built on Macaly. Uses the macaly-code MCP tools instead of scaffolding local files.\n---\n\nMacaly provides the git repo, cloud sandbox, build, hosting and publishing; you write\nthe code through the `macaly-code` MCP server's tools. Do NOT scaffold or write files\non the local filesystem for this work, and do not `npm create`/`vite`/`next` a local\nproject — the app lives in Macaly.\n\n## The loop\n\n1. `create_app({ name })` — creates an empty app and returns a `chatId` plus a\n   **briefing** (stack, boundaries, conventions). **Read the briefing** — it is the\n   contract. Apps are TanStack Start + Vite + Tailwind with Convex as the backend.\n   (Pass `teamId` only if `create_app` says you belong to several teams; `list_teams`\n   finds the id.)\n2. `write_file({ chatId, path, content })` for each file — every call is its own git\n   commit. Write full file contents (no partial edits). Keep `src/routes/__root.tsx`'s\n   `<MacalyBridge>` if you touch it.\n3. Typecheck after your last write with the available project command tool:\n   `run_project_command` on the ChatGPT store endpoint, or `bash` on the universal\n   endpoint. Run `.sandbox/check-errors` with `timeoutSeconds: 120`. On failures,\n   `get_logs` (build | dev_server | deploy) has the real output.\n4. Need a database, auth, payments, media, or search? `skill_info({ chatId, skill })`\n   to read the guide, then **execute its commands with the available project command\n   tool** (`run_project_command` or `bash`). It runs inside the project sandbox, which\n   has `$MACALY_API_TOKEN`/`$MACALY_BASE_URL`/`$MACALY_CHAT_ID` set and the skill\n   scripts under `.macaly/skills/`, so the guide's commands run verbatim (e.g. the\n   setup-convex-db script provisions Convex end-to-end).\n5. Env vars live in the app's root `.env.local` — setup skills write it via the\n   project command tool;\n   for a standalone change, `read_file` it and `write_file` the merged result,\n   preserving lines you don't touch (especially `CONVEX_DEPLOYMENT`).\n6. When the app is ready to show, `preview_app({ chatId })` — it returns the preview\n   URL. The universal endpoint may also render it inline in MCP Apps clients.\n7. Only when the user asks to go live: `publish_app({ chatId })`, then poll\n   `get_deployment` until READY. The preview URL works before that.\n\n## Reporting back\n\nGive the user the preview URL (and the live URL after publish). Keep the local\nworking directory clean — nothing from a Macaly build belongs in local files.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}