<?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: Wilson Chan</title>
    <description>The latest articles on DEV Community by Wilson Chan (@wzsoft).</description>
    <link>https://dev.to/wzsoft</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4072150%2Fbbc30123-c8db-4bbc-aceb-73a57b88c99d.png</url>
      <title>DEV Community: Wilson Chan</title>
      <link>https://dev.to/wzsoft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wzsoft"/>
    <language>en</language>
    <item>
      <title>I Built a Turing-Complete Visual Low-Code Platform — And Taught an AI to Use It</title>
      <dc:creator>Wilson Chan</dc:creator>
      <pubDate>Tue, 11 Aug 2026 08:23:12 +0000</pubDate>
      <link>https://dev.to/wzsoft/i-built-a-turing-complete-visual-low-code-platform-and-taught-an-ai-to-use-it-4p2n</link>
      <guid>https://dev.to/wzsoft/i-built-a-turing-complete-visual-low-code-platform-and-taught-an-ai-to-use-it-4p2n</guid>
      <description>&lt;p&gt;&lt;strong&gt;Three years. One person. A low-code platform where the visual editor is genuinely Turing-complete, runs server-side, and — here's the part that matters most — an AI model has already learned how to operate it to build complete enterprise systems from a single sentence.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Turing-complete matters
&lt;/h2&gt;

&lt;p&gt;Most low-code platforms are &lt;strong&gt;configurators&lt;/strong&gt;, not programming environments.&lt;/p&gt;

&lt;p&gt;You can drag a form together. Define a table. Set up a simple approval chain. But the moment the business logic exceeds what the product manager anticipated — "when this field changes, recalculate these three values, check the department budget, and if it exceeds the limit, route approval to the manager's manager" — you're done. The platform either doesn't support it, or you're writing JavaScript in a cramped textarea inside a web form, which defeats the entire point.&lt;/p&gt;

&lt;p&gt;This is not a missing feature. It's a &lt;strong&gt;fundamental ceiling&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If a platform's logic layer is a fixed set of pre-built actions, there will always be requirements it cannot express. The only way to remove that ceiling is to make the logic layer Turing-complete: variables, conditionals, unbounded loops, subroutine composition, and I/O. With these primitives, any computable business logic can be built.&lt;/p&gt;

&lt;p&gt;That's what I set out to do. The visual code designer in WZSoft compiles a drag-and-drop node graph into server-side JavaScript — and because the target language is Turing-complete, the visual layer inherits that property. You can build a payroll engine. Inventory optimization. Multi-level dynamic routing. Data sync jobs across database schemas. All through the visual editor, no text code written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turing-complete isn't a buzzword here. It's the line between "you'll outgrow this" and "you'll never outgrow this."&lt;/strong&gt;&lt;/p&gt;




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

&lt;p&gt;If a visual language is Turing-complete, the obvious question is: why not just write code?&lt;/p&gt;

&lt;p&gt;The answer is about &lt;strong&gt;how humans reason about logic, not how they type it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you look at a text file of business logic, you see tokens. When you look at a node graph, you see &lt;strong&gt;flow&lt;/strong&gt;. A conditional branch looks like a branch. A subroutine call looks like a subgraph. The structure is spatial, not linear — your brain processes it differently, and faster.&lt;/p&gt;

&lt;p&gt;There's a second reason, less obvious but more important: &lt;strong&gt;consistency at scale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a team of 10 developers hand-writes business logic, you get 10 different styles. Someone uses &lt;code&gt;===&lt;/code&gt;, someone uses &lt;code&gt;==&lt;/code&gt;. Someone nests 4 levels deep, someone extracts functions. Over 3 years, the codebase accrues a thousand micro-decisions that no one remembers making.&lt;/p&gt;

&lt;p&gt;A visual compiler eliminates this entirely. Every &lt;code&gt;if&lt;/code&gt; node generates the same pattern. Every database query goes through the same connection path. The generated code is boring and predictable — which is exactly what you want for business logic that needs to run reliably for years.&lt;/p&gt;

