Pinata Chef is a TypeScript + Next.js Pinata agent template for recipe storage, recipe URL ingestion, cooking notes, food-event timelines, and a hosted read-only recipe explorer.
It includes:
manifest.jsonwith Pinata template metadata and a public/approute on port3000- PM2 runtime via
ecosystem.config.cjs - TypeScript Next.js App Router UI mounted at
/app - SQLite persistence in
workspace/data/recipes.db - API routes for recipe CRUD, URL ingestion, and timestamped food events
- Workspace identity docs for agent behavior and chef personalities
workspace/OPERATIONS.mdwith API and SQLite notes for recipes and food eventsworkspace/TASK_IDEAS.mdwith scheduled task ideas for OpenClaw or cron-style jobs
npm install
npm run build
npm startOpen http://localhost:3000/app.
For development:
npm run devGET /app/api/recipes?q=termPOST /app/api/recipesGET /app/api/recipes/:idPATCH /app/api/recipes/:idDELETE /app/api/recipes/:idPOST /app/api/ingestGET /app/api/events?limit=25POST /app/api/eventsGET /app/api/openclaw/healthGET /app/api/openclaw/deployPOST /app/api/openclaw/deployPOST /app/api/openclaw/responsesPOST /app/api/openclaw/hooks/:name
This template can relay selected OpenClaw HTTP endpoints through the public app route on port 3000. The relay targets http://127.0.0.1:18789 by default, or OPENCLAW_BASE_URL if set.
The feature is disabled unless HOOK_API_KEY is present in the runtime environment. Do not add HOOK_API_KEY to manifest.json; document it for operators and set it directly in the environment.
When OPENCLAW_GATEWAY_TOKEN is present, the proxy uses it automatically for /v1/responses upstream auth. Hook relays use HOOK_API_KEY as the upstream x-openclaw-token.
Proxy auth:
Authorization: Bearer <HOOK_API_KEY>x-hook-api-key: <HOOK_API_KEY>
Supported relays:
GET /app/api/openclaw/healthGET /app/api/openclaw/deployPOST /app/api/openclaw/deployPOST /app/api/openclaw/responses->POST /v1/responsesPOST /app/api/openclaw/hooks/:name->POST /hooks/:name
Constraints:
- JSON requests only
1 MiBmax body size- Single hook segment only, for example
wake,agent, or a mapped hook name
The app can also trigger a local rebuild and PM2 reload through an authenticated deploy hook.
POST /app/api/openclaw/deploystartsnpm run buildand thennpm run pm2:reloadin the backgroundGET /app/api/openclaw/deployreturns the latest deploy status
Deploy status is written to:
workspace/runtime/deploy-status.jsonworkspace/runtime/deploy.log
Use x-hook-api-key for hosted requests. Some Pinata edge paths may not preserve Authorization: Bearer ... reliably.
Pinata path routes strip the public prefix before traffic reaches the container, while this app also sets basePath: "/app" for local and hosted consistency. Keep the server bound to 0.0.0.0 and port 3000 unless you update manifest.json.
Pinata-created instance repos may start with a restrictive generated .gitignore that ignores most paths by default. If an instance repo appears to contain only workspace/state files, widen .gitignore so source and config paths are explicitly unignored and committed:
app/lib/public/scripts/- root config files such as
package.json,next.config.mjs,server.js,tsconfig.json,README.md
The platform accepts these files once they are tracked. A git push alone still may not activate new code; instances can still require next build and PM2 reload unless another deploy trigger runs them.
LLM provider keys are handled by Pinata agent onboarding. The current template does not require declaring an OpenAI secret in manifest.json.
The hosted web route is intentionally read-only. Chat, chef personality selection, guided recipe ingestion, and food-event creation should happen in the Pinata chat UI at the agent root. The agent can still call the app APIs to save recipes, list recipes, and append timestamped notes or suggestions.
You are Pinata Chef. First, inspect workspace/BOOTSTRAP.md, workspace/IDENTITY.md, workspace/SOUL.md, workspace/CHEF_PERSONALITIES.md, workspace/OPERATIONS.md, and workspace/TASK_IDEAS.md. Then run a short onboarding to learn my household, dietary requirements, favorite foods, normal effort level, and default chef personality. Use this chat UI for questions and ingestion. Use the hosted /app route as a read-only recipe explorer.