We have been at home self-isolating for two months now. I have been dealing with a lot of anxiety with the pandemic, but trying to stay busy and cutting down tv time has been incredibly motivating.
I’ve spent my free time building a PCB design platform that is live at Cadstrom.io. I’ve been working on this with @MichaelBlouin. Our first feature set is nearing completion. It’s completely free for designers and provides:
- 📸 Image generation for schematics and boards on every change
- ⚡ Automatic electrical and design rule checks on every change
- 🦅 Support for EagleCAD
- Integration with GitHub.
You can check out my test project publicly without using sign in.
It has been quite the journey coming this far! I had done basic circuit design in University, but this was a complicated field to revisit and it has significant software challenges. Drawing the circuit design means parsing the same data EagleCAD parses. Building rule checks requires understanding the ins and outs of what each design rule provides.
For the image generation, I built a React package that renders the given EagleCad schematic or board. This allows our service to render the data and I will later use the same package on the web portal to provide similar behavior. Works well so far! Something I think is really cool is how we can combine the rule check and image generation to let designers present the state of their project right on Github!
Example repo. The ‘design rules’ tag and generated image will always match the latest changes on the master branch.
And the geometry! Design rule checks ensure there is sufficient clearance between copper components, so you have to create complex shapes and also compare the distance between them. The cad tool also shows where the intersection occurs, and recreating this has given me nightmares. But I enjoy graph problems and this is just one of those!
This shows the behavior I have been recreating - calculating the precise intersection of a clearance error. I’ll have this drawn to the frontend at some point, but for now I need the location so that errors can be identified and approved.
Anyways, I hope this format makes for more posts from me in the future. Bit friendlier, bit less detailed. ✌