<?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: Nayanjyoti Das</title>
    <description>The latest articles on DEV Community by Nayanjyoti Das (@n0y0nd).</description>
    <link>https://dev.to/n0y0nd</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%2F4192638%2F49d8d139-a0c8-4f73-bc29-1c92e47d3ec2.jpg</url>
      <title>DEV Community: Nayanjyoti Das</title>
      <link>https://dev.to/n0y0nd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/n0y0nd"/>
    <language>en</language>
    <item>
      <title>Hear the Short Before You Smell It: Building CircuitDoctor with FalkorDB</title>
      <dc:creator>Nayanjyoti Das</dc:creator>
      <pubDate>Sun, 18 Oct 2026 18:04:50 +0000</pubDate>
      <link>https://dev.to/n0y0nd/hear-the-short-before-you-smell-it-building-circuitdoctor-with-falkordb-53o5</link>
      <guid>https://dev.to/n0y0nd/hear-the-short-before-you-smell-it-building-circuitdoctor-with-falkordb-53o5</guid>
      <description>&lt;p&gt;I'm Nayanjyoti from India, and for &lt;strong&gt;Graph Hacks by WeMakeDevs and FalkorDB&lt;/strong&gt;, I built &lt;strong&gt;CircuitDoctor&lt;/strong&gt;: a tool that helps students and makers inspect wiring in KiCad circuits before connecting their hardware.&lt;/p&gt;

&lt;p&gt;You upload a &lt;code&gt;.net&lt;/code&gt; file, explore the circuit, inspect supported wiring warnings, and ask questions about its connections. After changing the wiring in KiCad, you can upload the revised file to see what changed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://circuitdoctor.up.railway.app/" rel="noopener noreferrer"&gt;CircuitDoctor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/n0y0nD/CircuitDoctor" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/YqAVFf40cEE" rel="noopener noreferrer"&gt;Watch the walkthrough&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track:&lt;/strong&gt; Agents That Act on Connected Data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The problem I wanted to solve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A schematic can look reasonable while still containing a connection you didn't intend. Power and ground might share a net. A display might be missing a supply connection. Two signal pins might be swapped.&lt;/p&gt;

&lt;p&gt;Finding these problems means following connections and understanding how different parts relate to each other. For someone still learning electronics, even figuring out where to look can be difficult.&lt;/p&gt;

&lt;p&gt;I wanted CircuitDoctor to make that process easier: explain the finding, show the relevant wiring, and let the user investigate further.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A circuit is already a graph&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The graph model came naturally. Components have pins, and pins connect through nets. In FalkorDB, CircuitDoctor represents this as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Component ──HAS_PIN──&amp;gt; Pin ──ON_NET──&amp;gt; Net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each uploaded circuit gets its own graph. This keeps different uploads separate and lets the application retain both versions when comparing a circuit before and after a change.&lt;/p&gt;

&lt;p&gt;For supported two-pin resistors, CircuitDoctor also creates &lt;code&gt;THROUGH&lt;/code&gt; relationships between their pins. That allows a path query to follow a connection through a resistor.&lt;/p&gt;

&lt;p&gt;Sharing a net and passing through a component are different relationships, so the model represents them separately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What FalkorDB actually does&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FalkorDB provides the connection data behind CircuitDoctor's checks and explanations.&lt;/p&gt;

&lt;p&gt;Queries identify pins that share a net. Combined with verified information about recognized components, this allows the application to flag supported wiring conflicts, including power-to-ground shorts and conflicting voltage rails.&lt;/p&gt;

&lt;p&gt;For connection tracing, the user selects two pins. A Cypher &lt;code&gt;shortestPath&lt;/code&gt; query searches through &lt;code&gt;ON_NET&lt;/code&gt; and &lt;code&gt;THROUGH&lt;/code&gt; relationships. If it finds a route, CircuitDoctor highlights it on the drawing.&lt;/p&gt;

&lt;p&gt;The application also uses &lt;code&gt;algo.WCC&lt;/code&gt; to identify separate groups in the circuit's structural graph. A separate group is not necessarily a fault, but it can help a user notice something worth inspecting.&lt;/p&gt;

