|
51129
|
Silverflame - TVC propulsively landing rocket by @ Silverflame - TVC propulsively landing rocket by @staspomortsev | Stardance...
|
staspomortsev
|
0
|
65.47
|
0
|
[]
|
[{"post_id": 78259, "ts": "202 [{"post_id": 78259, "ts": "2026-10-10T05:56:56Z", "hours": 3.9631, "text": "I have finished on the rocket and I submitted for funding I don’t really know how to make logos so I just threw up something together, and I guess it’s fine. I also made the BOM (Bill Of materials) you can also check out my project on https://github.com/CloudStas/Propulsively-Landing-Model-Rocket"}, {"post_id": 76250, "ts": "2026-10-02T21:28:25Z", "hours": 2.7197, "text": "I finally finished my PCB costs about $30 on JLCPCB: this pcb has an ESP32 for control and powers from a 2s lipo battery 2200mah and powers 4x KST x08 v6 servos for XY control and throttle control and a usb port for debugging and 2x Igniters for 2x Estes F15 motors and 1x for releasing landing legs, almost done with the rocket."}, {"post_id": 74984, "ts": "2026-09-28T19:32:11Z", "hours": 6.7669, "text": "I am basically finished with the Landing legs for my TVC rocket and I just have to finish my PCB since the deadline got expanded to oct 31st so I have enough time. I might make a reaction wheel since I have enough time. I might also make a reaction wheel for stabilizing rocket’s roll. I am excited for launch."}, {"post_id": 70018, "ts": "2026-09-18T09:01:41Z", "hours": 4.7772, "text": "I thought of finishing the PCB but realized that it would take a few weeks for it to be made so instead i decided to daisy chain everything and I also designed an Avionics Bay that holds 2 computers(1x Raspberry Pi 3 Model A+ that is connected to a camera, and 1x ESP32-S3) and the ESP can send signals to ignite rocket engines or deploy landing legs. I also made a spreadsheet for all the parts and here is how the Avionics Bay and the BOM(Bill Of Materials) looks like: Also here is the BOM Link: https://docs.google.com/spreadsheets/d/1w17DnCs4J0WBasmAesTz5ANlNJR9XYsVwglhH3W97UI/edit?pli=1&gid=0#gid=0 Total Cost for the Electronics is The materials without 3d printing which is the final step is $482.35, I am going to later try to optimize the cost but for now I need to finish designing the rocket and then I will."}, {"post_id": 69129, "ts": "2026-09-16T13:13:59Z", "hours": 10.6092, "text": "I finally finished the TVC mount with throttle arms. And it supports 2 rocket motors and it can gimbal in all directions 5 degrees, I am basically done with the one of the hart parts. Up next I am going to redesign the flight computer PCB."}, {"post_id": 65323, "ts": "2026-09-10T12:17:26Z", "hours": 7.7383, "text": "I am redesigning the TVC mount with a better one so it can move better on it’s X/Y axis and also to be smaller. I still need to do the throttle arms and before that also need to figure out how to make it smaller to fit in something like a 74mm OD(Outer Diameter) tube or similar."}, {"post_id": 64071, "ts": "2026-09-08T06:45:20Z", "hours": 7.9139, "text": "I was designing my PCB but I decided to not make my own pcb and instead just use a Pi zero 2w and a teensy 4.1 with seperate igniters and servo/motor power connections. So now I am going to be designing an avionics bay in onshape to hold the computers and all the electronics. Edit: I am going to finish the pcb I am just going to finish the rocket design first."}, {"post_id": 58492, "ts": "2026-08-30T22:13:21Z", "hours": 11.015, "text": "Right now I am almost finished with the flight computer I spent most of the time fixing issues. And once I am finished I will post the BOM and add it to my github repo. Here are some features of the flight computer: The main CPU will be the ESP32-S3 and it will power 4x DC motors, 2x of them for YAW and PITCH and 2x more will be for the throttle arms, and lastly a dc motor for a reaction wheel to stabilize the rocket’s roll."}, {"post_id": 54628, "ts": "2026-08-25T17:31:07Z", "hours": 9.9667, "text": "There are a lot of parts for a Propulsively Landing Model Rocket, and I finished 1 one them which is Designing the TVC Mount. TVC or Thrust Vector Control is for gimbaling the rocket motor so the rocket can go upward straight. The Mount can also hold 2 motors one for ascent and another one for landing. Once the Landing motor burns out it literally just gets jettisoned and it falls out as the landing motor inside the tube ignites and the throttle arms are originally open but the throttle arms can be commanded by the flight computer to throttle down when needed. When the rocket gets closer to the ground it can throttle down more so it can become slower and slower until the legs touchdown on the ground. Right now I am currently designing the flight computer which is my first PCB and then I will make a mount for the rocket to hold the computer and the battery. After the Flight Computer is done I will work on the Reaction Wheel to Stabilize the rocket’s roll, and the airframe of the rocket which is simple, it’s just cardboard. And the final hardware design step is to design the landing legs which will be most likely to be made out of carbon fiber with a toy dampener. The way the legs work is kind of simple, they just have a nichrome wire on top of the legs, when the electrical current gets sent thru the wire it burns up and the legs can get out and click in so they are ready for impact. My Mount btw uses plastic + ceramic throttle arms and 4x Genuine MG90s servo’s. That said, Here is my TVC Mount: You can also check out the project on Github: https://github.com/CloudStas/Propulsively-Landing-Model-Rocket"}]...
|
Title: Silverflame - TVC propulsively landing rock Title: Silverflame - TVC propulsively landing rocket by @staspomortsev | Stardance
Devlogs:
There are a lot of parts for a Propulsively Landing Model Rocket, and I finished 1 one them which is Designing the TVC Mount. TVC or Thrust Vector Control is for gimbaling the rocket motor so the rocket can go upward straight. The Mount can also hold 2 motors one for ascent and another one for landing. Once the Landing motor burns out it literally just gets jettisoned and it falls out as the landing motor inside the tube ignites and the throttle arms are originally open but the throttle arms can be commanded by the flight computer to throttle down when needed. When the rocket gets closer to the ground it can throttle down more so it can become slower and slower until the legs touchdown on the ground. Right now I am currently designing the flight computer which is my first PCB and then I will make a mount for the rocket to hold the computer and the battery. After the Flight Computer is done I will work on the Reaction Wheel to Stabilize the rocket’s roll, and the airframe of the rocket which is simple, it’s just cardboard. And the final hardware design step is to design the landing legs which will be most likely to be made out of carbon fiber with a toy dampener. The way the legs work is kind of simple, they just have a nichrome wire on top of the legs, when the electrical current gets sent thru the wire it burns up and the legs can get out and click in so they are ready for impact. My Mount btw uses plastic + ceramic throttle arms and 4x Genuine MG90s servo’s. That said, Here is my TVC Mount: You can also check out the project on Github: https://github.com/CloudStas/Propulsively-Landing-Model-Rocket
Right now I am almost finished with the flight computer I spent most of the time fixing issues. And once I am finished I will post the BOM and add it to my github repo. Here are some features of the flight computer: The main CPU will be the ESP32-S3 and it will power 4x DC motors, 2x of them for YAW and PITCH and 2x more will be for the throttle arms, and lastly a dc motor for a reaction wheel to stabilize the rocket’s roll.
I was designing my PCB but I decided to not make my own pcb and instead just use a Pi zero 2w and a teensy 4.1 with seperate igniters and servo/motor power connections. So now I am going to be designing an avionics bay in onshape to hold the computers and all the electronics. Edit: I am going to finish the pcb I am just going to finish the rocket design first.
I am redesigning the TVC mount with a better one so it can move better on it’s X/Y axis and also to be smaller. I still need to do the throttle arms and before that also need to figure out how to make it smaller to fit in something like a 74mm OD(Outer Diameter) tube or similar.
I finally finished the TVC mount with throttle arms. And it supports 2 rocket motors and it can gimbal in all directions 5 degrees, I am basically done with the one of the hart parts. Up next I am going to redesign the flight computer PCB.
I thought of finishing the PCB but realized that it would take a few weeks for it to be made so instead i decided to daisy chain everything and I also designed an Avionics Bay that holds 2 computers(1x Raspberry Pi 3 Model A+ that is connected to a camera, and 1x ESP32-S3) and the ESP can send signals to ignite rocket engines or deploy landing legs. I also made a spreadsheet for all the parts and here is how the Avionics Bay and the BOM(Bill Of Materials) looks like: Also here is the BOM Link: https://docs.google.com/spreadsheets/d/1w17DnCs4J0WBasmAesTz5ANlNJR9XYsVwglhH3W97UI/edit?pli=1&gid=0#gid=0 Total Cost for the Electronics is The materials without 3d printing which is the final step is $482.35, I am going to later try to optimize the cost but for now I need to finish designing the rocket and then I will.
I am basically finished with the Landing legs for my TVC rocket and I just have to finish my PCB since the deadline got expanded to oct 31st so I have enough time. I might make a reaction wheel since I have enough time. I might also make a reaction wheel for stabilizing rocket’s roll. I am excited for launch.
I finally finished my PCB costs about $30 on JLCPCB: this pcb has an ESP32 for control and powers from a 2s lipo battery 2200mah and powers 4x KST x08 v6 servos for XY control and throttle control and a usb port for debugging and 2x Igniters for 2x Estes F15 motors and 1x for releasing landing legs, almost done with the rocket.
I have finished on the rocket and I submitted for funding I don’t really know how to make logos so I just threw up something together, and I guess it’s fine. I also made the BOM (Bill Of materials) you can also check out my project on https://github.com/CloudStas/Propulsively-Landing-Model-Rocket...
|
1792658927.8223095
|
1793263727.8223095
|
|
68930
|
The worst OS. by @adam_fisal | Stardance
|
adam_fisal
|
0
|
6.78
|
0
|
[]
|
[{"post_id": 78258, "ts": "202 [{"post_id": 78258, "ts": "2026-10-10T05:54:30Z", "hours": 6.7803, "text": "A bad OS."}]...
|
Title: The worst OS. by @adam_fisal | Stardance
D Title: The worst OS. by @adam_fisal | Stardance
Devlogs:
A bad OS....
|
1793127198.088786
|
1793731998.088786
|
|
60511
|
Sector B: Vengeance by @Alloy | Stardance
|
Alloy
|
0
|
24.58
|
0
|
[]
|
[{"post_id": 78242, "ts": "202 [{"post_id": 78242, "ts": "2026-10-10T03:23:41Z", "hours": 3.2525, "text": "Devlog #7 New Features: In Video Tab Fov Slider Brightness Slider In Graphics Tab Fog Toggle Glow Toggle (makes everything slightly brighter) Ambient Occlusion (adds shadows to corners for depth) Anisotropic Filtering MISC Turned physics interpolation on All settings are now saved to a config file which automatically creates and copies itself over from res:// with default settings if it doesnt exist. Settings are only saved when pressing the save button, now I dont need to keep changing settings everytime it runs for testing. (everything works currently, but there will be a video when every setting is done)"}, {"post_id": 77994, "ts": "2026-10-09T04:09:33Z", "hours": 4.715, "text": "New Devlog Style :D New features: Pause Menu Resume Button Options Button (basically settings) Main Menu Button (temporary quit) Options Menu Graphics Tab (empty) Video Tab Fullscreen Toggle V-Sync Toggle Custom Resolution Dropdown Max Framerate input QOL Everything except the gui is paused while one is active Pressing escape pauses the game and also unpauses, as well as going back to the pause menu if inside the options menu. The options menu is designed as its own unique scene so it can be accessed from the main menu as well when that gets added, all of the options will be saved to a config file later but for now they are just predefined variables."}, {"post_id": 70970, "ts": "2026-09-20T04:10:58Z", "hours": 2.3586, "text": "If the animatronic doesnt move for 3 seconds its considered “stuck” and switches to roam (fixes them getting stuck on doorways), changed their collisions to ignore each other so they dont push each other. Doors start open and dont need 2 clicks to open the first time. Prepared the speed values and events for each night. Got rid of the ugly super strong lights from each animtronic. Added ambient lighting so the player isnt entirely reliant on the flashlight."}, {"post_id": 70907, "ts": "2026-09-20T00:23:47Z", "hours": 3.6392, "text": "The animatronics get stuck on edges like doorways and tables less, added a stage for the animatronics to start on. Fixed a bug where you had to be standing exactly in the direction the animatronic was facing for it to chase. Added Freddy and Foxy with different mechanics. Freddy has a 15% chance to pathfind to the office (all of the others can but the chance is low at 1%), but gets stuck if the doors are closed. Foxy is as fast as the player (12 instead of 10). Debugging feature: can now switch between the 3 animatronics cameras by pressing 1, 2, or 3. Added a camera shake when the doors are closed."}, {"post_id": 69407, "ts": "2026-09-17T00:06:21Z", "hours": 5.8394, "text": "Finally finished the first animatronic (functionally). It has basic pathfinding around the whole map, its speed is 10 when chasing and 3 when roaming (players speed while sprinting is 15). There are 2 modes: chasing and roaming, while chasing it locks onto the player and won’t stop until the player is out of sight for 5 seconds, while roaming it will move to random points in the map. It only chases when the player is in the cameras view and the exact center where the raycast detects it, the walls block the raycast so it can’t see through walls. Added some basic blue table and red arcade machine placeholders for future objects."}, {"post_id": 66305, "ts": "2026-09-12T02:09:23Z", "hours": 1.3856, "text": "Hackatime decided to be funny and log the first 2 hours under my root directory instead of the project folder so its more like 3h 23m Added columns to hide the gaps between walls at corners, the player now has view bobbing to make walking and sprinting more natural. Sprinting now only affects forwards speed, not strafing or backwards anymore. F now toggles the flashlight on and off, added left and right doors that can be opened and closed by pressing the buttons beside them. Also added a raycast to interact with things, like the buttons."}, {"post_id": 65185, "ts": "2026-09-10T04:06:08Z", "hours": 3.3939, "text": "Made the base map design with no decorations and basic player movement, as well as a flashlight for lighting."}]...
|
Title: Sector B: Vengeance by @Alloy | Stardance
Title: Sector B: Vengeance by @Alloy | Stardance
Devlogs:
Made the base map design with no decorations and basic player movement, as well as a flashlight for lighting.
Hackatime decided to be funny and log the first 2 hours under my root directory instead of the project folder so its more like 3h 23m Added columns to hide the gaps between walls at corners, the player now has view bobbing to make walking and sprinting more natural. Sprinting now only affects forwards speed, not strafing or backwards anymore. F now toggles the flashlight on and off, added left and right doors that can be opened and closed by pressing the buttons beside them. Also added a raycast to interact with things, like the buttons.
Finally finished the first animatronic (functionally). It has basic pathfinding around the whole map, its speed is 10 when chasing and 3 when roaming (players speed while sprinting is 15). There are 2 modes: chasing and roaming, while chasing it locks onto the player and won’t stop until the player is out of sight for 5 seconds, while roaming it will move to random points in the map. It only chases when the player is in the cameras view and the exact center where the raycast detects it, the walls block the raycast so it can’t see through walls. Added some basic blue table and red arcade machine placeholders for future objects.
The animatronics get stuck on edges like doorways and tables less, added a stage for the animatronics to start on. Fixed a bug where you had to be standing exactly in the direction the animatronic was facing for it to chase. Added Freddy and Foxy with different mechanics. Freddy has a 15% chance to pathfind to the office (all of the others can but the chance is low at 1%), but gets stuck if the doors are closed. Foxy is as fast as the player (12 instead of 10). Debugging feature: can now switch between the 3 animatronics cameras by pressing 1, 2, or 3. Added a camera shake when the doors are closed.
If the animatronic doesnt move for 3 seconds its considered “stuck” and switches to roam (fixes them getting stuck on doorways), changed their collisions to ignore each other so they dont push each other. Doors start open and dont need 2 clicks to open the first time. Prepared the speed values and events for each night. Got rid of the ugly super strong lights from each animtronic. Added ambient lighting so the player isnt entirely reliant on the flashlight.
New Devlog Style :D New features: Pause Menu Resume Button Options Button (basically settings) Main Menu Button (temporary quit) Options Menu Graphics Tab (empty) Video Tab Fullscreen Toggle V-Sync Toggle Custom Resolution Dropdown Max Framerate input QOL Everything except the gui is paused while one is active Pressing escape pauses the game and also unpauses, as well as going back to the pause menu if inside the options menu. The options menu is designed as its own unique scene so it can be accessed from the main menu as well when that gets added, all of the options will be saved to a config file later but for now they are just predefined variables.
Devlog #7 New Features: In Video Tab Fov Slider Brightness Slider In Graphics Tab Fog Toggle Glow Toggle (makes everything slightly brighter) Ambient Occlusion (adds shadows to corners for depth) Anisotropic Filtering MISC Turned physics interpolation on All settings are now saved to a config file which automatically creates and copies itself over from res:// with default settings if it doesnt exist. Settings are only saved when pressing the save button, now I dont need to keep changing settings everytime it runs for testing. (everything works currently, but there will be a video when every setting is done)...
|
1793033553.3366804
|
1793638353.3366804
|
|
68879
|
ShylaAHackPad! by @shyla | Stardance
|
shyla
|
0
|
0.71
|
0
|
[]
|
[{"post_id": 78237, "ts": "202 [{"post_id": 78237, "ts": "2026-10-10T02:41:05Z", "hours": 0.7111, "text": "I drew a real schematic + PCB design for the first time! That was very confusing 😅"}]...
|
Title: ShylaAHackPad! by @shyla | Stardance
Devlo Title: ShylaAHackPad! by @shyla | Stardance
Devlogs:
I drew a real schematic + PCB design for the first time! That was very confusing 😅...
|
1793127087.6751688
|
1793731887.6751688
|
|
24939
|
Noctalia v5 Contributions by @superheroyrr | Stard Noctalia v5 Contributions by @superheroyrr | Stardance...
|
superheroyrr
|
0
|
15.78
|
0
|
[]
|
[{"post_id": 78230, "ts": "202 [{"post_id": 78230, "ts": "2026-10-10T01:47:52Z", "hours": 3.2056, "text": "I finally got new tasks working, and it’s really cool! ㅤ For this part I used AI just to clean up any mistakes I made, I initially got it working by myself, AI just figured out the edge cases."}, {"post_id": 62939, "ts": "2026-09-06T14:20:45Z", "hours": 1.4533, "text": "So yesterday I did two things: Added a parser to the picker option so that newly created tasks can have options set automatically. (yeah idk how to describe it, so maybe watch the video to get a better idea). Also this part was vibe-coded because there is a lot of different formatting things you can do. Found a minor issue in the claude-companion community plugin, so I made a PR addressing it. That fix ended up getting applied in a different PR bc I made a mistake in it, but it was good that I pointed out the issue."}, {"post_id": 62198, "ts": "2026-09-05T13:46:16Z", "hours": 1.8411, "text": "So I have finally decided what the last thing I do will be (at least before I ship). So I will make a plugin for Noctalia that integrates TickTick so that there are desktop widgets, taskbar widgets, and an option in the picker to easily create a new task. ㅤ I am doing this using TickTick’s OpenAPI . For now, I have just created a slash command in Noctalia’s finder. This took a while because I initially tried doing this when Noctalia was in Beta, and the documentation wasn’t that good back then. However, now Noctalia has a full release (not Beta anymore!) so the plugin API is much more fleshed out."}, {"post_id": 45381, "ts": "2026-08-11T19:59:35Z", "hours": 1.0683, "text": "Let’s gooooo my PR got merged 2 days back. Now to finish the job, I just needed to write documentation about it, so I did that over here . The changes are live on Noctalia’s documentation website now! ㅤ Now that I think about it, I should probably start writing the docs when I am pretty confident the PR will be merged, so that I don’t have to wait a long time for the maintainers to review my code. ㅤ Nonetheless, it feels very good knowing that there was a feature which many people wanted (the original github issue got 8 likes, so it was highly requested), and I shipped it!!"}, {"post_id": 39174, "ts": "2026-08-01T23:16:43Z", "hours": 4.0192, "text": "So one of the maintainers left a comment with feedback for what I should do about 2 days ago. Today I finished addressing those issues in code. ㅤ The reason it took this long is because I was legit just spending 2 hours or so just wondering what I should do! Basically, the other PR that was about the calendar system I mentioned earlier got merged and made the ICS parsing function take in a C++ std::stop_token , which I was unfamiliar with. It turns out that it has to do with multi-threading and so I had a dilemma of whether I should make it parse the calendar data in a separate thread or not. I at first decided to make it multi-threaded but then changed my mind when I realized how hard it would be. ㅤ There is a lot more to this though, if you are curious you can see more details in my PR comment . ㅤ Also here’s a proper video of this feature in action!"}, {"post_id": 34814, "ts": "2026-07-25T20:25:25Z", "hours": 1.9733, "text": "Just finished my second contribution, sorry for not documenting it in more detail if you like that. Basically what I’ve done now is added for iCalendar files (*.ics) to be added to the calendar widget that is builtin. ㅤ iCalendar files are a pretty universal way to add event to different calendars, heck the “big 3” (Google Calendar, Apple Calendar, and Microsoft Outlook) of calendar apps all support it. So, it is a fairly important thing to have. ㅤ I was motivated to add this because I wanted to add my own *.ics files to the Noctalia calendar, but couldn’t due to this limitation. But not anymore! (that is if they merge my PR ) ㅤ What’s crazy is that while I was writing my PR, someone else literally made another PR that was also editing the calendar code, what a coincidence! I don’t think that our 2 PR’s will conflict with each other since we were editing different parts of it as well!"}, {"post_id": 18795, "ts": "2026-06-30T00:32:58Z", "hours": 0.2528, "text": "Ok the pull request got merged into the main source code, after just a small fixup! But I’m not done just yet, I still need to add to the documentation of the project. ㅤ So I did that. Now that was my first contribution to an open source project where I typed real code! It wasn’t a huge change, but you have to start somewhere!"}, {"post_id": 15986, "ts": "2026-06-25T23:14:27Z", "hours": 1.0039, "text": "I finally finished my first contribution!! So after browsing through the source code of Noctalia for a while, I found out where the internal monitor brightness code was and I made the necessary changes so that the monitor brightness is automatically synced! On the way… I somehow managed to wreck my local git history! Luckily this wasn’t a huge problem, and I was able to delete the local folder and clone my fork from github again. Still, it was a reminder of how it’s probably best to leave your local git clone alone. Now… Now I will make a PR on the Github and hopefully it gets merged! Edit: the Github PR is here now"}, {"post_id": 14765, "ts": "2026-06-23T23:59:28Z", "hours": 0.9631, "text": "My First Contribution So the first thing I am going to do is add a setting where you can make it so that when you can sync all of your monitors to the same brightness percent. What I did this devlog I have completed the first step of this by adding an option to the settings page (it even syncs with the config file and everything!) although it doesn’t do anything… yet!"}]...
|
Title: Noctalia v5 Contributions by @superheroyrr Title: Noctalia v5 Contributions by @superheroyrr | Stardance
Devlogs:
My First Contribution So the first thing I am going to do is add a setting where you can make it so that when you can sync all of your monitors to the same brightness percent. What I did this devlog I have completed the first step of this by adding an option to the settings page (it even syncs with the config file and everything!) although it doesn’t do anything… yet!
I finally finished my first contribution!! So after browsing through the source code of Noctalia for a while, I found out where the internal monitor brightness code was and I made the necessary changes so that the monitor brightness is automatically synced! On the way… I somehow managed to wreck my local git history! Luckily this wasn’t a huge problem, and I was able to delete the local folder and clone my fork from github again. Still, it was a reminder of how it’s probably best to leave your local git clone alone. Now… Now I will make a PR on the Github and hopefully it gets merged! Edit: the Github PR is here now
Ok the pull request got merged into the main source code, after just a small fixup! But I’m not done just yet, I still need to add to the documentation of the project. ㅤ So I did that. Now that was my first contribution to an open source project where I typed real code! It wasn’t a huge change, but you have to start somewhere!
Just finished my second contribution, sorry for not documenting it in more detail if you like that. Basically what I’ve done now is added for iCalendar files (*.ics) to be added to the calendar widget that is builtin. ㅤ iCalendar files are a pretty universal way to add event to different calendars, heck the “big 3” (Google Calendar, Apple Calendar, and Microsoft Outlook) of calendar apps all support it. So, it is a fairly important thing to have. ㅤ I was motivated to add this because I wanted to add my own *.ics files to the Noctalia calendar, but couldn’t due to this limitation. But not anymore! (that is if they merge my PR ) ㅤ What’s crazy is that while I was writing my PR, someone else literally made another PR that was also editing the calendar code, what a coincidence! I don’t think that our 2 PR’s will conflict with each other since we were editing different parts of it as well!
So one of the maintainers left a comment with feedback for what I should do about 2 days ago. Today I finished addressing those issues in code. ㅤ The reason it took this long is because I was legit just spending 2 hours or so just wondering what I should do! Basically, the other PR that was about the calendar system I mentioned earlier got merged and made the ICS parsing function take in a C++ std::stop_token , which I was unfamiliar with. It turns out that it has to do with multi-threading and so I had a dilemma of whether I should make it parse the calendar data in a separate thread or not. I at first decided to make it multi-threaded but then changed my mind when I realized how hard it would be. ㅤ There is a lot more to this though, if you are curious you can see more details in my PR comment . ㅤ Also here’s a proper video of this feature in action!
Let’s gooooo my PR got merged 2 days back. Now to finish the job, I just needed to write documentation about it, so I did that over here . The changes are live on Noctalia’s documentation website now! ㅤ Now that I think about it, I should probably start writing the docs when I am pretty confident the PR will be merged, so that I don’t have to wait a long time for the maintainers to review my code. ㅤ Nonetheless, it feels very good knowing that there was a feature which many people wanted (the original github issue got 8 likes, so it was highly requested), and I shipped it!!
So I have finally decided what the last thing I do will be (at least before I ship). So I will make a plugin for Noctalia that integrates TickTick so that there are desktop widgets, taskbar widgets, and an option in the picker to easily create a new task. ㅤ I am doing this using TickTick’s OpenAPI . For now, I have just created a slash command in Noctalia’s finder. This took a while because I initially tried doing this when Noctalia was in Beta, and the documentation wasn’t that good back then. However, now Noctalia has a full release (not Beta anymore!) so the plugin API is much more fleshed out.
So yesterday I did two things: Added a parser to the picker option so that newly created tasks can have options set automatically. (yeah idk how to describe it, so maybe watch the video to get a better idea). Also this part was vibe-coded because there is a lot of different formatting things you can do. Found a minor issue in the claude-companion community plugin, so I made a PR addressing it. That fix ended up getting applied in a different PR bc I made a mistake in it, but it was good that I pointed out the issue.
I finally got new tasks working, and it’s really cool! ㅤ For this part I used AI just to clean up any mistakes I made, I initially got it working by myself, AI just figured out the edge cases....
|
1792648383.4710178
|
1793253183.4710178
|
|
14905
|
night / stop by @sk1lark | Stardance
|
sk1lark
|
0
|
1.58
|
0
|
[]
|
[{"post_id": 7823, "ts": "2026 [{"post_id": 7823, "ts": "2026-06-13T01:53:45Z", "hours": 0.5339, "text": "another 30 min of art :)"}, {"post_id": 7576, "ts": "2026-06-12T17:42:39Z", "hours": 1.0475, "text": "finished the basic layout of the starting room! this is (wip art version) what users would see before logging onto the cafe… i wonder whose room this is? even though this is the first thing people will see, it’s the last thing that will be explained in the lore."}]...
|
Title: night / stop by @sk1lark | Stardance
Devlo Title: night / stop by @sk1lark | Stardance
Devlogs:
finished the basic layout of the starting room! this is (wip art version) what users would see before logging onto the cafe… i wonder whose room this is? even though this is the first thing people will see, it’s the last thing that will be explained in the lore.
another 30 min of art :)...
|
1793195543.208211
|
1793800343.208211
|
|
58481
|
yousnoozeyousolve by @nzx37 | Stardance
|
nzx37
|
0
|
8.38
|
0
|
[]
|
[{"post_id": 78226, "ts": "202 [{"post_id": 78226, "ts": "2026-10-10T01:11:35Z", "hours": 2.4003, "text": "#Soldering for YSYS! Today, my parts for YSYS finally arrived. So I soldered most of the parts together(except the diodes) so I hope to be able to upload firmware and ship soon!"}, {"post_id": 73117, "ts": "2026-09-24T12:57:45Z", "hours": 0.3167, "text": "PCBs Arrived! Finished: PCBs for YouSnoozeYouSolve have been delivered through JLCPCB! What I did I got my pcbs today! Stardance got extended by a month(thank goodness i was NOT going to ship in time BAHAHA). But anyway today I finally got the PCBs for ysys. Hopefully the BLARE kit and 3D prints come soon(The Stickers that you get for starting are still in US ;D). TODOStuff I Still have to Recieve BLARE kit Assembly Ship!"}, {"post_id": 70532, "ts": "2026-09-19T10:16:46Z", "hours": 0.4694, "text": "Ordering PCBs! Finished:PCBs for YouSnoozeYouSolve have been ordered through JLCPCB! *thank you hack club for money :D What I did I got my project funding! Since stardance ends soon i want to get this finished up and shipped! Today I ordered the PCBs for ysys. Hopefully the BLARE kit comes fast. TODOStuff I Still have to: Recieve BLARE kit Recieve PCBs Order prints Assembly Ship! ill send 3d print order tn kbye"}, {"post_id": 68548, "ts": "2026-09-15T09:28:41Z", "hours": 0.2911, "text": "#Fixing github files I recently tried funding but apparently some folders were structured wrong so i spent some time fixing it! Hopefully the request is accepted and we can move on to building :D"}, {"post_id": 65867, "ts": "2026-09-11T09:27:48Z", "hours": 0.3672, "text": "Final Preparation for Shipping! I updated the github and made the readme readable."}, {"post_id": 65805, "ts": "2026-09-11T05:56:30Z", "hours": 2.3472, "text": "Firmware plans + CAD Finished: Planning for UI of YSYS Added hooks for glasses and watch I first worked on firmware planning(ie. navigation etc.) this should allow me to code it out better! the diagram is messy but its how i think it out =P Afterwards I was going to move onto coding but i suddenly really wanted to add a glasses hook. This is a rare chance to make my own alarm clock i wanted it to be useful too! i ended up with a watch holder and glasses holder as they are normally on my table and end up on the floor or in the bin. going to work on coding now"}, {"post_id": 62235, "ts": "2026-09-05T14:37:50Z", "hours": 1.6917, "text": "Case CADing Part 1 The PCB has a cash register looking case now! The case has holes for keypad, port, screen and buzzer. Before the end of the day I CADed the case for yousnoozeyousolve. It comes in a top bottom screw case and features holes for the switches, screen, usb port and buzzer. Overall its ready to ship, will work on firmware soon! ;D"}, {"post_id": 62053, "ts": "2026-09-05T08:54:06Z", "hours": 0.4972, "text": "BLARE alarm clock DEVLOG 1 i started this with my old account but ive been locked out of that :(. so i have basically finished the pcb and gerber files! hopefully i can ship soon after the CAD is done!"}]...
|
Title: yousnoozeyousolve by @nzx37 | Stardance
De Title: yousnoozeyousolve by @nzx37 | Stardance
Devlogs:
BLARE alarm clock DEVLOG 1 i started this with my old account but ive been locked out of that :(. so i have basically finished the pcb and gerber files! hopefully i can ship soon after the CAD is done!
Case CADing Part 1 The PCB has a cash register looking case now! The case has holes for keypad, port, screen and buzzer. Before the end of the day I CADed the case for yousnoozeyousolve. It comes in a top bottom screw case and features holes for the switches, screen, usb port and buzzer. Overall its ready to ship, will work on firmware soon! ;D
Firmware plans + CAD Finished: Planning for UI of YSYS Added hooks for glasses and watch I first worked on firmware planning(ie. navigation etc.) this should allow me to code it out better! the diagram is messy but its how i think it out =P Afterwards I was going to move onto coding but i suddenly really wanted to add a glasses hook. This is a rare chance to make my own alarm clock i wanted it to be useful too! i ended up with a watch holder and glasses holder as they are normally on my table and end up on the floor or in the bin. going to work on coding now
Final Preparation for Shipping! I updated the github and made the readme readable.
#Fixing github files I recently tried funding but apparently some folders were structured wrong so i spent some time fixing it! Hopefully the request is accepted and we can move on to building :D
Ordering PCBs! Finished:PCBs for YouSnoozeYouSolve have been ordered through JLCPCB! *thank you hack club for money :D What I did I got my project funding! Since stardance ends soon i want to get this finished up and shipped! Today I ordered the PCBs for ysys. Hopefully the BLARE kit comes fast. TODOStuff I Still have to: Recieve BLARE kit Recieve PCBs Order prints Assembly Ship! ill send 3d print order tn kbye
PCBs Arrived! Finished: PCBs for YouSnoozeYouSolve have been delivered through JLCPCB! What I did I got my pcbs today! Stardance got extended by a month(thank goodness i was NOT going to ship in time BAHAHA). But anyway today I finally got the PCBs for ysys. Hopefully the BLARE kit and 3D prints come soon(The Stickers that you get for starting are still in US ;D). TODOStuff I Still have to Recieve BLARE kit Assembly Ship!
#Soldering for YSYS! Today, my parts for YSYS finally arrived. So I soldered most of the parts together(except the diodes) so I hope to be able to upload firmware and ship soon!...
|
1792752696.857952
|
1793357496.857952
|
|
32375
|
Music Syncer by @techs-sus | Stardance
|
techs-sus
|
1
|
64.46
|
833
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T23:54:31Z", "hours": 45.0, "multiplier": 18.46, "payout": 833, "blessing": "neutral", "text": "I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly.", "repo": "https://github.com/techs-sus/music-syncer", "demo": "https://github.com/techs-sus/music-syncer/releases"}]...
|
[{"post_id": 78225, "ts": "202 [{"post_id": 78225, "ts": "2026-10-10T00:53:04Z", "hours": 1.1172, "text": "I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that."}, {"post_id": 74678, "ts": "2026-09-27T23:46:37Z", "hours": 0.6, "text": "I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries."}, {"post_id": 74664, "ts": "2026-09-27T22:23:13Z", "hours": 0.7189, "text": "Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform."}, {"post_id": 74533, "ts": "2026-09-27T16:04:10Z", "hours": 2.7108, "text": "Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again."}, {"post_id": 71298, "ts": "2026-09-20T16:18:29Z", "hours": 1.1267, "text": "I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms."}, {"post_id": 71243, "ts": "2026-09-20T14:51:47Z", "hours": 0.3306, "text": "I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag."}, {"post_id": 70926, "ts": "2026-09-20T01:43:13Z", "hours": 2.5042, "text": "I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail"}, {"post_id": 64580, "ts": "2026-09-09T02:50:12Z", "hours": 2.7675, "text": "I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them."}, {"post_id": 64390, "ts": "2026-09-08T18:35:35Z", "hours": 0.81, "text": "I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id."}, {"post_id": 63814, "ts": "2026-09-07T19:41:24Z", "hours": 0.5508, "text": "I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope."}, {"post_id": 63724, "ts": "2026-09-07T17:36:43Z", "hours": 1.365, "text": "I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration."}, {"post_id": 61576, "ts": "2026-09-04T15:35:33Z", "hours": 0.3597, "text": "I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring."}, {"post_id": 61148, "ts": "2026-09-03T22:22:37Z", "hours": 0.6486, "text": "To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers."}, {"post_id": 61131, "ts": "2026-09-03T21:37:19Z", "hours": 1.3225, "text": "In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k."}, {"post_id": 60984, "ts": "2026-09-03T17:48:56Z", "hours": 1.7597, "text": "I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else"}, {"post_id": 60623, "ts": "2026-09-03T02:30:33Z", "hours": 0.7667, "text": "Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!"}, {"post_id": 60558, "ts": "2026-09-02T23:48:06Z", "hours": 1.2247, "text": "Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release"}, {"post_id": 60487, "ts": "2026-09-02T21:02:16Z", "hours": 0.7539, "text": "added a progress bar and actually actually fixed the deadlock this time"}, {"post_id": 60469, "ts": "2026-09-02T20:12:04Z", "hours": 0.4286, "text": "I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table."}, {"post_id": 60450, "ts": "2026-09-02T19:45:23Z", "hours": 1.5511, "text": "I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks"}, {"post_id": 60347, "ts": "2026-09-02T17:08:19Z", "hours": 4.1644, "text": "the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”"}, {"post_id": 59975, "ts": "2026-09-02T01:52:56Z", "hours": 4.3806, "text": "i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet"}, {"post_id": 51282, "ts": "2026-08-20T20:29:43Z", "hours": 4.3222, "text": "i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that"}, {"post_id": 50736, "ts": "2026-08-20T02:44:23Z", "hours": 1.0564, "text": "i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project"}, {"post_id": 50703, "ts": "2026-08-20T01:04:16Z", "hours": 1.5878, "text": "thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked"}, {"post_id": 50425, "ts": "2026-08-19T16:22:13Z", "hours": 0.5014, "text": "progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode"}, {"post_id": 47821, "ts": "2026-08-16T01:05:27Z", "hours": 0.4694, "text": "tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix"}, {"post_id": 47801, "ts": "2026-08-16T00:26:22Z", "hours": 3.2114, "text": "/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do"}, {"post_id": 45281, "ts": "2026-08-11T17:10:58Z", "hours": 0.3233, "text": "i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux"}, {"post_id": 45263, "ts": "2026-08-11T16:43:26Z", "hours": 1.645, "text": "i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5"}, {"post_id": 44961, "ts": "2026-08-11T02:10:07Z", "hours": 0.8017, "text": "i made tracks that cause errors to show up in the diff form"}, {"post_id": 44936, "ts": "2026-08-11T01:05:27Z", "hours": 1.8956, "text": "i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer"}, {"post_id": 43011, "ts": "2026-08-08T01:30:07Z", "hours": 0.4114, "text": "i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free"}, {"post_id": 42935, "ts": "2026-08-07T22:27:17Z", "hours": 0.2881, "text": "i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now"}, {"post_id": 42401, "ts": "2026-08-07T02:51:53Z", "hours": 0.7711, "text": "parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds"}, {"post_id": 42363, "ts": "2026-08-07T01:25:53Z", "hours": 2.9161, "text": "i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist"}, {"post_id": 42258, "ts": "2026-08-06T21:41:07Z", "hours": 2.185, "text": "audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)"}, {"post_id": 42119, "ts": "2026-08-06T18:10:03Z", "hours": 0.3578, "text": "I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot."}, {"post_id": 42100, "ts": "2026-08-06T17:43:20Z", "hours": 5.0975, "text": "after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail"}, {"post_id": 24905, "ts": "2026-07-08T19:23:54Z", "hours": 0.8556, "text": "i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml"}, {"post_id": 24854, "ts": "2026-07-08T18:14:47Z", "hours": 1.3539, "text": "i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix"}, {"post_id": 24798, "ts": "2026-07-08T16:20:27Z", "hours": 1.6167, "text": "gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot"}, {"post_id": 24396, "ts": "2026-07-07T22:28:27Z", "hours": 0.9344, "text": "I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs"}]...
|
Title: Music Syncer by @techs-sus | Stardance
Dev Title: Music Syncer by @techs-sus | Stardance
Devlogs:
I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs
gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot
i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix
i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml
after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail
I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot.
audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)
i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist
parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds
i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now
i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free
i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer
i made tracks that cause errors to show up in the diff form
i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5
i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux
/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do
tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix
progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode
thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked
i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project
i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that
i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet
the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”
I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks
I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table.
added a progress bar and actually actually fixed the deadlock this time
Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release
Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!
I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else
In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k.
To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers.
I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring.
I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration.
I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope.
I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id.
I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them.
I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail
I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag.
I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms.
Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again.
Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform.
I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries.
I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that.
Ships:
I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly....
|
1793263746.2942474
|
1793350146.2942474
|
|
68512
|
Office Job Sim by @Nugget_Bwai | Stardance
|
Nugget_Bwai
|
0
|
0.47
|
0
|
[]
|
[{"post_id": 78224, "ts": "202 [{"post_id": 78224, "ts": "2026-10-10T00:52:02Z", "hours": 0.4717, "text": "OFFICE JOB SIM I have started building the map of the game (watch the video)"}]...
|
Title: Office Job Sim by @Nugget_Bwai | Stardance
Title: Office Job Sim by @Nugget_Bwai | Stardance
Devlogs:
OFFICE JOB SIM I have started building the map of the game (watch the video)...
|
1793123336.243532
|
1793728136.243532
|
|
66596
|
KyuSin by @Myukyu | Stardance
|
Myukyu
|
0
|
7.91
|
0
|
[]
|
[{"post_id": 78221, "ts": "202 [{"post_id": 78221, "ts": "2026-10-10T00:39:01Z", "hours": 7.9133, "text": "me, made more games inside. mostly card games."}]...
|
Title: KyuSin by @Myukyu | Stardance
Devlogs:
me, Title: KyuSin by @Myukyu | Stardance
Devlogs:
me, made more games inside. mostly card games....
|
1793101712.687614
|
1793706512.687614
|
|
30118
|
Connect 4 AI by @Kazamir | Stardance
|
Kazamir
|
0
|
27.33
|
0
|
[]
|
[{"post_id": 78220, "ts": "202 [{"post_id": 78220, "ts": "2026-10-10T00:36:43Z", "hours": 2.9881, "text": "I overhauled the UI, deciding to scrap the pixel background for a more minimalistic one. I learned how to import a font and use it and made some pretty decent looking buttons and peices."}, {"post_id": 31117, "ts": "2026-07-19T07:58:50Z", "hours": 2.0739, "text": "#Pixel Art I added a pixalart board and peices, and added a timer for ai move so it doesnt move too fast"}, {"post_id": 30069, "ts": "2026-07-17T11:10:34Z", "hours": 0.8986, "text": "Checkboxes I implemented checkboxes so that you can choose which model to play against."}, {"post_id": 29353, "ts": "2026-07-16T07:37:49Z", "hours": 11.1353, "text": "DEEP Monte Carlo Tree search (AlphaZero) In this update, I combined MCTS with a Deep learning model, mimicking that of AlphaZero. Why? Because I like deep learning and wanted to understand how reinforcement learning can work. Unfortunately the final model that came out wasn’t the best, but it is still stronger than a simple UCB algorithmn, if just barely, winning 60% of the time against UCB. The CNN Cnns are Deep learning networks - machine learning networks consisting of layers of neurons that process an input to an output, transform it and pass it to the next layer. CNNs are a type of network that performs a convolution operation when reading an image, reading the image in chunks, (4x4 in this case) and transforming the data into useable information for later layers, before finally deciding on a move. Features I used pytorch to code my network, and hence had to convert my image, a list of 1s,-1s and 0s representing a connect 4 board into a tensor. But before I can pass the board to the model (CNN) for prediction, I need to break the board up into features. To ensure that the model has enough information to learn the rules of the game, I broke the board into 4 feature boards. The first board contains 1s for free spots and 0s for occupied spots. The second board only shows player 1 peices and the third board only shows player 2 peices and the final board just shows 1s or -1s depending on whose turn it is. I converted these 4 boards into tensors and fed them into my network. Model Architecture The model architecture consists of 3 convolution blocks each which consists of a CNN, a reLu activation function and a batch normaliser. Finally, I have 2 heads, a value head and a policy head. The value head is a prediction of who is winning the game, whereas the policy head is the probabilities of the next best move. By choosing the highest probabilty, you can get the model’s next move. DMCTS To actually train and use the model, we combine it with the MCTS algorithm from my last devlog. During the MCTS simulation, whenever we reach a node which has already been explored, we choose the move using a rule that combines what the model recommends is best (via the policy head) and the average score of the node. When we reach a new node, instead of doing random rollouts to see who would win, we trust the model’s value head. Training Training occurs during self play where the model plays itself. At the start, each move is random, and the model predicts bad moves. But since the model is combined with MCTS, the model;s bad moves are eventually overwritten by better moves. At every move, the board and the model prediction are recorded. When we reach the end of the game, all the models values are replaced with the real results of the training, and each board state is stored in a databank. After every 10 games of self play, the model trains on a sample of these board states, updating the policy prediction by comparing the model’s policy values to MCTS’s run values and updating the model’s values by comparing who it thought was winning compared to who won. Post training After training around 12 generations of models, with each generation taking a few hours of training time, and bugfixing flawed models and architecture, I finally produced a model that can outmatch UCB. The real bottleneck was the MCTS, to train a better model, I would need more rollouts, but increasing rollouts increased the time each training run took. I trained the model with 500 rollouts, which isn’t the best, but was all I could afford. To make a better model I would need faster code and much more compute. In the end of the day, this was a very informative experiance on Reinforement Learning for me, and while the model isn’t the smartest, it isn’t incompetant either."}, {"post_id": 23850, "ts": "2026-07-07T01:16:19Z", "hours": 5.0719, "text": "Monte Carlo Tree Search The UCB is a good algorithmn, until you realise that it can only see 1 move into the future. A strong player for any project has the ability to stratagise, by predicting into the future. Monte Carlo Tree Search takes this UCB algorithm and gives it the ability to see into the future, creating a stronger AI opponent at the cost of compute. How it works Monte Carlo tree search, as it’s name suggests, builds a tree of future states to calculate which state is the best. The algorithm works in 4 steps - Selection, Expansion, Simulation and Backpropogation Selection At the start of the search, the parent node looks to its children node, which consist of the legal connect 4 moves, e.g 7 children for each column you can place a piece in. If each child has already been simulated at least once, the child with the highest UCB score is chosen and the process repeats until you reach a node where not all future moves have been simulated. Expansion Once you reach a new unexplored node, you fist expand the node, creating children for each of the possible states the next move can take. Simulation Once you have reached a node where all the children aren’t explored, one of these children are chosen, and a random rollout takes place, similiarly to the UCB algorithm Backpropogation After simulation, the results of the simulation (win or loss or draw) go back up the tree, updating each parent node with the updated win score. Decision making After enough simulations, the child of the original state with the highest run count is chosen - as this is deemed to be the most promising node by the algorithm Implementation Implementing this algorithm from scartch was harder than expected, but also fun! The only problem was that for higher simulation counts, such as 1,000 or 10,000, it takes a good few seconds for the algorithm to make a decision. I also somehow broke my original connect 4 code when trying to implement this program. I ran 100 simulations of MCTS vs UCB, both with 1000 simulations each, and MCTS only won 20 more games than ucb. I moved MCTS simulation count to 10000 and it won most of the games played."}, {"post_id": 22038, "ts": "2026-07-04T09:10:15Z", "hours": 0.3464, "text": "I remade the PvP mode so now the game is fully playable, added a purple background for the gameboard and made the background black for empty peices."}, {"post_id": 22030, "ts": "2026-07-04T08:46:56Z", "hours": 2.0686, "text": "This update was a revamp of my old code, I remade everything but the PVP section and made the screen resizable."}, {"post_id": 21410, "ts": "2026-07-03T10:40:53Z", "hours": 0.7989, "text": "Added easy, medium and hard mode - each being UCBs but with different runtimes. Also updated the buttons as they were outdated code"}, {"post_id": 21284, "ts": "2026-07-03T03:59:15Z", "hours": 1.9475, "text": "UCB - Upper Confidence Bound The UCB algorithm is an algorithm that I created to play connect 4. How it works The philosphy of UCB is doing random simulations of the game, and the move with the highest winrate in the random simulations is the best move. The problem UCB solves is given a set amount of simulations - called rollouts, how do you allocate the amount of rollouts each move gets? You want to spend more time on promising moves, and less on unpromising moves, but you still need to try these unpromising moves because they may be good, but have low winrates just due to random chance. This is decided by the UCB rule: UCBᵢ = avg(Xᵢ) + √( 2 ln(T) / nᵢ ) Which is the average winrate of the move i plus an optimism score. The more times you play a move, the chance that it is secretely a good move decreases. This ensures that you spend more time on good moves (high average) but also spend some times on worse moves that may turn out to be better by investing more rollouts on them. Implementation I implemented this into my connect 4 game I made, and allocated rollouts to 1000, so it makes 1000 random simulations to choose each move, and it kept on beating me. I had to reduce rollouts to 250 so I had a chance of winning."}]...
|
Title: Connect 4 AI by @Kazamir | Stardance
Devlo Title: Connect 4 AI by @Kazamir | Stardance
Devlogs:
UCB - Upper Confidence Bound The UCB algorithm is an algorithm that I created to play connect 4. How it works The philosphy of UCB is doing random simulations of the game, and the move with the highest winrate in the random simulations is the best move. The problem UCB solves is given a set amount of simulations - called rollouts, how do you allocate the amount of rollouts each move gets? You want to spend more time on promising moves, and less on unpromising moves, but you still need to try these unpromising moves because they may be good, but have low winrates just due to random chance. This is decided by the UCB rule: UCBᵢ = avg(Xᵢ) + √( 2 ln(T) / nᵢ ) Which is the average winrate of the move i plus an optimism score. The more times you play a move, the chance that it is secretely a good move decreases. This ensures that you spend more time on good moves (high average) but also spend some times on worse moves that may turn out to be better by investing more rollouts on them. Implementation I implemented this into my connect 4 game I made, and allocated rollouts to 1000, so it makes 1000 random simulations to choose each move, and it kept on beating me. I had to reduce rollouts to 250 so I had a chance of winning.
Added easy, medium and hard mode - each being UCBs but with different runtimes. Also updated the buttons as they were outdated code
This update was a revamp of my old code, I remade everything but the PVP section and made the screen resizable.
I remade the PvP mode so now the game is fully playable, added a purple background for the gameboard and made the background black for empty peices.
Monte Carlo Tree Search The UCB is a good algorithmn, until you realise that it can only see 1 move into the future. A strong player for any project has the ability to stratagise, by predicting into the future. Monte Carlo Tree Search takes this UCB algorithm and gives it the ability to see into the future, creating a stronger AI opponent at the cost of compute. How it works Monte Carlo tree search, as it’s name suggests, builds a tree of future states to calculate which state is the best. The algorithm works in 4 steps - Selection, Expansion, Simulation and Backpropogation Selection At the start of the search, the parent node looks to its children node, which consist of the legal connect 4 moves, e.g 7 children for each column you can place a piece in. If each child has already been simulated at least once, the child with the highest UCB score is chosen and the process repeats until you reach a node where not all future moves have been simulated. Expansion Once you reach a new unexplored node, you fist expand the node, creating children for each of the possible states the next move can take. Simulation Once you have reached a node where all the children aren’t explored, one of these children are chosen, and a random rollout takes place, similiarly to the UCB algorithm Backpropogation After simulation, the results of the simulation (win or loss or draw) go back up the tree, updating each parent node with the updated win score. Decision making After enough simulations, the child of the original state with the highest run count is chosen - as this is deemed to be the most promising node by the algorithm Implementation Implementing this algorithm from scartch was harder than expected, but also fun! The only problem was that for higher simulation counts, such as 1,000 or 10,000, it takes a good few seconds for the algorithm to make a decision. I also somehow broke my original connect 4 code when trying to implement this program. I ran 100 simulations of MCTS vs UCB, both with 1000 simulations each, and MCTS only won 20 more games than ucb. I moved MCTS simulation count to 10000 and it won most of the games played.
DEEP Monte Carlo Tree search (AlphaZero) In this update, I combined MCTS with a Deep learning model, mimicking that of AlphaZero. Why? Because I like deep learning and wanted to understand how reinforcement learning can work. Unfortunately the final model that came out wasn’t the best, but it is still stronger than a simple UCB algorithmn, if just barely, winning 60% of the time against UCB. The CNN Cnns are Deep learning networks - machine learning networks consisting of layers of neurons that process an input to an output, transform it and pass it to the next layer. CNNs are a type of network that performs a convolution operation when reading an image, reading the image in chunks, (4x4 in this case) and transforming the data into useable information for later layers, before finally deciding on a move. Features I used pytorch to code my network, and hence had to convert my image, a list of 1s,-1s and 0s representing a connect 4 board into a tensor. But before I can pass the board to the model (CNN) for prediction, I need to break the board up into features. To ensure that the model has enough information to learn the rules of the game, I broke the board into 4 feature boards. The first board contains 1s for free spots and 0s for occupied spots. The second board only shows player 1 peices and the third board only shows player 2 peices and the final board just shows 1s or -1s depending on whose turn it is. I converted these 4 boards into tensors and fed them into my network. Model Architecture The model architecture consists of 3 convolution blocks each which consists of a CNN, a reLu activation function and a batch normaliser. Finally, I have 2 heads, a value head and a policy head. The value head is a prediction of who is winning the game, whereas the policy head is the probabilities of the next best move. By choosing the highest probabilty, you can get the model’s next move. DMCTS To actually train and use the model, we combine it with the MCTS algorithm from my last devlog. During the MCTS simulation, whenever we reach a node which has already been explored, we choose the move using a rule that combines what the model recommends is best (via the policy head) and the average score of the node. When we reach a new node, instead of doing random rollouts to see who would win, we trust the model’s value head. Training Training occurs during self play where the model plays itself. At the start, each move is random, and the model predicts bad moves. But since the model is combined with MCTS, the model;s bad moves are eventually overwritten by better moves. At every move, the board and the model prediction are recorded. When we reach the end of the game, all the models values are replaced with the real results of the training, and each board state is stored in a databank. After every 10 games of self play, the model trains on a sample of these board states, updating the policy prediction by comparing the model’s policy values to MCTS’s run values and updating the model’s values by comparing who it thought was winning compared to who won. Post training After training around 12 generations of models, with each generation taking a few hours of training time, and bugfixing flawed models and architecture, I finally produced a model that can outmatch UCB. The real bottleneck was the MCTS, to train a better model, I would need more rollouts, but increasing rollouts increased the time each training run took. I trained the model with 500 rollouts, which isn’t the best, but was all I could afford. To make a better model I would need faster code and much more compute. In the end of the day, this was a very informative experiance on Reinforement Learning for me, and while the model isn’t the smartest, it isn’t incompetant either.
Checkboxes I implemented checkboxes so that you can choose which model to play against.
#Pixel Art I added a pixalart board and peices, and added a timer for ai move so it doesnt move too fast
I overhauled the UI, deciding to scrap the pixel background for a more minimalistic one. I learned how to import a font and use it and made some pretty decent looking buttons and peices....
|
1792601237.376176
|
1793206037.376176
|
|
67829
|
TrackPoint-style mouse for tight spaces by @smitam TrackPoint-style mouse for tight spaces by @smitamaw | Stardance...
|
smitamaw
|
0
|
1.33
|
0
|
[]
|
[{"post_id": 78218, "ts": "202 [{"post_id": 78218, "ts": "2026-10-10T00:34:16Z", "hours": 0.8836, "text": "Devlog #2 I worked a little more on my CAD model for my TrackPoint-style mouse device. This device is intended to fit in tight spaces where a traditional mouse wouldn’t work, such as if you are using a laptop on your lap or on a very small desk. In my CAD model, I added a space/slot for the ESP32S3 that processes imputs from the joystick and buttons and sends mouse movements and actions to the computer via USB cable. (I use a USB-C to USB-A male-to-male cable to attach the device to the computer.) Next up: printing out the case and taping all the components in place!"}, {"post_id": 76613, "ts": "2026-10-04T05:34:04Z", "hours": 0.45, "text": "I just wired up the first prototype of my new project–a mouse that uses a joystick and buttons just like Lenovo ThinkPad TrackPoint, for use in spaces where a traditional mouse would not have enough freedom of movement. The reason I am building this is because, in most of my classes in high school, a laptop is required. However, I don’t want to use the trackpad, and the mouse that I bring usually doesn’t get enough space to move around on my small desk. So I am creating this project to help me use my laptop better and more conveniently at school. In addition to wiring up my first prototype, I also CADded up a first prototype for the 3D-printed frame the components are going to rest on. (It isn’t going to last long if it stays taped onto a folded index card!) Hopefully in the next devlog I will have printed the frame and maybe even mounted the parts to it!"}]...
|
Title: TrackPoint-style mouse for tight spaces by Title: TrackPoint-style mouse for tight spaces by @smitamaw | Stardance
Devlogs:
I just wired up the first prototype of my new project–a mouse that uses a joystick and buttons just like Lenovo ThinkPad TrackPoint, for use in spaces where a traditional mouse would not have enough freedom of movement. The reason I am building this is because, in most of my classes in high school, a laptop is required. However, I don’t want to use the trackpad, and the mouse that I bring usually doesn’t get enough space to move around on my small desk. So I am creating this project to help me use my laptop better and more conveniently at school. In addition to wiring up my first prototype, I also CADded up a first prototype for the 3D-printed frame the components are going to rest on. (It isn’t going to last long if it stays taped onto a folded index card!) Hopefully in the next devlog I will have printed the frame and maybe even mounted the parts to it!
Devlog #2 I worked a little more on my CAD model for my TrackPoint-style mouse device. This device is intended to fit in tight spaces where a traditional mouse wouldn’t work, such as if you are using a laptop on your lap or on a very small desk. In my CAD model, I added a space/slot for the ESP32S3 that processes imputs from the joystick and buttons and sends mouse movements and actions to the computer via USB cable. (I use a USB-C to USB-A male-to-male cable to attach the device to the computer.) Next up: printing out the case and taping all the components in place!...
|
1793116095.4446177
|
1793720895.4446177
|
|
8061
|
Focus by @anay_ | Stardance
|
anay_
|
1
|
4.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T05:54:13Z", "hours": 3.0, "multiplier": 2.57, "payout": 6, "blessing": "neutral", "text": "I made Focus, a Mac menu bar app that helps you stay off distracting apps and websites. It can start focus sessions, block apps or sites, set daily app limits, and show how much time you spent on apps and websites today. The hardest part was making it work with Mac permissions and browser controls. I am proud that it is a real working app, not just a design. To test it, open the app, give it the permissions it asks for, add an app or website to block, start a focus session, and try opening that app or site.", "repo": "https://github.com/anaygoyal09/Focus", "demo": "https://github.com/anaygoyal09/Focus/releases/tag/v2.0.1"}]...
|
[{"post_id": 7821, "ts": "2026 [{"post_id": 7821, "ts": "2026-06-13T01:47:55Z", "hours": 1.0, "text": "Critical errors fixed which were related to the app working while in sandbox but had problems getting permissions after getting signed took some time to go about fix it."}, {"post_id": 3312, "ts": "2026-06-06T05:34:47Z", "hours": 2.0, "text": "I made changes to make it log websites too. Made UI more modern"}, {"post_id": 2975, "ts": "2026-06-05T21:51:53Z", "hours": 0.0, "text": "A simple focus that includes limits and it helps me stay on task, really helped me get off social media"}]...
|
Title: Focus by @anay_ | Stardance
Devlogs:
A sim Title: Focus by @anay_ | Stardance
Devlogs:
A simple focus that includes limits and it helps me stay on task, really helped me get off social media
I made changes to make it log websites too. Made UI more modern
Critical errors fixed which were related to the app working while in sandbox but had problems getting permissions after getting signed took some time to go about fix it.
Ships:
I made Focus, a Mac menu bar app that helps you stay off distracting apps and websites. It can start focus sessions, block apps or sites, set daily app limits, and show how much time you spent on apps and websites today. The hardest part was making it work with Mac permissions and browser controls. I am proud that it is a real working app, not just a design. To test it, open the app, give it the permissions it asks for, add an app or website to block, start a focus session, and try opening that app or site....
|
1792882040.9550064
|
1793746040.9550064
|
|
68880
|
File_Mover by @Oreoyeet36 | Stardance
|
Oreoyeet36
|
0
|
2.04
|
0
|
[]
|
[{"post_id": 78207, "ts": "202 [{"post_id": 78207, "ts": "2026-10-09T23:37:07Z", "hours": 2.0419, "text": "I am working on making a file mover, which can move a file from one computer to the next with encryption in-between."}]...
|
Title: File_Mover by @Oreoyeet36 | Stardance
Devl Title: File_Mover by @Oreoyeet36 | Stardance
Devlogs:
I am working on making a file mover, which can move a file from one computer to the next with encryption in-between....
|
1793127089.9162216
|
1793731889.9162216
|
|
67933
|
CopperPlus by @Parrot | Stardance
|
Parrot
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T23:25:13Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is Copper Plus with the Mod copper plus I added the Copper Wire and the Copper Magnet things you can do witht he magnet collect exp -collect any dropped block witten a 12 block raduis and best one yet steal your friend diamonds when thier mining and yor behind them!! (i spent over 2 hours but liek 3 hours of my work was me doing stuff that hackatime doesnt count)", "repo": "https://github.com/ryan113cpu/Copper-Plus", "demo": "https://www.curseforge.com/minecraft/mc-mods/copper-plus-parrotriderr"}]...
|
[{"post_id": 78200, "ts": "202 [{"post_id": 78200, "ts": "2026-10-09T23:19:10Z", "hours": 0.4089, "text": "Finally done the magnet!!!! ready to ship!!! :D"}, {"post_id": 77452, "ts": "2026-10-07T02:09:36Z", "hours": 1.1006, "text": "Finally finished the Copper wire!!!!!!! secret spoiler on Mangnet heads up!"}]...
|
Title: CopperPlus by @Parrot | Stardance
Devlogs: Title: CopperPlus by @Parrot | Stardance
Devlogs:
Finally finished the Copper wire!!!!!!! secret spoiler on Mangnet heads up!
Finally done the magnet!!!! ready to ship!!! :D
Ships:
This is Copper Plus with the Mod copper plus I added the Copper Wire and the Copper Magnet things you can do witht he magnet collect exp -collect any dropped block witten a 12 block raduis and best one yet steal your friend diamonds when thier mining and yor behind them!! (i spent over 2 hours but liek 3 hours of my work was me doing stuff that hackatime doesnt count)...
|
1793008389.243387
|
1793872389.243387
|
|
68444
|
TF News by @Mohamed_Farag | Stardance
|
Mohamed_Farag
|
0
|
13.14
|
0
|
[]
|
[{"post_id": 78198, "ts": "202 [{"post_id": 78198, "ts": "2026-10-09T23:01:57Z", "hours": 0.9967, "text": "I was working in the previous days on an n8n workflow that will update the website with the new opportunities. So the time is not counted in Hackatime. Also, I have reorganized the project’s files because they were a bit messy"}, {"post_id": 77654, "ts": "2026-10-07T19:10:08Z", "hours": 0.4692, "text": "I made each category customized, and the topic filter is now flexible, so it changes when the top choice changes, so now it makes sense. Furthermore, I edited the opportunity repo and model so they are compatible with the new changes."}, {"post_id": 77641, "ts": "2026-10-07T18:23:47Z", "hours": 2.1367, "text": "I have started with creating a home page displaying the 4 main categories ( Admission, Programs, Internships, and Extracurricular activities). Then I made the opportunities page usable by the 4 categories."}, {"post_id": 77570, "ts": "2026-10-07T14:44:27Z", "hours": 9.5422, "text": "I was working on this project to create a simple opportunities website. And I did this with those 9 hours logged. I realized I could make it more useful by adding more features and data."}]...
|
Title: TF News by @Mohamed_Farag | Stardance
Devl Title: TF News by @Mohamed_Farag | Stardance
Devlogs:
I was working on this project to create a simple opportunities website. And I did this with those 9 hours logged. I realized I could make it more useful by adding more features and data.
I have started with creating a home page displaying the 4 main categories ( Admission, Programs, Internships, and Extracurricular activities). Then I made the opportunities page usable by the 4 categories.
I made each category customized, and the topic filter is now flexible, so it changes when the top choice changes, so now it makes sense. Furthermore, I edited the opportunity repo and model so they are compatible with the new changes.
I was working in the previous days on an n8n workflow that will update the website with the new opportunities. So the time is not counted in Hackatime. Also, I have reorganized the project’s files because they were a bit messy...
|
1793120135.9656308
|
1793724935.9656308
|
|
68875
|
Top 5 citys by @syedakhter | Stardance
|
syedakhter
|
1
|
2.0
|
1
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T22:58:58Z", "hours": 2.0, "multiplier": 1.0, "payout": 1, "blessing": "neutral", "text": "This website is about the top 5 citys and took me 2hr", "repo": "https://github.com/8051987-eng/TOP-5-CITYS/", "demo": "https://8051987-eng.github.io/TOP-5-CITYS/"}]...
|
[{"post_id": 78196, "ts": "202 [{"post_id": 78196, "ts": "2026-10-09T22:55:45Z", "hours": 2.2036, "text": "Top 5 citys website"}]...
|
Title: Top 5 citys by @syedakhter | Stardance
Dev Title: Top 5 citys by @syedakhter | Stardance
Devlogs:
Top 5 citys website
Ships:
This website is about the top 5 citys and took me 2hr...
|
1793217308.864773
|
1793303708.864773
|
|
54355
|
Mahoraga: An AI System that constantly adapts by @ Mahoraga: An AI System that constantly adapts by @jujharseehra | Stardance...
|
jujharseehra
|
1
|
13.27
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T00:51:19Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Shipped Mahoraga! Loved working on this project, and while there are definitely areas for improvement, I do feel satisfied with my result. This will most likely be my last ship for this year’s Stardance challenge. See you next year!", "repo": "https://github.com/JujharSeehra/mahoraga", "demo": "https://github.com/JujharSeehra/mahoraga/releases/tag/v1.0.0"}]...
|
[{"post_id": 78195, "ts": "202 [{"post_id": 78195, "ts": "2026-10-09T22:51:06Z", "hours": 0.5036, "text": "Finished adding changes to Mahoraga! Also, I have added HCAI support, allowing for minors to use Mahoraga effectively, though the amount of tools they can use is also limited. If you have a mac, feel free to try this amazing tool out!"}, {"post_id": 74213, "ts": "2026-09-26T22:40:10Z", "hours": 0.7619, "text": "Added lots of changes to Mahoraga, including changing packaging format, and working on adding HCAI support."}, {"post_id": 65110, "ts": "2026-09-10T00:50:04Z", "hours": 0.9972, "text": "Finished Mahoraga! Added all the UI changes I wanted, and I also created the README / Release for the project. Right now it’s only available for mac, but feel free to edit the code to work for your own computer! Time to ship this project!"}, {"post_id": 64552, "ts": "2026-09-09T01:45:26Z", "hours": 0.4228, "text": "Been working on Mahoraga: all that remains is just some UI improvements, and then I will be able to ship this project!"}, {"post_id": 63351, "ts": "2026-09-07T04:01:50Z", "hours": 1.0094, "text": "Been working on Mahoraga. Unfortunately, there are alot of issues that I was unable to identify earlier, so the ship will have to be delayed slightly :(. Working on finishing my last features, then doing one big bugfix."}, {"post_id": 61140, "ts": "2026-09-03T22:02:28Z", "hours": 0.8314, "text": "Been working on improving my code, and adding a few more features into the Hardware components. Soon, I will begin working on improving the UI."}, {"post_id": 59676, "ts": "2026-09-01T16:28:42Z", "hours": 1.1267, "text": "Been working on Mahoraga. Added Serial Communication, which allows for Mahoraga to moniter devices connected to my computer, and their most recent output, and also added connecting and disconnecting to devices like the Raspberry Pi and Arduino through USB. Next step is to finish with hardware, and incorperate everything into the UI."}, {"post_id": 58212, "ts": "2026-08-30T15:56:24Z", "hours": 1.5397, "text": "Added improved features for opening coding projects and files using Mahoraga. However, my next obstacle is getting these projects to open in a code editor, like VS code."}, {"post_id": 57030, "ts": "2026-08-29T03:17:13Z", "hours": 1.6825, "text": "Added the ability to open websites, read information on said websites, and open folders and applications on my computer using Mahoraga. This is a very major success, but I am working on something major for the next part of my project: Mahoraga’s adaptation. Also facing my biggest problem yet: How to continue testing with a horrible API key. 😭"}, {"post_id": 56365, "ts": "2026-08-28T03:35:08Z", "hours": 1.0353, "text": "Been working on Mahoraga’s tool system, which will be the primary way that I will be using Mahoraga. So far, it can locate and identify parts of projects, like folders and files, which I have given it permission to view, but it cannot edit anything. Additionally, I made it available to run with just the simple command “mahoraga”."}, {"post_id": 56219, "ts": "2026-08-27T21:49:04Z", "hours": 1.7653, "text": "Finished Chat Interface and system artitechture of Mahoraga. I also was able to build Mahoraga’s wheel, which spins at different speeds depending on what task it is doing. Let me know if you have any more ideas for what I can add to Mahoraga. Up next are tools for easier access to certain things on my computer, and I am aiming to eventually add connection to my Raspberry Pi. The API key I got for free from Google AI studio also makes testing a lot harder, so I will be looking for alternatives."}, {"post_id": 55335, "ts": "2026-08-27T02:25:44Z", "hours": 0.535, "text": "Started working on the UI for mahoraga. No features rn, but working on the chat interface, which will be the primary way of accessing Mahoraga"}, {"post_id": 54849, "ts": "2026-08-26T00:58:55Z", "hours": 1.1969, "text": "Started building Mahoraga! Mahoraga is an AI system that lives on my computer as a personal assistant, similar to jarvis, but, when facing a new problem, it adapts to the solution, and stores it in it’s memory, in order to constantly improve."}]...
|
Title: Mahoraga: An AI System that constantly adap Title: Mahoraga: An AI System that constantly adapts by @jujharseehra | Stardance
Devlogs:
Started building Mahoraga! Mahoraga is an AI system that lives on my computer as a personal assistant, similar to jarvis, but, when facing a new problem, it adapts to the solution, and stores it in it’s memory, in order to constantly improve.
Started working on the UI for mahoraga. No features rn, but working on the chat interface, which will be the primary way of accessing Mahoraga
Finished Chat Interface and system artitechture of Mahoraga. I also was able to build Mahoraga’s wheel, which spins at different speeds depending on what task it is doing. Let me know if you have any more ideas for what I can add to Mahoraga. Up next are tools for easier access to certain things on my computer, and I am aiming to eventually add connection to my Raspberry Pi. The API key I got for free from Google AI studio also makes testing a lot harder, so I will be looking for alternatives.
Been working on Mahoraga’s tool system, which will be the primary way that I will be using Mahoraga. So far, it can locate and identify parts of projects, like folders and files, which I have given it permission to view, but it cannot edit anything. Additionally, I made it available to run with just the simple command “mahoraga”.
Added the ability to open websites, read information on said websites, and open folders and applications on my computer using Mahoraga. This is a very major success, but I am working on something major for the next part of my project: Mahoraga’s adaptation. Also facing my biggest problem yet: How to continue testing with a horrible API key. 😭
Added improved features for opening coding projects and files using Mahoraga. However, my next obstacle is getting these projects to open in a code editor, like VS code.
Been working on Mahoraga. Added Serial Communication, which allows for Mahoraga to moniter devices connected to my computer, and their most recent output, and also added connecting and disconnecting to devices like the Raspberry Pi and Arduino through USB. Next step is to finish with hardware, and incorperate everything into the UI.
Been working on improving my code, and adding a few more features into the Hardware components. Soon, I will begin working on improving the UI.
Been working on Mahoraga. Unfortunately, there are alot of issues that I was unable to identify earlier, so the ship will have to be delayed slightly :(. Working on finishing my last features, then doing one big bugfix.
Been working on Mahoraga: all that remains is just some UI improvements, and then I will be able to ship this project!
Finished Mahoraga! Added all the UI changes I wanted, and I also created the README / Release for the project. Right now it’s only available for mac, but feel free to edit the code to work for your own computer! Time to ship this project!
Added lots of changes to Mahoraga, including changing packaging format, and working on adding HCAI support.
Finished adding changes to Mahoraga! Also, I have added HCAI support, allowing for minors to use Mahoraga effectively, though the amount of tools they can use is also limited. If you have a mac, feel free to try this amazing tool out!
Ships:
Shipped Mahoraga! Loved working on this project, and while there are definitely areas for improvement, I do feel satisfied with my result. This will most likely be my last ship for this year’s Stardance challenge. See you next year!...
|
1793120013.4531748
|
1793206413.4531748
|
|
60583
|
test test by @HikarusTenacity | Stardance
|
HikarusTenacity
|
0
|
10.31
|
0
|
[]
|
[{"post_id": 78193, "ts": "202 [{"post_id": 78193, "ts": "2026-10-09T22:42:48Z", "hours": 10.3058, "text": "primarily worked on fixes on imports and documentation, generally most of the types and constants are better organized than before, using defensive typing. Page is unable to load because I’m not done but I need to log the time"}]...
|
Title: test test by @HikarusTenacity | Stardance
Title: test test by @HikarusTenacity | Stardance
Devlogs:
primarily worked on fixes on imports and documentation, generally most of the types and constants are better organized than before, using defensive typing. Page is unable to load because I’m not done but I need to log the time...
|
1793036886.878707
|
1793641686.878707
|
|
14483
|
ArianaGrandeOS by @SP14 | Stardance
|
SP14
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T18:22:43Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built ArianaGrandeOS, a browser-based operating system themed entirely around Ariana Grande and her music as a special gift for my sister. It features a custom desktop environment with 12 built-in applications, including a trivia app, paint app, location-based weather, custom widgets, and a dynamic quote rotator. The most challenging part was definitely the music player because manually resizing and compressing square album covers into high-quality wide desktop backgrounds to keep the project file under 2MB was a huge issue, and fixing a ton of frustrating syncing bugs for all 111 tracks almost broke the audio entirely. I’m incredibly proud of the custom queue system I built to make it feel like a real streaming app, and the absolute best part was seeing how happy my sister was when she finally tested it out. Before you test it, you should know that you can drag and resize all four corners of any app window, change up the overall themes and fonts in the settings panel, and click directly on the fortune cookie to crack it open for a hidden message! I hope you enjoy! :)", "repo": "https://github.com/SP14-cyber/ariana-grande-webos", "demo": "https://sp14-cyber.github.io/ariana-grande-webos/GrandeOS.html"}]...
|
[{"post_id": 7819, "ts": "2026 [{"post_id": 7819, "ts": "2026-06-13T01:43:30Z", "hours": 2.0561, "text": "ArianaGrandeOS is finally ready to ship!! I polished everything up and added some final features. I added an Ariana Grande trivia app where you can answer questions about Ariana, her music, and her career. I also updated the homepage, made the time bigger so it’s easier to see, added a “Now Playing” section, and added a few more apps on the display of the homepage. One thing I’m really happy with is the music player. I added a queue system so you can choose exactly which songs you want to play next instead of having to listen in album order. It makes the music player feel way more like a real streaming app and was something I really wanted to include before shipping. The music player ended up being way harder than I expected. Even though all 111 songs were already in the OS, they weren’t syncing properly at all. I spent a long time trying to figure out what was wrong and honestly thought I had broken everything at one point 😭. After a lot of testing and fixing random issues, such as the play button not working, audio not playing, etc etc, I finally got every single song synced correctly and working. Seeing all 111 songs play perfectly from Yours Truly all the way to Eternal Sunshine felt so rewarding. I also added a quote section to the homepage that changes every 30 seconds. All of the quotes are from Ariana Grande, and there are currently 12 different ones that rotate throughout the day. The OS now has 12 different apps and actually feels like a real operating system. Looking back at where I started, it’s kind of crazy how much it grew from a simple pink desktop into this huge Ariana-themed project!! :) The best part was finally showing it to my sister. She thought it was absolutely amazing and was especially excited about the music player. Watching her click through everything and seeing how happy she was made all the frustrating bugs and long hours worth it. I’m really proud of how this turned out and am super excited to finally ship it :)) Thank you all so much for following along through this journey!"}, {"post_id": 7494, "ts": "2026-06-12T14:35:29Z", "hours": 10.5608, "text": "Last devlog I had a very basic frontend and that was basically it. Since then I built almost everything and it actually feels like a real OS now. The biggest thing I worked on was the music player. I built it to look like a real music player with a dark background, big album art, pink progress bar, white play button. You can browse all 7 albums, click to see every song inside, and tap any song to play it. I added in all 111 songs from Yours Truly to Eternal Sunshine in the right order. The hardest part was the wallpaper choices. I wanted real album photos so I had to embed them directly into the HTML so the file works on its own without needing extra files. I also needed to find the wide version of each album so it could fit on the screen; all her album covers are originally square. For some of the photos, I couldn’t find the wise version, so I had to manually import the photos into a photo editor and fill in the backgrounds. Every time I added a photo the file went over 2MB. Took a while to get the quality high but at the same time keep the file size reasonable. Other stuff I added: Calendar with monthly and yearly view, you can add events to any date Journal and Notes combined into one app with tabs Stopwatch and Timer that flashes red in the last 5 seconds and beeps when done A paint app where you can draw and save as PNG Welcome screen with a guide that walks you through the whole OS A to-do list! A fun little fortune cookie app which you can crack (press on), revealing a fortune cookie message related to Ariana Grande Browser that has Ariana Grande’s socials pinned to the top Added a notification bell that keeps you updated on album drops, tours, etc etc Weather application which is based on user’s location All 4 corners of every window can now be dragged to resize Added customizable features such as album cover wallpapers, themes, fonts, changing font size, etc etc What I’m going to be doing next: Fixing up bugs and any issues Adding more details or effects to the home screen to give it more oomph Maybe: adding more wallpaper choices (?) Really happy with what I have and what else I’ll accomplish!! So excited to show this to my sister (I’ll let you all know what she thinks in my next devpost…coming soon!!) :))"}, {"post_id": 7152, "ts": "2026-06-11T22:56:30Z", "hours": 1.8175, "text": "Built the base of GrandeOS and pink desktop background as well as a taskbar with a live clock that updates every second, and the first draggable window. I chose the pink color palette intentionally because my sister’s favorite color matches Ariana’s whole aesthetic, so every color decision was locked in from the start. Next up: building out the actual apps and adding more draggable windows!!"}]...
|
Title: ArianaGrandeOS by @SP14 | Stardance
Devlog Title: ArianaGrandeOS by @SP14 | Stardance
Devlogs:
Built the base of GrandeOS and pink desktop background as well as a taskbar with a live clock that updates every second, and the first draggable window. I chose the pink color palette intentionally because my sister’s favorite color matches Ariana’s whole aesthetic, so every color decision was locked in from the start. Next up: building out the actual apps and adding more draggable windows!!
Last devlog I had a very basic frontend and that was basically it. Since then I built almost everything and it actually feels like a real OS now. The biggest thing I worked on was the music player. I built it to look like a real music player with a dark background, big album art, pink progress bar, white play button. You can browse all 7 albums, click to see every song inside, and tap any song to play it. I added in all 111 songs from Yours Truly to Eternal Sunshine in the right order. The hardest part was the wallpaper choices. I wanted real album photos so I had to embed them directly into the HTML so the file works on its own without needing extra files. I also needed to find the wide version of each album so it could fit on the screen; all her album covers are originally square. For some of the photos, I couldn’t find the wise version, so I had to manually import the photos into a photo editor and fill in the backgrounds. Every time I added a photo the file went over 2MB. Took a while to get the quality high but at the same time keep the file size reasonable. Other stuff I added: Calendar with monthly and yearly view, you can add events to any date Journal and Notes combined into one app with tabs Stopwatch and Timer that flashes red in the last 5 seconds and beeps when done A paint app where you can draw and save as PNG Welcome screen with a guide that walks you through the whole OS A to-do list! A fun little fortune cookie app which you can crack (press on), revealing a fortune cookie message related to Ariana Grande Browser that has Ariana Grande’s socials pinned to the top Added a notification bell that keeps you updated on album drops, tours, etc etc Weather application which is based on user’s location All 4 corners of every window can now be dragged to resize Added customizable features such as album cover wallpapers, themes, fonts, changing font size, etc etc What I’m going to be doing next: Fixing up bugs and any issues Adding more details or effects to the home screen to give it more oomph Maybe: adding more wallpaper choices (?) Really happy with what I have and what else I’ll accomplish!! So excited to show this to my sister (I’ll let you all know what she thinks in my next devpost…coming soon!!) :))
ArianaGrandeOS is finally ready to ship!! I polished everything up and added some final features. I added an Ariana Grande trivia app where you can answer questions about Ariana, her music, and her career. I also updated the homepage, made the time bigger so it’s easier to see, added a “Now Playing” section, and added a few more apps on the display of the homepage. One thing I’m really happy with is the music player. I added a queue system so you can choose exactly which songs you want to play next instead of having to listen in album order. It makes the music player feel way more like a real streaming app and was something I really wanted to include before shipping. The music player ended up being way harder than I expected. Even though all 111 songs were already in the OS, they weren’t syncing properly at all. I spent a long time trying to figure out what was wrong and honestly thought I had broken everything at one point 😭. After a lot of testing and fixing random issues, such as the play button not working, audio not playing, etc etc, I finally got every single song synced correctly and working. Seeing all 111 songs play perfectly from Yours Truly all the way to Eternal Sunshine felt so rewarding. I also added a quote section to the homepage that changes every 30 seconds. All of the quotes are from Ariana Grande, and there are currently 12 different ones that rotate throughout the day. The OS now has 12 different apps and actually feels like a real operating system. Looking back at where I started, it’s kind of crazy how much it grew from a simple pink desktop into this huge Ariana-themed project!! :) The best part was finally showing it to my sister. She thought it was absolutely amazing and was especially excited about the music player. Watching her click through everything and seeing how happy she was made all the frustrating bugs and long hours worth it. I’m really proud of how this turned out and am super excited to finally ship it :)) Thank you all so much for following along through this journey!
Ships:
I built ArianaGrandeOS, a browser-based operating system themed entirely around Ariana Grande and her music as a special gift for my sister. It features a custom desktop environment with 12 built-in applications, including a trivia app, paint app, location-based weather, custom widgets, and a dynamic quote rotator. The most challenging part was definitely the music player because manually resizing and compressing square album covers into high-quality wide desktop backgrounds to keep the project file under 2MB was a huge issue, and fixing a ton of frustrating syncing bugs for all 111 tracks almost broke the audio entirely. I’m incredibly proud of the custom queue system I built to make it feel like a real streaming app, and the absolute best part was seeing how happy my sister was when she finally tested it out. Before you test it, you should know that you can drag and resize all four corners of any app window, change up the overall themes and fonts in the settings panel, and click directly on the fortune cookie to crack it open for a hidden message! I hope you enjoy! :)...
|
1792878467.6506474
|
1793742467.6506474
|
|
68364
|
Sitting Bluemate by @EndLess9 | Stardance
|
EndLess9
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T03:17:58Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Successfully printed it. I had to improvise a little thought by painting the eyes since I only had blue filament. I also had alot of trouble with this project but I’m glad I overcame it.", "repo": "https://github.com/EndLessDude/Sitting-BlueMate", "demo": ""}]...
|
[{"post_id": 78182, "ts": "202 [{"post_id": 78182, "ts": "2026-10-09T21:59:14Z", "hours": 0.4808, "text": "Devlog #3: Previously the little guy have a pretty solid cylindrical shape and it looked fine, but I wanted to try something different…I used the conic tool and made it’s body wider right above the base. This makes it’s body look more dynamic. Although this was a very simple change it took be about 30 minutes of trial and error before I got it right. Also… This will likely be the last devlog for this project since all the modeling is basically done, all that’s left is to print it."}, {"post_id": 77449, "ts": "2026-10-07T01:56:02Z", "hours": 0.895, "text": "Body and Legs: I scrapped my old technique. I adopted a new one where i create a normal rectangle and then I create a semi-circle on the top and bottom. Very similar to my old technique, but this time i only extrude the rectangle, and I use the revolve tool to create a sphere at the bottom and the top to give it a better look. Eyes and backpack: I also used the rectangle tool to sketch out the eyes and the backback and then I extruded it and used fillet to give it rounded edges. However, its still pretty basic as of now. Soon I will work more on them if needed or I might improve the body and legs. I also removed a chunk from the bottom to make it flat for the among us character can sit on my table."}, {"post_id": 77440, "ts": "2026-10-07T00:48:02Z", "hours": 1.0675, "text": "After many failed sketches and techniques I used the 1 rectangle + 2 3 point arc technique to make pill like shapes that I’m using to make the body and the legs. I also added a rectangle at the bottom to remove a part of the body to make it’s bottom flat. And for the legs I used the fillet tool at the correct proportions to make it round but also flat at the bottom."}]...
|
Title: Sitting Bluemate by @EndLess9 | Stardance
Title: Sitting Bluemate by @EndLess9 | Stardance
Devlogs:
After many failed sketches and techniques I used the 1 rectangle + 2 3 point arc technique to make pill like shapes that I’m using to make the body and the legs. I also added a rectangle at the bottom to remove a part of the body to make it’s bottom flat. And for the legs I used the fillet tool at the correct proportions to make it round but also flat at the bottom.
Body and Legs: I scrapped my old technique. I adopted a new one where i create a normal rectangle and then I create a semi-circle on the top and bottom. Very similar to my old technique, but this time i only extrude the rectangle, and I use the revolve tool to create a sphere at the bottom and the top to give it a better look. Eyes and backpack: I also used the rectangle tool to sketch out the eyes and the backback and then I extruded it and used fillet to give it rounded edges. However, its still pretty basic as of now. Soon I will work more on them if needed or I might improve the body and legs. I also removed a chunk from the bottom to make it flat for the among us character can sit on my table.
Devlog #3: Previously the little guy have a pretty solid cylindrical shape and it looked fine, but I wanted to try something different…I used the conic tool and made it’s body wider right above the base. This makes it’s body look more dynamic. Although this was a very simple change it took be about 30 minutes of trial and error before I got it right. Also… This will likely be the last devlog for this project since all the modeling is basically done, all that’s left is to print it.
Ships:
Successfully printed it. I had to improvise a little thought by painting the eyes since I only had blue filament. I also had alot of trouble with this project but I’m glad I overcame it....
|
1793220927.4941103
|
1793307327.4941103
|
|
68709
|
Coordinate Frame utility class by @mason_davies | Coordinate Frame utility class by @mason_davies | Stardance...
|
mason_davies
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T22:15:56Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I interpreted the Roblox CFrame into a Java library class alongside the Vector3. It doesn’t run on its own but it can be implemented into 3d projects and robotics projects for position tracking", "repo": "https://github.com/MasonDavies/cframe", "demo": "https://masondavies.github.io/cframe/"}]...
|
[{"post_id": 78176, "ts": "202 [{"post_id": 78176, "ts": "2026-10-09T21:34:18Z", "hours": 1.3453, "text": "Java CFrame Documentation and Testing"}]...
|
Title: Coordinate Frame utility class by @mason_da Title: Coordinate Frame utility class by @mason_davies | Stardance
Devlogs:
Java CFrame Documentation and Testing
Ships:
I interpreted the Roblox CFrame into a Java library class alongside the Vector3. It doesn’t run on its own but it can be implemented into 3d projects and robotics projects for position tracking...
|
1793217275.039346
|
1793303675.039346
|
|
47926
|
trypadhack by @Liam-_- | Stardance
|
Liam-_-
|
0
|
14.84
|
0
|
[]
|
[{"post_id": 78175, "ts": "202 [{"post_id": 78175, "ts": "2026-10-09T21:32:45Z", "hours": 1.2833, "text": "i remade the case hole for the usbc cable and reddesined the pcb"}, {"post_id": 76460, "ts": "2026-10-03T16:24:58Z", "hours": 3.4003, "text": "i made the chase and the 3d modell of the pcb with parts not sure if the 3d modell and footprint of the olead screen is right."}, {"post_id": 76169, "ts": "2026-10-02T15:45:56Z", "hours": 1.6669, "text": "anyone know how to 3d design on FreeCad? i hafe no idea what to do or anything the tutorial more confuses me then expected. anyone any advice?"}, {"post_id": 73932, "ts": "2026-09-26T10:55:00Z", "hours": 0.8503, "text": "WAR IS OVER i finally done the pcb now onto the case i just wanna get it over before stardance ends that means next few days quick 3d modelling then coding and then the github"}, {"post_id": 69789, "ts": "2026-09-17T19:53:30Z", "hours": 0.3503, "text": "at this point i guess i shuld ask in the slack"}, {"post_id": 68245, "ts": "2026-09-14T19:26:56Z", "hours": 0.2833, "text": "i hafe no idea what i hafe to do the drc manly complains about Plate edge free space violation"}, {"post_id": 66267, "ts": "2026-09-12T00:13:36Z", "hours": 0.2833, "text": "i hafe no idea what i am doing this stupid drc says everytime i do something wrong"}, {"post_id": 65585, "ts": "2026-09-10T20:26:39Z", "hours": 0.4833, "text": "i removed 3 leds so its easyer to connect them but once again the dumb drc says nope"}, {"post_id": 64900, "ts": "2026-09-09T16:36:18Z", "hours": 0.3503, "text": "i think i hafe an idea how it could work now"}, {"post_id": 64238, "ts": "2026-09-08T14:24:08Z", "hours": 0.3667, "text": "i dont know if its right or not ill just try"}, {"post_id": 63699, "ts": "2026-09-07T17:06:45Z", "hours": 0.4836, "text": "i need to start over i guess i noticed my planed parts and stuff was to much to fit the size i imagined and also the drc errors confiused me"}, {"post_id": 62953, "ts": "2026-09-06T14:48:28Z", "hours": 0.6503, "text": "i dont even know what i did i think i connected the leds with the seeduino and then run the drc wich gave me a lot of errors and warinings wich i dont understand if anyone has a tip what i hafe to do i would really appreciate"}, {"post_id": 62273, "ts": "2026-09-05T15:49:58Z", "hours": 2.2922, "text": "PCB design is more complex then expected i did the footprint assignment tool and then worked on the pcb design i didnt knew how i want it too look and when i wasnted to draw the connection i t didnt worked out so i am still on working on the pcb"}, {"post_id": 61541, "ts": "2026-09-04T14:44:29Z", "hours": 1.1836, "text": "Hi i think i am finally done with my scametic after last time i had problem with lapse i made a pause. i at first wanted to check everything i did then tried to organize it better after that i connected everything what wasnt connected found out i made a hole lot of dump mistakes wich i at first didnt knew what caused them but after asking a ki i found out and solved every error"}, {"post_id": 54594, "ts": "2026-08-25T16:54:12Z", "hours": 0.5333, "text": "i tried to get gemini explain matrix wiring to me but didnt worked out good then i tried to follow someone elses worke so i hafe a basis so i can personalize it frome then on. guess i need a lot more of trial and error."}, {"post_id": 53803, "ts": "2026-08-24T14:35:00Z", "hours": 0.3833, "text": "it is the first time i ever tried myself on something like that i basecly followd the tutorial and then wanted to personalize it like you shuld do but because i never did something like that i tried to figure out what has to connect to what i know mostly of that is probaply wrong connected or so but i dint waned to ask ai instantly"}]...
|
Title: trypadhack by @Liam-_- | Stardance
Devlogs Title: trypadhack by @Liam-_- | Stardance
Devlogs:
it is the first time i ever tried myself on something like that i basecly followd the tutorial and then wanted to personalize it like you shuld do but because i never did something like that i tried to figure out what has to connect to what i know mostly of that is probaply wrong connected or so but i dint waned to ask ai instantly
i tried to get gemini explain matrix wiring to me but didnt worked out good then i tried to follow someone elses worke so i hafe a basis so i can personalize it frome then on. guess i need a lot more of trial and error.
Hi i think i am finally done with my scametic after last time i had problem with lapse i made a pause. i at first wanted to check everything i did then tried to organize it better after that i connected everything what wasnt connected found out i made a hole lot of dump mistakes wich i at first didnt knew what caused them but after asking a ki i found out and solved every error
PCB design is more complex then expected i did the footprint assignment tool and then worked on the pcb design i didnt knew how i want it too look and when i wasnted to draw the connection i t didnt worked out so i am still on working on the pcb
i dont even know what i did i think i connected the leds with the seeduino and then run the drc wich gave me a lot of errors and warinings wich i dont understand if anyone has a tip what i hafe to do i would really appreciate
i need to start over i guess i noticed my planed parts and stuff was to much to fit the size i imagined and also the drc errors confiused me
i dont know if its right or not ill just try
i think i hafe an idea how it could work now
i removed 3 leds so its easyer to connect them but once again the dumb drc says nope
i hafe no idea what i am doing this stupid drc says everytime i do something wrong
i hafe no idea what i hafe to do the drc manly complains about Plate edge free space violation
at this point i guess i shuld ask in the slack
WAR IS OVER i finally done the pcb now onto the case i just wanna get it over before stardance ends that means next few days quick 3d modelling then coding and then the github
anyone know how to 3d design on FreeCad? i hafe no idea what to do or anything the tutorial more confuses me then expected. anyone any advice?
i made the chase and the 3d modell of the pcb with parts not sure if the 3d modell and footprint of the olead screen is right.
i remade the case hole for the usbc cable and reddesined the pcb...
|
1793202544.564074
|
1793807344.564074
|
|
63249
|
parole by @skue | Stardance
|
skue
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T21:49:14Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "3… 2… 1… Introducing… Parole ! When I was a bit younger, I installed Linux and decided to rice it. I loved Cava, and I had the wonderful idea to make an app that could display the current lyrics in my terminal ! Unfortunately, I did not have the competences to make this back then, so I foolishly delegated it to AI… And I never had the courage to rewrite it myself, because it looked sooo scary and hard… And the ai spaghetti code wasn’t here to help me. But I discovered Stardance, and I thought “Hell yeah, why not trying this ?”. Turns out it was easier than I thought ! Parole is a TUI app to display the lyrics of the current song, compatible with Linux (using mpris) and Windows (using winsdk) ! It fetches the lyrics data from LRCLib and displays them with Textual. It may not work perfectly on Windows, because Microsoft decided that yes, it’s a good idea to not return the actual position in the song but rather a position that updates not every time + the moment it was updated. So in most apps, if you play/pause, you break it. That kind of choices is a good reason to switch to Linux, if you want my opinion. Anyway, have fun playing around with it !", "repo": "https://github.com/skueee/parole", "demo": "https://pypi.org/project/parole-tui/"}]...
|
[{"post_id": 78173, "ts": "202 [{"post_id": 78173, "ts": "2026-10-09T21:23:05Z", "hours": 2.2808, "text": "Devlog 5 - Yayyy i’m going to ship ! This took way much more time than I thought, but everything is set up ! I made a readme, a contributing guide, and even issue templates ! Also I made a release workflow, and I’m soooo tired of the fact that Github Actions has no way of testing them, because it keeeps failing for whatever reason aaaaaah Well now it’s published so I just need to test !"}, {"post_id": 78040, "ts": "2026-10-09T09:43:43Z", "hours": 1.9056, "text": "Devlog 4 - I haaaate windows omg So I basically rewrote the logic to get song info. It’s not using playerctl anymore, which was not made to work like that and was not multi platform. Now, I have a little thingy that can provide two “providers”, one for Linux using mpris (dbus-next) and one for Windows using winsdk. The implementation on Linux was pretty easy, but omg why do people still use Windows ? Basically, the Windows API do not return the current position on the song, but a position and a time since it was last updated. So in 90% of the players, if you pause, all the timing will get wrong. And to complement all of this, the experience of using windows is sooo bad, like, wdym the middle mouse button stops working randomly ? Anyway I think i just need to write docs and I’m ready to ship !"}, {"post_id": 75905, "ts": "2026-10-01T15:39:19Z", "hours": 2.6236, "text": "Devlog 3 - It’s working well ! The program can show multiple lines of lyrics, and there is an argument to choose the number of them ! I also improved the lyrics parsing method, and forced the app to use the ANSI colors from the terminal. I think now I will change the metadata fetching to MPRIS via Dbus instead of playerctl, and will do that in a separate file for better organization when I will port to windows"}, {"post_id": 72331, "ts": "2026-09-22T17:57:14Z", "hours": 0.9306, "text": "Delvlog 2 - Well, it’s easier than I thought I knew it would be a small project, but this is reaaaally fast ! In this small update, I added a way to actually parse the lyrics, and show them in the TUI ! For now, there is just one line of lyric, but I will add options to add more lines. I just need to add customization options, fix some errors, maybe find a way to make this run on windows !"}, {"post_id": 71695, "ts": "2026-09-21T10:17:55Z", "hours": 2.8189, "text": "Devlog 1 - Parole, a nice terminal thing for showing lyrics of your favorite song ! Parole is a TUI tool made for your rice ! It will show the lyrics of the song you are currently listening, using Playerctl :) I use Subprocess to get the playerctl metadata, then I use Textual to show everything. For now, it can just get the lyrics and format them in a dict. Not very beautiful for now…"}]...
|
Title: parole by @skue | Stardance
Devlogs:
Devlo Title: parole by @skue | Stardance
Devlogs:
Devlog 1 - Parole, a nice terminal thing for showing lyrics of your favorite song ! Parole is a TUI tool made for your rice ! It will show the lyrics of the song you are currently listening, using Playerctl :) I use Subprocess to get the playerctl metadata, then I use Textual to show everything. For now, it can just get the lyrics and format them in a dict. Not very beautiful for now…
Delvlog 2 - Well, it’s easier than I thought I knew it would be a small project, but this is reaaaally fast ! In this small update, I added a way to actually parse the lyrics, and show them in the TUI ! For now, there is just one line of lyric, but I will add options to add more lines. I just need to add customization options, fix some errors, maybe find a way to make this run on windows !
Devlog 3 - It’s working well ! The program can show multiple lines of lyrics, and there is an argument to choose the number of them ! I also improved the lyrics parsing method, and forced the app to use the ANSI colors from the terminal. I think now I will change the metadata fetching to MPRIS via Dbus instead of playerctl, and will do that in a separate file for better organization when I will port to windows
Devlog 4 - I haaaate windows omg So I basically rewrote the logic to get song info. It’s not using playerctl anymore, which was not made to work like that and was not multi platform. Now, I have a little thingy that can provide two “providers”, one for Linux using mpris (dbus-next) and one for Windows using winsdk. The implementation on Linux was pretty easy, but omg why do people still use Windows ? Basically, the Windows API do not return the current position on the song, but a position and a time since it was last updated. So in 90% of the players, if you pause, all the timing will get wrong. And to complement all of this, the experience of using windows is sooo bad, like, wdym the middle mouse button stops working randomly ? Anyway I think i just need to write docs and I’m ready to ship !
Devlog 5 - Yayyy i’m going to ship ! This took way much more time than I thought, but everything is set up ! I made a readme, a contributing guide, and even issue templates ! Also I made a release workflow, and I’m soooo tired of the fact that Github Actions has no way of testing them, because it keeeps failing for whatever reason aaaaaah Well now it’s published so I just need to test !
Ships:
3… 2… 1… Introducing… Parole ! When I was a bit younger, I installed Linux and decided to rice it. I loved Cava, and I had the wonderful idea to make an app that could display the current lyrics in my terminal ! Unfortunately, I did not have the competences to make this back then, so I foolishly delegated it to AI… And I never had the courage to rewrite it myself, because it looked sooo scary and hard… And the ai spaghetti code wasn’t here to help me. But I discovered Stardance, and I thought “Hell yeah, why not trying this ?”. Turns out it was easier than I thought ! Parole is a TUI app to display the lyrics of the current song, compatible with Linux (using mpris) and Windows (using winsdk) ! It fetches the lyrics data from LRCLib and displays them with Textual. It may not work perfectly on Windows, because Microsoft decided that yes, it’s a good idea to not return the actual position in the song but rather a position that updates not every time + the moment it was updated. So in most apps, if you play/pause, you break it. That kind of choices is a good reason to switch to Linux, if you want my opinion. Anyway, have fun playing around with it !...
|
1793213255.0984385
|
1793299655.0984385
|
|
68515
|
8ball by @Hanny | Stardance
|
Hanny
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T21:45:58Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a randomizer-style bot for Slack channels. You can use three commands in your channels: /8ball-ping: Get random answers, just like a magic 8 Ball. /hrandom-number: Get a random number from 1 to 100. -/hrandom-color: Get a random hex color code. I made it for those moments when you just need a random answer, a number, or, for the artists out there, a color! Quick tip: With /8ball-ping, you always need to ask a question. If you run th command withouth one, it’ll ask you to enter a question first.", "repo": "https://github.com/hannyd9/Bot-Slack", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 78170, "ts": "202 [{"post_id": 78170, "ts": "2026-10-09T21:01:13Z", "hours": 0.2503, "text": "I was approved on Nest, finished configuring the connections in the terminal, and it was finally published on the Slack Channels."}, {"post_id": 77734, "ts": "2026-10-08T03:53:59Z", "hours": 1.2856, "text": "I’ve started building a SlackBot, sort of like a magic 8 ball. For now, I have all the code ready, and I have to wait for it to be approved on Nest before I can take the next steps."}]...
|
Title: 8ball by @Hanny | Stardance
Devlogs:
I’ve Title: 8ball by @Hanny | Stardance
Devlogs:
I’ve started building a SlackBot, sort of like a magic 8 ball. For now, I have all the code ready, and I have to wait for it to be approved on Nest before I can take the next steps.
I was approved on Nest, finished configuring the connections in the terminal, and it was finally published on the Slack Channels.
Ships:
I made a randomizer-style bot for Slack channels. You can use three commands in your channels: /8ball-ping: Get random answers, just like a magic 8 Ball. /hrandom-number: Get a random number from 1 to 100. -/hrandom-color: Get a random hex color code. I made it for those moments when you just need a random answer, a number, or, for the artists out there, a color! Quick tip: With /8ball-ping, you always need to ask a question. If you run th command withouth one, it’ll ask you to enter a question first....
|
1793217243.4059124
|
1793303643.4059124
|
|
68830
|
desktop sog by @Googentity | Stardance
|
Googentity
|
0
|
0.34
|
0
|
[]
|
[{"post_id": 78169, "ts": "202 [{"post_id": 78169, "ts": "2026-10-09T20:51:34Z", "hours": 0.3428, "text": "the cat moves, i was struggling with making the cat not vanish immediately but then i just put the cat’s sprite in the frame and he doesnt do the thingy anymore, now i need to make him quicker since i made his speed 100 when he had the vanishing issue since i thought the issue was the speed"}]...
|
Title: desktop sog by @Googentity | Stardance
Dev Title: desktop sog by @Googentity | Stardance
Devlogs:
the cat moves, i was struggling with making the cat not vanish immediately but then i just put the cat’s sprite in the frame and he doesnt do the thingy anymore, now i need to make him quicker since i made his speed 100 when he had the vanishing issue since i thought the issue was the speed...
|
1793126992.4253182
|
1793731792.4253182
|
|
33818
|
Piggi by @malikschenk | Stardance
|
malikschenk
|
1
|
27.2
|
180
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T20:52:24Z", "hours": 25.0, "multiplier": 7.31, "payout": 180, "blessing": "neutral", "text": "I created an app to keep an eye on your expenses and to reach your saving goals. It has smart features like Stats and a Calculator. Additionally there is PiggiAI, an integrated AI that runs via your Gemini API key. All the data is saved securely in local stoprage, never löeaves your device and can be deleted with just two clicks.", "repo": "https://github.com/Malikschenk/Piggi", "demo": "https://piggi-app.vercel.app/"}]...
|
[{"post_id": 78167, "ts": "202 [{"post_id": 78167, "ts": "2026-10-09T20:50:05Z", "hours": 1.6992, "text": "Devlog #8 After two failed submissions I finally found the problem! The reviewer said the Hack Club AI key didn’t work. But my code, as I thought, wasn’t actually the problem. Because GitHub Pages doesn’t support Serverless Functions and Vercel do. Now I host Piggi on Vercel. It feels and looks the same, but it works. Check it out here !"}, {"post_id": 75878, "ts": "2026-10-01T13:38:20Z", "hours": 0.5, "text": "Devlog #7 I received an answer really quickly from the reviewers. They said I have to open PiggiAI to Hack Club AI. I never heard of it before, but you can get your API key there for top OpenAI models. Now PiggiAI is opened to both keys! Check it out here !"}, {"post_id": 75714, "ts": "2026-09-30T20:38:29Z", "hours": 2.1003, "text": "Devlog #6 I just found out that the Stardance event has been extended by another month! I’m really happy but in the last days I spent so much time finishing Piggi. Now I’m done, there are no new features today, but you can check it out in my repo and live on GitHub Pages. I was struggling with Pages, but I finally did it! I’m about to submit the project. Maybe there’ll be a new version of Piggi, so stay tuned!"}, {"post_id": 75347, "ts": "2026-09-29T20:13:02Z", "hours": 3.7125, "text": "Devlog #5 I finally finished Piggi! I added a lot of new features. For example Stats and Calculator features. But try it yourself here or check my repo ! I’m adding information to the README but I have to submit the project now because the Stardance Event is ending tomorrow. Here are a few screenshots of the UI."}, {"post_id": 71771, "ts": "2026-09-21T14:37:29Z", "hours": 4.41, "text": "Devlog #4 I’m back working on Piggi! In the last weeks I built my Hackpad and shipped it yesterday. While it’s being checked I’m working on this project again. My plan is to finish it before the Stardance event ends."}, {"post_id": 44030, "ts": "2026-08-09T15:14:03Z", "hours": 3.5489, "text": "Devlog #3 I just finished the app and made some changes: · New Settings menu · Adjustable avatar letter · Option to reset all data · Option to add and subtract funds · Warning when entering letters or symbols in forms for numbers Aside from that I removed the diagram because I don’t think you need a visualization of monthly income and expenses. Now I’ll start with PiggiAI. I also hosted Piggi on GitHub Pages so check it out here !"}, {"post_id": 30397, "ts": "2026-07-17T21:50:20Z", "hours": 7.3644, "text": "Devlog #2 I largely finished the structure of the app, but it’s a work in progress and a few bugs to fix. The code is now on GitHub - try it out! These things are improved or new: · New menu for the settings · New dark mode · A clearer diagram for expenses · New buttons · Maximum of 10 saving goals and 5 sources of income · A few more improvements I had a problem with the Editing UI of the balance because I renamed a class in CSS but not in HTML and JS. As the next step I want to build the PiggiAI. It’s an AI assistant and it uses your Gemini API key. How you get this key is explained in the README in GitHub. Right now, the tile ‘PiggiAI’, the PiggiAI input bar at the bottom and the menu to enter your API key are currently non-functional, I’m working on it."}, {"post_id": 28510, "ts": "2026-07-14T20:12:39Z", "hours": 3.4694, "text": "Devlog #1 I’m working on the UI. This is my first prototype."}]...
|
Title: Piggi by @malikschenk | Stardance
Devlogs: Title: Piggi by @malikschenk | Stardance
Devlogs:
Devlog #1 I’m working on the UI. This is my first prototype.
Devlog #2 I largely finished the structure of the app, but it’s a work in progress and a few bugs to fix. The code is now on GitHub - try it out! These things are improved or new: · New menu for the settings · New dark mode · A clearer diagram for expenses · New buttons · Maximum of 10 saving goals and 5 sources of income · A few more improvements I had a problem with the Editing UI of the balance because I renamed a class in CSS but not in HTML and JS. As the next step I want to build the PiggiAI. It’s an AI assistant and it uses your Gemini API key. How you get this key is explained in the README in GitHub. Right now, the tile ‘PiggiAI’, the PiggiAI input bar at the bottom and the menu to enter your API key are currently non-functional, I’m working on it.
Devlog #3 I just finished the app and made some changes: · New Settings menu · Adjustable avatar letter · Option to reset all data · Option to add and subtract funds · Warning when entering letters or symbols in forms for numbers Aside from that I removed the diagram because I don’t think you need a visualization of monthly income and expenses. Now I’ll start with PiggiAI. I also hosted Piggi on GitHub Pages so check it out here !
Devlog #4 I’m back working on Piggi! In the last weeks I built my Hackpad and shipped it yesterday. While it’s being checked I’m working on this project again. My plan is to finish it before the Stardance event ends.
Devlog #5 I finally finished Piggi! I added a lot of new features. For example Stats and Calculator features. But try it yourself here or check my repo ! I’m adding information to the README but I have to submit the project now because the Stardance Event is ending tomorrow. Here are a few screenshots of the UI.
Devlog #6 I just found out that the Stardance event has been extended by another month! I’m really happy but in the last days I spent so much time finishing Piggi. Now I’m done, there are no new features today, but you can check it out in my repo and live on GitHub Pages. I was struggling with Pages, but I finally did it! I’m about to submit the project. Maybe there’ll be a new version of Piggi, so stay tuned!
Devlog #7 I received an answer really quickly from the reviewers. They said I have to open PiggiAI to Hack Club AI. I never heard of it before, but you can get your API key there for top OpenAI models. Now PiggiAI is opened to both keys! Check it out here !
Devlog #8 After two failed submissions I finally found the problem! The reviewer said the Hack Club AI key didn’t work. But my code, as I thought, wasn’t actually the problem. Because GitHub Pages doesn’t support Serverless Functions and Vercel do. Now I host Piggi on Vercel. It feels and looks the same, but it works. Check it out here !
Ships:
I created an app to keep an eye on your expenses and to reach your saving goals. It has smart features like Stats and a Calculator. Additionally there is PiggiAI, an integrated AI that runs via your Gemini API key. All the data is saved securely in local stoprage, never löeaves your device and can be deleted with just two clicks....
|
1793148658.2474985
|
1793235058.2474985
|
|
63289
|
Doodle-Sketch by @Element | Stardance
|
Element
|
1
|
19.0
|
181
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T20:36:02Z", "hours": 19.0, "multiplier": 9.71, "payout": 181, "blessing": "neutral", "text": "Doodle Doodle is a simple web based drawing app, in which you can do simple doodling Features The Main feature is the colour picker, it gives you both darker and lighter value of the color you choose you can choose from preset of put a hex code and has a color picker Pen pressure that you can toggle, on by default A minimap that shows what you are drawing, it only shows what the free hand drawing tool shows All other basic features that should be in a drawing app What was hard? Implementing the eraser was challenging because it had to remove existing strokes without affecting the rest of the drawing. I used the Canvas API’s destination-out compositing mode and made sure erased areas stayed erased when the infinite canvas was redrawn or zoomed. Making the opacity work properly took some time too I wanted the color selector to be more flexible than a basic color picker, adding custom HEX colors, different shades, and an eyedropper tool some extra work, but that lwk made it so much better than a simple color selector Use of Ai Ai was mainly used for debugging and to act as an teacher, when i messed up something i would ask it about what happened, how i can fix it, why is happened, like that. Also all the code is written by me, and i have kept my usage of Ai under that limit, cus most of the time I just google the stuff i want DEMO LINK Doodle", "repo": "https://github.com/CreateVision96/Doodle", "demo": "https://createvision96.github.io/Doodle/"}]...
|
[{"post_id": 78163, "ts": "202 [{"post_id": 78163, "ts": "2026-10-09T20:35:07Z", "hours": 0.5167, "text": "Final devlog I have fixed some bugs and did some adjusting now its ready to ship"}, {"post_id": 76216, "ts": "2026-10-02T18:22:55Z", "hours": 1.3853, "text": "DevLog 4 we hab the minimap working guys the minimap only shows the freehand lines and erased parts it doesnt show the other tools also fixed some bugs"}, {"post_id": 74788, "ts": "2026-09-28T07:50:44Z", "hours": 3.6075, "text": "Devlog 3 Worked on the color selector and the brush while using lower opacity the brush will be smooth instead of bunch of little dots. And the color selector will generate both darker and lighter shades of the color you select. Added a button to turn off or on the pen pressure"}, {"post_id": 72327, "ts": "2026-09-22T17:50:02Z", "hours": 5.9064, "text": "DevLog 2 okay now i added the rest of the drawing tools, and a hamburger menu for now it ony has three working functions two of them are lwk same, you can download reset Canvas or hit New Canvas nextt ill be working on color selector"}, {"post_id": 70887, "ts": "2026-09-19T23:17:10Z", "hours": 7.1986, "text": "DevLog 1 Im working on a web based drawing app What i have implimented? Infinite canvas The pen pressure works Proper Eraser Stroke width Zoom in and out with percentage Undo and Redo (ctrl + Z and ctrl + shift + Z) Next? Next i will try to add rest of the tools and a menu to change some simple settings and option to change colors, and maybe work n make the UI look better"}]...
|
Title: Doodle-Sketch by @Element | Stardance
Devl Title: Doodle-Sketch by @Element | Stardance
Devlogs:
DevLog 1 Im working on a web based drawing app What i have implimented? Infinite canvas The pen pressure works Proper Eraser Stroke width Zoom in and out with percentage Undo and Redo (ctrl + Z and ctrl + shift + Z) Next? Next i will try to add rest of the tools and a menu to change some simple settings and option to change colors, and maybe work n make the UI look better
DevLog 2 okay now i added the rest of the drawing tools, and a hamburger menu for now it ony has three working functions two of them are lwk same, you can download reset Canvas or hit New Canvas nextt ill be working on color selector
Devlog 3 Worked on the color selector and the brush while using lower opacity the brush will be smooth instead of bunch of little dots. And the color selector will generate both darker and lighter shades of the color you select. Added a button to turn off or on the pen pressure
DevLog 4 we hab the minimap working guys the minimap only shows the freehand lines and erased parts it doesnt show the other tools also fixed some bugs
Final devlog I have fixed some bugs and did some adjusting now its ready to ship
Ships:
Doodle Doodle is a simple web based drawing app, in which you can do simple doodling Features The Main feature is the colour picker, it gives you both darker and lighter value of the color you choose you can choose from preset of put a hex code and has a color picker Pen pressure that you can toggle, on by default A minimap that shows what you are drawing, it only shows what the free hand drawing tool shows All other basic features that should be in a drawing app What was hard? Implementing the eraser was challenging because it had to remove existing strokes without affecting the rest of the drawing. I used the Canvas API’s destination-out compositing mode and made sure erased areas stayed erased when the infinite canvas was redrawn or zoomed. Making the opacity work properly took some time too I wanted the color selector to be more flexible than a basic color picker, adding custom HEX colors, different shades, and an eyedropper tool some extra work, but that lwk made it so much better than a simple color selector Use of Ai Ai was mainly used for debugging and to act as an teacher, when i messed up something i would ask it about what happened, how i can fix it, why is happened, like that. Also all the code is written by me, and i have kept my usage of Ai under that limit, cus most of the time I just google the stuff i want DEMO LINK Doodle...
|
1793213264.2438731
|
1793299664.2438731
|
|
61352
|
DeltaruneOS by @Anastt | Stardance
|
Anastt
|
2
|
13.0
|
5
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T20:50:23Z", "hours": 2.0, "multiplier": 2.83, "payout": 5, "blessing": "neutral", "text": "And after (more than) 12 hours, i think its done!! Deltarune WebOS, a deltarune themed webos with multiple apps and other features. I used html/css/js for everything, loved making this over the past month. The 3 new features are mentioned in my final devlog btw :ppp", "repo": "https://github.com/Anastt77/DeltaruneOS", "demo": "https://anastt77.github.io/DeltaruneOS/"}, {"ship_num": 2, "ts": "2026-09-26T21:09:06Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a deltarune themed webOS using html/css/js. It has multiple draggable windows (aka apps), a top bar w live time and date, and best of all; a draggable dancing tenna gif. i mean just look at him!!", "repo": "https://github.com/Anastt77/DeltaruneOS", "demo": "https://anastt77.github.io/DeltaruneOS/"}]...
|
[{"post_id": 78161, "ts": "202 [{"post_id": 78161, "ts": "2026-10-09T20:32:45Z", "hours": 1.9047, "text": "V2 is done, general polishing of the entire thing, more styling and fighting w js, 3 new main features: -Browser App -Dog App -Functional analog clock widget. SUper fun to make ive been loving thiss"}, {"post_id": 74177, "ts": "2026-09-26T21:02:45Z", "hours": 1.3081, "text": "its doneeee!!!!!! —— yay this was so much fun loved making it js was challenging but like in a good way so cool"}, {"post_id": 73304, "ts": "2026-09-24T20:13:53Z", "hours": 3.6572, "text": "DeltaruneOS - Devlog I’ve-lost-count /// Okk big one, i think it’s almost done i just need to polish it a bit, i have finished the wiki app and added a functional timer app, general js and html fixes AND a fully functional draggable dancing Tenna gif to keep you company"}, {"post_id": 70286, "ts": "2026-09-18T21:30:23Z", "hours": 0.7758, "text": "general styling/troubleshooting, still havent done any like actual proper progress yk."}, {"post_id": 68822, "ts": "2026-09-15T20:13:18Z", "hours": 0.3753, "text": "i have literally zero time cz school so atp im just keeping my streak up lmao progress is going slow. ditched the notes app for a wiki app. thats about it next time ill add the contents"}, {"post_id": 68240, "ts": "2026-09-14T19:16:19Z", "hours": 0.3117, "text": "didnt have much time today, fixed the app selection thing tho :))"}, {"post_id": 67448, "ts": "2026-09-13T15:36:57Z", "hours": 1.0264, "text": "did most of the guide’s part 4, struggling a bit w js, i couldnt make it so when you click it gets selected and then gets opened, ill do i next time"}, {"post_id": 66952, "ts": "2026-09-12T22:49:24Z", "hours": 1.785, "text": "DeltaruneOS - Devlog #2 /// did most part of the 3rd mission jam, so i made the intro window draggable and made it have the ability to open and close. struggled a bit with the javascript but it worked in the end. also added a window top bar with like an x button yk"}, {"post_id": 66647, "ts": "2026-09-12T14:36:17Z", "hours": 1.2683, "text": "DeltaruneOS - Devlog 1 /// Today i did the first two parts of the mission guide. Added a top bar with an updating clock with js and the introduction window, as well as various html/css styling stuff. This is genuinely such a fun mission i love how it’s turning out :))"}]...
|
Title: DeltaruneOS by @Anastt | Stardance
Devlogs Title: DeltaruneOS by @Anastt | Stardance
Devlogs:
DeltaruneOS - Devlog 1 /// Today i did the first two parts of the mission guide. Added a top bar with an updating clock with js and the introduction window, as well as various html/css styling stuff. This is genuinely such a fun mission i love how it’s turning out :))
DeltaruneOS - Devlog #2 /// did most part of the 3rd mission jam, so i made the intro window draggable and made it have the ability to open and close. struggled a bit with the javascript but it worked in the end. also added a window top bar with like an x button yk
did most of the guide’s part 4, struggling a bit w js, i couldnt make it so when you click it gets selected and then gets opened, ill do i next time
didnt have much time today, fixed the app selection thing tho :))
i have literally zero time cz school so atp im just keeping my streak up lmao progress is going slow. ditched the notes app for a wiki app. thats about it next time ill add the contents
general styling/troubleshooting, still havent done any like actual proper progress yk.
DeltaruneOS - Devlog I’ve-lost-count /// Okk big one, i think it’s almost done i just need to polish it a bit, i have finished the wiki app and added a functional timer app, general js and html fixes AND a fully functional draggable dancing Tenna gif to keep you company
its doneeee!!!!!! —— yay this was so much fun loved making it js was challenging but like in a good way so cool
V2 is done, general polishing of the entire thing, more styling and fighting w js, 3 new main features: -Browser App -Dog App -Functional analog clock widget. SUper fun to make ive been loving thiss
Ships:
I made a deltarune themed webOS using html/css/js. It has multiple draggable windows (aka apps), a top bar w live time and date, and best of all; a draggable dancing tenna gif. i mean just look at him!!
And after (more than) 12 hours, i think its done!! Deltarune WebOS, a deltarune themed webos with multiple apps and other features. I used html/css/js for everything, loved making this over the past month. The 3 new features are mentioned in my final devlog btw :ppp...
|
1793209710.259304
|
1793296110.259304
|
|
5717
|
My first slack bot! by @IgBurner | Stardance
|
IgBurner
|
0
|
3.49
|
0
|
[]
|
[{"post_id": 7816, "ts": "2026 [{"post_id": 7816, "ts": "2026-06-13T01:28:12Z", "hours": 0.7936, "text": "Its finally done, the commands that I wanted to do anyway, I don’t like js I hope I don’t have to use it in the future, now I can start projects I know Ill enjoy 😭"}, {"post_id": 3234, "ts": "2026-06-06T02:00:24Z", "hours": 0.9464, "text": "turns out all of my commands had errors so I have to work them out one by one, i did the random art command, I had to find out how to use the query thing to look for paintings specifically - js is weird 😂"}, {"post_id": 1862, "ts": "2026-06-04T02:22:33Z", "hours": 0.5211, "text": "added two more commands that will get a random color and a random cat image, maybe if artists want to draw a cat with random colors this will be useful 😂 - gonna try it all soon hopefully it works 🤞"}, {"post_id": 1208, "ts": "2026-06-03T01:59:55Z", "hours": 1.2317, "text": "Finished a command to get a random piece of art and a url to the image, idk if it works since Nest hasn’t accepted me yet, but it runs so we’re basically good"}]...
|
Title: My first slack bot! by @IgBurner | Stardanc Title: My first slack bot! by @IgBurner | Stardance
Devlogs:
Finished a command to get a random piece of art and a url to the image, idk if it works since Nest hasn’t accepted me yet, but it runs so we’re basically good
added two more commands that will get a random color and a random cat image, maybe if artists want to draw a cat with random colors this will be useful 😂 - gonna try it all soon hopefully it works 🤞
turns out all of my commands had errors so I have to work them out one by one, i did the random art command, I had to find out how to use the query thing to look for paintings specifically - js is weird 😂
Its finally done, the commands that I wanted to do anyway, I don’t like js I hope I don’t have to use it in the future, now I can start projects I know Ill enjoy 😭...
|
1793170360.607493
|
1793775160.607493
|
|
68729
|
Hypersonic Player by @1xiyu | Stardance
|
1xiyu
|
0
|
1.58
|
0
|
[]
|
[{"post_id": 78157, "ts": "202 [{"post_id": 78157, "ts": "2026-10-09T20:26:02Z", "hours": 1.5794, "text": "Devlog 1: I started by adding the authentication system, and now basic api calls work! Thankfully I only needed to create a md5 hash, which was quite fun to play around with. The responses are in XML, so I’ll have to find a way to parse them next. The UI could also use some work as it’s a bit sparce."}]...
|
Title: Hypersonic Player by @1xiyu | Stardance
De Title: Hypersonic Player by @1xiyu | Stardance
Devlogs:
Devlog 1: I started by adding the authentication system, and now basic api calls work! Thankfully I only needed to create a md5 hash, which was quite fun to play around with. The responses are in XML, so I’ll have to find a way to parse them next. The UI could also use some work as it’s a bit sparce....
|
1793123639.0187142
|
1793728439.0187142
|
|
68848
|
Untitled project by @anarc | Stardance
|
anarc
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T20:03:42Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "font and layout practice, first time ive used html in a WHILE!", "repo": "https://github.com/synthezizer/ssd", "demo": "https://chudd.vercel.app"}]...
|
[{"post_id": 78150, "ts": "202 [{"post_id": 78150, "ts": "2026-10-09T19:51:57Z", "hours": 0.6353, "text": "lol"}]...
|
Title: Untitled project by @anarc | Stardance
Dev Title: Untitled project by @anarc | Stardance
Devlogs:
lol
Ships:
font and layout practice, first time ive used html in a WHILE!...
|
1793217297.0799935
|
1793303697.0799935
|
|
68855
|
Custom-proxmox by @citunek22 | Stardance
|
citunek22
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T08:17:50Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made like a custom proxmox though it doesn’t work like proxmox it’s based on docker so you can install 4 or 5 apps with one click and then you also get a terminal running with websocket on the dashboard and you can click through the containers. It was quite hard because the debugging of the websocket terminal but now it works. Also I don’t like how downloading images on phones work because I had to put this into my Snapchat folder so it would recognize this as a picture", "repo": "https://github.com/citunek22/HackMox-Custom-Proxmox", "demo": "https://youtu.be/-h0IKcTE2pg?si=MlJskCZXxunYVyuH"}]...
|
[{"post_id": 78147, "ts": "202 [{"post_id": 78147, "ts": "2026-10-09T19:37:34Z", "hours": 11.4086, "text": "Sorry for not writing any devlogs its because i know myself and i never finish my projects so thats why this doesnt have any devlogs except from this also this is how the project looks like"}]...
|
Title: Custom-proxmox by @citunek22 | Stardance
D Title: Custom-proxmox by @citunek22 | Stardance
Devlogs:
Sorry for not writing any devlogs its because i know myself and i never finish my projects so thats why this doesnt have any devlogs except from this also this is how the project looks like
Ships:
I made like a custom proxmox though it doesn’t work like proxmox it’s based on docker so you can install 4 or 5 apps with one click and then you also get a terminal running with websocket on the dashboard and you can click through the containers. It was quite hard because the debugging of the websocket terminal but now it works. Also I don’t like how downloading images on phones work because I had to put this into my Snapchat folder so it would recognize this as a picture...
|
1793217302.8645022
|
1793303702.8645022
|
|
60106
|
X173-126 Citation by @Gooseishere | Stardance
|
Gooseishere
|
0
|
9.36
|
0
|
[]
|
[{"post_id": 78130, "ts": "202 [{"post_id": 78130, "ts": "2026-10-09T17:36:50Z", "hours": 0.3833, "text": "Made my plane’s wing wing span = 37.5 each wing chord =15 , al = length :19 cm width :3cm"}, {"post_id": 76072, "ts": "2026-10-02T07:47:41Z", "hours": 2.2667, "text": "finally made the design gonna bring in the materials to build in some time"}, {"post_id": 70196, "ts": "2026-09-18T17:58:38Z", "hours": 0.4667, "text": "airpane 816-101"}, {"post_id": 69570, "ts": "2026-09-17T10:16:10Z", "hours": 1.1167, "text": "Tried to make a v2 but failed and the motor is fried electronics stopped working and what is this hack dude"}, {"post_id": 69202, "ts": "2026-09-16T16:16:50Z", "hours": 4.2167, "text": "studied so IT cuz I have exam tomorrow and learned about the centre of gravity by making a V1 of the plane dude spent 3hrs , and it failed! , also found that a lego propeller and a small motor won’t propel a large aircraft well i am still waiting for the funding , after i get it i’ll make v2-v3 to launch rockets ! also why does the subject IT has maths ?"}, {"post_id": 64703, "ts": "2026-09-09T10:16:46Z", "hours": 0.9108, "text": "Making a rc airplane ! will be an model of tejas fighter after everything is complete :)"}]...
|
Title: X173-126 Citation by @Gooseishere | Stardan Title: X173-126 Citation by @Gooseishere | Stardance
Devlogs:
Making a rc airplane ! will be an model of tejas fighter after everything is complete :)
studied so IT cuz I have exam tomorrow and learned about the centre of gravity by making a V1 of the plane dude spent 3hrs , and it failed! , also found that a lego propeller and a small motor won’t propel a large aircraft well i am still waiting for the funding , after i get it i’ll make v2-v3 to launch rockets ! also why does the subject IT has maths ?
Tried to make a v2 but failed and the motor is fried electronics stopped working and what is this hack dude
airpane 816-101
finally made the design gonna bring in the materials to build in some time
Made my plane’s wing wing span = 37.5 each wing chord =15 , al = length :19 cm width :3cm...
|
1793033257.282475
|
1793638057.282475
|
|
68764
|
Mikan's Zero-G by @restart_notslander | Starda Mikan's Zero-G by @restart_notslander | Stardance...
|
restart_notslander
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T14:41:16Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After 3 hours of building, Mikan’s Zero-G is ready to ship. It’s a small browser game where you drift a cat through space collecting stars while dodging asteroids - all drawn with canvas code, no image assets. The hardest part was the drift physics: making thrust, drag and wall bounce feel right took a lot of tweaking. I also added a procedural starfield and WebAudio bleeps so the game feels alive without any sound files.", "repo": "https://github.com/maebahesioru/mikans-zero-g", "demo": "https://maebahesioru.github.io/mikans-zero-g/"}]...
|
[{"post_id": 78124, "ts": "202 [{"post_id": 78124, "ts": "2026-10-09T17:06:35Z", "hours": 2.6, "text": "Day 1 of Mikan’s Zero-G. Built the whole game loop today: drift physics (thrust + drag + wall bounce), 15-star collection, asteroid dodging with 3 lives, a procedural starfield, and WebAudio bleeps. All canvas code — no images or sound files. Screenshot attached: mid-game with notes falling."}]...
|
Title: Mikan's Zero-G by @restart_notslander | Title: Mikan's Zero-G by @restart_notslander | Stardance
Devlogs:
Day 1 of Mikan’s Zero-G. Built the whole game loop today: drift physics (thrust + drag + wall bounce), 15-star collection, asteroid dodging with 3 lives, a procedural starfield, and WebAudio bleeps. All canvas code — no images or sound files. Screenshot attached: mid-game with notes falling.
Ships:
After 3 hours of building, Mikan’s Zero-G is ready to ship. It’s a small browser game where you drift a cat through space collecting stars while dodging asteroids - all drawn with canvas code, no image assets. The hardest part was the drift physics: making thrust, drag and wall bounce feel right took a lot of tweaking. I also added a procedural starfield and WebAudio bleeps so the game feels alive without any sound files....
|
1793217282.786326
|
1793303682.786326
|
|
29573
|
My very own WebOS by @darshini_raghavendra | Stard My very own WebOS by @darshini_raghavendra | Stardance...
|
darshini_raghavendra
|
0
|
4.65
|
0
|
[]
|
[{"post_id": 78112, "ts": "202 [{"post_id": 78112, "ts": "2026-10-09T16:21:17Z", "hours": 1.2317, "text": "I added some photos to my gallery app! Just Toro doing random stuff :P"}, {"post_id": 77911, "ts": "2026-10-08T18:52:25Z", "hours": 0.6806, "text": "I added some stuff to my notes app. You can now add a new note and write stuff! It will be stored in the browser’s local storage."}, {"post_id": 76783, "ts": "2026-10-04T15:45:47Z", "hours": 2.3031, "text": "I added a notes app to my OS! I will be adding more apps soon."}, {"post_id": 66934, "ts": "2026-09-12T22:12:39Z", "hours": 0.4342, "text": "I made the welcome screen for my OS! (Can you tell I like Toro the cat)"}]...
|
Title: My very own WebOS by @darshini_raghavendra Title: My very own WebOS by @darshini_raghavendra | Stardance
Devlogs:
I made the welcome screen for my OS! (Can you tell I like Toro the cat)
I added a notes app to my OS! I will be adding more apps soon.
I added some stuff to my notes app. You can now add a new note and write stuff! It will be stored in the browser’s local storage.
I added some photos to my gallery app! Just Toro doing random stuff :P...
|
1792806676.3756998
|
1793411476.3756998
|
|
19113
|
AcademiaOS by @aminoacid | Stardance
|
aminoacid
|
2
|
28.0
|
88
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T15:37:31Z", "hours": 10.0, "multiplier": 8.46, "payout": 88, "blessing": "neutral", "text": "I completed the WebOS 2 mission. In the updated WebOS, I added: pomodoro app weather app clock widget animated cat widget During this project I learned how to retrieve data using javascript for the weather app and how to animate in libresprite. Figuring out how to rotate the clock hands was challenging, but the hardest part of the project was to manage it with my school work and SAT exams.", "repo": "https://github.com/909aminoacid909/AcademiaOS", "demo": "https://909aminoacid909.github.io/AcademiaOS/"}, {"ship_num": 2, "ts": "2026-09-12T11:57:20Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Completed my second Stardance Project! AcademiaOS is my web based operating system inspired by a dark academia aesthetic. I built a notes app, a calculator, a record player and a browser. The most difficult part of this project was definitely the javascript for opening, closing and dragging tabs. Since this is my first project with Javascript, the functionality is quite simple. This project did familiarize me with the basics of the language, and once I’ve learned more I might attempt to work on WebOS 2. I’m very proud of the design of the record player app and all the square buttons; I made sure everything would be cohesive and fit well into the theme.", "repo": "https://github.com/909aminoacid909/AcademiaOS", "demo": "https://909aminoacid909.github.io/AcademiaOS/"}]...
|
[{"post_id": 78092, "ts": "202 [{"post_id": 78092, "ts": "2026-10-09T15:23:22Z", "hours": 0.7172, "text": "Completed the updated README!"}, {"post_id": 78058, "ts": "2026-10-09T12:18:20Z", "hours": 2.4817, "text": "Added an Antique Clock and cat widget. Getting the clock hands to work definitely took me some time. I animated the cat in libresprite."}, {"post_id": 74211, "ts": "2026-09-26T22:25:01Z", "hours": 7.2367, "text": "Finished the pomodoro and the weather app. I designed the logos for the apps and the all the weather icons too in libresprite. Work’s been slow since the SAT date is coming up rip T-T"}, {"post_id": 66537, "ts": "2026-09-12T11:43:46Z", "hours": 0.8903, "text": "Devlog#6 Finished the README file. This project took me forever T-T."}, {"post_id": 66478, "ts": "2026-09-12T09:57:41Z", "hours": 2.9394, "text": "Devlog#5 Completed the browser and the notes app. The javascript for the notes app was the hardest for me to figure out smh. Now I’m going to write a README and submit it."}, {"post_id": 63191, "ts": "2026-09-06T21:11:07Z", "hours": 1.0447, "text": "Devlog#4 Completed most of the record player app. Just have a bit of the javascript left."}, {"post_id": 59825, "ts": "2026-09-01T20:01:27Z", "hours": 2.8883, "text": "Devlog#3 Finished the calculator and a bit of the notes app."}, {"post_id": 47216, "ts": "2026-08-14T23:56:25Z", "hours": 7.3244, "text": "Devlog#2 Ok so during the past week i worked on the: app icon, closing and opening windows, and app selection. It took me a ridiculous amount of time to make the app div change class in response to a click. I disabled pointer events on the background but that just turned it off for all the other windows too. Eventually, i found out i could enable pointer events for everything but the background using the *:not(#background) in css and it FINALLY worked. This was my first time using Javascript, so now that I’ve had some exposure hopefully its easier to work on the individual apps T-T. I made all the icons myself using libresprite."}, {"post_id": 41889, "ts": "2026-08-06T12:05:42Z", "hours": 2.6789, "text": "Devlog#1 Decided to make a pixel background and learned how to use libresprite. Took WAY longer than i thought-"}]...
|
Title: AcademiaOS by @aminoacid | Stardance
Devlo Title: AcademiaOS by @aminoacid | Stardance
Devlogs:
Devlog#1 Decided to make a pixel background and learned how to use libresprite. Took WAY longer than i thought-
Devlog#2 Ok so during the past week i worked on the: app icon, closing and opening windows, and app selection. It took me a ridiculous amount of time to make the app div change class in response to a click. I disabled pointer events on the background but that just turned it off for all the other windows too. Eventually, i found out i could enable pointer events for everything but the background using the *:not(#background) in css and it FINALLY worked. This was my first time using Javascript, so now that I’ve had some exposure hopefully its easier to work on the individual apps T-T. I made all the icons myself using libresprite.
Devlog#3 Finished the calculator and a bit of the notes app.
Devlog#4 Completed most of the record player app. Just have a bit of the javascript left.
Devlog#5 Completed the browser and the notes app. The javascript for the notes app was the hardest for me to figure out smh. Now I’m going to write a README and submit it.
Devlog#6 Finished the README file. This project took me forever T-T.
Finished the pomodoro and the weather app. I designed the logos for the apps and the all the weather icons too in libresprite. Work’s been slow since the SAT date is coming up rip T-T
Added an Antique Clock and cat widget. Getting the clock hands to work definitely took me some time. I animated the cat in libresprite.
Completed the updated README!
Ships:
Completed my second Stardance Project! AcademiaOS is my web based operating system inspired by a dark academia aesthetic. I built a notes app, a calculator, a record player and a browser. The most difficult part of this project was definitely the javascript for opening, closing and dragging tabs. Since this is my first project with Javascript, the functionality is quite simple. This project did familiarize me with the basics of the language, and once I’ve learned more I might attempt to work on WebOS 2. I’m very proud of the design of the record player app and all the square buttons; I made sure everything would be cohesive and fit well into the theme.
I completed the WebOS 2 mission. In the updated WebOS, I added: pomodoro app weather app clock widget animated cat widget During this project I learned how to retrieve data using javascript for the weather app and how to animate in libresprite. Figuring out how to rotate the clock hands was challenging, but the hardest part of the project was to manage it with my school work and SAT exams....
|
1793152393.5367358
|
1793238793.5367358
|
|
68445
|
keyboard by @Lim | Stardance
|
Lim
|
0
|
1.4
|
0
|
[]
|
[{"post_id": 78086, "ts": "202 [{"post_id": 78086, "ts": "2026-10-09T15:05:28Z", "hours": 1.4019, "text": "Already completed the PCB design and the PCB wiring currently doing the case, which is quite hard… Hopefully I could fix this.(DXF importing to freecad and the position isn’t right)"}]...
|
Title: keyboard by @Lim | Stardance
Devlogs:
Alre Title: keyboard by @Lim | Stardance
Devlogs:
Already completed the PCB design and the PCB wiring currently doing the case, which is quite hard… Hopefully I could fix this.(DXF importing to freecad and the position isn’t right)...
|
1793120136.8705003
|
1793724936.8705003
|
|
32700
|
NetLink by @Leon36 | Stardance
|
Leon36
|
2
|
75.0
|
1132
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T14:54:33Z", "hours": 64.0, "multiplier": 16.47, "payout": 982, "blessing": "neutral", "text": "NetLink connect to your network from everywhere without a VPN I made a Web based “OS” to connect to your network without a VPN and accses your resources with protocols like sftp or ssh. I also build a desktop client to emulate a VPN on your pc, so you can accses your network with your own programms Technologys I used WebSockets to transfer data between the client and the Server. For the frontend I choose React, for the backend I used TypeScript.", "repo": "https://github.com/leonst036/NetLink", "demo": "https://netlink.legaming.tech/"}, {"ship_num": 2, "ts": "2026-07-14T19:45:47Z", "hours": 11.0, "multiplier": 14.76, "payout": 150, "blessing": "neutral", "text": "I built a project called NetLink! It lets you connect to your home network from anywhere. Right now, it supports access via VNC, SSH, and SFTP. It uses WebSockets and web based apps to establish the connection. Everything is routed through a relay node, so you don’t need to open any ports on your router. In the demo version, you can set up your own PC as a local server to try it out (active for 24 hours). If you want to use it long-term, you can easily self-host the project on your own hardware (GitHub Readme). I’m planning to add support for more protocols soon. If you have any feedback or ideas on how to improve the project, feel free to leave a comment or send me a DM! Heads up: If you’re using the demo, it might take a few moments to load all your devices.", "repo": "https://github.com/leonst036/NetLink", "demo": "https://netlink.legaming.tech/"}]...
|
[{"post_id": 78081, "ts": "202 [{"post_id": 78081, "ts": "2026-10-09T14:48:26Z", "hours": 6.1889, "text": "Summary: Polished NetLink for a ship Fixed some bugs Remade some screens Made a demo version Made some security fixes"}, {"post_id": 58474, "ts": "2026-08-30T21:50:58Z", "hours": 2.4225, "text": "Summary: Made some bugfixes That’s pretty much all. I found some small thing I didn’t like and fixed them."}, {"post_id": 53323, "ts": "2026-08-23T19:58:03Z", "hours": 6.5603, "text": "Summary: Made NetConnect a programm for Linux to bring you Network to you everywhere (without VPN) I made this using Go and a virtual network device wich act like a spit tunnel vpn, to extract all request from you subnet e.g. 192.168.1.0/24 sends it over a WebSocket to the NetLink relay server and to its target server. I’m not fully done with this, but right now it’s working. Maybe I’ll do a version for windows soon. How you can install it is defined in the NetConnect Repo ONLY FOR LINUX"}, {"post_id": 52016, "ts": "2026-08-22T01:39:34Z", "hours": 6.1189, "text": "Summaray: Refactored netgraph and settings app Yeah, I refactored it. That’s it. I gues I put these applications as picture :-|"}, {"post_id": 49947, "ts": "2026-08-18T22:48:47Z", "hours": 13.9178, "text": "Summary: Refactored NetStore, gave the NetStore it’s own Repo and started making a Minecraft Server Manager. I just refactored the I gues 1200 line longe NetStore app, and I have so much to refactor left. I started the Minecraft Server Manager before the refactoring but it wasn’t in my usual hackatime project, it was in a new one, and my stupid ass thought it was just a technical mistake that the time wasn’t tracked."}, {"post_id": 46375, "ts": "2026-08-13T15:30:43Z", "hours": 3.2525, "text": "Summary: Moved all build-in apps into the NetStore That’s pretty much all…"}, {"post_id": 46019, "ts": "2026-08-12T22:06:19Z", "hours": 1.8247, "text": "Summary: Made a traffic monitor for the NetStore This Devlog isn’t gona be that long, I just made a smal traffic monitor. And some small improvements."}, {"post_id": 45387, "ts": "2026-08-11T20:17:00Z", "hours": 2.0261, "text": "Summary: Secured NetStore and published it. I secured the NetStore so far that I can release it on the main branch. Right now it isn’t in the demo, so you can test it only when you install it by yourself (wich is very easy with the new install script)"}, {"post_id": 44059, "ts": "2026-08-09T16:06:18Z", "hours": 6.2664, "text": "Summary: Added a Docker Manager and done some fixes with the NetStore In my last devlog I made the NetStore, and this is the first application by myself. It’s used to manage your dockers from everywhere (What a wonder, the docker manager can manage docker). It isn’t perfect right now, so it’s not an alternative to something like Portainer or Coolify, but for simple tasks, it’s good enough. Primarily I made this application to add features to the NetStore (I added a lot, only for this application) and of course I found some bugs. The NetStore itself isn’t secured yet (Right now I only added Deno), but I’m working on it!"}, {"post_id": 43289, "ts": "2026-08-08T13:55:07Z", "hours": 3.1814, "text": "Summary: Added NetStore to create custom applications I added an application that allows you to create your own custom applications. I will use this Store to build additional apps myself for niche use cases (e.g., Docker management or local server containers) that will be fetched directly from GitHub. Key features: Custom Routes: Register your own custom backend routes. Frontend: Build and design your own user interface. Local Code: Execute custom code on the local server. IMPORTANT: DO NOT USE NETSTORE IN PRODUCTION OR DEPLOYMENT ENVIRONMENTS. IT IS CURRENTLY NOT SECURE. If you choose to use it anyway, you do so at your own risk. It’s on the dev Branch. I’d recommend to use it only in your local Network"}, {"post_id": 40183, "ts": "2026-08-03T16:15:22Z", "hours": 5.7364, "text": "I fixed some Bugs in the frontend and made some improvements in the backend."}, {"post_id": 33121, "ts": "2026-07-22T18:59:08Z", "hours": 1.8814, "text": "I just refactored the Project I optimized the structure of the local server and the relay. In the frontend, apps will load just when opening them wich is very good for the performance"}, {"post_id": 31896, "ts": "2026-07-20T17:40:45Z", "hours": 4.185, "text": "I completely remade the frontend! It’s now a hybrid of Material 3 and modern Glassmorphism. The overhaul took well over 4 hours though a good chunk was done at school (untracked since I wasn’t logged into Hackatime). Overall, I’m really happy with how the new look turned out! There are probably a few subtle UI bugs hiding in the new design, but I’ll squash those as I find them."}, {"post_id": 28489, "ts": "2026-07-14T19:25:14Z", "hours": 2.3664, "text": "I just finished a few bugs and created an demo enviroment. If you wanna try it, I’ll explain everything in the ship description."}, {"post_id": 27126, "ts": "2026-07-12T12:17:35Z", "hours": 3.7031, "text": "NetLink features a web-based operating system designed to enhance the user experience with VNC and SFTP. I plan to add support for additional protocols, such as RDP, in the future"}, {"post_id": 25976, "ts": "2026-07-10T14:54:42Z", "hours": 1.5586, "text": "Added dynamic SSH server selection. The network scan was a bit difficult. It’s not the prettiest solution to ping every device, but it works!"}, {"post_id": 25492, "ts": "2026-07-09T20:04:51Z", "hours": 2.8922, "text": "Streaming a SSH Session over the relay server"}]...
|
Title: NetLink by @Leon36 | Stardance
Devlogs:
St Title: NetLink by @Leon36 | Stardance
Devlogs:
Streaming a SSH Session over the relay server
Added dynamic SSH server selection. The network scan was a bit difficult. It’s not the prettiest solution to ping every device, but it works!
NetLink features a web-based operating system designed to enhance the user experience with VNC and SFTP. I plan to add support for additional protocols, such as RDP, in the future
I just finished a few bugs and created an demo enviroment. If you wanna try it, I’ll explain everything in the ship description.
I completely remade the frontend! It’s now a hybrid of Material 3 and modern Glassmorphism. The overhaul took well over 4 hours though a good chunk was done at school (untracked since I wasn’t logged into Hackatime). Overall, I’m really happy with how the new look turned out! There are probably a few subtle UI bugs hiding in the new design, but I’ll squash those as I find them.
I just refactored the Project I optimized the structure of the local server and the relay. In the frontend, apps will load just when opening them wich is very good for the performance
I fixed some Bugs in the frontend and made some improvements in the backend.
Summary: Added NetStore to create custom applications I added an application that allows you to create your own custom applications. I will use this Store to build additional apps myself for niche use cases (e.g., Docker management or local server containers) that will be fetched directly from GitHub. Key features: Custom Routes: Register your own custom backend routes. Frontend: Build and design your own user interface. Local Code: Execute custom code on the local server. IMPORTANT: DO NOT USE NETSTORE IN PRODUCTION OR DEPLOYMENT ENVIRONMENTS. IT IS CURRENTLY NOT SECURE. If you choose to use it anyway, you do so at your own risk. It’s on the dev Branch. I’d recommend to use it only in your local Network
Summary: Added a Docker Manager and done some fixes with the NetStore In my last devlog I made the NetStore, and this is the first application by myself. It’s used to manage your dockers from everywhere (What a wonder, the docker manager can manage docker). It isn’t perfect right now, so it’s not an alternative to something like Portainer or Coolify, but for simple tasks, it’s good enough. Primarily I made this application to add features to the NetStore (I added a lot, only for this application) and of course I found some bugs. The NetStore itself isn’t secured yet (Right now I only added Deno), but I’m working on it!
Summary: Secured NetStore and published it. I secured the NetStore so far that I can release it on the main branch. Right now it isn’t in the demo, so you can test it only when you install it by yourself (wich is very easy with the new install script)
Summary: Made a traffic monitor for the NetStore This Devlog isn’t gona be that long, I just made a smal traffic monitor. And some small improvements.
Summary: Moved all build-in apps into the NetStore That’s pretty much all…
Summary: Refactored NetStore, gave the NetStore it’s own Repo and started making a Minecraft Server Manager. I just refactored the I gues 1200 line longe NetStore app, and I have so much to refactor left. I started the Minecraft Server Manager before the refactoring but it wasn’t in my usual hackatime project, it was in a new one, and my stupid ass thought it was just a technical mistake that the time wasn’t tracked.
Summaray: Refactored netgraph and settings app Yeah, I refactored it. That’s it. I gues I put these applications as picture :-|
Summary: Made NetConnect a programm for Linux to bring you Network to you everywhere (without VPN) I made this using Go and a virtual network device wich act like a spit tunnel vpn, to extract all request from you subnet e.g. 192.168.1.0/24 sends it over a WebSocket to the NetLink relay server and to its target server. I’m not fully done with this, but right now it’s working. Maybe I’ll do a version for windows soon. How you can install it is defined in the NetConnect Repo ONLY FOR LINUX
Summary: Made some bugfixes That’s pretty much all. I found some small thing I didn’t like and fixed them.
Summary: Polished NetLink for a ship Fixed some bugs Remade some screens Made a demo version Made some security fixes
Ships:
I built a project called NetLink! It lets you connect to your home network from anywhere. Right now, it supports access via VNC, SSH, and SFTP. It uses WebSockets and web based apps to establish the connection. Everything is routed through a relay node, so you don’t need to open any ports on your router. In the demo version, you can set up your own PC as a local server to try it out (active for 24 hours). If you want to use it long-term, you can easily self-host the project on your own hardware (GitHub Readme). I’m planning to add support for more protocols soon. If you have any feedback or ideas on how to improve the project, feel free to leave a comment or send me a DM! Heads up: If you’re using the demo, it might take a few moments to load all your devices.
NetLink connect to your network from everywhere without a VPN I made a Web based “OS” to connect to your network without a VPN and accses your resources with protocols like sftp or ssh. I also build a desktop client to emulate a VPN on your pc, so you can accses your network with your own programms Technologys I used WebSockets to transfer data between the client and the Server. For the frontend I choose React, for the backend I used TypeScript....
|
1793123265.0656037
|
1793209665.0656037
|
|
53468
|
MassCompose by @Iarush7 | Stardance
|
Iarush7
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T14:58:00Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I am shipping Masscompose, a downloadable Python package that extends trimesh’s capabilities by allowing users to add point masses to existing STL meshes to calculate the center of mass and inertia tensors. This project initially came from the development of a UAV Unity simulation where I was exploring the importance of custom drone designs, and I used a trimesh-based Python backend to calculate the physical characteristics of the design for accurate flight. That backend has been rewritten to create masscompose! The hardest challenge was definitely testing the project as we were going on. I had to revisit my pytest and learn how to write tests that ensured the math was being done correctly. Also, uploading a package to PYPI feels like a developer milestone, and learning how to package it with twill was interesting as well.", "repo": "https://github.com/Iarush/MassCompose", "demo": "https://github.com/Iarush/masscompose/releases/tag/v.1.0.0"}]...
|
[{"post_id": 78080, "ts": "202 [{"post_id": 78080, "ts": "2026-10-09T14:41:30Z", "hours": 0.3653, "text": "The Python Package has been uploaded to PYPI by packaging it with twill. Additioanally, the demo is also up and running in the repo in the releases section where someone can download the zip file and run the run.py script to install the required dependencies and launch the demo program"}, {"post_id": 78008, "ts": "2026-10-09T05:14:45Z", "hours": 5.6217, "text": "Demo Python Application: To better showcase the abilities of Mass Compose and visualize it. I have also created a demo application. The demo is fully python and can be downloaded from GitHub. It uses PyVista for rendering the 3D meshes, NumPy for some basic error work, and then Pillow so images can be shown in Tkinter. Obviously, Tkinter is used for the UI ,and masscompose is the one doing all the math behind this app. Most importantly, the Mesh shows you the Center of Mass as well as the point mass. You can see how the point masses affect the COM."}, {"post_id": 53368, "ts": "2026-08-23T21:50:02Z", "hours": 8.6286, "text": "The initial mass composer script for UAV NeoSIM is done and bug free! This project started off as a small personal project targeted at adding a feature to UAV NeoSIM (A drone simulation created on Unity) where users can import their own custom drone models and fly them around. A python mass-properties script was created that takes in the imported stl, mass density, and specific point masses for objects such as the motors, the battery, and the computers to calculate the inertial tensors. Out of this working mass composing script evolved the larger idea to make a python package with a more general version of a masscompose function. The idea is to help out game and sim devs everywhere by giving them an easy way to create their own rigidbody physics objects that need the additonal of additional masses. mass-properties (The initial module) took advantage of the trimesh module to calculate the COM and the original inertial tensor from here. The parallel axis theorem was added to calculate the changed COM and inertial tensors with the addition of the point masses. This “backend” of sorts had three parts, the most important being udp_listener which communicated back and forth with unity to recieve coordinates and masses and sent coordinates and masses. This backend serves as the logical backbone that this python package can be finished."}]...
|
Title: MassCompose by @Iarush7 | Stardance
Devlog Title: MassCompose by @Iarush7 | Stardance
Devlogs:
The initial mass composer script for UAV NeoSIM is done and bug free! This project started off as a small personal project targeted at adding a feature to UAV NeoSIM (A drone simulation created on Unity) where users can import their own custom drone models and fly them around. A python mass-properties script was created that takes in the imported stl, mass density, and specific point masses for objects such as the motors, the battery, and the computers to calculate the inertial tensors. Out of this working mass composing script evolved the larger idea to make a python package with a more general version of a masscompose function. The idea is to help out game and sim devs everywhere by giving them an easy way to create their own rigidbody physics objects that need the additonal of additional masses. mass-properties (The initial module) took advantage of the trimesh module to calculate the COM and the original inertial tensor from here. The parallel axis theorem was added to calculate the changed COM and inertial tensors with the addition of the point masses. This “backend” of sorts had three parts, the most important being udp_listener which communicated back and forth with unity to recieve coordinates and masses and sent coordinates and masses. This backend serves as the logical backbone that this python package can be finished.
Demo Python Application: To better showcase the abilities of Mass Compose and visualize it. I have also created a demo application. The demo is fully python and can be downloaded from GitHub. It uses PyVista for rendering the 3D meshes, NumPy for some basic error work, and then Pillow so images can be shown in Tkinter. Obviously, Tkinter is used for the UI ,and masscompose is the one doing all the math behind this app. Most importantly, the Mesh shows you the Center of Mass as well as the point mass. You can see how the point masses affect the COM.
The Python Package has been uploaded to PYPI by packaging it with twill. Additioanally, the demo is also up and running in the repo in the releases section where someone can download the zip file and run the run.py script to install the required dependencies and launch the demo program
Ships:
I am shipping Masscompose, a downloadable Python package that extends trimesh’s capabilities by allowing users to add point masses to existing STL meshes to calculate the center of mass and inertia tensors. This project initially came from the development of a UAV Unity simulation where I was exploring the importance of custom drone designs, and I used a trimesh-based Python backend to calculate the physical characteristics of the design for accurate flight. That backend has been rewritten to create masscompose! The hardest challenge was definitely testing the project as we were going on. I had to revisit my pytest and learn how to write tests that ensured the math was being done correctly. Also, uploading a package to PYPI feels like a developer milestone, and learning how to package it with twill was interesting as well....
|
1793152418.0621932
|
1793238818.0621932
|
|
68796
|
snekgame by @shreyancat | Stardance
|
shreyancat
|
0
|
1.76
|
0
|
[]
|
[{"post_id": 78078, "ts": "202 [{"post_id": 78078, "ts": "2026-10-09T14:26:37Z", "hours": 1.7628, "text": "game all done,waiting for reviews for any changes or possible improvement……"}]...
|
Title: snekgame by @shreyancat | Stardance
Devlog Title: snekgame by @shreyancat | Stardance
Devlogs:
game all done,waiting for reviews for any changes or possible improvement……...
|
1793126941.3839033
|
1793731741.3839033
|
|
34506
|
Grex by @Benkralex | Stardance
|
Benkralex
|
1
|
66.28
|
799
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T15:49:29Z", "hours": 49.0, "multiplier": 16.43, "payout": 799, "blessing": "neutral", "text": "I’m very proud, that I got to a point, where I can ship the project in just about 2 months. Thats when I started the new codebase. I learned a LOT developing the plattform with Next.js (old) and also learned, that I need better types, seperate server and client, … I just don’t like the structure, but now with Kotlin and Ktor on the server and JS on the client I am very satisfied. If you try the project keep in mind, that many features were in the old project and the most time I spent, was creating the base on the new version. This ship ships the foundation on which I will build many more (hopefully cool and usefull) features. Also try the web-client on mobile. I coded responsive for displayes of (hopefully) any size. I’m sorry, that I have no demo-instance, but it is to insecure for me to host a public instance for everyone. Maybe in the next ship I will have a solution for that. Hope you like the project!", "repo": "https://codeberg.org/Benkralex/Grex", "demo": "https://grex.benkralex.hackclub.app/register"}]...
|
[{"post_id": 78070, "ts": "202 [{"post_id": 78070, "ts": "2026-10-09T13:44:49Z", "hours": 6.3953, "text": "I clean up the code and made many fixes! I also added new features: You can upload profile pictures and the admins can allow bypassing the invite code for the instance."}, {"post_id": 74075, "ts": "2026-09-26T17:01:48Z", "hours": 3.3961, "text": "Added search to quotes and account settings"}, {"post_id": 72837, "ts": "2026-09-23T20:46:14Z", "hours": 6.0969, "text": "Add Settings Page with the option to choose a theme. I also changed some Database Stuff and added a user page."}, {"post_id": 70252, "ts": "2026-09-18T20:11:00Z", "hours": 1.3911, "text": "Add table for admins so they can see all registered users."}, {"post_id": 65981, "ts": "2026-09-11T14:14:21Z", "hours": 0.3258, "text": "Small fixes: Icons on login/register page Title support for my own client router Fix popups on mobile"}, {"post_id": 65964, "ts": "2026-09-11T13:43:52Z", "hours": 1.3897, "text": "I’ve added a /qpi/quotes/delete endpoint, where the poster or admins can delete a quote and also the button for it is in the UI. If you click it a confirmation popup opens. Also the register and login forms now show, whats wrong. I noticed the bad UX, as I registered a new user and the submit button just didn’t work. In the dev tools I could see the problem, but no normal user is looking into the devtools, so now every normal creature can now see it as well. These are the last finishing touches before shiping!"}, {"post_id": 65616, "ts": "2026-09-10T21:11:00Z", "hours": 2.7175, "text": "I’ve done some little things: I added a random quote endpoint to the server and the 404 - Not Found now displays one. I also started writing the API docs."}, {"post_id": 65050, "ts": "2026-09-09T21:45:57Z", "hours": 0.8633, "text": "I got hacked!! Oh no!! How bad!! ;-D Script injections should now be GONE. (Hacker is sad now ) The edit quote funtion now has an API endpoint and a UI. You can edit a quote with the edit symbol on the quote detail page, which is only displayed, if you are the creator of the post or the admin."}, {"post_id": 63915, "ts": "2026-09-07T23:08:03Z", "hours": 6.0872, "text": "I fixed the layout on mobile devices: The navbar, the admin page, … I edited the API endpoints for quotes: Now there are 2 Endpoints for quotes: get and list I also added the code for quote editing, but the API endpoint is not implemented yet In the client I added a detail page for quotes, where you can see the users, who liked the quote and in the future the comments would also be displayed here A new get user endpoint exists, so the quote posters and the likes can display the real username and not only the user-id I fixed the logout, that was not working, because the client side navigation couldn’t load the /logout because it loads pages from /pages/… so /pages/logout was a 404. Now the logout is in the pages directory, so it works with client side navigation The most time for this devlog was invested on the layout of users who liked a post. I just wanted the users to be displayed in collumns and rows. They should be exactly underneath each other, so the like-icon aligns perfectly. Also the names shouldn’t break, because then one row is larger then the others. It was such a pain getting that “simple” thing to work. I asked multiple AIs, after I had no idea anymore and all gave me trash. The Claude used JS and not only CSS and it finally worked!! It was such a pain but in the end I am very happy with the result."}, {"post_id": 61822, "ts": "2026-09-04T22:26:17Z", "hours": 2.5244, "text": "LIKES!!!!!! Finally!!!! Again only the db held me back. I hate databases! But it has a fun little animation if you click it and it is pretty spam proof (hope so)."}, {"post_id": 60390, "ts": "2026-09-02T18:08:36Z", "hours": 1.5778, "text": "Create quotes now works!!! It was a bit of pain modifing the db. I just wanted plain timestamps in milliseconds but Exposed and SQLite don’t want that, so I setteled on just using long type."}, {"post_id": 59559, "ts": "2026-09-01T13:30:27Z", "hours": 1.2533, "text": "The Server now autmoaticly migrates the DB 🎉🎉🎉🎉🎉🎉 It was not that easy, because Exposed (DB lib for Kotlin) doesn’t automaticly apply migrations. I can generate migration scripts with it but the execution and check if it was already executed I have to do on my own. But I learned a lot in the process."}, {"post_id": 59231, "ts": "2026-08-31T22:04:35Z", "hours": 1.3075, "text": "Now Woodpecker builds the server and client docker-image and releases it on codeberg.org docker registry! Yay!"}, {"post_id": 58878, "ts": "2026-08-31T13:33:37Z", "hours": 2.1544, "text": "I’ve added a form for admins to create invites so you don’t have to interact with the DB or the API manually ;-) Also the first user, that registers doesn’t need an invitation Code and automaticly is an admin. I also started creating the form to create quotes, but it has no functionality at the moment. My next steps that are planed at the moment: Add create quote form functionality Put everything in docker (Add QoL like display all invites & users for admins, display active sessions, …) First RELEASE/SHIP"}, {"post_id": 54823, "ts": "2026-08-25T23:47:38Z", "hours": 0.9147, "text": "New design for the quotes. Now it’s not a boring list but cards that look a lot better."}, {"post_id": 54795, "ts": "2026-08-25T22:23:16Z", "hours": 1.6778, "text": "I’ve added two new themes. Also the theme is now loaded via js, so at a later point the js could read the cookies and load a theme dynamicly."}, {"post_id": 54680, "ts": "2026-08-25T18:51:09Z", "hours": 0.9175, "text": "I’ve now added a logout api endpoint and an option to logout via web client. The difficult part is, that I can’t access the GREX_SESSION cookie via JS, so I have to set another cookie, to know, if the user is logged in. But now it works fine. I hope, that I’m not finding as many bugs if I’m testing the login/logout/register functions."}, {"post_id": 54143, "ts": "2026-08-24T23:40:24Z", "hours": 3.9428, "text": "Not much to say for this devlog, I only created the register form and designed it and the login form."}, {"post_id": 49485, "ts": "2026-08-18T11:02:36Z", "hours": 1.0444, "text": "I improved the navbar and designed an icon as a placeholder for the moment: At a later point the icon should be changable by admins and I think, I will also improve the default icon."}, {"post_id": 48096, "ts": "2026-08-16T11:55:29Z", "hours": 0.9681, "text": "The navigation now works…. But I’m not really happy about it. But for now I started styling a bit (also that I’m not getting flashbanged). How I implemented the client nav at the moment The server now returns the same index.html file for every page and js loads the page-content. This lags sometimes and is not very performant… Style and Themes I’ve started styling. All the colors and also some other properties are specified in a theme-css file, so later you could have your own theme as a css file with only vars or if you want to style even more, you can add custom styles for specifc components, thats the plan for theming."}, {"post_id": 47735, "ts": "2026-08-15T21:02:13Z", "hours": 1.1553, "text": "Started building the real client (at least a concept). I’m currently trying to figure client-side navigation out. I think I have to watch some tutorials…"}, {"post_id": 43988, "ts": "2026-08-09T14:02:55Z", "hours": 1.0517, "text": "I fixed, that if you are already logged in, it still showed the login-form. Also I added a createQuote function (not in the UI yet) and tried fixing the cookie, that don’t want to be saved because of security. I have not comittet the code, because it is at the moment just for me testing, until it can do the most part of the API and is a bit better designed."}, {"post_id": 39681, "ts": "2026-08-02T20:19:03Z", "hours": 1.3894, "text": "I started with a very simple UI (without CSS) to test if the API would work. At the moment you can only login and get all quotes."}, {"post_id": 39604, "ts": "2026-08-02T18:08:59Z", "hours": 1.5794, "text": "I cleaned up even more: Common RequestResult Interface RequestErrors combined into one enum Split the routing config into diffrent files I also added an api endpoint for getting quotes"}, {"post_id": 38407, "ts": "2026-07-31T19:14:05Z", "hours": 1.0397, "text": "I cleaned up the code and added an api endpoint for getting invites"}, {"post_id": 36505, "ts": "2026-07-28T17:40:25Z", "hours": 0.7836, "text": "server: The API now includes the creation of quotes"}, {"post_id": 36404, "ts": "2026-07-28T14:31:13Z", "hours": 1.1194, "text": "server: Now you also can create an account (only with invite) and admins can create invites."}, {"post_id": 35986, "ts": "2026-07-27T19:43:36Z", "hours": 2.0539, "text": "I’ve added DB tables and started with auth. Login works and register is on it’s way!"}, {"post_id": 35846, "ts": "2026-07-27T15:24:34Z", "hours": 1.1892, "text": "I started with a new codebase, because I was not happy with Next.js. Now I want to separate the server from the client for a cleaner architecture. I initalized the new repo I started the base for the server (Kotlin + sqlite)"}, {"post_id": 30137, "ts": "2026-07-17T14:04:35Z", "hours": 0.6931, "text": "IT WORKS!!!! And yea, I’rich, but in the negatives ;-). I just forgot to set a hidden value for the form."}, {"post_id": 29700, "ts": "2026-07-16T19:48:42Z", "hours": 0.8956, "text": "Now you can create transactions! Or can you? It doesn’t work :-( But I can’t find the mistake, I’ll hopefully do tomorrow"}, {"post_id": 28987, "ts": "2026-07-15T16:50:40Z", "hours": 1.5144, "text": "I’ve added the create quote form and the backend used for it. Also if you edit your account, it now uses the new backend."}, {"post_id": 28509, "ts": "2026-07-14T20:10:56Z", "hours": 0.7781, "text": "I finally did the woodpecker build 🎉🎉 I also updated the installer and the README for installation. Now you can test it easiely at home 😉"}, {"post_id": 28476, "ts": "2026-07-14T18:53:02Z", "hours": 2.4917, "text": "I’ve started implementing the backend from ground new, with a cleaner structure, because it was to unclean for me to do work in it. It is not finished, but everything should work at the moment with a mix of old- and new-backend."}, {"post_id": 27841, "ts": "2026-07-13T18:42:24Z", "hours": 0.8558, "text": "I’ve added quotes to the plattform. You can’t create them at the moment, but they are read from the db."}, {"post_id": 27766, "ts": "2026-07-13T16:40:58Z", "hours": 0.3986, "text": "I’ve tried adding woodpecker/forgejo actions for automatic docker builds. I haven’t got it working, but I applied to Codebergs Woodpecker."}]...
|
Title: Grex by @Benkralex | Stardance
Devlogs:
I’ Title: Grex by @Benkralex | Stardance
Devlogs:
I’ve tried adding woodpecker/forgejo actions for automatic docker builds. I haven’t got it working, but I applied to Codebergs Woodpecker.
I’ve added quotes to the plattform. You can’t create them at the moment, but they are read from the db.
I’ve started implementing the backend from ground new, with a cleaner structure, because it was to unclean for me to do work in it. It is not finished, but everything should work at the moment with a mix of old- and new-backend.
I finally did the woodpecker build 🎉🎉 I also updated the installer and the README for installation. Now you can test it easiely at home 😉
I’ve added the create quote form and the backend used for it. Also if you edit your account, it now uses the new backend.
Now you can create transactions! Or can you? It doesn’t work :-( But I can’t find the mistake, I’ll hopefully do tomorrow
IT WORKS!!!! And yea, I’rich, but in the negatives ;-). I just forgot to set a hidden value for the form.
I started with a new codebase, because I was not happy with Next.js. Now I want to separate the server from the client for a cleaner architecture. I initalized the new repo I started the base for the server (Kotlin + sqlite)
I’ve added DB tables and started with auth. Login works and register is on it’s way!
server: Now you also can create an account (only with invite) and admins can create invites.
server: The API now includes the creation of quotes
I cleaned up the code and added an api endpoint for getting invites
I cleaned up even more: Common RequestResult Interface RequestErrors combined into one enum Split the routing config into diffrent files I also added an api endpoint for getting quotes
I started with a very simple UI (without CSS) to test if the API would work. At the moment you can only login and get all quotes.
I fixed, that if you are already logged in, it still showed the login-form. Also I added a createQuote function (not in the UI yet) and tried fixing the cookie, that don’t want to be saved because of security. I have not comittet the code, because it is at the moment just for me testing, until it can do the most part of the API and is a bit better designed.
Started building the real client (at least a concept). I’m currently trying to figure client-side navigation out. I think I have to watch some tutorials…
The navigation now works…. But I’m not really happy about it. But for now I started styling a bit (also that I’m not getting flashbanged). How I implemented the client nav at the moment The server now returns the same index.html file for every page and js loads the page-content. This lags sometimes and is not very performant… Style and Themes I’ve started styling. All the colors and also some other properties are specified in a theme-css file, so later you could have your own theme as a css file with only vars or if you want to style even more, you can add custom styles for specifc components, thats the plan for theming.
I improved the navbar and designed an icon as a placeholder for the moment: At a later point the icon should be changable by admins and I think, I will also improve the default icon.
Not much to say for this devlog, I only created the register form and designed it and the login form.
I’ve now added a logout api endpoint and an option to logout via web client. The difficult part is, that I can’t access the GREX_SESSION cookie via JS, so I have to set another cookie, to know, if the user is logged in. But now it works fine. I hope, that I’m not finding as many bugs if I’m testing the login/logout/register functions.
I’ve added two new themes. Also the theme is now loaded via js, so at a later point the js could read the cookies and load a theme dynamicly.
New design for the quotes. Now it’s not a boring list but cards that look a lot better.
I’ve added a form for admins to create invites so you don’t have to interact with the DB or the API manually ;-) Also the first user, that registers doesn’t need an invitation Code and automaticly is an admin. I also started creating the form to create quotes, but it has no functionality at the moment. My next steps that are planed at the moment: Add create quote form functionality Put everything in docker (Add QoL like display all invites & users for admins, display active sessions, …) First RELEASE/SHIP
Now Woodpecker builds the server and client docker-image and releases it on codeberg.org docker registry! Yay!
The Server now autmoaticly migrates the DB 🎉🎉🎉🎉🎉🎉 It was not that easy, because Exposed (DB lib for Kotlin) doesn’t automaticly apply migrations. I can generate migration scripts with it but the execution and check if it was already executed I have to do on my own. But I learned a lot in the process.
Create quotes now works!!! It was a bit of pain modifing the db. I just wanted plain timestamps in milliseconds but Exposed and SQLite don’t want that, so I setteled on just using long type.
LIKES!!!!!! Finally!!!! Again only the db held me back. I hate databases! But it has a fun little animation if you click it and it is pretty spam proof (hope so).
I fixed the layout on mobile devices: The navbar, the admin page, … I edited the API endpoints for quotes: Now there are 2 Endpoints for quotes: get and list I also added the code for quote editing, but the API endpoint is not implemented yet In the client I added a detail page for quotes, where you can see the users, who liked the quote and in the future the comments would also be displayed here A new get user endpoint exists, so the quote posters and the likes can display the real username and not only the user-id I fixed the logout, that was not working, because the client side navigation couldn’t load the /logout because it loads pages from /pages/… so /pages/logout was a 404. Now the logout is in the pages directory, so it works with client side navigation The most time for this devlog was invested on the layout of users who liked a post. I just wanted the users to be displayed in collumns and rows. They should be exactly underneath each other, so the like-icon aligns perfectly. Also the names shouldn’t break, because then one row is larger then the others. It was such a pain getting that “simple” thing to work. I asked multiple AIs, after I had no idea anymore and all gave me trash. The Claude used JS and not only CSS and it finally worked!! It was such a pain but in the end I am very happy with the result.
I got hacked!! Oh no!! How bad!! ;-D Script injections should now be GONE. (Hacker is sad now ) The edit quote funtion now has an API endpoint and a UI. You can edit a quote with the edit symbol on the quote detail page, which is only displayed, if you are the creator of the post or the admin.
I’ve done some little things: I added a random quote endpoint to the server and the 404 - Not Found now displays one. I also started writing the API docs.
I’ve added a /qpi/quotes/delete endpoint, where the poster or admins can delete a quote and also the button for it is in the UI. If you click it a confirmation popup opens. Also the register and login forms now show, whats wrong. I noticed the bad UX, as I registered a new user and the submit button just didn’t work. In the dev tools I could see the problem, but no normal user is looking into the devtools, so now every normal creature can now see it as well. These are the last finishing touches before shiping!
Small fixes: Icons on login/register page Title support for my own client router Fix popups on mobile
Add table for admins so they can see all registered users.
Add Settings Page with the option to choose a theme. I also changed some Database Stuff and added a user page.
Added search to quotes and account settings
I clean up the code and made many fixes! I also added new features: You can upload profile pictures and the admins can allow bypassing the invite code for the instance.
Ships:
I’m very proud, that I got to a point, where I can ship the project in just about 2 months. Thats when I started the new codebase. I learned a LOT developing the plattform with Next.js (old) and also learned, that I need better types, seperate server and client, … I just don’t like the structure, but now with Kotlin and Ktor on the server and JS on the client I am very satisfied. If you try the project keep in mind, that many features were in the old project and the most time I spent, was creating the base on the new version. This ship ships the foundation on which I will build many more (hopefully cool and usefull) features. Also try the web-client on mobile. I coded responsive for displayes of (hopefully) any size. I’m sorry, that I have no demo-instance, but it is to insecure for me to host a public instance for everyone. Maybe in the next ship I will have a solution for that. Hope you like the project!...
|
1793148745.2980993
|
1793235145.2980993
|
|
60950
|
Ambilight by @reaue | Stardance
|
reaue
|
0
|
6.32
|
0
|
[]
|
[{"post_id": 78067, "ts": "202 [{"post_id": 78067, "ts": "2026-10-09T13:18:16Z", "hours": 0.4794, "text": "Building Devlog 1 – Starting the Building Phase Today, when I got back from school, I went to the post office to pick up my package, and I was really happy to finally receive it. The result looks really clean!"}, {"post_id": 66196, "ts": "2026-09-11T21:17:40Z", "hours": 0.5361, "text": "Devlog 3 - Adding a complete README I finished the README with the most important part the installation. Now everything it’s ready for the ship. So let’s ship it !"}, {"post_id": 66163, "ts": "2026-09-11T20:12:03Z", "hours": 1.3539, "text": "Devlog 2 - Adding aerations. I added aerations to cool down the HDMI capture card. I also wrote the DOM.csv file and starting to set up a clean repo. Now I need to explain everything in the README file."}, {"post_id": 66039, "ts": "2026-09-11T16:19:58Z", "hours": 3.9503, "text": "New project ! So, I’m builduig a case for my actual TV ambientlight setup. Because right now it’s a bit messy. The setup is one rapsberry py 4 model B and one HDMI capture. The rapsberry run with Hyperion . I just noticed that I forgot to put some ventilation to cool it down."}]...
|
Title: Ambilight by @reaue | Stardance
Devlogs:
N Title: Ambilight by @reaue | Stardance
Devlogs:
New project ! So, I’m builduig a case for my actual TV ambientlight setup. Because right now it’s a bit messy. The setup is one rapsberry py 4 model B and one HDMI capture. The rapsberry run with Hyperion . I just noticed that I forgot to put some ventilation to cool it down.
Devlog 2 - Adding aerations. I added aerations to cool down the HDMI capture card. I also wrote the DOM.csv file and starting to set up a clean repo. Now I need to explain everything in the README file.
Devlog 3 - Adding a complete README I finished the README with the most important part the installation. Now everything it’s ready for the ship. So let’s ship it !
Building Devlog 1 – Starting the Building Phase Today, when I got back from school, I went to the post office to pick up my package, and I was really happy to finally receive it. The result looks really clean!...
|
1793037121.3807366
|
1793641921.3807366
|
|
8670
|
Rumble by @bad-indentation | Stardance
|
bad-indentation
|
1
|
5.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T01:08:07Z", "hours": 5.0, "multiplier": 4.97, "payout": 26, "blessing": "neutral", "text": "Rumble is a Rust CLI tool to solve Jumbles and anagrams. It is very fast (as one can expect from Rust) and easy to use. I am relatively new to Rust, and so this was a nice opportunity to finally create a full command-line project from start to finish and publish it on crates.io. Installation instructions are in the repo README. Please consider writing an issue if you find any bugs!", "repo": "https://github.com/bad-indentation/rumble", "demo": "https://crates.io/crates/rumble-cli"}]...
|
[{"post_id": 7806, "ts": "2026 [{"post_id": 7806, "ts": "2026-06-13T00:55:42Z", "hours": 1.2236, "text": "Finally published to crates.io."}, {"post_id": 4687, "ts": "2026-06-08T02:55:47Z", "hours": 0.8144, "text": "Serious refactor - DFS + pruning was actually not an efficient solution to the problem; simple character counting using HashMaps much faster."}, {"post_id": 4637, "ts": "2026-06-08T00:59:20Z", "hours": 3.1231, "text": "Finished first iteration of solver; working on optimizations. Successfully implemented depth-first search to generate all possible anagrams of the scrambled input. Used a pre-computed HashSet of valid prefixes to quickly prune any branches that wouldn’t lead to valid English words. Implemented CLI interface using Clap. Added –verbose flag for logging and –include-partial for words that do not use all available letters. Initial optimizations include removing words that could never be made using the available letters- that is, words that are too long or contain invalid letters. Further optimizations include using concurrency when reading the file and using smart pointers to avoid excessive cloning. Also considering the possibility of iterating over candidate WORDS and determining whether they are a valid solutions instead of using combinatorics."}]...
|
Title: Rumble by @bad-indentation | Stardance
Dev Title: Rumble by @bad-indentation | Stardance
Devlogs:
Finished first iteration of solver; working on optimizations. Successfully implemented depth-first search to generate all possible anagrams of the scrambled input. Used a pre-computed HashSet of valid prefixes to quickly prune any branches that wouldn’t lead to valid English words. Implemented CLI interface using Clap. Added –verbose flag for logging and –include-partial for words that do not use all available letters. Initial optimizations include removing words that could never be made using the available letters- that is, words that are too long or contain invalid letters. Further optimizations include using concurrency when reading the file and using smart pointers to avoid excessive cloning. Also considering the possibility of iterating over candidate WORDS and determining whether they are a valid solutions instead of using combinatorics.
Serious refactor - DFS + pruning was actually not an efficient solution to the problem; simple character counting using HashMaps much faster.
Finally published to crates.io.
Ships:
Rumble is a Rust CLI tool to solve Jumbles and anagrams. It is very fast (as one can expect from Rust) and easy to use. I am relatively new to Rust, and so this was a nice opportunity to finally create a full command-line project from start to finish and publish it on crates.io. Installation instructions are in the repo README. Please consider writing an issue if you find any bugs!...
|
1793202735.2517743
|
1793289135.2517743
|
|
66286
|
Stardance Helper by @Moiz67 | Stardance
|
Moiz67
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T12:31:45Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Stardance Helper is a Slack bot built with JavaScript and Slack Bolt. It provides handy slash commands for jokes, trivia, weather, polls, reminders, and more, and runs 24/7 on Hack Club Nest.", "repo": "https://github.com/abdulmoiz5718-blip/Stardance-helper", "demo": "https://hackclub.enterprise.slack.com/archives/C0C64FSRZQQ"}]...
|
[{"post_id": 78057, "ts": "202 [{"post_id": 78057, "ts": "2026-10-09T12:18:06Z", "hours": 0.9003, "text": "Completed it and now its running as well."}]...
|
Title: Stardance Helper by @Moiz67 | Stardance
De Title: Stardance Helper by @Moiz67 | Stardance
Devlogs:
Completed it and now its running as well.
Ships:
Stardance Helper is a Slack bot built with JavaScript and Slack Bolt. It provides handy slash commands for jokes, trivia, weather, polls, reminders, and more, and runs 24/7 on Hack Club Nest....
|
1793216924.9957275
|
1793303324.9957275
|
|
68164
|
sudo-space by @sooraj | Stardance
|
sooraj
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T12:27:44Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made sudo space, a simple new tab dashboard with a cool Linux terminal look. It has a Google search bar, daily NASA space photos/videos, a quick todo list, and website shortcut buttons. The api the server gives an error 500. I had to add code to fix this and show a backup image if the API is down. Also my two GitHub accounts got mixed up , which took time to fix. how to use it Type in the search box and press Enter to search on Google.Add tasks in the todo box with Enter, and just click any task to delete it (they stay saved even if you refresh).Click the shortcut buttons to open sites like GitHub or YouTube.The space box updates automatically every day.", "repo": "https://github.com/Sooraj44882/sudo-space", "demo": "https://sudo-space-zeta.vercel.app/"}]...
|
[{"post_id": 78056, "ts": "202 [{"post_id": 78056, "ts": "2026-10-09T12:14:00Z", "hours": 3.3822, "text": "Devlog 2: Finally fixed a big Git issue . I have two GitHub accounts on my laptop and they got mixed up, so I couldn’t push my code to my main account. It took some time to fix the config,credentials, but it works fine now. Here is what I have finished so far: Added the NASA API to show the daily space image and title. Added a todo list that saves tasks in localStorage, so tasks don’t get deleted when I close the tab. Added quick shortcut links .All the main parts of the website are working now!"}, {"post_id": 77118, "ts": "2026-10-05T17:49:25Z", "hours": 0.7028, "text": "Devlog 1: got the nasa api key ,setup the project file and i am thinking to make a space , linux theme something"}]...
|
Title: sudo-space by @sooraj | Stardance
Devlogs: Title: sudo-space by @sooraj | Stardance
Devlogs:
Devlog 1: got the nasa api key ,setup the project file and i am thinking to make a space , linux theme something
Devlog 2: Finally fixed a big Git issue . I have two GitHub accounts on my laptop and they got mixed up, so I couldn’t push my code to my main account. It took some time to fix the config,credentials, but it works fine now. Here is what I have finished so far: Added the NASA API to show the daily space image and title. Added a todo list that saves tasks in localStorage, so tasks don’t get deleted when I close the tab. Added quick shortcut links .All the main parts of the website are working now!
Ships:
I made sudo space, a simple new tab dashboard with a cool Linux terminal look. It has a Google search bar, daily NASA space photos/videos, a quick todo list, and website shortcut buttons. The api the server gives an error 500. I had to add code to fix this and show a backup image if the API is down. Also my two GitHub accounts got mixed up , which took time to fix. how to use it Type in the search box and press Enter to search on Google.Add tasks in the todo box with Enter, and just click any task to delete it (they stay saved even if you refresh).Click the shortcut buttons to open sites like GitHub or YouTube.The space box updates automatically every day....
|
1793217203.2127373
|
1793303603.2127373
|
|
67288
|
Math Canvas by @Nivedh_Govil | Stardance
|
Nivedh_Govil
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T11:13:16Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website called Math Canvas, an interactive Math and Physics Visualizer. It has 3 modes: Graph Plot (You can plot graphs here), Statistics (run statistics on data), Projectile Motion (Analyse a projectile’s trajectory). I didn’t use HTML for this website; instead, I coded it in Streamlit, a Python library for building web apps. I also used Matplotlib for the graph plotting and NumPy to help in creating arrays and dealing with numbers. This website took around 4 hours to build, and it was an engaging experience for me. Over time, I will add more and more features to the website. I have uploaded the source code and deployed it using Streamlit.", "repo": "https://github.com/NivedhGovil/MathCanvas", "demo": "https://mathcanvas.onrender.com/"}]...
|
[{"post_id": 78047, "ts": "202 [{"post_id": 78047, "ts": "2026-10-09T11:08:17Z", "hours": 0.4264, "text": "Math Canvas Finished the website! Here’s what it is: 3 Modes: Graph Plot, StartFX and Project I Motion. In the graph plot there are different options for graphs, like constant, linear, quadratic, etc., and you enter inputs such as the amplitude, frequency, coefficient of x, etc, and the website plots the graph. In Statistics, you enter 3 to 10 numbers and you get a full statistical run on it, which includes the mean, median, variance, standard deviation, and more. In the projectile motion mode, you can enter the initial velocity, angle of projection, and more, and the time of flight, maximum height, horizontal range, and complete trajectory of the projectile are shown on the screen. This website uses no HTML. It is powered by Streamlit, a library in Python which is used to build websites. If you want to visit the website, go to mathcanvas.streamlit.app."}, {"post_id": 76773, "ts": "2026-10-04T15:14:37Z", "hours": 0.6322, "text": "MathCanvas Devlog 3 Today, I worked on the projectile motion mode. The user has to input the initial velocity, angle of projection, and mass. The horizontal range, maximum height travelled, and more data are automatically computed, and the trajectory is shown on a graph. It’s almost done. Looking forward to completing it tomorrow!"}, {"post_id": 76433, "ts": "2026-10-03T14:34:10Z", "hours": 0.7436, "text": "Math Canvas Devlog 2 Coding the statistics page today. The user inputs n numbers, and the app displays their mean, median, variance, and more. A bar chart is also shown. Still didn’t use a single HTML element and used Streamlit-based CSS for the background color."}, {"post_id": 76162, "ts": "2026-10-02T15:29:19Z", "hours": 1.925, "text": "Done a lot of work today. Made the landing page, mode choices, and the webpages for the different modes of equations. Didn’t work on the statistics mode, but will do it tomorrow. Learnt lots today! Can’t believe that it’s done with no HTML and CSS!"}]...
|
Title: Math Canvas by @Nivedh_Govil | Stardance
D Title: Math Canvas by @Nivedh_Govil | Stardance
Devlogs:
Done a lot of work today. Made the landing page, mode choices, and the webpages for the different modes of equations. Didn’t work on the statistics mode, but will do it tomorrow. Learnt lots today! Can’t believe that it’s done with no HTML and CSS!
Math Canvas Devlog 2 Coding the statistics page today. The user inputs n numbers, and the app displays their mean, median, variance, and more. A bar chart is also shown. Still didn’t use a single HTML element and used Streamlit-based CSS for the background color.
MathCanvas Devlog 3 Today, I worked on the projectile motion mode. The user has to input the initial velocity, angle of projection, and mass. The horizontal range, maximum height travelled, and more data are automatically computed, and the trajectory is shown on a graph. It’s almost done. Looking forward to completing it tomorrow!
Math Canvas Finished the website! Here’s what it is: 3 Modes: Graph Plot, StartFX and Project I Motion. In the graph plot there are different options for graphs, like constant, linear, quadratic, etc., and you enter inputs such as the amplitude, frequency, coefficient of x, etc, and the website plots the graph. In Statistics, you enter 3 to 10 numbers and you get a full statistical run on it, which includes the mean, median, variance, standard deviation, and more. In the projectile motion mode, you can enter the initial velocity, angle of projection, and more, and the time of flight, maximum height, horizontal range, and complete trajectory of the projectile are shown on the screen. This website uses no HTML. It is powered by Streamlit, a library in Python which is used to build websites. If you want to visit the website, go to mathcanvas.streamlit.app.
Ships:
I made a website called Math Canvas, an interactive Math and Physics Visualizer. It has 3 modes: Graph Plot (You can plot graphs here), Statistics (run statistics on data), Projectile Motion (Analyse a projectile’s trajectory). I didn’t use HTML for this website; instead, I coded it in Streamlit, a Python library for building web apps. I also used Matplotlib for the graph plotting and NumPy to help in creating arrays and dealing with numbers. This website took around 4 hours to build, and it was an engaging experience for me. Over time, I will add more and more features to the website. I have uploaded the source code and deployed it using Streamlit....
|
1793217074.1705937
|
1793303474.1705937
|
|
68106
|
Swift by @Koya | Stardance
|
Koya
|
0
|
4.57
|
0
|
[]
|
[{"post_id": 78043, "ts": "202 [{"post_id": 78043, "ts": "2026-10-09T10:22:16Z", "hours": 4.5742, "text": "I’m developing a social media app using Swift and Xcode! It will support three languages: English, Japanese, and Korean. I’m planning to release it in February 2027!"}]...
|
Title: Swift by @Koya | Stardance
Devlogs:
I’m de Title: Swift by @Koya | Stardance
Devlogs:
I’m developing a social media app using Swift and Xcode! It will support three languages: English, Japanese, and Korean. I’m planning to release it in February 2027!...
|
1793116477.0744596
|
1793721277.0744596
|
|
67940
|
Wallpaper.html by @THEbluefirestudios | Stardance
|
THEbluefirestudios
|
0
|
3.85
|
0
|
[]
|
[{"post_id": 78041, "ts": "202 [{"post_id": 78041, "ts": "2026-10-09T09:53:18Z", "hours": 0.7414, "text": "this project has been switched to pixl, no more devlogs here"}, {"post_id": 77787, "ts": "2026-10-08T08:37:25Z", "hours": 2.1778, "text": "Would you look at that the app is finished! This took way less time than usual but its like 500 lines o code, and a single py file, so like, what were you expecting? So now I will ship- flashbang Oh you thought I was DONE? How elementary of you! You FORGOT! I still have to make some default wallpapers, a website, a marketplace, documentation for making wallpapers! you thought 500 lines of code and project done? Noooooooo"}, {"post_id": 76985, "ts": "2026-10-05T08:12:23Z", "hours": 0.6394, "text": "Ok, so that happeend way quicker than expected, I have a nice script for setting a wallpaper where it checks for the manifest and sets the wallpaper as your wallpaper, Here are a few examples. The Blackhole New Tab Blackhole! [Animated video] Cool Dyson sphere thingy! [Static Image] Aurora Thingy [HTML code generated] This has more potential, so I’m gonna expand on this to make some defaults. I was planning on a cr wallpaper, a space themed wallpaper (prolly my blackhole), some procedurally generated wallpaper (like that medusa sim in lively wallpaper), and some are wallpaper that parallaxes."}, {"post_id": 76961, "ts": "2026-10-05T06:44:31Z", "hours": 0.2869, "text": "Well this app displays .html files as wallpaper, so naturally the 1st step was to get an .html file to be my wallpaper, some Stack Overflow later, I have this test wallpaper as my… wallpaper, I’m still working so patience!"}]...
|
Title: Wallpaper.html by @THEbluefirestudios | Sta Title: Wallpaper.html by @THEbluefirestudios | Stardance
Devlogs:
Well this app displays .html files as wallpaper, so naturally the 1st step was to get an .html file to be my wallpaper, some Stack Overflow later, I have this test wallpaper as my… wallpaper, I’m still working so patience!
Ok, so that happeend way quicker than expected, I have a nice script for setting a wallpaper where it checks for the manifest and sets the wallpaper as your wallpaper, Here are a few examples. The Blackhole New Tab Blackhole! [Animated video] Cool Dyson sphere thingy! [Static Image] Aurora Thingy [HTML code generated] This has more potential, so I’m gonna expand on this to make some defaults. I was planning on a cr wallpaper, a space themed wallpaper (prolly my blackhole), some procedurally generated wallpaper (like that medusa sim in lively wallpaper), and some are wallpaper that parallaxes.
Would you look at that the app is finished! This took way less time than usual but its like 500 lines o code, and a single py file, so like, what were you expecting? So now I will ship- flashbang Oh you thought I was DONE? How elementary of you! You FORGOT! I still have to make some default wallpapers, a website, a marketplace, documentation for making wallpapers! you thought 500 lines of code and project done? Noooooooo
this project has been switched to pixl, no more devlogs here...
|
1793116229.32111
|
1793721029.32111
|
|
68601
|
Math Essentials by @TharunVigneswarPS | Stardance
|
TharunVigneswarPS
|
0
|
8.02
|
0
|
[]
|
[{"post_id": 78036, "ts": "202 [{"post_id": 78036, "ts": "2026-10-09T09:15:49Z", "hours": 8.0178, "text": "Most Math functions done. Backend done and wokring on website for it"}]...
|
Title: Math Essentials by @TharunVigneswarPS | Sta Title: Math Essentials by @TharunVigneswarPS | Stardance
Devlogs:
Most Math functions done. Backend done and wokring on website for it...
|
1793123448.9403994
|
1793728248.9403994
|