A modern drag-and-drop visual pipeline builder built with React, React Flow, Zustand, and FastAPI. Users can create workflows by connecting different node types on an interactive canvas and analyze the resulting pipeline through a backend API that validates whether the graph forms a Directed Acyclic Graph (DAG).
- React
- React Flow
- Zustand
- CSS
- Python
- FastAPI
- Uvicorn
- Frontend: Vercel
- Backend: Render
https://vector-shift-mu.vercel.app
https://vectorshift-backend-bay1.onrender.com
https://vectorshift-backend-bay1.onrender.com/docs
VectorShift/
├── frontend/
│ ├── public/
│ └── src/
│ ├── nodes/
│ │ ├── BaseNode.js
│ │ ├── inputNode.js
│ │ ├── outputNode.js
│ │ ├── llmNode.js
│ │ ├── textNode.js
│ │ ├── apiNode.js
│ │ ├── conditionNode.js
│ │ ├── noteNode.js
│ │ ├── transformNode.js
│ │ └── databaseNode.js
│ ├── App.js
│ ├── ui.js
│ ├── toolbar.js
│ ├── submit.js
│ ├── store.js
│ └── index.css
│
├── backend/
│ ├── main.py
│ └── requirements.txt
│
├── SnapShots/
│ ├── Home.png
│ ├── Adding Tools.png
│ └── Result.png
│
└── README.md
- Node.js 16+
- Python 3.8+
- npm
git clone <your-repository-url>
cd VectorShiftcd backend
pip install -r requirements.txt
uvicorn main:app --reloadBackend runs at
http://127.0.0.1:8000
Swagger Documentation
http://127.0.0.1:8000/docs
Open another terminal
cd frontend
npm install
npm startFrontend runs at
http://localhost:3000
Ensure both frontend and backend are running before submitting a pipeline.
Implemented a reusable BaseNode component that powers all node types.
Each node accepts configurable properties such as:
- title
- icon
- header color
- input handles
- output handles
Using this abstraction, the following custom nodes were created:
- Input
- Output
- LLM
- Text
- API Call
- Condition
- Note
- Transform
- Database
This significantly reduces duplicate code and makes adding new node types straightforward.
Built using React Flow, allowing users to:
- Drag nodes onto the canvas
- Connect nodes visually
- Move nodes freely
- Delete nodes
- Zoom and pan
- View workflow using the MiniMap
Designed a responsive dark-themed interface featuring:
- Gradient node headers
- Color-coded node palette
- Animated edges
- Custom handles
- Floating toolbar
- Styled submit button
- Interactive minimap
The Text node supports advanced behavior.
The node automatically expands while typing.
Typing
{{variableName}}
automatically creates new input handles for each unique variable detected.
The frontend sends the complete pipeline to the FastAPI backend.
POST /pipelines/parsePayload
{
"nodes": [],
"edges": []
}The backend returns
{
"num_nodes": 4,
"num_edges": 3,
"is_dag": true
}The response is displayed on the frontend after pipeline analysis.
The backend validates whether the pipeline forms a Directed Acyclic Graph (DAG) using Kahn's Algorithm.
It computes:
- Total Nodes
- Total Edges
- DAG Validation
- Drag nodes from the toolbar.
- Drop them onto the canvas.
- Connect nodes using edges.
- Use the Text node with:
{{variable}}
to generate dynamic input handles.
-
Click Submit Pipeline.
-
View:
- Number of Nodes
- Number of Edges
- DAG Status
- Save and Load Pipelines
- Undo / Redo Support
- Pipeline Export & Import
- Node Search
- Real-time Collaboration
- Workflow Templates
- Pipeline Execution Engine
Shashank Shekhar
GitHub: https://github.com/ShashankShekhar31
LinkedIn: https://www.linkedin.com/in/shashank-shekhar-61633a273
This project is licensed under the MIT License. See the LICENSE file for details.