&lt;p&gt;For supported boards and displays, additional checks inspect power, ground, and I2C connections.&lt;/p&gt;

&lt;p&gt;These features work from the uploaded circuit. They are not tied to one predefined example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making the answers understandable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Getting the connection data was only part of the work. Presenting it clearly mattered just as much.&lt;/p&gt;

&lt;p&gt;During development, raw query results are useful. When checking a circuit, though, a user needs to understand which connection matters and where to find it.&lt;/p&gt;

&lt;p&gt;CircuitDoctor displays findings alongside an interactive circuit drawing. Users can highlight relevant pins and trace routes without reading the underlying database output.&lt;/p&gt;

&lt;p&gt;Gemini adds a conversational way to explore the same information. A user can ask how two pins are connected or ask for an explanation of a warning. Gemini calls tools that query the uploaded circuit in FalkorDB, then uses the returned evidence to explain the result.&lt;/p&gt;

&lt;p&gt;The goal is to make the explanation traceable to the user's file. The graph provides the facts the assistant can work with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checking whether a fix helped&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also wanted the workflow to continue after the first warning.&lt;/p&gt;

&lt;p&gt;Once a user changes their circuit, they can upload the updated &lt;code&gt;.net&lt;/code&gt; file. Both versions are checked using their separate FalkorDB graphs. Python then compares the findings and connection data.&lt;/p&gt;

&lt;p&gt;The comparison shows which warnings cleared, which remain, whether new warnings appeared, and which wires changed.&lt;/p&gt;

&lt;p&gt;This introduced an important interface challenge: the drawing and status must describe the same version. Viewing the earlier circuit should show its original findings. Viewing the updated circuit should show the revised connections and results.&lt;/p&gt;

&lt;p&gt;Without that consistency, even a correct comparison can be confusing.&lt;/p&gt;

&lt;p&gt;The website includes a downloadable pair of example files so people can try this workflow without first creating a KiCad project. Those files use the same upload and checking process as other circuits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I learned while building it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Graph queries made questions about connectivity easier to express. Shared connections, routes between pins, and separate groups all fit the model well.&lt;/p&gt;

&lt;p&gt;I also learned to prepare relationships at the right stage. CircuitDoctor creates resistor traversal links during upload, so looking up a route can remain a read operation.&lt;/p&gt;

&lt;p&gt;Another lesson was that visual clarity needs its own attention. Highlighting a wire is useful only when the user can follow it and read the labels around it. The circuit view and comparison flow needed work alongside the checks themselves.&lt;/p&gt;

&lt;p&gt;The most important lesson was to separate facts from assumptions. A netlist tells the application which pins are connected. It does not describe every internal detail of a physical module or prove how that module will behave when powered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keeping the scope clear&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CircuitDoctor is a wiring inspection tool. It does not simulate current, measure resistance, or model component timing.&lt;/p&gt;

&lt;p&gt;General connection exploration uses the uploaded graph. Component-specific checks depend on recognized parts and verified specifications, including support for Arduino Uno R3, classic Nano, and selected displays. Connection tracing follows wires and supported resistors; it does not infer internal paths through every component.&lt;/p&gt;

&lt;p&gt;A cleared warning means the corresponding check no longer finds that issue in the revised file. It does not guarantee that the complete physical circuit will work.&lt;/p&gt;

&lt;p&gt;I built CircuitDoctor with help from AI coding assistants, including Codex and Claude Code, and verified the implementation through automated tests and browser checks. I also used AI assistance to help draft and edit this article.&lt;/p&gt;

&lt;p&gt;There is more I would like to add, especially broader component coverage. For this version, I focused on making one workflow useful: &lt;strong&gt;upload a circuit, understand its connections, inspect a problem, and check the revised file.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you use KiCad, you can &lt;a href="https://circuitdoctor.up.railway.app/" rel="noopener noreferrer"&gt;try CircuitDoctor&lt;/a&gt;, &lt;a href="https://youtu.be/YqAVFf40cEE" rel="noopener noreferrer"&gt;watch the demo&lt;/a&gt;, and explore the implementation on &lt;a href="https://github.com/n0y0nD/CircuitDoctor" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>falkordb</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
