Closed beta 11 min read

Synapse-Sys

An AI-powered infinite canvas for research and synthesis, designed and built solo with heavy LLM assistance, now in closed beta.

Summary

Synapse-Sys started with an idea for executable relationships: what if the connection between two ideas could support the next step in exploration? I had one strong demo and a lot of unanswered product questions. I wanted something more useful than a chat box throwing text onto a canvas.

I was the solo product designer and design engineer, and I built it with heavy LLM assistance across 126 commits: graph interaction, AI operations, accounts, sharing, exports, AI budgets, pricing and checkout, security boundaries and the canvas. It is a functional closed beta, nearing launch. I do not have public adoption, retention or activation numbers.

126commits across the product, designed and built by me with heavy LLM assistance
4AI operations on an edge: expand, compare, synthesise and summarise
90days, the longest a share link lives; owners pick 7, 30 or 90 and can revoke it
3billing providers on the way: Lemon Squeezy, Stripe, then Polar as Merchant of Record
A working canvasOpen a canvas, move through the graph, select a node and keep the relationship between the material visible. This is the actual product surface.

The public build log

  1. Start

    Side-panel rewrite

    The same node detail, with more readable type, spacing and state controls.

  2. Generation states

    A sandbox capture of the processing state for the node-generation operations.

  3. Earlier visual system

    The terminal theme, node cards and toolbar, before the calmer closed-beta direction.

  4. Dense canvas

    Generated material, operation labels, routes and selection visible at once.

  5. Closed beta

    Functional, nearing launch.

Earlier public snapshots
April 2026 / Dense canvas
April 2026 / Dense canvasAn older public canvas snapshot with generated material, operation labels, routes and selection visible at once.
March 2026 / Side-panel rewrite
March 2026 / Side-panel rewriteA before-and-after from the public build log: the same node detail, with more readable type, spacing and state controls.
March 2026 / Generation states
March 2026 / Generation statesA sandbox capture of the processing state for the node-generation operations.
March 2026 / Earlier visual system
March 2026 / Earlier visual systemThe terminal theme, node cards and toolbar in an earlier public snapshot, before the calmer closed-beta direction.

Bring AI results back into the structure

If AI made something, it had to come back as part of the person's structure: movable, editable, connectable, and useful as input to the next operation. Anything less is a chat box with a canvas painted behind it.

The product at a glance
01 / The core loop
01 / The core loopA relationship becomes an operation, then comes back as material on the canvas.
02 / A dependable canvas
02 / A dependable canvasPanning, zooming, selection and AI work had to hold together while the map moved.
03 / Closed beta product
03 / Closed beta productThe final direction made the graph, controls and product state easier to read without losing the terminal character.

Turn a relationship into an operation

The loop had to make sense without an onboarding tour. Bring material into the canvas, connect two nodes, choose expand, compare, synthesise or summarise, then get a result back between the original ideas.

Start with a rough ideaDouble-click the canvas, give an idea a name, then keep editing or connect it into the map. Synapse-Sys creates a starting description so a blank note can become useful material quickly.

That is the part people see first. The more interesting part is that the result is not a chat response pretending to be a feature. It is a real node in the graph, with lineage back to the relationship that made it.

A live canvas with the work still visible
Live canvas
Live canvasThe graph holds source material, AI operations and generated results in one working surface.

Give sharing a real boundary

Sharing was another place where a nice demo could turn into a bad product call. These maps can hold source material, half-formed ideas and decisions. If anyone with a link could change the original, that would have been a crap collaboration experience with no safety in mind.

So I kept the first version simple. Owners choose a 7, 30 or 90-day link, set it to view-only or forkable, and can revoke it. A fork copies the nodes, edges and groups into a new canvas in the other person's account. Nobody gets to change the original by accident.

Share controls
View or fork
View or forkThe sharing surface lets owners set a link lifetime, choose View only or View + Fork, and revoke access.

The early share setup still has a weak spot: it does not preview what the recipient will see, or make the read-only state obvious enough. That is the next thing I would fix before a public launch, ahead of any bigger collaboration roadmap.

Build the product around the demo

The graph interaction was the hook, but it could not be the whole product.

To be usable, Synapse-Sys needed people to have accounts, recover access, own a canvas, share it safely, fork it, export it, understand their AI budget and get useful errors when something went wrong. The closed beta includes authentication, protected routes, ownership checks, expiring share links, operation budgets, rate limits, error reporting, settings, pricing, onboarding and public share pages.

Product navigation without leaving the keyboardCmd + K searches canvases or nodes. Type > to switch into commands for navigation, views and themes. It keeps a growing product keyboard-first instead of making people hunt through controls.

The architecture follows the same boundary as the interaction. The client shows pending work; the server owns durable graph mutation, auth checks, budget enforcement, prompt construction, provider calls and output validation.

Billing made that less theoretical. The project started on Lemon Squeezy, and after a merchant rejection I looked at moving to Stripe. Stripe solved the immediate issue but put tax handling back on the product. Ew. Can't deal with that. My only viable move was Polar as Merchant of Record. Because billing sits behind a provider interface, none of those changes meant rewriting pricing, plan state or AI budgets. The pricing and checkout flows are built; paid checkout stays off while the closed beta runs.

Billing and operation budget
Plan, usage and limits
Plan, usage and limitsThe product keeps plan context and the monthly AI-operation budget in the same place.

AI operations needed the same thinking. A quick ghost suggestion does not need the same quality bar as a synthesis result. URL extraction needs SSRF protection; streaming needs cancellation, heartbeats and server-derived prompts. And every operation needs budget enforcement.

