Email/password auth, AI chat (OpenRouter via Butterbase), and webhook receiver — all on one app.
Password: 8+ chars, upper, lower, number, special character. A verification email is sent (you can still log in before verifying).
Profile from GET /auth/{app_id}/me using your access token.
Not logged in.
Use the 6-digit code from the signup email (expires in 24h).
Step 1 requests a 6-digit code by email. Step 2 sets the new password.
Calls POST …/fn/agent-chat with your end-user JWT. The function proxies to Butterbase’s OpenRouter-compatible /chat/completions using the platform key — you never ship API keys to the browser.
Serverless function webhook-inbound accepts POST, stores JSON in webhook_events. Send header x-webhook-secret (demo value below) or omit if you clear the env secret.
URL:
Demo secret: whsec_demo_willow_shared_secret
—
Table user_items uses user isolation — each user only sees their rows.
| Title | Done |
|---|---|
| Log in to load. | |
Original tasks / memory (anon-readable) — same as before.
—