Inspiration
Every workflow tool today is "set it and pray" — you edit a live automation, and if something breaks, there's no undo. In software engineering we solved this decades ago with Git: branch, diff, review, merge. We asked — why can't automations have the same guarantees? And more importantly: when you do roll back a workflow, should the money already charged to a customer magically disappear? We built a tool that's honest about what version control can and can't undo.
What it does
Visual Automation Builder is a drag-and-drop canvas where teams design business workflows (webhooks → conditions → Stripe charges → Slack notifications) — with Git-style version control baked in. You can branch a
Inspiration
Every workflow tool today is "set it and pray" — you edit a live automation, and if something breaks, there's no undo. In software engineering we solved this decades ago with Git: branch, diff, review, merge. We asked — why can't automations have the same guarantees? And more importantly: when you do roll back a workflow, should the money already charged to a customer magically disappear? We built a tool that's honest about what version control can and can't undo.
What it does
Visual Automation Builder is a drag-and-drop canvas where teams design business workflows (webhooks → conditions → Stripe charges → Slack notifications) — with Git-style version control baked in. You can branch a live automation to experiment, diff two versions down to the field level ("amount: $100 → $90"), and rollback a definition in one click. The kicker: an append-only execution log proves that real-world consequences (charges, messages sent) are immutable — the database itself refuses to erase them. Definition rollback ≠ consequence rollback.
How we built it
- Frontend: Next.js 16 (App Router) + React 19 + React Flow (xyflow v12) for the visual canvas, Zustand for state, shadcn/ui + Tailwind v4 for the interface
- Backend: Next.js Route Handlers as the versioning API + graph interpreter (BFS walk), real Stripe executor for live charges
- Database: Aurora PostgreSQL Serverless v2 — 7 tables including a JSONB snapshot-per-commit model for instant version reads, plus a DB-enforced immutable execution log (REVOKE UPDATE/DELETE + triggers on app_role)
- Deployment: Vercel (production at advanced-paint.vercel.app), AWS Aurora (us-east-1)
Challenges we ran into
- Making immutability provable, not just promised. We wanted the database to reject tampering at the role level — getting REVOKE + row triggers + statement triggers to cooperate while still letting the app INSERT new logs took multiple iterations.
- Field-level diffing on a graph. Diffing flat text is solved; diffing a directed graph where nodes have typed params required a custom structural diff engine that anchors on stable node IDs.
- Cross-branch rollback safety. Preventing a rollback on branch A from corrupting branch B's history introduced edge cases around commit ancestry that broke twice before we nailed the guard.
Accomplishments that we're proud of
- A real Stripe charge fires on "Run" and lands in an append-only log that the database literally won't let you delete — you can try UPDATE exec_log live and watch it throw.
- Field-level diff that highlights amount: 100 → 90 in a visual side-by-side, not just "node changed."
- The entire version-control surface (branch, commit, diff, rollback) works on an automation graph — something traditionally reserved for code.
What we learned
- Aurora Serverless v2 with JSONB + relational in the same schema is a sweet spot for graph-versioning workloads — DynamoDB's lack of joins would have made diffs brutal, and DSQL doesn't support JSONB.
- DB-level enforcement (REVOKE + triggers) is a far stronger guarantee than application-level checks — and judges who build databases for a living notice the difference.
- Snapshot-per-commit ("photos") makes reads instant and diff simple at the cost of ~5 KB per commit — a trade-off that's trivial at hackathon scale and partitionable at production scale.
What's next for Visual Automation Builder
- Real merge conflicts — detect when two branches modify the same node params and surface a visual 3-way merge
- Live collaboration — CRDT-backed multi-cursor editing on the canvas (Yjs + React Flow)
- Consequence engine on Lambda — move irreversible actions behind a scoped IAM role so draft branches physically cannot reach production credentials
- Marketplace integrations — expand beyond Stripe/Slack to a plugin system where each action type declares its own executor and param schema
- Audit dashboard — visualize the immutable log as a timeline, with replay and forensic drill-down for compliance teamslive automation to experiment, diff two versions down to the field level ("amount: $100 → $90"), and rollback a definition in one click. The kicker: an append-only execution log proves that real-world consequences (charges, messages sent) are immutable — the database itself refuses to erase them. Definition rollback ≠ consequence rollback.
How we built it
Built With
- aurora-postgresql-serverless-v2
- aws-rds
- next.js
- react-19
- react-flow-(xyflow)
- shadcn/ui
- stripe
- tailwind-css
- typescript
- vercel
- zustand
Log in or sign up for Devpost to join the conversation.