# Building a GUI configurable workflow

**URL:** <https://community.temporal.io/t/building-a-gui-configurable-workflow/348>\
**Category:** Community Support\
**Tags:** use-case-validation\
**Created:** [August 3, 2020, 5:29pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348 "2020-08-03T17:29:16Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![f0rr0](https://avatars.discourse-cdn.com/v4/letter/f/f14d63/32.png) [@f0rr0](https://community.temporal.io/u/f0rr0)\
**Post date:** [August 3, 2020, 5:29pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/1 "2020-08-03T17:29:16Z")

</div>

I am experimenting with Temporal to build a GUI where an end-user can build a workflow through a GUI via selecting from an assortment of pre-defined activities (query a restful API, read from a db etc.)

The key challenges I am dealing with are:

1. Ability to pass any custom parameters and triggers (timer, webhook etc) when initializing a workflow.
2. Pass these parameters and outputs of preceding activities (in the current workflow) as parameters to subsequent activity.
3. Query the inputs and outputs of each activity in the workflow.
4. Validate the shapes of inputs and outputs for each activity based on what is specified in the GUI.
5. Visualise the execution of a workflow (branching/fanout/errors)

I am new to Golang and Temporal and am picking up things as I go along.

What be the core concepts I should be looking at to support these use cases?

---

<div class="post-metadata">

**Author:** ![maxim](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/maxim/32/8_2.png) [@maxim](https://community.temporal.io/u/maxim)\
**Post date:** [August 3, 2020, 5:37pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/2 "2020-08-03T17:37:31Z")

</div>

See if this Go [DSL workflow sample](https://github.com/temporalio/go-samples/blob/master/dsl/workflow.go) answers your questions.

---

<div class="post-metadata">

**Author:** ![f0rr0](https://avatars.discourse-cdn.com/v4/letter/f/f14d63/32.png) [@f0rr0](https://community.temporal.io/u/f0rr0)\
**Post date:** [August 3, 2020, 7:16pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/3 "2020-08-03T19:16:15Z")

</div>

@maxim thank you for your prompt reply. As I am going through this sample, and running it against the latest temporal release, I have another maybe stupid question:

As part of my use case I need to persist the `bindings` object in the sample at the end of every activity invocation and ultimately at the end of the workflow. Basically what this would mean in a real world example is that the initial input to the workflow (can be some json) and the result of each activity invocation is being persisted. Can this be done within Temporal itself or would an external persistence layer make sense here?

---

<div class="post-metadata">

**Author:** ![maxim](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/maxim/32/8_2.png) [@maxim](https://community.temporal.io/u/maxim)\
**Post date:** [August 3, 2020, 7:19pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/4 "2020-08-03T19:19:29Z")

</div>

All the data in the workflow is already persisted. So no need to persist it somewhere else.

---

<div class="post-metadata">

**Author:** ![f0rr0](https://avatars.discourse-cdn.com/v4/letter/f/f14d63/32.png) [@f0rr0](https://community.temporal.io/u/f0rr0)\
**Post date:** [August 3, 2020, 7:24pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/5 "2020-08-03T19:24:04Z")

</div>

Nice! What would be the recommended way to query this data? For example, I would want to query the state of `bindings` object at the end of every activity invocation. Perhaps I can return it from every activity invocation and also the workflow to make sure it gets recorded in the history? Am I understanding this correctly?

---

<div class="post-metadata">

**Author:** ![maxim](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/maxim/32/8_2.png) [@maxim](https://community.temporal.io/u/maxim)\
**Post date:** [August 3, 2020, 7:28pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/6 "2020-08-03T19:28:50Z")

</div>

Use [query workflow execution](https://docs.temporal.io/docs/go-queries) feature.

---

<div class="post-metadata">

**Author:** ![maxim](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/maxim/32/8_2.png) [@maxim](https://community.temporal.io/u/maxim)\
**Post date:** [August 3, 2020, 7:30pm UTC](https://community.temporal.io/t/building-a-gui-configurable-workflow/348/7 "2020-08-03T19:30:38Z")

</div>

There is no need to pass the bindings object through activities. You can just store it in a workflow variable.
