# TODO

## Ideas

* [x] triggers, vertical slots in nodes, handling events giving the possibility
      to trigger execution of subsequent nodes based on links
* [ ] handle Trigger activity to show highlighted trigger

# Separate development

* github.com/gohxs/flow
* github.com/gohxs/flowserver
* github.com/vue-hxs/flow-ui

# Flow types

* Graph
* Pipeline

## Graph

Graph will have one output and several inputs, a graph is commanded by the output node
like a function the node runs by fetching inputs and processing them.

* Several inputs
* One output
* Graph is started by the last node
* Process will follow from current fetching the input nodes
* Each input can only have one source
* Fetch result from any node

computational graphs can have several purposes but the primal goal was machine learning
and have a flow of tensors

## Pipeline

Pipeline will have a single input and output and its commanded by the first node
when a node is finish it will trigger the next nodes with data generated by the node

* One input
* One output
* Nodes trigger other to process
* One input can have several sources, a node can send to several outputs
* Nodes are dependend on input, process should start from the initial pipeline node

Pipelines can also have several purposes but started with the idea of creating
some kind of CI where we can graphically see nodes processing,
from build to staging

Cache test

# Minimal idea

UI to create multipurpose flow graphs,
upload to the server
pass inputs and do training
fetch model and use it with new inputs
distributed purpose to calculate several nodes across a network

implement common AI methods(funcs) reuse them

## Frontend

* [ ] Deal with svg relative mouse position
* [ ] do an event from one socket to another
      highlighting the ones compatible for data type
* [ ] Create something to add/remove links/nodes as in populating from the server
* [ ] Colaborative editing through possibly websocket, by sharing states
* [ ] const/var editor with multiple props
* [ ] add types to sockets (litle label aside)

## Backend

* [ ] create http server that serializes and inspect run graphs
      (step by step)
* [ ] Serve registry with information about inputs/outputs
* [ ] Protocol to build and run a graph from frontend
