Today I applied the features I built last week: editing button colors.
One big problem was that I had used a button matrix, and it’s almost impossible to change the background color of just one button in a matrix.
So I did some refactoring. I moved from a matrix to six normal, standalone buttons.
After that, I wrote the functions to apply the config.
In the pictures you can now see how it’s possible to change the button color you select in the app.
(Please ignore my dusty, messy desk xD)
I wasn’t really motivated to code this last week.
But I did build something for the desktop software! I created a color and icon selector. The icons are fetched from Simple Icons.
It’s only the UI for now. The feature for the ctrlPad firmware is coming in the next version(s) :)
Stay tuned!
I was on vacation for the last two weeks, so I didn’t get much done. But I’m back now. Since then I’ve been working on the hardware side:
I 3D printed a case for the CYD, and it now sits perfectly on my desk. For now it’s a model from MakerWorld.
I’d like to design my own later, but I haven’t had the time yet.
I’m also working on a few fixes for the daemon. Unfortunately, I noticed that the problem with the path is still there. :(
Today was a warm one, but I still managed to sit down at my PC :)
I ended up writing some docs, mostly because I couldn’t decide what else to work on.
#Devlog #12
The last two days I worked on releasing the daemon for Nix(-OS) users. It’s now available as a flake, so they can pull it in directly.
Last night I wanted to start publishing my ctrlpad-daemon library on the AUR, but it was down. So I released it on the Snap(craft) package manager instead. It took a while, but now it’s online! https://snapcraft.io/ctrlpad-daemon
The last three days were pretty frustrating.
In the last devlog I mentioned building a website with Next.js. But I soon realized a hero section wasn’t enough. I also needed documentation. So I set out to embed Markdown (Nextra). It was tedious work, and it took me over five hours to get it running (the /docs route just refused to render for the longest time).
With that working, I started writing some basic docs. A few minutes in, a question hit me: “How is the user actually going to flash the board themselves?”
For that I turned to ESP Web Tools, a neat library that lets you flash an ESP directly from the browser. I ran into plenty of problems, but the biggest one was my own browser. It worked fine on my second PC, yet failed on my main one. The reason? An outdated Chromium version. I spent six-plus hours tracking that down.
But it’s all working now and everyone can flash the board with my firmware! Amazing
Things have been busy with school over the last two weeks, but I managed to make some solid progress on CtrlPad:
Stay tuned!
Over the past day, I built the CtrlPad daemon using Golang. This background service listens for commands sent from the CtrlPad via BLE (Bluetooth Low Energy).
In the example below, you can see the daemon logs in action as it successfully receives and executes commands for “Spotify” and “Proton VPN”.
To make things even smoother, I also wrote a dedicated installation script for the daemon to streamline the setup process.
Today, I ventured into Inkscape to design an icon. I usually dread the intricacies of SVG creation, but, to my surprise, everything came together quite smoothly. With the design finalized, I generated the necessary icon variations and implemented them into the Tauri project. The icon is designed to be a clean, minimalist recreation of the CtrlPad.
In the last day, I was really busy and didn’t have much time to code, but I managed to accomplish some amazing things:
This update was all about tackling the tough stuff.
First, I had to figure out how to scan and display every installed application on your system, a feature that turned out to be incredibly tricky to implement.
After that, I spent a lot of time wrestling with the drag-and-drop system for the ctrlPad actions. It took a while, but it was worth it. To wrap things up, I also built a solid README to guide you through the development setup and other project essentials.
This is my first Devlog. Mover is an App to see the Departures of Public Transit Stops on your WearOS Watch. It uses Transitous as it’s API and (currently) does not require a Companion App. You are already able to see the Departures but the Stops are still hardcoded. This is my next Goal: Have a Searchbar for Stops.
These past few days were intense, packed with non-stop coding. Listing every single detail would take forever, so let’s skip straight to the highlights!
Right now, the main focus is building the ctrlPad Desktop App. The central hub for configuring button layouts, custom actions, and more.
The biggest decision? Tauri vs. Electron. The winner: Tauri. Because let’s be honest: Rust is king.
Here is the quick breakdown of what went down:
The foundation is laid. Stay tuned!
I started making my own DIY Stream Deck! It runs on an ESP32 (CYD) and I named it ctrlPad.
It features six buttons, each of which can be dynamically customized with different programs, actions, and macros. Just like the official Elgato software, the layout will be configured using an external desktop application.
To keep it completely wireless, the configuration is sent via Bluetooth (BLE). Soon I build a custom driver then handles executing the programs or triggering actions (like muting the microphone). Thanks to all the customization options, every single ctrlPad will be completely unique!