I wrote a quick tool some years back (2013, as far as I can tell) to generate a list of cuts for a set of shelves I was building. At the end of that weekend, I threw it up on my website and basically forgot about it. After awhile, search engines indexed it and it started finding a regular audience. In the years since, I've made a handful of enhancements to the original tool and made several attempts at a from-scratch rewrite that would address some glaring flaws in the original design. None of those attempts were successful until now (2020).
In keeping with the spirit of the initial release all those years ago, my intention is to keep this tool free for anyone to use forever. However, some features that people have requested sound interesting to make but to justify the cost they'll end up as for-pay extra features for those who are interested. This could be more effective algorithms, specialized user interface features, or custom integrations for other applications.
Additionally, I'll be adding advertising to the free tool. In a user survey I conducted a few years back, the majority of respondents indicated that they found this acceptable. If you want to block that advertisement, you can. Also, when you create an account, you'll have the option for whether to see the ads or not. I don't want the ads to ever get in the way of your use of the tool and I would rather you not see them if you aren't interested.
If you are interested in what's planned for the future, you can see the development plan.
I don't want your data. Creating and using an account is optional and is only in support of having a separate place for you to store things if you want. I do log usage to identify which features are being used, to help me decide what to work on next.
If you don't want advertising, I completely understand. Privacy is your right and I'm on your side. If you create an account and log in, the advertising is completely removed from the page for you. I hope this is satisfactory.
The algorithm from the original tool has been ported into this new architecture (as the "Legacy" algorithm) but it still operates the same way.
It starts with a couple of sanity checks, ensuring that at least one available stock is provided, at least one component is requested, and the longest requested component is shorter than the longest piece of available stock. If any of those fails, the algorithm bails out immediately.
The rest of the algorithm is cyclical — it performs a set of actions in a loop until it is complete. Each iteration starts by creating a new instance of the longest stock, then places as many pieces into it as will fit. That stock is then reduced to the smallest stock that all of the selected pieces still fit into. This is all repeated until no pieces remain.
This algorithm makes some assumptions that don't always hold up. It assumes that longer stock lengths are more desirable (they are often more cost effective but this is not universally true).
While I haven't released this under any sort of open source license and legally retain ownership of my work, I have no intention of defending any of this against any reasonable reuse, commercial or otherwise. I plan to release it under some form of the creative commons license eventually, but in the interim you can feel free to adapt it however you want. I enjoy the emails I get from people who have modified it to some other purpose but you don't even have to do that. The code is all there on the page for you to have and I'm happy it's doing so much good for so many people.
If you want explicit legal permission to make derivative work based on my code or something else along those lines, you can email me at firstname.lastname@example.org and I'll oblige.