尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
WfloAI is an AI-first visual workflow builder built with Next.js 16, TypeScript, Tailwind CSS, shadcn-style UI primitives, Supabase, React Flow, and Anthropic.檢視完整 README ↗WfloAI is an AI-first visual workflow builder built with Next.js 16, TypeScript, Tailwind CSS, shadcn-style UI primitives, Supabase, React Flow, and Anthropic.
The app currently supports:
/dashboardCreate .env.local from .env.local.example and fill in:
cp .env.local.example .env.local
Required values:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYANTHROPIC_API_KEY.env.local is ignored by git. Keep real secrets there only.
Production requires more than local development does, and the application
refuses to start if any of these is missing when NODE_ENV=production
(instrumentation.ts → lib/config/env.ts). The check exists because a
missing signing key otherwise fails silently.
| Variable | Why it is required |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Every Supabase client |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Every Supabase client |
SUPABASE_SERVICE_ROLE_KEY | The Inngest execution path and account deletion. Server-only |
ANTHROPIC_API_KEY | AI and Router nodes |
TAVILY_API_KEY | Lookup nodes |
INTEGRATION_TOKEN_KEY | Decrypts stored Gmail tokens and credentials. Back it up — see docs/KEY-RECOVERY.md |
GOOGLE_CLIENT_ID | The Gmail OAuth client (not the Supabase login provider) |
GOOGLE_CLIENT_SECRET | The Gmail OAuth client |
INNGEST_EVENT_KEY | Publishing workflow/schedule.due. Unset means schedules never fire — a loud failure |
INNGEST_SIGNING_KEY | Authenticating /api/inngest. Unset means that endpoint accepts unsigned requests into the service-role execution path — a silent failure |
Optional, with safe defaults:
| Variable | Default | Notes |
|---|---|---|
GMAIL_READ_ACTIONS_ENABLED | off | Must be exactly "true" to enable. Gates every Gmail action except Send, Create Draft included |
RETENTION_CLEANUP_ENABLED | off | Must be exactly "true" for the retention sweep to delete anything. Set it only where pruning is intended |
| Error reporter DSN | none | Registered through setErrorTransport(); until then errors go to stderr as structured lines |
INNGEST_DEV must be absent in production. It puts the Inngest SDK in dev
mode, which skips signature verification, so the startup check refuses to boot
when it is set to anything other than empty, 0 or false.
Deployment, the canonical origin and the operations runbook are in docs/DEPLOYMENT.md and docs/RUNBOOK.md.
The two Inngest keys are not interchangeable and confusing them is the
reason the startup check names them separately. .env.local.example documents
the distinction in full.
Never put a secret in a NEXT_PUBLIC_ variable. The only client-visible
values are the Supabase URL and anon key.
npm install
On Windows PowerShell with nvm-windows, prefer:
npm.cmd install
http://localhost:3000/auth/callback as an authorized redirect URLsupabase/migrations/ in filename order. They are named
YYYYMMDDNNNN_description.sql, and order matters.supabase db push targets a remote project by default.npm run dev
On Windows PowerShell with nvm-windows, prefer:
npm.cmd run dev
http://localhost:3000
POST /api/workflows/[id]/execute, which traverses the whole graph
server-side via lib/execution/serverExecutor.ts and streams SSE to the client/api/execute is the older single-step endpoint used by the browser-side executor; it streams
text/plainBoth AI paths use:
claude-haiku-4-5-20251001max_tokens: 4096npm run dev # Next dev server (Turbopack)
npm run build # production build
npm run start # serve the production build
npm run lint # eslint, flat config
npm run typecheck # tsc --noEmit
npm test # vitest run
CI runs lint, typecheck, test and build on every pull request
(.github/workflows/ci.yml). npm audit runs alongside them and
reports without blocking.
If node, npm, or npm.cmd are not recognized inside VS Code but where.exe node works in another shell, restart all VS Code windows and open a fresh terminal so it picks up the updated PATH from nvm-windows.
app/(auth)/login/page.tsx: login pageapp/auth/callback/route.ts: OAuth callback handlerapp/(marketing): public homepage, privacy, terms, helpapp/(dashboard)/dashboard/page.tsx: dashboardapp/(dashboard)/workflows/[id]/page.tsx: workflow editor pageapp/api/workflows/[id]/route.ts: workflow graph save endpointapp/api/execute/route.ts: authenticated Anthropic streaming endpointcomponents/canvas: React Flow canvas, toolbar, execution context, and log UIcomponents/canvas/nodes: the nine step componentscomponents/canvas/edges: custom edge rendering and deletionhooks/use-user.ts: current session/user hookhooks/useExecution.ts: workflow execution state hooklib/supabase.ts: browser Supabase clientlib/supabase/server.ts: server and middleware Supabase clientslib/execution: executors, validation, and runtime limitslib/integrations, lib/gmail, lib/http: integration, quota and egress safetylib/retention: retention periods and the sweep predicateslib/config/env.ts: the required-variable startup checklib/types.ts: shared workflow and node data typesproxy.ts: route protection and the invite gate (Next 16 renamed the middleware convention)docs/KEY-RECOVERY.md: what INTEGRATION_TOKEN_KEY protects and how to restore itWorkflows are stored in Supabase with a graph JSONB column shaped like:
{
nodes: [],
edges: []
}
Each workflow belongs to a single authenticated user, enforced with row-level security.
Before committing:
git status --short
git diff --cached
Make sure .env.local is never staged. Only .env.local.example should be committed.