Different AI operations, different product states
Ghost suggestion
Ghost suggestionA suggested node stays provisional until somebody accepts it.
Generation state
Generation stateThe canvas makes active work visible while an operation is running.
URL material
URL materialExtracted source content becomes structured material that can enter the canvas.

For rate limits, I chose to fail closed when Redis has a problem. That can block a legitimate person during infrastructure trouble. Failing open can mean uncontrolled spend or abuse. I chose the more annoying failure mode on purpose.

User-authored text is treated as content, never as trusted instruction. The server owns the operation spec, prompt construction, budget check, provider call and output validation before anything becomes canvas material.

AI behaviour stays under product control
Output behaviour
Output behaviourPeople can tune the tone of AI output, while structural operations and security rules stay protected by the product.

Make the canvas hold under pressure

I chose hybrid rendering for the infinite canvas because neither obvious option did the full job. Konva handles the grid, edges, hit regions, connection previews and selection geometry; HTML renders editable node cards above the canvas using the same viewport transform. Nodes behave like interface objects (text selection, editing, resize handles, tooltips, buttons, context menus, accessible markup), while edges behave like graph geometry: routing, labels, invisible hit regions, bridge arcs and zoom-compensated strokes.

The price is coordination. Pan, zoom, drag, culling, selection, resize, hit-testing and side-panel focus all have to agree on one coordinate system. It is the least bad trade I found. It still glitches out from time to time, and that's the best I could manage with my limited engineering capabilities. What matters is that rich nodes stay editable and edges stay readable.

Keep a growing canvas editablePan, box-select and tidy the map without leaving it; saved canvases also carry recovery controls for finding work again, undo and redo.

Once the canvas gets dense, edge routing matters as much as node design. I tried a clever PCB-style staircase fan-out with shared ports because it looked impressive. It only looked impressive; it was way worse to read. The version I kept uses orthogonal paths, clear elbow stubs, obstacle avoidance, bridge arcs, labels and priority rules for selected, hovered and active edges. Don't ask me how many hours I sank into getting this right.

Using an edge as a commandThe recording shows the readable paths, operation affordances, labels and enough context to follow one relationship through the busy map of edges.

The useful test is simple: can someone follow one relationship once the graph gets busy? “Look at this routing algorithm” is not a user job.

AI suggestions had their own version of the same problem. If every related concept becomes a permanent node, the canvas turns into an AI cleanup job. So suggestions became ghost nodes: visible and connected, but outside the committed graph until somebody accepts them.

The authorship boundary is the commit. Visible does not mean accepted.

Canvas performance is part of trust too. If panning stutters, zoom jumps away from the cursor or selected nodes disappear during culling, the map stops feeling like a place where somebody can think.

Canvas performance: preserve placePanning, zooming, selection and side-panel detail have to remain coherent while the viewport changes. The object under the cursor should stay there.

The work includes cursor-stable zoom, trackpad behaviour closer to Figma, viewport culling, selected-node protection, touch handling, gesture throttling and session-only positions while a person is moving nodes.

Keep the visual identity useful

The first direction was black, phosphor green, VT323, pixel shadows, scanlines and terminal boot behaviour. It gave Synapse-Sys a shape fast. It also made nearly every surface shout.

I kept the terminal character and made it support the canvas: secondary greens, reduced glow, better contrast, fixed wrapping, clearer tooltips and node passes that put content first.

From expressive direction to calmer productThe terminal character stayed. The canvas, controls and node content became easier to scan.
Early command surface
Early command surfaceTerminal cards and green-on-black contrast established the direction before the graph controls were mature.
Closed beta direction
Closed beta directionMidnight keeps the terminal identity while giving nodes, routes, toolbar and state clearer hierarchy.

Glow became an interaction signal instead of wallpaper. Orthogonal edges, operation labels, selected-route priority and provisional ghost nodes make relationships readable as actions rather than decoration.

Work with LLMs without handing them the product

I built Synapse-Sys with heavy LLM assistance. Like, heavy. The models made execution much faster, and they unblocked me in areas where I had no prior experience: security, databases, accounts, auth, backend. What they did not decide was how the product worked, where data could move, what counted as finished or which failures needed attention first.

The useful constraints were simple:

  • Architecture rules defined product and security boundaries.
  • Phase plans kept implementation work scoped.
  • Product and interaction specs defined behaviour before code.
  • Design audits turned weak points into implementation waves.
  • Server-action rules prevented casual client-side data mutation.
  • Tests protected routing, culling, budgets, imports, sharing and edge operations.

The models are excellent at executing a decided interaction, and equally excellent at turning an undecided one into 600 plausible lines of future regret. Whenever my rule was vague, the code made the vagueness more expensive.

What is left before launch

The product works. I have not publicly launched it or measured adoption, retention, activation, generated-node reuse or ghost-node acceptance. Before launch, the work is the boring but necessary kind:

  • Measure the activation loop: first node, first edge, first AI operation, first branch and first share.
  • Move onboarding state server-side so it survives devices.
  • Close RLS migration drift and add more integration coverage around the database, RLS and webhooks.
  • Keep reducing visual noise so the terminal identity supports content.
  • Build a small template gallery before adding more AI operations.

In short

The first fast version of Synapse-Sys had one strong demo and an unsafe core interaction. The closed beta survived contact with a much less flattering set of conditions than the demo: accounts, sharing, budgets, billing, rate limits and a canvas that has to stay put under the cursor. That is where it is now: functional, close to launch, and still waiting for the harder answer, which is whether people come back to use it again.

Product preview