AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Build AI workflows visually: connect nodes on a canvas, run them, and let them run on a schedule.
Translation pending
Developer toolsTypeScript · PLpgSQLGitHub @VishwathSOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.