&lt;p&gt;And the visual graph &lt;strong&gt;is&lt;/strong&gt; the source of truth. There's no synchronization problem between "the diagram" and "the code" — the graph generates the code, every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpqhuc71rlnggg45z5dmy.png" alt=" " width="799" height="360"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  What makes WZSoft different
&lt;/h2&gt;

&lt;p&gt;There are many low-code platforms. These are the things WZSoft has that I haven't seen elsewhere:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. One visual editor, full-stack
&lt;/h3&gt;

&lt;p&gt;This is the most important architectural decision I made.&lt;/p&gt;

&lt;p&gt;In most "low-code" platforms, you use one tool for forms, another for logic, a third for workflows — and they don't talk to each other. WZSoft uses &lt;strong&gt;the same visual editor everywhere&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Form hooks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;beforeUpd&lt;/code&gt; / &lt;code&gt;afterUpd&lt;/code&gt; — validate input, recalculate fields, trigger side effects when data changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend logic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standalone code modules — scheduled tasks, data sync jobs, complex business calculations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;startdo&lt;/code&gt; / &lt;code&gt;enddo&lt;/code&gt; — execute logic when an approval reaches a node or leaves it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data permissions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;selview&lt;/code&gt; / &lt;code&gt;selupd&lt;/code&gt; / &lt;code&gt;seldel&lt;/code&gt; — custom SQL filters that are injected into every query automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same node types. Same drag-and-drop interaction. Same execution engine (Nashorn). &lt;strong&gt;Learn the editor once, build everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The implications are deeper than convenience. A piece of logic you write for a form's validation can be extracted and reused in a scheduled task. A workflow's approval routing can call the same subroutine that the data permission filter uses. There's no boundary between "frontend logic" and "backend logic" — it's all just logic, running server-side, built with the same tool.&lt;/p&gt;

&lt;p&gt;I don't know of another low-code platform that does this.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Visual programming runs server-side
&lt;/h3&gt;

&lt;p&gt;Almost every low-code platform focuses on &lt;strong&gt;UI composition&lt;/strong&gt; — drag a form, get a page, wire it to an API. The visual part stops at the frontend. Backend logic, if supported at all, means hand-writing JavaScript in a cramped textarea.&lt;/p&gt;

&lt;p&gt;WZSoft's visual code compiles to JavaScript that executes &lt;strong&gt;on the server&lt;/strong&gt; via the Nashorn engine, with direct access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The database (all five dialects, with automatic SQL dialect translation)&lt;/li&gt;
&lt;li&gt;The message queue (email, SMS, in-app notifications)&lt;/li&gt;
&lt;li&gt;HTTP clients (call external APIs)&lt;/li&gt;
&lt;li&gt;The full Spring context (any Java library or service)&lt;/li&gt;
&lt;li&gt;The current user's session (ID, department, organization, roles)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're not configuring a form — you're programming the backend, visually.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Direct SQL with automatic row-level security
&lt;/h3&gt;

&lt;p&gt;You write queries that join any tables, use any SQL functions, aggregate any data. The platform then &lt;strong&gt;automatically injects row-level security filters&lt;/strong&gt; based on the current user's role and data scope — a department manager sees only their department's rows, without you writing a single WHERE clause.&lt;/p&gt;

&lt;p&gt;This combination — raw SQL power with automatic, platform-enforced permission filtering — is rare.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Five database dialects, one abstraction
&lt;/h3&gt;

&lt;p&gt;MySQL, Oracle, KingBase, Dameng, SQL Server. The platform handles &lt;code&gt;LIMIT&lt;/code&gt; vs &lt;code&gt;TOP&lt;/code&gt; vs &lt;code&gt;ROWNUM&lt;/code&gt;, &lt;code&gt;AUTO_INCREMENT&lt;/code&gt; vs &lt;code&gt;SEQUENCE&lt;/code&gt;, concatenation syntax differences, and date function variations. Write logic once, deploy to any supported database.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI has already learned how to use it
&lt;/h2&gt;

&lt;p&gt;This is the part I'm most excited about, and it's why I'm writing this now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every operation in WZSoft is a REST API.&lt;/strong&gt; Creating an app. Defining a data table. Adding form components. Configuring workflow nodes. Setting role permissions. Generating PDFs. All of it — standard JSON-over-HTTP endpoints with predictable contracts.&lt;/p&gt;

