<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SteamPixel</title>
    <description>The latest articles on DEV Community by SteamPixel (@steampixel).</description>
    <link>https://dev.to/steampixel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3325546%2F23c6a2c5-9b48-4189-9c16-4dc9b80ab316.png</url>
      <title>DEV Community: SteamPixel</title>
      <link>https://dev.to/steampixel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/steampixel"/>
    <language>en</language>
    <item>
      <title>I'm done. Flow editors are broken. And you all know it.</title>
      <dc:creator>SteamPixel</dc:creator>
      <pubDate>Mon, 18 May 2026 12:42:58 +0000</pubDate>
      <link>https://dev.to/steampixel/im-done-flow-editors-are-broken-and-you-all-know-it-n1e</link>
      <guid>https://dev.to/steampixel/im-done-flow-editors-are-broken-and-you-all-know-it-n1e</guid>
      <description>&lt;p&gt;I spent the last years trying to make flow editors work. For chatbots. For forms. For LLM orchestration. Every single time I end up in the same place: buried in nested menus, drowning in node configurations, writing inline code in a tool that promised me "no-code."&lt;/p&gt;

&lt;p&gt;I'm done making excuses for these tools. They are broken. Not the UI. Not the docs. The foundation.&lt;/p&gt;

&lt;p&gt;So you open Botpress. Or Voiceflow. Or n8n. And within five minutes you're staring at a canvas full of nodes, nested menus, inline code editors, and condition builders that feel like they need their own documentation. You wanted to build a chatbot. Now you're studying a tool.&lt;/p&gt;

&lt;p&gt;And it's not just chatbots. Complex form flows, onboarding wizards, LLM orchestration. Every single flow builder out there follows the same pattern: drag a node, click on it, get buried in configuration. Add a condition? Another menu. Need an API call? Another node, another config panel. Want to change something? Good luck finding where that logic actually lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not normal. And we should stop pretending it is.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The code editor test
&lt;/h2&gt;

&lt;p&gt;Let me ask you something. Have you ever clicked on a variable name in your code editor and suddenly 10 nested submenus popped open? With configuration options, conditions, and inline logic attached to that single variable?&lt;/p&gt;

&lt;p&gt;No? Of course not. That would be insane. No developer would accept that. You'd close the editor and never look back.&lt;/p&gt;

&lt;p&gt;So why do we accept exactly this in flow builders? Every node is a little universe of hidden complexity. Click on it, and you're three menus deep before you even understand what it does. That's not a powerful tool. That's a broken abstraction.&lt;/p&gt;

&lt;p&gt;If a flow editor requires a course before you can use it, it's not a tool. It's a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real issue is deeper than UI
&lt;/h2&gt;

&lt;p&gt;The frustrating thing is: most people blame the UI. "It just needs a better interface." "A cleaner design." "Fewer options."&lt;/p&gt;

&lt;p&gt;No. The UI is a symptom. The actual problem is the underlying architecture.&lt;/p&gt;

&lt;p&gt;Think about it. An edge between two nodes is already a condition. It says: if this, then that. That's temporal logic. That's a rule. It's right there, visible on the canvas.&lt;/p&gt;

&lt;p&gt;So why does every flow builder then bury another layer of conditions inside the nodes? You connect two nodes with an edge, and then you click on the node and configure more conditions in a nested menu. Conditions hidden inside a box. Invisible from the outside. Black boxes everywhere.&lt;/p&gt;

&lt;p&gt;And it gets worse. Most flow builders love super-nodes. Take a typical "Choice Node" or "Question Node." It contains the question, the answer options, the branching logic, sometimes even validation. All packed into one node. That's a conceptual breach. The answer options are not part of the graph. They are buried inside a single node, invisible to the structure, unreachable by edge logic.&lt;/p&gt;

&lt;p&gt;What if each answer option was its own node? Connected by edges that already carry the logic? Then your entire decision tree would be visible on the canvas. No hidden menus. No black boxes. The graph is the logic. This applies to every complex node type out there. The moment a node contains structure that should live in the graph, you've lost the point of having a graph in the first place.&lt;/p&gt;

&lt;p&gt;And there is another problem: Most flow builders are event-driven at their core. Something happens, a trigger fires, a sequence runs top to bottom, done. That model has no real concept of state. It doesn't know where you are. It doesn't adapt when things change. So every edge case, every branch, every "what if the user goes back" scenario has to be manually wired and configured inside the nodes. The architecture can't handle the logic on a structural level, so it dumps it on you, hidden behind click after click after click.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if the graph could think for itself?
&lt;/h2&gt;

