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
Share this project:

Updates