&lt;p&gt;This means the platform is &lt;strong&gt;machine-operable by design&lt;/strong&gt;. And over the past months, I've documented its entire operational knowledge — the API contracts, the permission model, the component catalog, the workflow patterns, the database dialect abstractions — into the persistent memory of an AI model (Claude).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI now knows how to build systems with WZSoft.&lt;/strong&gt; Describe what you need in one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build a IT asset management system with request forms, department-level approval."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it can do it. End to end:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create the app structure and page hierarchy&lt;/li&gt;
&lt;li&gt;Define the data tables with proper field types&lt;/li&gt;
&lt;li&gt;Configure form components (dropdowns, date pickers, validation rules)&lt;/li&gt;
&lt;li&gt;Design the approval workflow with routing rules and code hooks&lt;/li&gt;
&lt;li&gt;Generate the PDF template with [@variable@] placeholders&lt;/li&gt;
&lt;li&gt;Assign role-based permissions at the row and column level&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxs70qm7hj0yntl2vc7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxs70qm7hj0yntl2vc7z.png" alt=" " width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No human touches the admin UI. The AI operates the platform like an expert user who has memorized every API contract and every configuration pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this is different from "AI code generation"
&lt;/h3&gt;

&lt;p&gt;AI tools that generate code — React components, Express routes, SQL schemas — produce artifacts that need to be maintained, debugged, and kept in sync. Generated code accumulates technical debt just like hand-written code.&lt;/p&gt;

&lt;p&gt;WZSoft takes a fundamentally different approach: &lt;strong&gt;the AI doesn't generate code. It configures a platform.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The platform guarantees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistent architecture&lt;/strong&gt; — every app follows the same patterns, regardless of which AI or human built it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in security&lt;/strong&gt; — row-level and column-level permissions are platform features, not hand-written auth checks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No drift&lt;/strong&gt; — the visual editor and the REST API share the same underlying data model; there's nothing to get out of sync&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debuggability&lt;/strong&gt; — since every action goes through the platform's standard pipelines, you can trace exactly what happened&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Token economics
&lt;/h3&gt;

&lt;p&gt;A typical AI coding session spends thousands of tokens re-explaining framework conventions, project structure, and coding standards. Every. Single. Session.&lt;/p&gt;

&lt;p&gt;With WZSoft, the AI's knowledge of the platform lives in persistent memory. One sentence describing the system you want, and the AI already knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your database dialect and how to construct queries for it&lt;/li&gt;
&lt;li&gt;The API contracts for all 18 controllers&lt;/li&gt;
&lt;li&gt;The component catalog with all configuration parameters&lt;/li&gt;
&lt;li&gt;The permission model (users → roles → apps → pages → data scopes)&lt;/li&gt;
&lt;li&gt;The workflow engine's node types and routing patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Orders of magnitude fewer tokens per task.&lt;/strong&gt; The context you're paying for goes toward understanding what you want, not re-learning how to build it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this points toward
&lt;/h3&gt;

&lt;p&gt;I believe we're entering an era where AI doesn't assist coding — it &lt;strong&gt;operates software directly&lt;/strong&gt;. Tools designed for human UI interaction will be rebuilt with machine-addressable interfaces. WZSoft is my bet on that direction: a platform that's equally usable by a human clicking through the admin panel and by an AI calling its REST endpoints.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/szwilsonchan/wzsoft" rel="noopener noreferrer"&gt;github.com/szwilsonchan/wzsoft&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack&lt;/strong&gt;: Spring Boot 2.6.6, Nashorn JS Engine, Vue 3, Spring Security + JWT + Redis, MyBatis + JdbcTemplate, 5 database dialects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: Free for personal and learning use; commercial use requires a license&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about the Nashorn integration, the visual-to-JS compilation pipeline, or the AI-operable architecture? Drop a comment. I'm happy to write follow-up deep dives on any part of the stack.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built solo. Three years. One person's bet on a different way to build — and use — software.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>productivity</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
