Synapse-Sys / product case study / closed beta / 14 min

Synapse-Sys

An AI-powered infinite canvas in closed beta, where idea exploration becomes easy.

ai / product-design / design-engineering / canvas / agents

BLUF

Synapse-Sys is an AI-powered infinite canvas, where idea exploration becomes easy. I designed and built it to turn loose ideation material into a canvas where ideas can actually grow. I solo built the following domains of this product: accounts, sharing, exports, AI budgets, pricing and checkout flows, security boundaries and the canvas itself.

A working canvas, not a static mapOpen a canvas, move through the graph, select a node and keep the relationship between the material visible. This is the actual product surface before the case study gets into how it works.
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.
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.
  • Starting point: an idea for executable relationships, with one strong demo and a lot of unanswered product questions.
  • What I did: product design, interaction design, visual system and implementation, with heavy LLM assistance.
  • Current state: functional closed beta, nearing launch. I do not have public adoption, retention or activation numbers.

Quick paths:

The job

  • Role Solo product designer and design engineer
  • Product AI graph canvas for early research and synthesis
  • Status Functional closed beta, nearing launch
  • Scope Graph interaction, AI operations, transaction safety, accounts, sharing, budgets, billing, performance and visual system
  • Build 126 commits across the product, designed and built by me with heavy LLM assistance

Synapse-Sys started with a simple question: what if the connection between two ideas could do empower more idea exploration? I wanted something more useful than a chat box throwing text onto a canvas. 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.

The core loop: relationship becomes 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.

Sharing a canvas needed 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, so if anyone with a link could change the original, that would have been a crap collaboration experience with no safety in mind. This is why 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 had a weak spot: it did not preview what the recipient would see or make the read-only state obvious enough. That is the next thing I would fix before a public launch, not a bigger collaboration roadmap.

Build the product around the demo

The graph interaction was the hook, yet I felt it shoudln't 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. In today's closed beta the product 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 and provider calls and output validation.

The design behind Billing made that less theoretical - initially the project started with Lemon Squeezy, but after a merchant rejection I thought about move 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, those changes did not require rewriting pricing, plan state or AI budgets, hence the pricing and checkout flows are built, but 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.

Similar thinking applies to AI operations. A quick ghost suggestion does not need the same quality bar as a synthesis result. URL extraction needs SSRF protection, but streaming needs cancellation, heartbeats and server-derived prompts, which lead me to the discovery that 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.

In terms of user-authored text - the system considers it as content, not trusted instruction, meaning that 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 not fold under pressure

So after tons of research, I chose a hybrid rendering for the infinite canvas. That's because neither obvious option did the full job. Konva does a good job handling the grid, edges, hit regions, connection previews and selection geometry, but HTML renders the editable node cards above the canvas using the same viewport transform. With this setup, the design lets nodes behave like interface objects: text selection, editing, resize handles, tooltips, buttons, context menus and accessible markup, but it also lets edges behave like graph geometry: routing, labels, invisible hit regions, bridge arcs and zoom-compensated strokes.

As with everything, there's a price to pay and in this case it's the cost 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 doesn't mean it doesn't glitch out form time to time, but that's the best I could provide with my limited engineering capabilities. Most importantly - 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.

Often times when 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, but it was way worse to read. The current 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 sinked in getting this thing 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 also part of trust. 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.

The work was not to remove the terminal character. It was to make it support the canvas. I added secondary greens, reduced glow, improved contrast, fixed wrapping, made tooltips clearer and moved node passes toward content-first scanability.

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.

Working with LLMs without giving them the product

I built Synapse-Sys with heavy LLM assistance. Like, heavy. The models not only made execution much faster, but they unblocked me in many of the realms where I had no prior experience (security, databases, accounts, auth, backend etc). 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

Synapse-Sys is in closed beta and close to launch. The product works. I have not publicly launched it or measured adoption, retention, activation, generated-node reuse or ghost-node acceptance.

Before launch, I am focused on the boring but necessary work:

  • 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.

The first fast version had an unsafe core interaction. The closed beta version survived contact with a much less flattering set of conditions than the demo. That is where it is now: functional, close to launch, and still waiting for the harder answer - whether people come back to use it again.

Product preview