Prototype: Cloud Builder Spreadsheet

Hi gang,

Before I go too deep down this rabbit hole, I wanted your feedback on a pcpartpicker-like compatibility-checker builder google spreadsheet I’m putting together, that anyone here can use/modify.

Wondering how you organize your purchasing/procurement and maybe inventory(?) using spreadsheets, if at all; as I’m starting to lose track of things in my 5 node home cluster.

Idea is to select a CPU like so:

Which will then filter out all the incompatible motherboards from the motherboards cell (a data validation drop-down tick appears to select compatible motherboards):


Whereas before, it listed all available ones:

That’s the idea I would appreciate your feedback on, especially if you went through a similar process recently and had to work out all the details in your head(?)

What compatibility criteria did you care most about, and why?

Warning: this prototype doesn’t really work yet, but feel free to contribute or fork as you wish. Obviously it won’t scale infinitely—and neither will my home cloud!

The magic is achieved by Apps Script: go to Extensions > Apps Script and you should be able to change/modify the code. This is the first time I write .gs, so all bugs are ChatGPT’s fault :smiley:

PS: Since data entry can become a huge time-sync, I also relied on ChatGPT to do most of the work, so I just copy-pasted in the results, and it gets about 90% of the details right. You can see how I filled up the CPUs sheet here:

@Glitch3dPenguin - can I use cooler list to prefill my coolers sheet? :sunglasses:

Thanks for asking. My sheet are just fans but now I want to also make a CPU cooler list lol.

1 Like

Not a critical point of your post, but in my experience CPU Mark scores change over time as new CPUs are added. I don’t know the details (do new data points revise the score? does testing methodology change?) But, those changes can be significant over years. Every time you add a new CPU, you should re-check/update the scores for all the others too for proper relative comparisons.

You might explicitly list the mobo chipset and socket rather than inferring it from the CPU and mobo name, or maybe there’s a separate mobo details sheet.

Y assume you have info about PSU, PCIe slots and networking. OS and other software? IP and IPMI addresses?

1 Like

I tend to put everything into NetBox.


Also, the performance you can get on a CPU today will not necessarily be the same performance in 12-24 months’ time with microcode updates. Things can theoretically get faster, but they more typically get slower as the CPU manufacturers end up mitigating vulnerabilities along the way.

1 Like

I want to use this at work now, but I need a team member just to handle all the data entry, lol.

[500 lines of code later…]

Hi @Glitch3dPenguin - I remixed your fans list into: Home-Hosted Cloud Builder - Google Sheets (just know that if you change your columns, it’ll break my imports :crazy_face:)

Just for fun, I’m using your home lab to test this compatibility-checker prototype spreadsheet; which still needs some work to move out of ‘alpha’ :smiley:

Your cluster turns out to be too big for my current prototype, and Google Spreadsheets Apps Scripts is too slow—I hit the 30 seconds processing time limit


If anyone has ideas what I could optimize, and how, here’s the code (the interesting bits being): Code.js · main · / Infrastructure / Compute / Metal · GitLab

What’s happening is we inflate objects (could be a “Build” or a “Cluster”) with details from related subcomponent sheets (say, “Memory”, “CPU”, or “Motherboard”) if those exist, then we run these compatibility check functions to determine the drop down lists for each sub-component type, i.e.: only list compatible options given all other already selected sub-components.

Speaking of which…

What compatibility checks does everyone here do, that I should definitely not overlook?

Technically, I’m trying to de-risk purchasing incompatible components, whilst planning upgradable paths for this project: HL15 for intensive compute + memory

Great idea to feed the equipment, once purchased, into a DCIM!