While working on projects, I often face the issue of not finding the correct part that I currently need. I actually have an assortment box with labels and everything, but when looking for a part, I tend to just open drawers randomly until I find the right one. INTRODUCING THALAMOS – a project designed to solve all these issues!
However, while trying to solve my problems, this project created new ones. I constantly wanted to improve it, which caused me to fall into a deep rabbit hole of microelectronics, endless searching, and making some truly shitty design decisions.
ThalamOS v0.0 also known as Storinator 4000
yes i did not know about semantic versioning at the time of creating this project... Future releases will follow a correct versioning standard.
To be quite honest with you ThalamOS wasn't completely an idea of my own. At the time I watched some YouTube videos of people with fancy looking assortment cabinets, that were lit with some form of led. So I used their concept as a base for my project.
Lighting things up
The first thing to tackle was the lighting operation. I decided to start there because I expected it to be the hardest part, mostly due to my previous bad experiences with microcontrollers.
But looking back it was the easiest part of my project.
After connecting the LEDs and bringing them to light up in different colors, I took a step back and I actually don't know how, I found the project, but I found WLED and fell in love.
The shelf without any lights
WLED WLED is a fast and feature-rich tool to control NeoPixel LEDs using ESP32/ESP8266 via a webui, with all the features i needed for my project check them out: WLED Project on Github
first WLED Controller
With software and hardware out of the way I just needed to design a mounting plate for the back of my assortment cabinet. Since the back isn't evenly spaced I had to design around 4 different sizes for my cabinet (the design is going to change 3 times, so stay tuned).
the shelf with some lights installed
While installing the backplates and LEDs, I ran into another issue: neither the cabinet dividers nor the labels are transparent. Solving this issue was quite easy, i just 3D-printed transparent dividers using my resin printer, since the thickness of the walls is quite thin and mass producing lots of small parts is easier using resin, since the time of producing 1 part is the same as if i would produce 10. Another nice side effect of using Resin, is the absence of layerlines, that are usual with fdm printing. The labels where the easiest part, since my Label printer of choice is also able to print transparent labels. And that conlcudes the Hardware for the first version of ThalamOS.
Software aka stupid decisions aka lots of lesson to be learned
With the hardware out of the way it was time for the stack. The Frontend is quite uninteresting, since I don't really like doing frontend and therefore i choose a minimalistic approach by just using plain HTML and CSS, which is rendered serverside via jinja2 templates. The Backend: Flask One of the better decisions was choosing Flask. It’s reliable and straightforward. While I would prefer FastAPI today due to my current professional experience with it, Flask was the perfect tool for the job at the time.
Lessons Learned (The "Creative" Solutions)
The first task for my backend was to create some form of Search, I wanted to jump straight into Development and deployed Elasticsearch with Kibana to my Homelab. To save time on configuration, I disabled SSL to avoid authentication hurdles. However, this immediately broke the integration with Kibana which requires a secure connection. But since the Elasticsearch API was working, i scrapped Kibana as a nice way to access Elasticsearch and continued on adding, searching and removing items. Instead of implementing proper incremental updates, I took a shortcut: every time an item was added to the database, I cleared the entire Elasticsearch index and re-indexed everything. While this worked for a small personal project, it’s a perfect example of how not to handle data at scale. Since my shelf doesn't really produce large quantities of data i did not encounter any performance problems. I just used resources inefficiently, elasticsearch was using lots of RAM.
Coming to an End
This concludes version 0.0 of ThalamOS (or the Storinator 4000, as I called it back then). Even though I made some "creative" architectural choices to solve the problems I encountered, the result was a success: I was finally able to find the parts I needed.
This project has evolved significantly since I started it in January 2024. It taught me that making "bad" decisions in your own side projects (just please don't take down production at work!) is actually a great way to learn. It leads to a working prototype that you can refine, break, and improve over time.
Where is ThalamOS today?
I’ve come a long way since this first version. ThalamOS is currently in a fully usable state and has outgrown many of these early quirks. Stay tuned for the next post, where I’ll dive into the first major redesign and how I started fixing my "shitty" design decisions! Feel free to check it out on my Github ThalamOS