<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[tscircuit]]></title><description><![CDATA[Build electronic circuit boards, schematics and PCB layouts with React, Typescript and AI tools. MIT-licensed open-source]]></description><link>https://blog.tscircuit.com</link><image><url>https://substackcdn.com/image/fetch/$s_!-AOr!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36a71573-6616-468e-bca4-830d84fb3572_612x612.png</url><title>tscircuit</title><link>https://blog.tscircuit.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 15 Apr 2026 03:38:57 GMT</lastBuildDate><atom:link href="https://blog.tscircuit.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[tscircuit]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[substack@tscircuit.com]]></webMaster><itunes:owner><itunes:email><![CDATA[substack@tscircuit.com]]></itunes:email><itunes:name><![CDATA[Seve Ibarluzea]]></itunes:name></itunes:owner><itunes:author><![CDATA[Seve Ibarluzea]]></itunes:author><googleplay:owner><![CDATA[substack@tscircuit.com]]></googleplay:owner><googleplay:email><![CDATA[substack@tscircuit.com]]></googleplay:email><googleplay:author><![CDATA[Seve Ibarluzea]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to write hard 2D algorithms]]></title><description><![CDATA[How to maintain your sanity with 100k lines-of-code algorithms]]></description><link>https://blog.tscircuit.com/p/how-to-write-hard-2d-algorithms</link><guid isPermaLink="false">https://blog.tscircuit.com/p/how-to-write-hard-2d-algorithms</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Sun, 17 Aug 2025 06:45:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Fcdn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As <a href="https://github.com/tscircuit/tscircuit">tscircuit</a> grows more people have been interested in contributing to fundamental algorithms for autorouting, packing, graph problems or complex domain-specific spatial problems. I&#8217;ve seen people both struggle to understand how to contribute as well as write/vibe sloppy unmaintainable code for algorithms.</p><p>The fundamental problem: how you&#8217;d intuitively write an algorithm, how AI writes algorithms and how you&#8217;re taught in school to write <strong>is a terrible approach for new algorithm development.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fcdn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fcdn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 424w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 848w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 1272w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fcdn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png" width="1456" height="656" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:656,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6145799,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fcdn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 424w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 848w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 1272w, https://substackcdn.com/image/fetch/$s_!Fcdn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd66f468-d472-43ef-a742-08a4ba99c1fb_9730x4387.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A snapshot from our autorouter development tool showing the pipeline</figcaption></figure></div><h1>How to make an algorithm the wrong way </h1><p>Here&#8217;s how most people would write a new algorithm:</p><ul><li><p>Dream up a concept</p></li><li><p>Write/vibe a function that implements the algorithm</p></li><li><p>Console log some simple inputs/outputs to verify correctness</p></li></ul><p>This approach is tragic because it creates algorithms that 1) only the original developer understands (if they can even remember) 2) leads to building goliath fragile functions with no visible intermediary results</p><h1>PVISA: Pipeline, Visualize, [be] Iterative, Snapshot, Approximate</h1><p>PVISA is an approach to algorithm building that I noticed would consistently work and be maintainable, even if I vibe-coded parts of the algorithm. It was resilient to stupid mistakes and partial overhauling. It allowed contributors to come in and build alongside me. Let&#8217;s go through each part:</p><ul><li><p><strong>Pipeline</strong> - Always have a top-level Pipeline that moves your data through different sub-algorithms. EVERY COMPLEX ALGORITHM HAS MANY SUB-ALGORITHMS! It is a mistake to think of an algorithm has a single function or a single stage. Every obvious algorithm is already packaged or in a standard library, if there is any complexity to what you&#8217;re doing, you need to have a pipeline.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q6xJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 424w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 848w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 1272w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png" width="1456" height="723" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:723,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:967823,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 424w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 848w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 1272w, https://substackcdn.com/image/fetch/$s_!Q6xJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb92101-20b2-4f11-8965-cd0797603422_2840x1410.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Some snippets from the docs and code for the AutoroutingPipelineSolver, the top-level algorithm for the tscircuit autorouter</figcaption></figure></div><ul><li><p><strong>Visualize</strong> - You should visualize EVERY ITERATION of your algorithm. There should be no bug that is not immediately obvious or cannot be pointed to with a visual. When debugging, you should be able to &#8220;point to the iteration&#8221; that does something you didn&#8217;t expect</p><p></p></li></ul><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;9c1cda5d-fdeb-403a-a38e-cace8a94445c&quot;,&quot;duration&quot;:null}"></div><p></p><ul><li><p><strong>Be Iterative</strong> - Any &#8220;for loop&#8221; that contains complex behavior should be BROKEN. You must design everything to work in iterations where each iteration can be visualized. I love object-oriented classes with a `.step()` function and some state for managing this. At any point, you can call `.visualize()` to get a visualization for your current iteration. IT WILL STRETCH YOUR BRAIN TO REFACTOR TO THIS STYLE (but you must do it to succeed!)</p></li><li><p><strong>Snapshot</strong> - You must take snapshots of your algorithms output in a way that is understandable to humans. Humans generally forget/are bad at looking at numbers, so you should use Visual Snapshot Testing (SVG outputs) to allow humans to see the impact of changes in pull requests.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!djRn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!djRn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 424w, https://substackcdn.com/image/fetch/$s_!djRn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 848w, https://substackcdn.com/image/fetch/$s_!djRn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 1272w, https://substackcdn.com/image/fetch/$s_!djRn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!djRn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png" width="1456" height="1263" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1263,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:449809,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!djRn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 424w, https://substackcdn.com/image/fetch/$s_!djRn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 848w, https://substackcdn.com/image/fetch/$s_!djRn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 1272w, https://substackcdn.com/image/fetch/$s_!djRn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51636bc5-99bc-4f32-85ee-3b1664aa993d_2610x2264.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Examples of visual snapshots from an autorouter PR that changed some routing behavior</figcaption></figure></div><p></p><ul><li><p>Approximate - Most non-trivial algorithms are hard to implement optimally on the first go. Build your algorithms to tolerate non-optimality, this often means introducing stages just to &#8220;improve&#8221; the output of prior stages. This is good! For our autorouter, we have stages that &#8220;straighten-out&#8221; our routes (shown below)</p><p></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zd0U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zd0U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 424w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 848w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 1272w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zd0U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png" width="1456" height="828" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:828,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1064048,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zd0U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 424w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 848w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 1272w, https://substackcdn.com/image/fetch/$s_!Zd0U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75ef9b74-6073-4c2b-b346-e24794394372_4013x2281.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before/After of the SimplifyPathSolver</figcaption></figure></div><p></p><h2>Building Algorithms like Web Applications</h2><blockquote><p>We created the <a href="https://github.com/tscircuit/graphics-debug">graphics-debug</a> module (MIT open-source) for the explicit purpose of visualizing 2D algorithms. Input a simple JSON object and get an interactive visualization. Use the objects to produce SVGs for visual snapshot tests.</p></blockquote><p>Just like code that cannot be tested is bad and must be restructured such that it can be tested, code that cannot be visualized is bad and should be restructured.</p><p>Develop algorithms with the intent to build a web interface to configure, explore and test it. Never develop algorithms in such a way that intermediary outputs can&#8217;t be explored with a web interface!</p><p>As you build your algorithm, the visualization will get more and more robust. The web interface will allow more parameters to be configured. You&#8217;ll have more filters and configurations to explore deeper and download intermediary outputs.</p><h3>Use React Cosmos for Building Algorithm Web Apps</h3><p>We use <a href="https://reactcosmos.org/">React Cosmos</a> to quickly create web apps for algorithms. We do this because&#8230;</p><ul><li><p>It&#8217;s nearly zero effort, just create `*.fixture.tsx` files that export a React component and you have a new page (remember, every Graphics Debug object can become interactive with the &lt;InteractiveGraphics /&gt; component from the graphics-debug module!)</p></li><li><p>Cosmos apps can easily be deployed into preview environments with Vercel</p></li><li><p>Claude/ChatGPT algorithm React algorithm visualizations can generally just be downloaded and given the extension .fixture.tsx and they&#8217;ll work perfectly!</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c35N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c35N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 424w, https://substackcdn.com/image/fetch/$s_!c35N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 848w, https://substackcdn.com/image/fetch/$s_!c35N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 1272w, https://substackcdn.com/image/fetch/$s_!c35N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c35N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png" width="563" height="566.4800824175824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1465,&quot;width&quot;:1456,&quot;resizeWidth&quot;:563,&quot;bytes&quot;:1352544,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c35N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 424w, https://substackcdn.com/image/fetch/$s_!c35N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 848w, https://substackcdn.com/image/fetch/$s_!c35N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 1272w, https://substackcdn.com/image/fetch/$s_!c35N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bad3f6-1955-4df9-a35a-9a9fbfdc72e0_3058x3077.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cosmos app running, we can select different problems or setups from the sidebar</figcaption></figure></div><h3>The Progression of an Algorithm Web App</h3><p>The web app for an algorithm usually sucks at first, only exposing the most basic operations: the visualization and the step function. Over time, you add additional debugging and visualizations to help with understanding. Here are three algorithms in different stages of development:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TQrQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TQrQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 424w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 848w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 1272w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TQrQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png" width="1456" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:270927,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TQrQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 424w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 848w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 1272w, https://substackcdn.com/image/fetch/$s_!TQrQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f6c8abd-8da6-4c06-8d1e-c3989b0bbc68_2610x1608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Very early stage. Has one button for stepping through the algorithm and a visualization. This algorithm is for <a href="https://github.com/tscircuit/calculate-packing">packing boxes.</a></figcaption></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9rR2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9rR2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 424w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 848w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 1272w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9rR2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png" width="1456" height="866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:382507,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9rR2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 424w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 848w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 1272w, https://substackcdn.com/image/fetch/$s_!9rR2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64cb1-eae0-4ca3-b1aa-c3859dc77f22_3352x1994.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This is our <a href="https://github.com/tscircuit/matchpack">MatchPack algorithm</a>. You can see it&#8217;s a little bit further along, with a table for each stage of the pipeline and the ability download the input of different stages (to debug or to build new test cases)</figcaption></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tsic!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tsic!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 424w, https://substackcdn.com/image/fetch/$s_!tsic!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 848w, https://substackcdn.com/image/fetch/$s_!tsic!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 1272w, https://substackcdn.com/image/fetch/$s_!tsic!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tsic!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png" width="1456" height="1232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1232,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1869628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tsic!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 424w, https://substackcdn.com/image/fetch/$s_!tsic!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 848w, https://substackcdn.com/image/fetch/$s_!tsic!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 1272w, https://substackcdn.com/image/fetch/$s_!tsic!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7392752f-b278-444c-a438-a31a77fc2963_3354x2838.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Our autorouter, with tables for each stage and options for animating, changing the renderer, timing, and options for adjusting the cache</figcaption></figure></div><p></p><h2>The Solver Interface</h2><p>In tscircuit code, &#8220;Solver&#8221; always means a class with the following methods:</p><ul><li><p>`step()` - Iterate the algorithm just once</p></li><li><p>`solve()` - Step until the algorithm has been solved or fails</p></li><li><p>`visualize()` - Get a graphics-debug object for the current iteration that can be converted to an SVG or given as a prop to &lt;InteractiveGraphics /&gt;</p></li><li><p>`.solved` / `.failed` / `.iterations` to track the algorithms progress</p></li></ul><p>This is all you need to build any algorithm! This is a tried and true pattern that has allowed me to build massive algorithms! Don&#8217;t skip the visualize(), and don&#8217;t have single-step solvers (always iterate and write good visualizations for each iteration). Everything is 100x easier when you use this pattern!</p><p></p><h2>Nesting Algorithms without breaking the rules</h2><p>You will NEED to nest algorithms. This is critical for orchestrating a large algorithm. Sometimes when you&#8217;re iterating, you&#8217;re just calling the `.step()` function of a subsolver! Often your `visualize()` function will just be returning the result of a sub-solver, and that&#8217;s totally ok!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!USvB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!USvB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 424w, https://substackcdn.com/image/fetch/$s_!USvB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 848w, https://substackcdn.com/image/fetch/$s_!USvB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 1272w, https://substackcdn.com/image/fetch/$s_!USvB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!USvB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png" width="1456" height="1824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1824,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:420246,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!USvB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 424w, https://substackcdn.com/image/fetch/$s_!USvB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 848w, https://substackcdn.com/image/fetch/$s_!USvB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 1272w, https://substackcdn.com/image/fetch/$s_!USvB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4b85c6-e333-4c95-bce4-57927d31ecfb_1552x1944.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A step function that calls another solver</figcaption></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!neP9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!neP9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 424w, https://substackcdn.com/image/fetch/$s_!neP9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 848w, https://substackcdn.com/image/fetch/$s_!neP9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 1272w, https://substackcdn.com/image/fetch/$s_!neP9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!neP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png" width="1420" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:608,&quot;width&quot;:1420,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114144,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!neP9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 424w, https://substackcdn.com/image/fetch/$s_!neP9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 848w, https://substackcdn.com/image/fetch/$s_!neP9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 1272w, https://substackcdn.com/image/fetch/$s_!neP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e66fd3-ac1b-4ba1-af84-3b75ae5145f4_1420x608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sometimes your visualize function will just call the sub-solver&#8217;s visualize function! This is good!</figcaption></figure></div><h2>Use Claude.ai for Prototyping, then Claude Code to integrate</h2><p>Claude.ai (the website chat for Claude) is fantastic for creating quick visualizations and implementation prototypes of sub-algorithms. You can then copy these visualizations into a fixture file and ask Claude Code to integrate into your codebase. This allows you to build up the algorithm bit-by-bit!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y5uk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y5uk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 424w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 848w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y5uk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png" width="1456" height="552" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:552,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:160949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y5uk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 424w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 848w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5uk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6211f8fb-0f69-4495-9207-d4fadda1ee78_1488x564.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iRGf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iRGf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 424w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 848w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 1272w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iRGf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png" width="1456" height="965" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:965,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:408192,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iRGf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 424w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 848w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 1272w, https://substackcdn.com/image/fetch/$s_!iRGf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca09eece-99cc-4f0e-943e-c8fb9a1e567d_2314x1534.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example interactive visualization built by Claude for an LED matrix gravity algorithm</figcaption></figure></div><p>Another prototype built with Claude.ai, this time I passed in the types of the objects from the project so that the algorithm would have some extra understanding of the input problem and output something that was easier for Claude Code to integrate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMtz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMtz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 424w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 848w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMtz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png" width="1456" height="1232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1232,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:126760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.tscircuit.com/i/171172914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cMtz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 424w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 848w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!cMtz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F233b4e34-176b-4fb6-8bf1-a4f95a040941_1752x1482.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h1>Want to help us build algorithms?</h1><p>tscircuit is MIT open-source and we&#8217;re currently working on many autorouting, auto-layout and packing algorithms. Join <a href="https://tscircuit.com/join">our discord</a> to learn more!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Fixing Schematic Crossings & Adding BOM View to Snippets]]></title><description><![CDATA[Wire crossing bug hunting, Component interface improvements, and new BOM features]]></description><link>https://blog.tscircuit.com/p/fixing-schematic-crossings-and-adding</link><guid isPermaLink="false">https://blog.tscircuit.com/p/fixing-schematic-crossings-and-adding</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Sun, 17 Nov 2024 00:00:03 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/151759847/a66631dbf2d48aae316223228f31ca1b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Seve tackles two major tasks: fixing incorrect schematic wire crossings and adding a bill of materials view to the snippets interface. After spending 2 hours trying to fix crossing rendering issues (ultimately putting a $50 bounty on the complete fix), he shifts focus to improving the snippets UI. He implements a new dropdown menu system that houses the BOM view, circuit JSON, and error display, using the more modern horizontal ellipsis (&#8943;) instead of a hamburger menu. The BOM implementation includes clickable JLCPCB part numbers and a clean tabular layout. Throughout the stream, Seve demonstrates his workflow using AI assistance for code generation while maintaining high standards for UX details like consistent spacing, dropdown behavior, and error indication. Notable discussion topics include proper junction rendering, wire crossing edge cases, and the evolution of menu icons in modern web interfaces.</p>]]></content:encoded></item><item><title><![CDATA[Getting Started with tscircuit Core, Props and Circuit Json]]></title><description><![CDATA[Adding Battery Component to TSCircuit: A Deep Dive into Core, Props, and CircuitJSON]]></description><link>https://blog.tscircuit.com/p/getting-started-with-tscircuit-core</link><guid isPermaLink="false">https://blog.tscircuit.com/p/getting-started-with-tscircuit-core</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Thu, 17 Oct 2024 18:08:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/150365414/cddbb6ac57cec7af33985e0b88f3b63d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this episode, Seve walks through the process of adding a battery component to TSCircuit. He demonstrates the intricate dance between the Core, Props, and CircuitJSON repositories, showcasing how to properly implement and integrate a new component across all three.</p><ul><li><p><strong>00:00:00</strong> - Introduction and overview of TS Circuit Core.</p></li><li><p><strong>00:00:35</strong> - Explanation of the task: Adding battery support to TS Circuit.</p></li><li><p><strong>00:01:20</strong> - Writing tests in TS Circuit Core.</p></li><li><p><strong>00:02:06</strong> - Snapshot and schematic test creation.</p></li><li><p><strong>00:03:39</strong> - Choosing component footprints (discussion about Axial and 0805).</p></li><li><p><strong>00:04:54</strong> - Debugging: Unsupported component type (battery).</p></li><li><p><strong>00:05:32</strong> - Creating a new battery component file.</p></li><li><p><strong>00:06:17</strong> - Debugging missing types and switching imports to CircuitJSON.</p></li><li><p><strong>00:08:00</strong> - Discussion of component definitions and TS Circuit Props.</p></li><li><p><strong>00:10:12</strong> - Registering the battery component in the JSX intrinsic file.</p></li><li><p><strong>00:12:58</strong> - Adding and testing schematic snapshot.</p></li><li><p><strong>00:17:09</strong> - Snapshot test failures and debugging.</p></li><li><p><strong>00:19:00</strong> - Overview of the TS Circuit Core architecture and render phases.</p></li><li><p><strong>00:21:00</strong> - Jumping to Props Repo to define battery-related properties.</p></li><li><p><strong>00:27:12</strong> - Implementing the battery in CircuitJSON.</p></li><li><p><strong>00:32:05</strong> - Fixing type and barrel export issues.</p></li><li><p><strong>00:36:10</strong> - Merging PR and handling dependencies.</p></li><li><p><strong>00:40:07</strong> - Debugging schematic rendering and snapshot tests.</p></li><li><p><strong>00:50:02</strong> - Conclusion and final comments on snapshot and battery integration.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[KiCad Compatibility and PCB Manufacturing: Tscircuit's September Surge]]></title><description><![CDATA[Exploring Embershop18's KiCad Bridge and Shibo Software Dev's PCB Export Revolution]]></description><link>https://blog.tscircuit.com/p/kicad-compatibility-and-pcb-manufacturing</link><guid isPermaLink="false">https://blog.tscircuit.com/p/kicad-compatibility-and-pcb-manufacturing</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Mon, 07 Oct 2024 06:10:50 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149906006/5348f0a00a19a24b6f5757ebaf8af865.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this month's tscircuit development stream, Seve dives deep into the project's September 2024 contributions. We'll examine Embershop18's groundbreaking work on KiCad compatibility, allowing seamless conversion of tscircuit designs to KiCad format. Then, we'll explore Shibbo Software Dev's game-changing implementation of streamlined PCB manufacturing exports for JLC and PCBWay. Seve will break down the technical details of these updates, discuss their impact on tscircuit's accessibility, and showcase how these features bridge the gap between beginner-friendly design and professional-grade manufacturing. Don't miss this in-depth look at tscircuit's evolving ecosystem and the brilliant minds shaping its future.</p>]]></content:encoded></item><item><title><![CDATA[tscircuit Snippets - Save functionality, navigation improvements, and UI tweaks for the AI chat interface]]></title><description><![CDATA[AI-Powered Circuit Design: Enhancing the TS Circuit AI UI]]></description><link>https://blog.tscircuit.com/p/tscircuit-snippets-save-functionality</link><guid isPermaLink="false">https://blog.tscircuit.com/p/tscircuit-snippets-save-functionality</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Sun, 06 Oct 2024 03:01:36 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149864014/dbf988ae440d5064c8a5f8cf44e938b3.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Seve focuses on improving the AI-powered circuit design interface for TS Circuit. He implements the save snippet functionality, adds an "Edit with AI" button to the editor, and creates a new snippet link component for consistent styling. Seve also tackles UI challenges like repositioning toast notifications and refining button styles. He discusses the "select an expert" pattern for AI prompts and plans for benchmarking prompt effectiveness. The stream concludes with Seve spending $0.09 on AI usage and contemplating future improvements, including custom keyboard design using the tool.</p>]]></content:encoded></item><item><title><![CDATA[Build 3d Electronics Models with React - Introduction to jscad-electronics and jscad-fiber]]></title><description><![CDATA[Bending Wires and Breaking Barriers: Implementing Axial Resistors with JSCAD Fiber]]></description><link>https://blog.tscircuit.com/p/build-3d-electronics-models-with</link><guid isPermaLink="false">https://blog.tscircuit.com/p/build-3d-electronics-models-with</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Fri, 04 Oct 2024 06:05:28 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149794075/d1824fa0c80ee47f741d00e633b41336.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this deep-dive episode, Seve tackles the implementation of an axial resistor model for the TSCircuit JSCAD Electronics library. Watch as he navigates through multiple repositories, enhancing JSCAD Fiber with new features like extrude-from-slices and rotation support for cylinders. Seve demonstrates real-time problem-solving, from debugging type errors to refining 3D geometries. Highlights include creating a parameterized resistor model that adapts to different pin distances, and a candid discussion on balancing perfection with pragmatic development. This episode offers invaluable insights into open-source contribution workflows and the intricacies of 3D electronic component modeling.</p>]]></content:encoded></item><item><title><![CDATA[Unboxing the first React Custom Keyboard]]></title><description><![CDATA[Seve encounters unexpected challenges with his JLC-manufactured tscircuit keyboard]]></description><link>https://blog.tscircuit.com/p/unboxing-the-first-react-custom-keyboard</link><guid isPermaLink="false">https://blog.tscircuit.com/p/unboxing-the-first-react-custom-keyboard</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Thu, 03 Oct 2024 18:25:50 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149772982/58be88f106fbedba614a9ac14079b20f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>this unboxing stream, Seve inspects the custom keyboard PCB he ordered from JLC about a week ago. He discovers several issues with the board, including missing diodes, insufficient copper pads around plated holes for the Arduino Pro, and incorrectly sized holes for the key switches. Seve demonstrates the problems using a close-up camera view and discusses the necessary adjustments for future iterations. Despite the setbacks, he tests fitting keycaps onto switches and explains the components of a mechanical keyboard. This episode highlights the iterative nature of PCB design and manufacture, providing valuable insights for tscircuit enthusiasts following Seve's keyboard project.</p>]]></content:encoded></item><item><title><![CDATA[3D Component Rendering Marathon: Fixing DIP Packages and Footprint Strings]]></title><description><![CDATA[Seve battles coordinate flips, SVG paths, and JS-CAD integrations]]></description><link>https://blog.tscircuit.com/p/3d-component-rendering-marathon-fixing</link><guid isPermaLink="false">https://blog.tscircuit.com/p/3d-component-rendering-marathon-fixing</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Wed, 02 Oct 2024 22:11:20 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149713461/1e3006d782dcef0ee1f4d61bfde6a10a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this marathon 6-hour stream, Seve dives deep into improving 3D component rendering for TS Circuit. He spends a significant portion tackling issues with the DIP (Dual Inline Package) component, meticulously adjusting its geometry and struggling with coordinate system inconsistencies. Seve also extends footprint string support, adding implementations for 0402, 0603, and 0805 components.</p><p>The stream showcases the challenges of integrating multiple libraries, with Seve navigating between JS-CAD, Three.js, and custom React reconcilers. He encounters and fixes numerous rotation and positioning bugs across different component types. Viewers get an inside look at the iterative process of tweaking 3D models, including a detailed session on crafting the curved leads for the DIP package using expanded SVG strokes.</p><p>Seve also touches on project maintenance, updating dependencies, fixing CI/CD pipelines, and improving documentation. The stream concludes with a payoff as Seve finally gets to see the fruits of his labor - newly rendered 3D components in the TS Circuit snippets interface.</p><p>Throughout, Seve shares insights on open-source development, AI-assisted coding, and the intricacies of building a complex electronics design tool in TypeScript and React.</p>]]></content:encoded></item><item><title><![CDATA[Learn how to contribute to tscircuit's footprint]]></title><description><![CDATA[Seve tackles implementing "axial" inside the Typescript footprinter repo using Zod]]></description><link>https://blog.tscircuit.com/p/learn-how-to-contribute-to-tscircuits</link><guid isPermaLink="false">https://blog.tscircuit.com/p/learn-how-to-contribute-to-tscircuits</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Tue, 01 Oct 2024 05:00:58 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149648282/23c30fb7dc5d65c83f4a3303017c4d3d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>this dev stream, Seve dives deep into the footprinter repository by implementing the axial footprint. He walks through the entire process, from setting up the test file to creating the footprint function using Zod for type definitions. Seve demonstrates how to use the KiCad viewer for reference, debugs issues with plated holes rendering, and adds a basic silkscreen line. He also touches on updating dependencies, using Git effectively, and the importance of comprehensive testing. Throughout the stream, Seve shares insights on contributing to open-source projects, including tips on creating pull requests and the significance of proper documentation. This episode is particularly useful for contributors looking to understand the FootPrinter codebase and workflow.</p>]]></content:encoded></item><item><title><![CDATA[Build Electronics with Typescript & React for Hacktoberfest 2024]]></title><description><![CDATA[tscircuit is one of the best projects to get started in Open-Source, try contributing to 1 of these 5 repos!]]></description><link>https://blog.tscircuit.com/p/build-electronics-with-typescript</link><guid isPermaLink="false">https://blog.tscircuit.com/p/build-electronics-with-typescript</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Mon, 30 Sep 2024 06:31:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OmZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you ready to dive into the exciting world of open-source development? Look no further than tscircuit, one of the best projects to get started with for Hacktoberfest 2024!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OmZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OmZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 424w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 848w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OmZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png" width="580" height="447.5308641975309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1296,&quot;resizeWidth&quot;:580,&quot;bytes&quot;:636376,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OmZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 424w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 848w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!OmZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1bbc191-a845-4cab-80eb-e6ee5f8fde82_1296x1000.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">tscircuit is a lanuage</figcaption></figure></div><p></p><p><a href="https://tscircuit.com">tscircuit</a> offers a unique opportunity to learn Typescript and React while exploring the fascinating realm of electronics. Don't worry if you're new to electronics &#8211; no prior experience is necessary! If you&#8217;re experienced with Typescript, we&#8217;ve got some stuff for you too!</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ae05db2d-86b9-4b2e-b425-9fc028d54bd3&quot;,&quot;duration&quot;:null}"></div><h2>What is tscircuit?</h2><p>Think of tscircuit as "React for Electronics." It allows you to design real-world electronic circuits using Typescript and React. This is what tscircuit code looks like, instead of creating web element like &#8220;div&#8221;, you create circuit elements like &#8220;chip&#8221;, &#8220;resistor&#8221; or &#8220;capacitor&#8221;, then instead of rendering a website, we render a 3d circuit (that you can actually order!)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gtjg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gtjg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 424w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 848w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 1272w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gtjg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png" width="382" height="215.21607142857144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1120,&quot;resizeWidth&quot;:382,&quot;bytes&quot;:83772,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gtjg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 424w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 848w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 1272w, https://substackcdn.com/image/fetch/$s_!Gtjg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc032b8dc-40bb-4097-b9ac-a17d83112b75_1120x631.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zgsm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zgsm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 424w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 848w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zgsm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png" width="390" height="300.9259259259259" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1296,&quot;resizeWidth&quot;:390,&quot;bytes&quot;:636376,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zgsm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 424w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 848w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!Zgsm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2704a58d-01cf-483c-b4c5-2aa71e2385d8_1296x1000.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>With tscircuit, we've even designed a <a href="https://blog.tscircuit.com/p/battling-jlcs-assembly-interface">fully functional keyboard</a>! The best part? Once you've completed your design, you can export it to a manufacturer and bring your circuit to life in the real world. How cool is that?</p><h2>Why We're Participating in Hacktoberfest</h2><p><a href="https://github.com/tscircuit/tscircuit">tscircuit is a fully MIT open-source project</a>. We love the spirit of open-source and Hacktoberfest because we work completely in the open and share everything we do (we even do <a href="https://blog.tscircuit.com/s/devstreams">livestream development</a>). Also:</p><ul><li><p>We have hundreds of issues available, many of which require minimal coding experience</p></li><li><p>Every contribution you make is automatically tracked in our <a href="https://github.com/tscircuit/contribution-tracker">contribution-tracker</a> (and who doesn&#8217;t love a leaderboard!?!)</p></li><li><p>We have an awesome community (join <a href="https://tscircuit.com/join">the discord</a>!) of contributors and <a href="https://github.com/tscircuit/tscircuit/blob/main/docs/CONTRIBUTOR_PROGRAM.md">love to sponsor those passionate about open-source</a></p></li></ul><h2>Hacktoberfest Rewards</h2><p>We&#8217;re offering some rewards to contributors during hacktoberfest, the hacktoberfest rewards are separate from our <a href="https://github.com/tscircuit/tscircuit/blob/main/docs/CONTRIBUTOR_PROGRAM.md">Contributor Program</a> where you can get sponsored to work on tscircuit, but any contribution counts towards both!</p><p>For Hacktoberfest, we&#8217;re giving away hats and hoodies<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, here are the requirements for each:</p><ul><li><p><strong>tscircuit Hat</strong></p><ul><li><p><a href="https://github.com/tscircuit/tscircuit">Star tscircuit on Github</a></p></li><li><p><a href="https://tscircuit.com/join">Join Discord</a></p></li><li><p>Subscribe to this blog!</p></li><li><p>5 contributions of any impact level across 2 projects</p></li></ul></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V-i8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V-i8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V-i8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg" width="262" height="226.0392156862745" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1144,&quot;width&quot;:1326,&quot;resizeWidth&quot;:262,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!V-i8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V-i8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c1f8d7-29fd-4f7c-bde9-26804b215cd6_1326x1144.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">the tscircuit hat: symbolizes grit, determination, a willingness to use React for literally anything</figcaption></figure></div><ul><li><p><strong>tscircuit Hoodie</strong></p><ul><li><p>The hoodie symbolizes you are a tscircuit rockstar contributor, thank you for your contributions!</p></li><li><p>at least 20 contributions in 5 different repos, at least 5 major contributions</p></li><li><p>We&#8217;re still designing it! But it&#8217;s going to be awesome!!!</p></li></ul></li></ul><p></p><h2>Live Development and Code Reviews</h2><p>Throughout October our lead maintainer <a href="https://x.com/seveibar">Sev</a> will go over and merge pull requests live on <a href="https://twitch.tv/seveibar">Twitch</a>, <a href="https://x.com/seveibar">Twitter</a> and <a href="https://youtube.com/@seveibar">Youtube</a>! He'll also be doing some live development sessions!</p><ul><li><p>Check out all of our <a href="https://blog.tscircuit.com/s/devstreams">previous livestreams here</a></p></li><li><p>Join the <a href="https://tscircuit.com/join">Discord</a> to know when we go live!</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.tscircuit.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Want to know when our big release happens?</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>How you can contribute</h2><p>I&#8217;m going to walk you through contributing to each project. I&#8217;ve organized the projects from Easy to Hard based on how difficult it&#8217;s been to get someone their first contribution. Generally if you&#8217;ve worked in a big Typescript codebase, the Hard issues should be no problem for you, but if you&#8217;re new to Typescript/React you should start on the Easy issues.</p><p></p><h3>Help us build the largest library of <a href="https://github.com/tscircuit/schematic-symbols">schematic symbols</a>!</h3><p>Difficulty: &#11088; (easy) &#183; <a href="https://github.com/tscircuit/schematic-symbols/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/schematic-symbols">Repo</a></p><p>tscircuit is creating the largest dataset of permissively-open schematic symbols, and we need your help to make them!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KsaB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KsaB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 424w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 848w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 1272w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KsaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png" width="403" height="217.83035714285714" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1456,&quot;resizeWidth&quot;:403,&quot;bytes&quot;:138378,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KsaB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 424w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 848w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 1272w, https://substackcdn.com/image/fetch/$s_!KsaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774b05e4-d733-4a30-9d3b-0225ea416208_1758x950.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Schematic Symbols are the LIFE BLOOD of electronic design software! Help us make more!!</figcaption></figure></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;f149c2c1-d97e-4054-9695-1c3d578b50cf&quot;,&quot;duration&quot;:null}"></div><p></p><h3>Medium: Glue chips to circuit boards with <a href="https://github.com/tscircuit/footprinter">footprinter</a>!</h3><p>Difficulty: &#11088;&#11088; (medium) &#183; <a href="https://github.com/tscircuit/footprinter/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/footprinter">Repo</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-x44!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-x44!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 424w, https://substackcdn.com/image/fetch/$s_!-x44!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 848w, https://substackcdn.com/image/fetch/$s_!-x44!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 1272w, https://substackcdn.com/image/fetch/$s_!-x44!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-x44!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png" width="393" height="317.12916666666666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1162,&quot;width&quot;:1440,&quot;resizeWidth&quot;:393,&quot;bytes&quot;:52110,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-x44!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 424w, https://substackcdn.com/image/fetch/$s_!-x44!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 848w, https://substackcdn.com/image/fetch/$s_!-x44!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 1272w, https://substackcdn.com/image/fetch/$s_!-x44!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf59df43-4ff4-4fe3-ae15-21db3409f0c1_1440x1162.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Write a program that generates these pad patterns for soldering chips!</figcaption></figure></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4d75ba5f-33b2-478b-89f5-7c7fc7db8f6d&quot;,&quot;caption&quot;:&quot;Learn how to contribute to footprinter!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Learn how to contribute to tscircuit's footprint&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:9123447,&quot;name&quot;:&quot;Seve&quot;,&quot;bio&quot;:&quot;Founder https://tscircuit.com (React &amp; AI for Electronic Design)\nPodcast Host https://electronics.dev\nPrev: Founding CTO https://seam.co&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79d6691b-ec2b-48dc-8be2-2a7eb837d7e9_600x605.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-01T05:00:58.516Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/149648282/a84b9c07-8a58-4a2d-bef5-b8e6c0f468c3/transcoded-00001.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.tscircuit.com/p/learn-how-to-contribute-to-tscircuits&quot;,&quot;section_name&quot;:&quot;Dev Streams&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:149648282,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;tscircuit&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36a71573-6616-468e-bca4-830d84fb3572_612x612.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h3>3d Modeling Chips with React with <a href="https://github.com/tscircuit/jscad-electronics">jscad-electronics</a></h3><p>Difficulty: &#11088;&#11088; (medium) &#183; <a href="https://github.com/tscircuit/jscad-electronics/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/jscad-electronics">Repo</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eUw2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eUw2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 424w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 848w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 1272w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eUw2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png" width="387" height="268.4546703296703" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1010,&quot;width&quot;:1456,&quot;resizeWidth&quot;:387,&quot;bytes&quot;:214975,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eUw2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 424w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 848w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 1272w, https://substackcdn.com/image/fetch/$s_!eUw2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd32d6768-31f6-4666-9457-828e2920fb16_2252x1562.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Building 3d chips in React? Where do I sign up?!</figcaption></figure></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;487f70ec-cae7-48fe-b660-a6bd8091b229&quot;,&quot;caption&quot;:&quot;In this deep-dive episode, Seve tackles the implementation of an axial resistor model for the TSCircuit JSCAD Electronics library. Watch as he navigates through multiple repositories, enhancing JSCAD Fiber with new features like extrude-from-slices and rotation support for cylinders. Seve demonstrates real-time problem-solving, from debugging type error&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Build 3d Electronics Models with React - Introduction to jscad-electronics and jscad-fiber&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:9123447,&quot;name&quot;:&quot;Seve&quot;,&quot;bio&quot;:&quot;Founder https://tscircuit.com (React &amp; AI for Electronic Design)\nPodcast Host https://electronics.dev\nPrev: Founding CTO https://seam.co&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79d6691b-ec2b-48dc-8be2-2a7eb837d7e9_600x605.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-04T06:05:28.592Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/149794075/21255100-158f-4b5c-acfb-39f453bedacf/transcoded-1728021914.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.tscircuit.com/p/build-3d-electronics-models-with&quot;,&quot;section_name&quot;:&quot;Dev Streams&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:149794075,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;tscircuit&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36a71573-6616-468e-bca4-830d84fb3572_612x612.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h3>Help build our tscircuit command line and web dev tool!</h3><p>Difficulty: &#11088;&#11088;<strong>+</strong> (medium-hard) &#183; <a href="https://github.com/tscircuit/cli/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/cli">Repo</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gy7t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gy7t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 424w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 848w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gy7t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png" width="379" height="295.51982378854626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1062,&quot;width&quot;:1362,&quot;resizeWidth&quot;:379,&quot;bytes&quot;:798121,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gy7t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 424w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 848w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!gy7t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411383e0-4fb5-4cf3-8a50-b515500e2b16_1362x1062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><blockquote><p>Video coming soon! Take a look at the issues/message on discord if you need help!</p></blockquote><h3>Build real circuits! Help us <a href="https://github.com/tscircuit/docs">make tutorials</a> for getting started with tscircuit! &#11088;&#11088;&#11088;</h3><p>Difficulty: &#11088;&#11088;&#11088; (hard) &#183; <a href="https://github.com/tscircuit/docs/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/docs">Repo</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mMIp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mMIp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 424w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 848w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 1272w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mMIp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png" width="429" height="312.9107142857143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1062,&quot;width&quot;:1456,&quot;resizeWidth&quot;:429,&quot;bytes&quot;:771238,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mMIp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 424w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 848w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 1272w, https://substackcdn.com/image/fetch/$s_!mMIp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c499bb6-b749-4087-a156-d268459f06ac_2306x1682.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Video not required!</figcaption></figure></div><p></p><blockquote><p>Video coming soon!</p></blockquote><h3>Improve the website for <a href="https://github.com/tscircuit/snippets">sharing code snippets</a> with a built-in editor!</h3><p>Difficulty: &#11088;&#11088;&#11088; (hard) &#183; <a href="https://github.com/tscircuit/snippets/issues">Issues</a> &#183; <a href="https://github.com/tscircuit/snippets">Repo</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qRyV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qRyV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 424w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 848w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qRyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png" width="479" height="287.2026098901099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:1456,&quot;resizeWidth&quot;:479,&quot;bytes&quot;:613500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qRyV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 424w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 848w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!qRyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0153e391-7afe-4ed3-83e7-1a41a9ef7a39_2364x1418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><blockquote><p>Video coming soon!</p></blockquote><h3>tscircuit core &#128640;</h3><p>Difficulty: &#11088;&#11088;&#11088; &#183; <a href="https://github.com/tscircuit/core">Repo</a> &#183; <a href="https://github.com/tscircuit/core/issues">Issues</a></p><p>This is the core of tscircuit, where all the magic happens. This is where technical stuff like layout, autorouting, generation of Circuit JSON and interpreting the React into classes happens.</p><h3>Typescript File Format Converters</h3><p>Difficulty: &#11088;&#11088;&#11088;&#11088; (hardcore) &#183; <a href="https://github.com/tscircuit/kicad-converter">Repo (kicad-converter)</a> &#183; <a href="https://github.com/tscircuit/circuit-json-to-gerber">Repo (circuit-json-to-gerber)</a></p><p>Want to go above and beyond? Make a dent in tscircuit so big that you could see it from space? Improve our file format converters! This requires good Typescript knowledge and learning other file formats used in electronics design. <strong>In short: It&#8217;s hardcore</strong></p><p></p><h2>FAQ</h2><ul><li><p><strong>I want to work on frontend code! Where can I do that?</strong></p><ul><li><p>There are two major frontend projects in tscircuit, the <a href="https://github.com/tscircuit/cli">Dev Tool</a> (note: the repo is called &#8220;cli&#8221; but it actually has the most frontend code!) and the <a href="https://github.com/tscircuit/snippets">Snippets Website</a></p></li></ul></li><li><p><strong>I know Python, can I write Python here?</strong></p><ul><li><p>No! But you can learn Typescript!</p></li></ul></li><li><p><strong>How hard is it to contribute?</strong></p><ul><li><p>Some issues are easy, you don&#8217;t even need to know how to code! Other issues will require familiarity with Typescript and some dedicated time.</p></li></ul></li><li><p><strong>How does tscircuit work?</strong></p><ul><li><p>We wrote a whole blog post about <a href="https://blog.tscircuit.com/p/how-tscircuit-works-compiling-functional">how tscircuit works here!</a></p></li></ul></li><li><p><strong>Will I get paid if I contribute to tscircuit?</strong></p><ul><li><p>You may be able to get sponsored if you&#8217;re eligible for the <a href="https://github.com/tscircuit/tscircuit/blob/main/docs/CONTRIBUTOR_PROGRAM.md">tscircuit Contributor Program</a> (note: Github Sponsors must be enabled on your github profile, you must have at least 4 contributions, see the attached doc for more details)</p></li></ul></li><li><p><strong>How can I find an issue?</strong></p><ul><li><p>First, pick a project based on your skill level. Watch the video for the project above to understand how to get started. Then look for the tag &#8220;good first issue&#8221; on the issues page for that project.</p></li><li><p>I almost always recommend starting with the <a href="https://github.com/tscircuit/schematic-symbols">schematic-symbols</a> project, it has the most issues and is the easiest to get started with. If you&#8217;re looking for more of a challenge, try <a href="https://github.com/tscircuit/jscad-electronics">jscad-electronics</a>, <a href="https://github.com/tscircuit/footprinter">footprinter</a> the <a href="https://github.com/tscircuit/cli">command line/dev server</a>, or the <a href="https://github.com/tscircuit/snippets">snippets website</a></p></li></ul></li><li><p><strong>Where learn how to develop, run projects etc?</strong></p><ul><li><p>Usually the project will have a README that helps you run it, but almost every project works the same way where you just run &#8220;bun install&#8221; then &#8220;bun test&#8221; or &#8220;bun start&#8221;. You can <a href="https://bun.sh/docs/installation">install bun here</a></p></li><li><p>Check out our <a href="https://blog.tscircuit.com/s/devstreams">development live streams</a>, they&#8217;re really helpful because you can see how <a href="https://x.com/seveibar">Sev</a> (the lead maintainer) works in real time!</p></li><li><p>If you run into bugs, you should ask an AI such as <a href="https://claude.ai">Claude</a> or <a href="https://chatgpt.com">ChatGPT</a>, they&#8217;re really good at coding and can help you with almost any question instantly!</p></li></ul></li></ul><p></p><h2>Ready to Get Started?</h2><p>We hope this introduction has sparked your interest in becoming a tscircuit contributor! Remember, we're always here to help in our <a href="https://tscircuit.com/join">Discord community</a> and on <a href="https://github.com/tscircuit/tscircuit/discussions">Github Discussions</a>. Let's make Hacktoberfest 2024 an amazing journey of learning and collaboration!</p><p>Happy hacking!</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.tscircuit.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.tscircuit.com/subscribe?"><span>Subscribe now</span></a></p><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>We currently can only ship to the U.S. but we are working on shipping internationally. Stay tuned on the <a href="https://tscircuit.com/join">discord</a> to hear when international shipping is available.</p></div></div>]]></content:encoded></item><item><title><![CDATA[How to contribute to Schematic Symbols]]></title><description><![CDATA[Seve Walks Through the Schematic Symbol Contribution Process]]></description><link>https://blog.tscircuit.com/p/how-to-contribute-to-schematic-symbols</link><guid isPermaLink="false">https://blog.tscircuit.com/p/how-to-contribute-to-schematic-symbols</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Mon, 30 Sep 2024 06:08:36 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149594344/21b21885cad7e66e345f862ca1163a54.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this episode, Seve guides viewers through creating a photodiode symbol for the <a href="https://github.com/tscircuit/schematic-symbols">Schematic Symbols project</a>. He covers the entire process, from selecting an issue on GitHub to submitting a pull request. Key topics include:</p><ol><li><p>Choosing and researching a symbol (photodiode) from the issues list</p></li><li><p>Creating and editing the SVG file in Inkscape</p></li><li><p>Generating TypeScript files using 'bun run generate'</p></li><li><p>Adjusting text positioning and anchors in both horizontal and vertical orientations</p></li><li><p>Fixing rendering issues in the vertical layout</p></li><li><p>Best practices for symbol design and text placement</p></li><li><p>Committing changes and creating a pull request with the 'fixes' keyword</p></li></ol><p>Seve also touches on potential improvements for the volt meter symbol and discusses the importance of readability in rotated components. This episode provides an in-depth look at contributing to the schematic symbols project for experienced TSCircuit developers.</p>]]></content:encoded></item><item><title><![CDATA[Battling Winter(spec) Blues: Fake API Adventures]]></title><description><![CDATA[Seve wrestles with Winterspec, Zustand, and TypeScript to build a fake API for the TS Circuit snippet server]]></description><link>https://blog.tscircuit.com/p/battling-winterspec-blues-fake-api</link><guid isPermaLink="false">https://blog.tscircuit.com/p/battling-winterspec-blues-fake-api</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Thu, 26 Sep 2024 15:09:23 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149431934/5e833c616383e5d9ea9a20851742aad8.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this dev stream, Seve dives deep into setting up a fake API for the TS Circuit snippet server. He grapples with Winterspec configuration, debugs TypeScript errors, and implements stateful middleware for the Vite development server. Highlights include fixing common params in Winterspec, adapting the Vite config to use plugins instead of proxies, and redesigning the snippet schema to better handle owner and name properties. Seve also touches on future plans for TS Circuit, including daily circuit designs and potential lab streams. Despite some "in the weeds" moments, Seve makes significant progress in getting the fake API functional, setting the stage for implementing save functionality and additional pages in future streams</p>]]></content:encoded></item><item><title><![CDATA[Launching snippets.tscircuit.com: Browser-Based Circuit Design with React]]></title><description><![CDATA[Battling minification bugs and implementing URL compression for shareable snippets]]></description><link>https://blog.tscircuit.com/p/launching-snippetstscircuitcom-browser</link><guid isPermaLink="false">https://blog.tscircuit.com/p/launching-snippetstscircuitcom-browser</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Wed, 25 Sep 2024 19:25:02 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149408505/d1cfa72eabe7819d4efe1097bf09912f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this marathon 4.5-hour stream, Seve builds and deploys snippets.tscircuit.com, a browser-based playground for creating circuits using React and TS Circuit. He implements in-browser TSX compilation, 2D/3D circuit rendering, and URL-based snippet sharing. Along the way, Seve encounters and resolves tricky minification bugs related to component naming in production builds. He also explores potential integrations with Valtown and discusses the challenges of server-side rendering for dynamic content. The stream culminates in a successful deployment, demonstrating the creation and sharing of circuit snippets entirely in the browser</p>]]></content:encoded></item><item><title><![CDATA[Battling JLC's Assembly Interface: Ordering the First TS Circuit Keyboard]]></title><description><![CDATA[Working through lots of issues as we try to order the first tscircuit keyboard]]></description><link>https://blog.tscircuit.com/p/battling-jlcs-assembly-interface</link><guid isPermaLink="false">https://blog.tscircuit.com/p/battling-jlcs-assembly-interface</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Tue, 24 Sep 2024 03:34:15 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149330806/927d5dec871467012fb8bd0196e7fa29.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this stream, Seve finally orders the first custom 9-key keyboard designed with TS Circuit. He tackles several challenges, including fixing a bug in the merge_routes function to properly add vias during layer changes. Despite successful auto-routing, Seve encounters issues with JLC PCB's assembly interface, forcing him to manually adjust component placements. He explores alternatives like PCB Way before ultimately succeeding with JLC using KiCad-exported Gerbers. The stream concludes with Seve placing a $62 order for two assembled PCBs and discussing future improvements for TS Circuit's output compatibility with manufacturers</p>]]></content:encoded></item><item><title><![CDATA[Bun FFI Benchmarking: Optimizing tscircuit's Auto-Router]]></title><description><![CDATA[Exploring the potential of Bun's new Foreign Function Interface for speeding up obstacle detection]]></description><link>https://blog.tscircuit.com/p/bun-ffi-benchmarking-optimizing-tscircuits</link><guid isPermaLink="false">https://blog.tscircuit.com/p/bun-ffi-benchmarking-optimizing-tscircuits</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Wed, 18 Sep 2024 21:41:26 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/149075530/28caea34ae6f35a4fb958a7b0aec5b2b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this dev stream, Seve dives into Bun's newly released Foreign Function Interface (FFI) to see if it can optimize tscircuit's auto-routing algorithms. He focuses on porting the <code>getObstacleAt</code> function to C and benchmarks its performance against pure JavaScript implementations in both Bun and Node.js (V8). Seve encounters several challenges, including type issues with Bun's FFI, C compilation flags, and unexpected optimization behaviors. He also explores different methods of passing data between JavaScript and C, and discusses the intricacies of accurate performance measurement. Despite initial expectations, the results show that the C implementation doesn't significantly outperform the JavaScript versions, leading to insights about V8's optimization capabilities and the complexities of cross-language optimization.</p>]]></content:encoded></item><item><title><![CDATA[KiCad Integration: Parsing and Exporting Kicad PCB to and from Circuit JSON]]></title><description><![CDATA[Bridging TS Circuit and KiCad with AI-assisted development]]></description><link>https://blog.tscircuit.com/p/kicad-integration-parsing-and-exporting</link><guid isPermaLink="false">https://blog.tscircuit.com/p/kicad-integration-parsing-and-exporting</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Tue, 17 Sep 2024 04:22:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/148990846/bff726cb115a7741f6d8f47b8341531c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this 2-hour coding session, Seve tackles the challenge of integrating KiCad file formats with TS Circuit. He starts by using ChatGPT's 01 preview to generate an initial KiCad PCB parser, then iteratively debugs and refines the code to convert between CircuitJSON and KiCad's S-expression format. Key highlights include:</p><ul><li><p>Implementing KiCad PCB to CircuitJSON conversion</p></li><li><p>Debugging pad and footprint positioning issues</p></li><li><p>Adding layer mapping and support for SMT pads</p></li><li><p>Creating a CircuitJSON to KiCad PCB exporter</p></li><li><p>Discussing future plans for design rule checks and error visualization</p></li></ul><p>Seve demonstrates real-time problem-solving, leveraging AI tools, and shares insights on naming conventions, type safety, and maintaining backwards compatibility. The stream concludes with a successfully imported circuit in KiCad and plans for further refinement of the integration.</p>]]></content:encoded></item><item><title><![CDATA[Debugging Auto-Routing in TSCircuit: Implementing Debug SVGs for Algorithm Visualization]]></title><description><![CDATA[Deep Dive into Circuit to SVG, Fabrication Notes, and Auto-Router Debugging]]></description><link>https://blog.tscircuit.com/p/debugging-auto-routing-in-tscircuit-955</link><guid isPermaLink="false">https://blog.tscircuit.com/p/debugging-auto-routing-in-tscircuit-955</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Wed, 11 Sep 2024 18:06:23 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/148777296/68651f589b39199d88b4b88e3448a3e7.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this developer stream, Seve guides contributors through critical improvements to the TSCircuit project, focusing on enhancing the auto-routing algorithm's debugging capabilities. Key highlights include:</p><ol><li><p>Implementing fabrication note paths and text in Circuit to SVG, improving visualization of debug information.</p></li><li><p>Refactoring Circuit to SVG to handle element ordering, ensuring proper layering of components.</p></li><li><p>Fixing issues with path closing in fabrication notes and silkscreen elements.</p></li><li><p>Creating a debug SVG function to visualize each step of the auto-routing algorithm, providing invaluable insights for debugging and optimization.</p></li><li><p>Addressing the challenge of routing traces in a custom 9-key keyboard design, showcasing real-world application of the improvements.</p></li><li><p>Discussion on maintaining code stability across multiple repositories while rapidly iterating on features.</p></li></ol><p>This stream is perfect for TSCircuit contributors looking to understand the intricacies of the project's visualization and debugging tools, as well as the auto-routing algorithm's inner workings. Seve demonstrates practical problem-solving, refactoring techniques, and the importance of visualization in complex algorithm development.</p>]]></content:encoded></item><item><title><![CDATA[Debugging Auto-Routing in TSCircuit: Fabrication Notes & SVG Visualization]]></title><description><![CDATA[Implementing Fabrication Note Components and Analyzing I-Jump A* Algorithm Behavior]]></description><link>https://blog.tscircuit.com/p/debugging-auto-routing-in-tscircuit</link><guid isPermaLink="false">https://blog.tscircuit.com/p/debugging-auto-routing-in-tscircuit</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Wed, 11 Sep 2024 04:01:01 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/148752761/80906c8bbedec835d05cc4d7cbb670f3.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this deep dive into TSCircuit development, Seve tackles several intricate issues related to the auto-routing algorithm and component implementation. The video covers:</p><ol><li><p>Fixing a bug causing duplicate traces in the auto-router output</p></li><li><p>Implementing fabrication note text and path components in TS-Circuit Core</p></li><li><p>Creating tests for the new fabrication note components</p></li><li><p>Exploring the auto-routing dataset viewer with debug mode enabled</p></li><li><p>Analyzing the I-Jump A* algorithm's behavior in complex routing scenarios</p></li><li><p>Identifying and reproducing a specific auto-routing issue where traces get too close to obstacles</p></li><li><p>Discussing potential improvements to the goal-passing problem in the auto-router</p></li></ol><p>Seve demonstrates advanced debugging techniques, including using the auto-routing dataset viewer to step through algorithm iterations and visualize routing decisions. He also touches on the challenges of developing interdependent modules in the TSCircuit ecosystem.</p><p>This video is particularly useful for contributors looking to understand the intricacies of the auto-routing algorithm, implement new components in TS-Circuit Core, and improve debugging workflows for complex PCB design scenarios.</p>]]></content:encoded></item><item><title><![CDATA[Multi-Layer PCB Routing in TSCircuit: Fixing Circuit-to-SVG & Auto-Routing Algorithms]]></title><description><![CDATA[A 3-hour deep dive into implementing layer-specific obstacle avoidance and fixing trace and pad rendering inside of circuit-to-svg]]></description><link>https://blog.tscircuit.com/p/multi-layer-pcb-routing-in-tscircuit</link><guid isPermaLink="false">https://blog.tscircuit.com/p/multi-layer-pcb-routing-in-tscircuit</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Mon, 09 Sep 2024 22:47:53 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/148701004/bf39ced950161e7fa54c1d296021b949.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this extensive development stream, Seve guides contributors through a complex implementation of multi-layer PCB routing in TSCircuit. The video covers:</p><ol><li><p>Debugging and fixing the Circuit-to-SVG library to properly render traces on different layers with correct colors</p></li><li><p>Refactoring the auto-routing data set to support layer-specific obstacles</p></li><li><p>Implementing layer information in the I-Jump A* algorithm for multi-layer routing</p></li><li><p>Testing and verifying the new multi-layer routing capabilities</p></li></ol><p>Key technical aspects covered include:</p><ul><li><p>Modifying SVG generation to support layer-specific rendering</p></li><li><p>Refactoring obstacle definitions in the auto-routing algorithm</p></li><li><p>Updating the Simple Route JSON format to include layer information</p></li><li><p>Implementing layer-aware obstacle avoidance in the I-Jump A* algorithm</p></li><li><p>Debugging cross-repo dependencies and fixing build processes</p></li></ul><p>This video is ideal for contributors familiar with TSCircuit's codebase and looking to understand the intricacies of implementing multi-layer PCB routing. It showcases real-time problem-solving and the iterative nature of complex feature implementation across multiple interconnected libraries.</p>]]></content:encoded></item><item><title><![CDATA[Implementing Hover Highlights and Trace Hints in tscircuit: Core Module Refactoring]]></title><description><![CDATA[Seve deep dives into PCB rendering phases, artifact management, and local development workflows]]></description><link>https://blog.tscircuit.com/p/implementing-hover-highlights-and</link><guid isPermaLink="false">https://blog.tscircuit.com/p/implementing-hover-highlights-and</guid><dc:creator><![CDATA[Seve Ibarluzea]]></dc:creator><pubDate>Mon, 09 Sep 2024 05:00:28 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/148669394/8e1c04cd85edb4d1c65ce26ed37c1d9a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this in-depth development stream, Seve guides contributors through significant improvements to the tscircuit project, focusing on two main areas:</p><ol><li><p>Hover Highlights Implementation:</p></li></ol><ul><li><p>Refactoring the PCB drawing object to include mouse interaction properties</p></li><li><p>Creating a new render phase for inserting trace hints</p></li><li><p>Implementing color manipulation for highlighted elements using the color library</p></li><li><p>Discussing the importance of net list generation for connected element highlighting</p></li></ul><ol start="2"><li><p>Trace Hints Rendering:</p></li></ol><ul><li><p>Fixing the issue of trace hints not being drawn in the edit traces view</p></li><li><p>Refactoring the core module to create trace hint classes from manual trace hints props</p></li><li><p>Adjusting render phases to ensure proper order of operations (port matching, trace hint insertion)</p></li><li><p>Adding PCB trace hints to the soup and ensuring correct ID assignment</p></li></ul><p>Throughout the stream, Seve demonstrates best practices for:</p><ul><li><p>Writing and updating tests to verify new functionality</p></li><li><p>Managing artifacts and improving code organization</p></li><li><p>Local development workflows using yalc for testing changes before PR merges</p></li><li><p>Addressing TypeScript challenges and improving type safety</p></li></ul><p>This video is ideal for contributors looking to understand the intricacies of tscircuit's rendering pipeline and those interested in advanced React and TypeScript development techniques in the context of electronic design automation.</p>]]></content:encoded></item></channel></rss>