&lt;p&gt;Imagine a different foundation. Instead of "event happens, sequence runs," the graph itself holds the state. Every node knows if it's alive or dead. Every connection between nodes has a clear semantic meaning: this path &lt;strong&gt;must&lt;/strong&gt; be taken, this path &lt;strong&gt;may&lt;/strong&gt; be taken, this path &lt;strong&gt;must not&lt;/strong&gt; be taken.&lt;/p&gt;

&lt;p&gt;Three edge types. Must. May. Not. That's it. And that's enough. These three types can express every logical gate visually on the canvas. AND, OR, NOT, XOR. No configuration panels. No inline code. Just edges you can see.&lt;/p&gt;

&lt;p&gt;When state changes, the graph re-sequences itself. You don't manually wire fallback paths. You don't write inline conditions. The structure &lt;em&gt;is&lt;/em&gt; the logic. Change a decision and entire branches die while others come alive. No custom code. No nested menus. The graph adapts because it was designed to.&lt;/p&gt;

&lt;p&gt;And before someone asks: no, re-sequencing doesn't mean the entire graph is traversed every time. At the start, only the entry node is active. As the user progresses, the active portion grows, but it stabilizes at a fraction of the total graph. When a user backtracks, the old branch dies and a new one activates. The traversal shifts, it doesn't accumulate. The more complex your graph, the more branches are dead at any given moment. Complexity makes it more efficient, not less.&lt;/p&gt;

&lt;p&gt;This concept is called &lt;strong&gt;Reactive Graph Sequencing&lt;/strong&gt;. And I built a flow editor based on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wanderer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://wanderer-flow.de" rel="noopener noreferrer"&gt;Wanderer&lt;/a&gt; is an open source flow editor built on RGS. No nested menus. No inline code. No configuration hell. The graph structure itself defines the logic.&lt;/p&gt;

&lt;p&gt;If you want to understand the technical foundation in detail, I wrote about it here: &lt;a href="https://wanderer-flow.de/blog/reactive-graph-sequencing-the-technology-behind-wanderer" rel="noopener noreferrer"&gt;Reactive Graph Sequencing: The Technology Behind Wanderer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to see demos? &lt;a href="https://wanderer-flow.de/flows" rel="noopener noreferrer"&gt;Check this out&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm not saying this is the only way. But I am saying that the current generation of flow builders is built on a broken foundation. And we should stop blaming ourselves for struggling with tools that were never designed to be intuitive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think? Is the architecture the real problem, or am I just bad at reading nested menus?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Title image: &lt;a href="https://pixabay.com/de/illustrations/ai-generiert-scrapyard-wagen-8241457/" rel="noopener noreferrer"&gt;https://pixabay.com/de/illustrations/ai-generiert-scrapyard-wagen-8241457/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nocode</category>
      <category>webdev</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>Your Chatbot Ignores 2 Out of 3 Requests. Here's a Structural Fix.</title>
      <dc:creator>SteamPixel</dc:creator>
      <pubDate>Wed, 13 May 2026 07:55:24 +0000</pubDate>
      <link>https://dev.to/steampixel/your-chatbot-ignores-2-out-of-3-requests-heres-a-structural-fix-1bdk</link>
      <guid>https://dev.to/steampixel/your-chatbot-ignores-2-out-of-3-requests-heres-a-structural-fix-1bdk</guid>
      <description>&lt;p&gt;You know the drill. You type something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to buy moisturizer, check the status of my last order, and I need your address."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The chatbot picks &lt;strong&gt;one&lt;/strong&gt; of those (usually the first) and the rest just vanish. You're stuck repeating yourself, clicking through menus again, or giving up entirely.&lt;/p&gt;

&lt;p&gt;This isn't a prompting problem. It's an &lt;strong&gt;architectural&lt;/strong&gt; one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why most chatbot builders fail at this
&lt;/h2&gt;

&lt;p&gt;Most builders (Dialogflow, Voiceflow, Botpress, you name it) route conversations through tree-like or linear flow structures. One input → one intent → one path. That model breaks the moment a user has more than one thing to say.&lt;/p&gt;

&lt;p&gt;Some builders try to work around this by looping back after each task, but that leads to fragile state management and spaghetti flows. The fundamental structure doesn't support it.&lt;/p&gt;

&lt;p&gt;I've written more about why conversations don't fit into trees &lt;a href="https://wanderer-flow.de/blog/why-conversations-dont-fit-into-trees" rel="noopener noreferrer"&gt;here&lt;/a&gt; and why they also don't belong in relational databases &lt;a href="https://wanderer-flow.de/blog/why-conversations-dont-belong-in-relational-databases" rel="noopener noreferrer"&gt;here&lt;/a&gt;, if you want the deeper reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: serialize intents before routing
&lt;/h2&gt;

