June 17, 2025
A music server designed to take advantage of Musicbrainz tagging. See README for a demo vid + AI Usage (mostly edit predictions and boilerplate gen. All logic/UI by me :3)
Bug fixes galore. Time to tell a short story:
I was recording a demo video for this devlog, showing features, commands, etc. And then plura just, didn't overwrite the message sent. I was rather confused, since this was working since forever and the code wasn't touched (which also means I didn't ever test it after initial impl. This is called foreshadowing).
So, down the tracing rabbit hole we go. I opened up my logs and... They were useless. I didn't add info logs when the bot would attempt to update a message, so I had no idea where I was in the process. Debug logs were there though. I tried turning them on. That for some reason failed, since systemd is weird. The conclusion? use systemd's native logging framework. I am now able to query the logs with precision, like so:
journalctl -f -xeu plura --user -o json FSENDERID=Some(SlackUserId(\U07958J0JJU\)) SPAN_TARGET=plura::events | jq
This allows me to see all logs for myself, for all events that are sent that are related to me. If I wanted to do fuzzy finding and other things, I could do that through jq. Through this, I figured out that I was returning early if the message content didn't match a trigger. Awesome stuff honestly. Whodathunk good observability in production helps debug issues?
Anyways, here's the demo video of everything working as intended. Since the last devlog, I also added:
My website got a brand new light mode! Turns out uh... I forgot to actually contrast check my light mode. Oops. The new one is WCAG3 approved and also required a lot of tweaking to the theming engine I use internally (leonardo colors + my kleur colour scheme).
Fun things that happened
- I had to completely redo how I did light/dark mode for the hero section on the top left corner of the landing page. There's a lot more variables and weird css sections. Do not view my websites CSS. It is not pretty.
- I learnt a bit more about ARIA labels. Turns out, can't have an alt tag. You use a label. Glad I caught this now by accident lol. Probably should've made a separate commit, but who cares about git history :ferrisAware:
- Browsers can't contrast check image backgrounds. Lame. Firefox is giving me a lot of false positives for that
Anyways, I think my own website is finally polished enough to ship. I'll be updating it a lot soon enough though. I have a lot of silly ideas ready :)
I reworked my post page! The CSS has been entire redone and so has the table of contents. It's quite a bit nicer and the HTML is a bit more semantic (better for accessibility)
I completed the PCB design (I think)! Just gotta silkscreen it. Made a neat lil render for now :D
After ~2 days of work, I've actually gotten a lot of the hard work done for the PCB.
- Full schematic done*
- Core PCB design settled
- Core components routed (USB, power management, MCU, etc.)
- Very vague outline (Lots of refining to do. That's gonna be fun /s)
I think this actually has potential for others to want to make it themselves. Hopefully.
Fully finished the home page! Looks pretty damn cool now I think :3 I updated a bunch of the CSS to be a bit more modern and also slightly more compressible (thanks lightningcss).
I've completely rewritten this section of my website
- Uses animejs instead of motionone
- CSS completely rewritten
- HTML/DOM simplified
The code is now (slightly) less cursed and makes a bit more sense
Currently in the middle of a complete rewrite of my website.
I'm also going to be retheming a lot of elements, gradients, and some specific sections a lot more than the currently are on the live version. Next devlog will probably be the landing page done
My personal website, featuring a bunch of silly ideas and chaotic posts.
MVP is done! Since the last devlog I added:
- message deletion
- member disabling/re-enabling
- getting information from a message
- renamed to plura
I think I'll be shipping soon. I'm pretty happy with how the bot has turned out so far and I think it is genuinely pretty useful :D
First finished PCB design for the button done! I'll go over it tomorrow and double check everything, but I think it's fine. Should be able to work on the central unit next or the case.
I added much better documentation for all commands and also documented some internals so it's a bit easier to understand what's going on.
Fun fact about the internals: The bot treats slash commands like a CLI. This means I can use clap and get a load of nice features for free, such as this nice formatting for help commands and nice errors in case of a user input error
After discussing with my school's IT department (consisting of a single guy), we realised space would be a bit more limited and pouch batteries would be better than 18650s. The new design will also attach to the bottom of the existing school buttons, which are ~80x80mm (Don't have pictures on hand :c). This means I could remove a lot of the protection circuitry pouch batteries already come with.
I've also been routing the MCU traces and footprints. So far, it seems pretty good, although I'll probably be revising this bit a lot. I'm not super happy with the JTAG connector rn and I still need to go through the UART. USB looks alright I think.
I added the ability to reproxy already sent messages! On the first test I accidentally swapped a check to see if the user requesting to reproxy sent the message. Oops. After fixing that and a couple other issues it worked!
I added the ability to edit messages! My slack API library currently doesn't support rich text right now which is a bit sad, but it should eventually. So for now, you can edit plain text message.
I reworked triggers to update entirely through commands rather than a modal. This also revealed an issue where prefix were not working correctly. Oops.
I added member aliasing! The bulk of these 3 hours was actually refactoring and updating code to be more refactorable and usable. I also have much better debugging logs, and errors look pretty now when I get them. I've only shown the user-facing feature in the video, but the main work happened behind the scenes
A slack bot to make the lives of plural systems easier, similar to PluralKit. Check the README for the (little) AI usage, A demo video, and more.
This was widely regarded as a great move by everyone.