&lt;p&gt;The approach I built into &lt;a href="https://wanderer-flow.de" rel="noopener noreferrer"&gt;Wanderer&lt;/a&gt; works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User sends a message&lt;/strong&gt; with multiple requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A GPT call extracts and splits&lt;/strong&gt; the intents into a structured list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Each intent gets queued&lt;/strong&gt; as a separate task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The graph executes them one by one&lt;/strong&gt;, each in its own context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Each task knows the full picture&lt;/strong&gt; — it can say &lt;em&gt;"Let me handle the first of your 3 requests"&lt;/em&gt; and &lt;em&gt;"All done — that was the last one"&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is possible because Wanderer uses a reactive graph architecture instead of rigid trees. I call it &lt;a href="https://wanderer-flow.de/blog/reactive-graph-sequencing-the-technology-behind-wanderer" rel="noopener noreferrer"&gt;Reactive Graph Sequencing&lt;/a&gt; — nodes react to state changes in the graph rather than following a fixed path. That means dynamically queuing 1, 3, or 7 tasks at runtime isn't a hack, it's how the system naturally works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before &amp;amp; after
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Without multi-intent serialization:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User: "I want to buy moisturizer, check the status of my last order, and I need your address."&lt;br&gt;
Bot: "Sure, I can help with the moisturizer! Here is a selection.&lt;br&gt;
"&lt;br&gt;
&lt;em&gt;(The other two requests? Gone.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;With serialization:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User: "I want to buy moisturizer, check the status of my last order, and I need your address."&lt;br&gt;
Bot: "Got it — 3 things! Let's start with the address..."&lt;br&gt;
&lt;em&gt;(Then moves on to order status, then moisturizer — automatically.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;I built a working example you can test right now — &lt;strong&gt;no signup, no account needed&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://wanderer-flow.de/flows/Automatic-Multi-Intent-Serialization-Online-Shop-example-fy4ngidrwftqwxhcd19yrd714vnkj6w3" rel="noopener noreferrer"&gt;&lt;strong&gt;Open the Multi-Intent Demo&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a chat embedded on the page. Try throwing multiple requests at it and see what happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;This isn't just a nice-to-have. If your chatbot handles support or e-commerce, users &lt;em&gt;constantly&lt;/em&gt; send multi-intent messages. Dropping those silently means more repeated messages, more frustration, more drop-offs, and ultimately more tickets landing on a human agent's desk.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building Wanderer as a new kind of chatbot builder based on reactive graphs. If the architecture angle interests you, I've written a whole series on the underlying concepts on the &lt;a href="https://wanderer-flow.de/blog" rel="noopener noreferrer"&gt;Wanderer blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>systemdesign</category>
      <category>ux</category>
    </item>
    <item>
      <title>Visual Logic Without Code - Can This Change the Way We Build Flow-Based Systems?</title>
      <dc:creator>SteamPixel</dc:creator>
      <pubDate>Mon, 07 Jul 2025 12:08:44 +0000</pubDate>
      <link>https://dev.to/steampixel/visual-logic-without-code-can-this-change-the-way-we-build-flow-based-systems-5f9e</link>
      <guid>https://dev.to/steampixel/visual-logic-without-code-can-this-change-the-way-we-build-flow-based-systems-5f9e</guid>
      <description>&lt;p&gt;What if logic wasn’t hidden behind blocks – but was the blocks?&lt;/p&gt;

&lt;p&gt;With Wanderer, I’ve built a free visual flow builder where the logic is the structure.&lt;/p&gt;

&lt;p&gt;No function bodies. No hidden scripts. Just nodes and edges - and a graph that executes itself in real time, right in your browser.&lt;/p&gt;

&lt;p&gt;You can build things like AND, OR, XOR, and NOT gates - all 100% no-code.&lt;/p&gt;

&lt;p&gt;🧠 The twist?&lt;br&gt;
Edges are the logic. They define behavior, and the whole system reacts live.&lt;/p&gt;

&lt;p&gt;🎯 Try the interactive logic gate demos&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://wanderer-flow.de/builder?flowUrl=https://hub.wanderer-flow.de/flows/u4ne9rzq88dgp04non88ksb5q399n4sl" rel="noopener noreferrer"&gt;&lt;strong&gt;AND Gate&lt;/strong&gt; - Try live demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wanderer-flow.de/builder?flowUrl=https://hub.wanderer-flow.de/flows/keevhyvfot4wbyzo60wd1vjamwdh2zag" rel="noopener noreferrer"&gt;&lt;strong&gt;OR Gate&lt;/strong&gt; - Try live demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wanderer-flow.de/builder?flowUrl=https://hub.wanderer-flow.de/flows/mbo9idv868f1a8gz6egm1y9d42jedbc4" rel="noopener noreferrer"&gt;&lt;strong&gt;NOT Gate&lt;/strong&gt; - Try live demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wanderer-flow.de/builder?flowUrl=https://hub.wanderer-flow.de/flows/20l4vo9at74nsveaxlzgauppccjejb2x" rel="noopener noreferrer"&gt;&lt;strong&gt;XOR Gate&lt;/strong&gt; - Try live demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wanderer-flow.de/builder?flowUrl=https://hub.wanderer-flow.de/flows/yoszf2oaib40th368srvrpcb7o0zm1ep" rel="noopener noreferrer"&gt;&lt;strong&gt;NAND Gate&lt;/strong&gt; - Try live demo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✏️ Or read more: &lt;a href="https://wanderer-flow.de/blog/visual-logic-without-code-can-this-change-the-way-we-build-flow-based-systems" rel="noopener noreferrer"&gt;https://wanderer-flow.de/blog/visual-logic-without-code-can-this-change-the-way-we-build-flow-based-systems&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s for builders, educators, and anyone curious about what visual programming can become when it’s truly visual.&lt;/p&gt;

&lt;p&gt;Let me know what you think – and what you'd build with it.&lt;/p&gt;

&lt;p&gt;— Chris&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built a reactive no-code flow engine that runs entirely in your browser, no login, no backend</title>
      <dc:creator>SteamPixel</dc:creator>
      <pubDate>Sat, 05 Jul 2025 11:20:25 +0000</pubDate>
      <link>https://dev.to/steampixel/i-built-a-reactive-no-code-flow-engine-that-runs-entirely-in-your-browser-no-login-no-backend-53ie</link>
      <guid>https://dev.to/steampixel/i-built-a-reactive-no-code-flow-engine-that-runs-entirely-in-your-browser-no-login-no-backend-53ie</guid>
      <description>&lt;p&gt;Hey Dev.to 👋&lt;/p&gt;

&lt;p&gt;I’ve been working on a side project that started from a simple frustration:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I just wanted to build a chatbot&lt;br&gt;&lt;br&gt;
but every tool forced me to write complex code, bury logic inside nodes, or sign up for yet another cloud service.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built my own.&lt;br&gt;&lt;br&gt;
Introducing &lt;strong&gt;&lt;a href="https://wanderer-flow.de" rel="noopener noreferrer"&gt;Wanderer Flow&lt;/a&gt;&lt;/strong&gt; – a &lt;strong&gt;reactive&lt;/strong&gt;, &lt;strong&gt;visual&lt;/strong&gt;, and &lt;strong&gt;open&lt;/strong&gt; flow engine that runs 100% in the browser.&lt;br&gt;
No backend. No login. Just open a tab and start building.&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes it different?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow-based&lt;/strong&gt;: You build logic by connecting nodes and edges, not writing scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reactive&lt;/strong&gt;: The flow is constantly traversed, like a living system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No server&lt;/strong&gt;: It’s fully client-side. Nothing gets uploaded. You own your data and logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork &amp;amp; share&lt;/strong&gt;: Every flow can be exported as JSON or shared via URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT support&lt;/strong&gt;: You can add GPT nodes, define your own prompts, and react to responses in the graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant preview&lt;/strong&gt;: The flow runs while you’re building. You see your changes live.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Example use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chatbots that adapt to changing context (like weather or inputs)&lt;/li&gt;
&lt;li&gt;Interactive decision trees&lt;/li&gt;
&lt;li&gt;Lightweight, offline-ready AI agents&lt;/li&gt;
&lt;li&gt;Guided flows for websites or tools — without backend dependencies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Nuxt3 / Vue / Tailwind/ Vanilla JS / TypeScript&lt;/li&gt;
&lt;li&gt;Open source (soon on Codeberg)&lt;/li&gt;
&lt;li&gt;Designed to run on the edge, Raspberry Pi, or inside any CMS&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try it now
&lt;/h2&gt;

&lt;p&gt;Go to: &lt;a href="https://wanderer-flow.de" rel="noopener noreferrer"&gt;&lt;strong&gt;wanderer-flow.de&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
No signup required. Try the builder or fork one of the included examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  I’d love your feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What’s clear or confusing?&lt;/li&gt;
&lt;li&gt;What would make it more useful for you?&lt;/li&gt;
&lt;li&gt;Would you use this for anything?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;&lt;br&gt;
Chris&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
