|
70132
|
Custom Pet by @DragonDev_27i | Stardance
|
DragonDev_27i
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T00:31:15Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Desktop pet that takes the sprite of Sans the Skelton from Undertale as my playground project and it was fun to make. The challenges that I experienced during the production of the project, not knowing how to interpret parts of the code, because some of it didn’t make sense. For example if I wanted to add functionality; I didn’t know that I could use a function such as _unhandled_input to handle inputs such as performing a certain action if a key is pressed. Thankfully, after reading the Godot documentation, and watching a couple of YouTube videos alongside a couple google searches I was able to overcome my challenges. Finally, I would say that I am proud because I was able to make a desktop pet, and now I get to see sans walk across my Desktop.", "repo": "https://github.com/JohhnyTech27i/DeskPet", "demo": "https://firedragon-27i.itch.io/sans-desktop-pet"}]...
|
[{"post_id": 81148, "ts": "202 [{"post_id": 81148, "ts": "2026-10-20T03:04:23Z", "hours": 1.0581, "text": "Devlog 2 Final devlog: I have worked on the pet and have decided that this will be the final devlog for stardance. I will continue to update the program, but due to time constraints I can’t keep making devlogs for this project in star dance. Great news is that I was able to add a menu that allows you to quit the game. Figured out how the @onready works how to handle inputs and other things; code seems a bit more oraganzied now. Sans now has a timer that says, I’m sans."}, {"post_id": 80745, "ts": "2026-10-18T18:08:50Z", "hours": 2.3864, "text": "Dev 1: In this devlog I was able to change the sprite to sans, changed the movement so that it only went in one direction. The guide was right it was supposed to be Vector2(1,0) not Vector(1,1) so that it could move smoothly in one direction instead of going off in all directions. Next, Sans can tell the user the time based on their own PC time when left clicked on. Also, sounds makes his iconic noise eeee when left clicked on. Now for the next devlog, the goals will to optimize the code in a way that it allows for sans to do more actions such as fall onto the taskbar, or create a popup screen that allows to quit the program or that could maybe change the sprite to Chara or any another Undertale characters."}, {"post_id": 80686, "ts": "2026-10-18T14:48:33Z", "hours": 1.6467, "text": "Just working to see how the DeskPet will work, so this will be the prototype. By following the guide I was able to get to the part where the sprite can move all across. There was some issues with following the code because, I had to change direction to Vector2(1,1) instead of keeping it at Vector2(1,0), so that the sprite can move in all directions. Hopefully for the next devlog I am able to move the sprite more gracefully, and there is interaction when I click on it or drag it. As I plan, to make, characters like sans or Chara, fight or do other animations."}]...
|
Title: Custom Pet by @DragonDev_27i | Stardance
D Title: Custom Pet by @DragonDev_27i | Stardance
Devlogs:
Just working to see how the DeskPet will work, so this will be the prototype. By following the guide I was able to get to the part where the sprite can move all across. There was some issues with following the code because, I had to change direction to Vector2(1,1) instead of keeping it at Vector2(1,0), so that the sprite can move in all directions. Hopefully for the next devlog I am able to move the sprite more gracefully, and there is interaction when I click on it or drag it. As I plan, to make, characters like sans or Chara, fight or do other animations.
Dev 1: In this devlog I was able to change the sprite to sans, changed the movement so that it only went in one direction. The guide was right it was supposed to be Vector2(1,0) not Vector(1,1) so that it could move smoothly in one direction instead of going off in all directions. Next, Sans can tell the user the time based on their own PC time when left clicked on. Also, sounds makes his iconic noise eeee when left clicked on. Now for the next devlog, the goals will to optimize the code in a way that it allows for sans to do more actions such as fall onto the taskbar, or create a popup screen that allows to quit the program or that could maybe change the sprite to Chara or any another Undertale characters.
Devlog 2 Final devlog: I have worked on the pet and have decided that this will be the final devlog for stardance. I will continue to update the program, but due to time constraints I can’t keep making devlogs for this project in star dance. Great news is that I was able to add a menu that allows you to quit the game. Figured out how the @onready works how to handle inputs and other things; code seems a bit more oraganzied now. Sans now has a timer that says, I’m sans.
Ships:
I made a Desktop pet that takes the sprite of Sans the Skelton from Undertale as my playground project and it was fun to make. The challenges that I experienced during the production of the project, not knowing how to interpret parts of the code, because some of it didn’t make sense. For example if I wanted to add functionality; I didn’t know that I could use a function such as _unhandled_input to handle inputs such as performing a certain action if a key is pressed. Thankfully, after reading the Godot documentation, and watching a couple of YouTube videos alongside a couple google searches I was able to overcome my challenges. Finally, I would say that I am proud because I was able to make a desktop pet, and now I get to see sans walk across my Desktop....
|
1793199122.4734063
|
1793285522.4734063
|
|
67744
|
A custom cybersecurity oriented cyberdeck. by @mat A custom cybersecurity oriented cyberdeck. by @matthieu_obyrne | Stardance...
|
matthieu_obyrne
|
0
|
9.06
|
0
|
[]
|
[{"post_id": 81147, "ts": "202 [{"post_id": 81147, "ts": "2026-10-20T02:57:49Z", "hours": 0.9139, "text": "I finally added an up-to-date readme and cleared up my github"}, {"post_id": 81057, "ts": "2026-10-19T18:12:28Z", "hours": 0.8217, "text": "I updated my pcb back to the old fold version, and placed everything back on it, i think I am finally ready to print it, I also made a quick cad of the pcb that will allow me to make and design the case."}, {"post_id": 78901, "ts": "2026-10-11T23:24:19Z", "hours": 1.6881, "text": "Added a rough draft of the opensource proxmark 3 into my pcb integrated inside"}, {"post_id": 77728, "ts": "2026-10-08T03:19:34Z", "hours": 5.6342, "text": "I started working on the pcb and placing all the parts e"}]...
|
Title: A custom cybersecurity oriented cyberdeck. Title: A custom cybersecurity oriented cyberdeck. by @matthieu_obyrne | Stardance
Devlogs:
I started working on the pcb and placing all the parts e
Added a rough draft of the opensource proxmark 3 into my pcb integrated inside
I updated my pcb back to the old fold version, and placed everything back on it, i think I am finally ready to print it, I also made a quick cad of the pcb that will allow me to make and design the case.
I finally added an up-to-date readme and cleared up my github...
|
1793112896.473352
|
1793717696.473352
|
|
4994
|
Tamagochi pet by @S0l4Ce | Stardance
|
S0l4Ce
|
1
|
52.03
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T05:08:22Z", "hours": 45.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a tamagotchi pet (i am aware that throughout the project, the spelling of it has been inconsistent) But anyway, what i found most challenging was having to look through the loop constantly making adjustments based off minor errors during each test run and incorrect wiring making me feel like i had the code wrong. I am proud that I learned surprisingly a lot. The screenshot is merely just part of it and you should check it out yourself! both the source for the software and hardware is in there. The latest software build is in a separate branch and you may need to scope around for the latest hardware build. PLEASE note that all of the hardware additions - if you truly want to build it yourself, is pushing the limits of the esp32 so please run it while using a powerful cable.", "repo": "https://github.com/mootonlee/tamagotchi-", "demo": ""}]...
|
[{"post_id": 81143, "ts": "202 [{"post_id": 81143, "ts": "2026-10-20T02:14:13Z", "hours": 1.0578, "text": "spent this hour troubleshooting and figuring out how to add wires. was super unsucessful and wasted my time. im pretty annoyed"}, {"post_id": 80851, "ts": "2026-10-19T00:50:55Z", "hours": 2.3, "text": "Finished adding modules like the LEDs, resistors, etc. All i need now is the wiring which i heard is tedious"}, {"post_id": 80585, "ts": "2026-10-18T07:04:57Z", "hours": 1.4167, "text": "Im very proud of my work! i finished up the screen, fixed misalignments, ensured precision, and in the end, everything fit perfectly!"}, {"post_id": 80513, "ts": "2026-10-17T22:48:45Z", "hours": 2.26, "text": "got mad countless times. Im doing my CAD for my project because youll now get permanently rejected if you miss it and i never knew. Im making the screen myself because i cant find it online. Below is a picture of how its assembled so far, and i would post the part im making right now but this just looks better. Also, does the CAD have to be fully accurate? ive never done a CAD before so parts i make myself may look off but ill try my best to make the measurements right."}, {"post_id": 70980, "ts": "2026-09-20T04:48:45Z", "hours": 6.0014, "text": "finally finished the 2nd personality. will be shipping my project. only thing left to do is fix bugs (i already scanned software and hardware for bugs. though the code seems somewhat contradictory to itself, it still works but please report bugs under this one’s comment and check out my submission and the demo video!"}, {"post_id": 63407, "ts": "2026-09-07T07:10:06Z", "hours": 1.4625, "text": "im starting work on the radiobuttons for interchangable personality to wrap up the project. im using placeholders so the face looks red if the radiobuttons are selected so it would look unpleasant to see but yeah"}, {"post_id": 59986, "ts": "2026-09-02T02:11:14Z", "hours": 2.4203, "text": "Got back on track, finally! It now gets visibly dim below 50 value on light, and dark below 25, along with squint and sleep. Im now going to begin working on the other expressions after I finish adding the dim to smile and alone faces. This thing is ending soon so idk if i will be able to add the computer control functions as promised :( I also switched to cachyos so Idk how that would go either. Check out the hardware version on my page though! its finished"}, {"post_id": 52633, "ts": "2026-08-22T21:16:19Z", "hours": 0.5211, "text": "My windows OS broke, not sure how, so im running on my second SSD and my most recent work has been erased! (software version) random thumbnail ig but im gonna be re-doing whatever has been erased.."}, {"post_id": 41108, "ts": "2026-08-05T03:07:48Z", "hours": 3.4297, "text": "finally added a sleep system, dimming system, and a fully fixed and functional lonely system. when lights are at or below 50, the lights will go dim, and below 25, they will go even dimmer, and it will sleep (software) I will the face variants next, and then actual interactive computer controls. shy and moody are still not ready yet"}, {"post_id": 34593, "ts": "2026-07-25T13:29:57Z", "hours": 2.5967, "text": "added lonely, smile, and neutral, also added placeholders for the soon to be added personalities and a brightness slider. Both are unfunctional and i only have the 3 faces for now. go check out my hardware version, its fully functional"}, {"post_id": 32247, "ts": "2026-07-21T09:09:49Z", "hours": 1.2072, "text": "working on a software version of my project 🔥 I main micropython but I’m adjusting to python for this and learning the different ways things are written, and figuring out how to make faces. Can anyone tell me if theres a designer that gives you the code when you draw something on a canvas? similar to lopaka?? The software version is projected to have more features for computer control than the hardware version. After finishing the faces and overall logic, I will add the additional side controls for it, like light and stuff"}, {"post_id": 32144, "ts": "2026-07-21T03:23:42Z", "hours": 9.8794, "text": "built an extension for the pet. It connects to the pet using gnd and 4 labeled gpio pins, though the 4th one connects to 0 and not 40. It works somewhat like a stream deck; It opens 2 games, 2 code editors, a browser, and shuts off or closes tabs on my computer without needing special permissions, it is built for windows though. Most of the hours logged came from trial and error. Most of the time the buttons wouldnt register, spam the same commands, double clicks wouldnt register, and it was a mess for hours. did some bugfixes involving screen bugs during personality swaps, and the pet “forgetting” its personality. please suggest additional ideas."}, {"post_id": 30476, "ts": "2026-07-18T02:37:34Z", "hours": 1.7375, "text": "Rewired to remove clutter. Back isn’t looking too good but the front is, when I run out of ideas ill probably build a shell for it please make recommendations"}, {"post_id": 30124, "ts": "2026-07-17T13:22:42Z", "hours": 2.4481, "text": "Added another personality, shy. added “cores” that determine the personality when plugged in, red for moody and blue for shy. unplug for normal. The shy personality features new unique faces. led colors and shaken face remain same"}, {"post_id": 29977, "ts": "2026-07-17T06:07:54Z", "hours": 1.6644, "text": "Ignore devlog: Tried making online demo but i pressed a button and all my tabs refreshed all at once and reset my work. Im publishing the devlog because i still did the work and i dont want it to go to waste (IGNORE THIS DEVLOG)"}, {"post_id": 29812, "ts": "2026-07-16T23:08:57Z", "hours": 3.2333, "text": "Added extra personality. If you plug a red LED in, it will get a more of a moody personality. It will look angry, sleep angry, and will usually just be angry (shaken face does not change.) unplugging the red LED will make it instantly revert to default personality let me know other interchangeable personalities I should add, or other software and hardware suggestions. Thanks."}, {"post_id": 28868, "ts": "2026-07-15T13:02:50Z", "hours": 2.6472, "text": "Added a gyroscope so the pet can become dizzy when shook. It features a red backlight, and remains dizzy for about 5 seconds. It was really a 20-30 minute setup after learning how to code and use one, and installing the libraries, but that extra addition turned into hours of additional troubleshooting since I was unfamiliar with the hardware. I eventually got it working after plenty of trial and error, and the real issue was just a couple lines of code. I’m unfortunately not getting much views, which is discouraging, but if you do come across this and decide to click on it, please suggest something in the comments. Thanks."}, {"post_id": 28151, "ts": "2026-07-14T08:19:06Z", "hours": 0.6217, "text": "Added status lights; finishing off full basic functionality for the pet. any additional features would be improvements, hardware additions, and wiring. full explanation of functions below: The “pet” is a TFT resistive touchscreen. Its face, as you can see, is a simple white and black pixelated look. 4 functions (for now): lonely - after 30 seconds of no interaction, after waking up or not being pet, it will become lonely, which is a sad face of course. The backlight glows a gloomy blue, slightly purple. neutral - base face, the pet is neutral when it isn’t lonely, had just woken up, and had recently been pet. the 3 other moods can occur when it is neutral. the backlight is white. sleeping - when the ambient light is low enough the pet will sleep. It cannot be disturbed and cannot become lonely until woken up. This is what i personally thought was a nice addition to the pet and would bring more realism and life to the pet. This is done by having a photocell near the face for most light accuracy. the backlight features a light purple blue. happy - when you pet it (or interact with the screen), it will smile. the blush being blue and not red was both intentional and unintentional feature. The color system is inverted same with the screen rotation. I did not know how to correct it but i felt the blue looked different and I kinda liked it so I didn’t spend extra time troubleshooting. the backlight features a bright hot pink color. PLEASE add any suggestions and I will likely consider, like adding a thermistor, weather, USB OTG, etc. When i feel like it, I may add a USB mode where it can do things on my computer when plugged in, like opening an app or powering off my computer. (the 35 minutes logged was for fixing the code and adding the lights. Not the full code itself.)"}, {"post_id": 27970, "ts": "2026-07-13T22:34:39Z", "hours": 3.7561, "text": "added functionality to the pet and added made a separate smaller one. It now has multiple moods with the ability to sleep when lights are dimmed enough."}, {"post_id": 16541, "ts": "2026-06-26T22:02:40Z", "hours": 1.0939, "text": "working on the wiring of the tomogachi pet n stuff no coding yet has a touchscreen now"}]...
|
Title: Tamagochi pet by @S0l4Ce | Stardance
Devlo Title: Tamagochi pet by @S0l4Ce | Stardance
Devlogs:
working on the wiring of the tomogachi pet n stuff no coding yet has a touchscreen now
added functionality to the pet and added made a separate smaller one. It now has multiple moods with the ability to sleep when lights are dimmed enough.
Added status lights; finishing off full basic functionality for the pet. any additional features would be improvements, hardware additions, and wiring. full explanation of functions below: The “pet” is a TFT resistive touchscreen. Its face, as you can see, is a simple white and black pixelated look. 4 functions (for now): lonely - after 30 seconds of no interaction, after waking up or not being pet, it will become lonely, which is a sad face of course. The backlight glows a gloomy blue, slightly purple. neutral - base face, the pet is neutral when it isn’t lonely, had just woken up, and had recently been pet. the 3 other moods can occur when it is neutral. the backlight is white. sleeping - when the ambient light is low enough the pet will sleep. It cannot be disturbed and cannot become lonely until woken up. This is what i personally thought was a nice addition to the pet and would bring more realism and life to the pet. This is done by having a photocell near the face for most light accuracy. the backlight features a light purple blue. happy - when you pet it (or interact with the screen), it will smile. the blush being blue and not red was both intentional and unintentional feature. The color system is inverted same with the screen rotation. I did not know how to correct it but i felt the blue looked different and I kinda liked it so I didn’t spend extra time troubleshooting. the backlight features a bright hot pink color. PLEASE add any suggestions and I will likely consider, like adding a thermistor, weather, USB OTG, etc. When i feel like it, I may add a USB mode where it can do things on my computer when plugged in, like opening an app or powering off my computer. (the 35 minutes logged was for fixing the code and adding the lights. Not the full code itself.)
Added a gyroscope so the pet can become dizzy when shook. It features a red backlight, and remains dizzy for about 5 seconds. It was really a 20-30 minute setup after learning how to code and use one, and installing the libraries, but that extra addition turned into hours of additional troubleshooting since I was unfamiliar with the hardware. I eventually got it working after plenty of trial and error, and the real issue was just a couple lines of code. I’m unfortunately not getting much views, which is discouraging, but if you do come across this and decide to click on it, please suggest something in the comments. Thanks.
Added extra personality. If you plug a red LED in, it will get a more of a moody personality. It will look angry, sleep angry, and will usually just be angry (shaken face does not change.) unplugging the red LED will make it instantly revert to default personality let me know other interchangeable personalities I should add, or other software and hardware suggestions. Thanks.
Ignore devlog: Tried making online demo but i pressed a button and all my tabs refreshed all at once and reset my work. Im publishing the devlog because i still did the work and i dont want it to go to waste (IGNORE THIS DEVLOG)
Added another personality, shy. added “cores” that determine the personality when plugged in, red for moody and blue for shy. unplug for normal. The shy personality features new unique faces. led colors and shaken face remain same
Rewired to remove clutter. Back isn’t looking too good but the front is, when I run out of ideas ill probably build a shell for it please make recommendations
built an extension for the pet. It connects to the pet using gnd and 4 labeled gpio pins, though the 4th one connects to 0 and not 40. It works somewhat like a stream deck; It opens 2 games, 2 code editors, a browser, and shuts off or closes tabs on my computer without needing special permissions, it is built for windows though. Most of the hours logged came from trial and error. Most of the time the buttons wouldnt register, spam the same commands, double clicks wouldnt register, and it was a mess for hours. did some bugfixes involving screen bugs during personality swaps, and the pet “forgetting” its personality. please suggest additional ideas.
working on a software version of my project 🔥 I main micropython but I’m adjusting to python for this and learning the different ways things are written, and figuring out how to make faces. Can anyone tell me if theres a designer that gives you the code when you draw something on a canvas? similar to lopaka?? The software version is projected to have more features for computer control than the hardware version. After finishing the faces and overall logic, I will add the additional side controls for it, like light and stuff
added lonely, smile, and neutral, also added placeholders for the soon to be added personalities and a brightness slider. Both are unfunctional and i only have the 3 faces for now. go check out my hardware version, its fully functional
finally added a sleep system, dimming system, and a fully fixed and functional lonely system. when lights are at or below 50, the lights will go dim, and below 25, they will go even dimmer, and it will sleep (software) I will the face variants next, and then actual interactive computer controls. shy and moody are still not ready yet
My windows OS broke, not sure how, so im running on my second SSD and my most recent work has been erased! (software version) random thumbnail ig but im gonna be re-doing whatever has been erased..
Got back on track, finally! It now gets visibly dim below 50 value on light, and dark below 25, along with squint and sleep. Im now going to begin working on the other expressions after I finish adding the dim to smile and alone faces. This thing is ending soon so idk if i will be able to add the computer control functions as promised :( I also switched to cachyos so Idk how that would go either. Check out the hardware version on my page though! its finished
im starting work on the radiobuttons for interchangable personality to wrap up the project. im using placeholders so the face looks red if the radiobuttons are selected so it would look unpleasant to see but yeah
finally finished the 2nd personality. will be shipping my project. only thing left to do is fix bugs (i already scanned software and hardware for bugs. though the code seems somewhat contradictory to itself, it still works but please report bugs under this one’s comment and check out my submission and the demo video!
got mad countless times. Im doing my CAD for my project because youll now get permanently rejected if you miss it and i never knew. Im making the screen myself because i cant find it online. Below is a picture of how its assembled so far, and i would post the part im making right now but this just looks better. Also, does the CAD have to be fully accurate? ive never done a CAD before so parts i make myself may look off but ill try my best to make the measurements right.
Im very proud of my work! i finished up the screen, fixed misalignments, ensured precision, and in the end, everything fit perfectly!
Finished adding modules like the LEDs, resistors, etc. All i need now is the wiring which i heard is tedious
spent this hour troubleshooting and figuring out how to add wires. was super unsucessful and wasted my time. im pretty annoyed
Ships:
I made a tamagotchi pet (i am aware that throughout the project, the spelling of it has been inconsistent) But anyway, what i found most challenging was having to look through the loop constantly making adjustments based off minor errors during each test run and incorrect wiring making me feel like i had the code wrong. I am proud that I learned surprisingly a lot. The screenshot is merely just part of it and you should check it out yourself! both the source for the software and hardware is in there. The latest software build is in a separate branch and you may need to scope around for the latest hardware build. PLEASE note that all of the hardware additions - if you truly want to build it yourself, is pushing the limits of the esp32 so please run it while using a powerful cable....
|
1793148797.2933943
|
1793235197.2933943
|
|
70073
|
last surprise project by @amateur_tech_guy | Stard last surprise project by @amateur_tech_guy | Stardance...
|
amateur_tech_guy
|
0
|
0.55
|
0
|
[]
|
[{"post_id": 81139, "ts": "202 [{"post_id": 81139, "ts": "2026-10-20T01:21:44Z", "hours": 0.5511, "text": "devlog #1: working on a surprise new project! I wont tell anyone what it is yet, try to guess, heres a hint"}]...
|
Title: last surprise project by @amateur_tech_guy Title: last surprise project by @amateur_tech_guy | Stardance
Devlogs:
devlog #1: working on a surprise new project! I wont tell anyone what it is yet, try to guess, heres a hint...
|
1792958012.9325871
|
1793562812.9325871
|
|
41865
|
Dungeon climber by @SiddhantVerma_04 | Stardance
|
SiddhantVerma_04
|
1
|
33.41
|
399
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T14:28:37Z", "hours": 20.0, "multiplier": 19.54, "payout": 399, "blessing": "neutral", "text": "Dungeon Climber A 2d platformer made in Godot 4 about a knight stuck in a dungeon. This is my game about a knight stuck in a dungeon trying to escape while opening chests along the way and not dying. This is my first Godot game that i made after a long time and it took me a while to learn Godot’s language and system, but I came back to it because I love creating games and I want to make many more in the future. You can play it on it’s itch.io page by clicking the button below. Please give me some feedback for future projects. Thank you for your time!", "repo": "https://github.com/siddhantverma04/dungeon-climber", "demo": "https://hacr7.itch.io/dungeon-climber"}]...
|
[{"post_id": 81138, "ts": "202 [{"post_id": 81138, "ts": "2026-10-20T01:20:13Z", "hours": 3.1644, "text": "Devlog 9 Finished level 2 I added a lot of new features since the last devlog but the most prominent maybe would be dialogue! I basically created a villager that you can talk to just to give you some instruction on what to do. Other than that I added more to the actual level and added another fox near the end. And I ended it with a castle that you have to enter."}, {"post_id": 72052, "ts": "2026-09-22T02:44:30Z", "hours": 5.7467, "text": "Devlog 8 Big update Continued building the game, and started by adding another level. This level will be above ground, with new enemies and features. So far I have set it up for building, as well as added a fox, that took way too much time to code its death, and animations. I will also add other animals soon. I finished up the enemies in the first level too. But currently haven’t added any more sound effects or music for the new stuff."}, {"post_id": 68366, "ts": "2026-09-15T00:46:53Z", "hours": 4.4953, "text": "Devlog 7 Added simple enemies. Shipped a while ago but decided to continue on the game. I chose to first start making some new enemies. It was easy until I had to code the animations and health loss, so a lot of my time went into that. But I pretty much got it to work. I still need to code the death of the enemy though."}, {"post_id": 51005, "ts": "2026-08-20T14:25:21Z", "hours": 1.0708, "text": "Devlog 6 Finished the game! Made some tweaks and then exported the game. I then made my own page on itch.io and uploaded the game there. Dungeon Climber is now live so go check it out!"}, {"post_id": 49902, "ts": "2026-08-18T21:19:03Z", "hours": 2.9467, "text": "Devlog 5 Added a win screen and a game over screen I created a simple win and lose screen with a restart and quit option each. It took a long time to make the win screen animation, but the music for both of them was really easy. I’m fairly done with the game, and just need to make some tweaks and fixes until I’m ready to ship."}, {"post_id": 48341, "ts": "2026-08-16T17:32:01Z", "hours": 4.0333, "text": "Devlog 4 Added music and sound effects. Put some background music for the main menu and level, and had to figure out how to make transitions between them using tweens. Also made some sound effects for stuff like opening chests and taking damage."}, {"post_id": 46430, "ts": "2026-08-13T17:04:46Z", "hours": 4.4311, "text": "Devlog 3 Added a health and points system. Created a simple health system with 3 lives that resets the level when you lose all of them. Took a long time for debugging and fixing the code to make the player die properly but I was finally able to make it work. Along with that I also made a point system which just counts the amount of chests you open, which was easy enough. Also made some changes to the main menu animations."}, {"post_id": 44923, "ts": "2026-08-11T00:04:59Z", "hours": 3.8533, "text": "Devlog 2 Finished level building, and added a main menu. It took about an hour just to find and extend the image for the animation, but actually making the animation was relatively easy. I also made sure the character can’t move after going in the exit door."}, {"post_id": 43004, "ts": "2026-08-08T01:06:07Z", "hours": 4.0833, "text": "Devlog 1/Catch up: Over the summer I was working on a 2d platformer in Godot about a knight that’s stuck in a dungeon. However, I just turned 13 so I couldn’t track those hours or post any updates. So this will serve as a “catch up” of everything I did in that time. I also followed some Coco Code tutorials along the way but mainly did it myself and did my own things. I have separated everything I did into 4 parts, with the last being what the currently logged hours are for. Part 1: I found and imported some asset packs (sprites, backgrounds, tilesheets) into the project. Created a tilemap and background(also added physics collisions). Started building some of the game. Added a CharacterBody2d, and its AnimatedSprite2d and collision shape. Also added the animations for the character. Wrote the core movement for the character set up player input mappings for wasd and arrow keys. Part 2: Added a Camera2d to the player so that the camera follows the player. Created ladders using the tilemap and coded their movement. Made moving and static platforms using an AnimatableBody2d and an AnimationPlayer(for the moving ones). Also added chests that you can find throughout the level and open(they currently don’t give or do anything). Part 3: Added traps(spikes), that reset the level. Continued building the level. Added an exit door and made its animation. Added an animation for ladder climbing."}]...
|
Title: Dungeon climber by @SiddhantVerma_04 | Star Title: Dungeon climber by @SiddhantVerma_04 | Stardance
Devlogs:
Devlog 1/Catch up: Over the summer I was working on a 2d platformer in Godot about a knight that’s stuck in a dungeon. However, I just turned 13 so I couldn’t track those hours or post any updates. So this will serve as a “catch up” of everything I did in that time. I also followed some Coco Code tutorials along the way but mainly did it myself and did my own things. I have separated everything I did into 4 parts, with the last being what the currently logged hours are for. Part 1: I found and imported some asset packs (sprites, backgrounds, tilesheets) into the project. Created a tilemap and background(also added physics collisions). Started building some of the game. Added a CharacterBody2d, and its AnimatedSprite2d and collision shape. Also added the animations for the character. Wrote the core movement for the character set up player input mappings for wasd and arrow keys. Part 2: Added a Camera2d to the player so that the camera follows the player. Created ladders using the tilemap and coded their movement. Made moving and static platforms using an AnimatableBody2d and an AnimationPlayer(for the moving ones). Also added chests that you can find throughout the level and open(they currently don’t give or do anything). Part 3: Added traps(spikes), that reset the level. Continued building the level. Added an exit door and made its animation. Added an animation for ladder climbing.
Devlog 2 Finished level building, and added a main menu. It took about an hour just to find and extend the image for the animation, but actually making the animation was relatively easy. I also made sure the character can’t move after going in the exit door.
Devlog 3 Added a health and points system. Created a simple health system with 3 lives that resets the level when you lose all of them. Took a long time for debugging and fixing the code to make the player die properly but I was finally able to make it work. Along with that I also made a point system which just counts the amount of chests you open, which was easy enough. Also made some changes to the main menu animations.
Devlog 4 Added music and sound effects. Put some background music for the main menu and level, and had to figure out how to make transitions between them using tweens. Also made some sound effects for stuff like opening chests and taking damage.
Devlog 5 Added a win screen and a game over screen I created a simple win and lose screen with a restart and quit option each. It took a long time to make the win screen animation, but the music for both of them was really easy. I’m fairly done with the game, and just need to make some tweaks and fixes until I’m ready to ship.
Devlog 6 Finished the game! Made some tweaks and then exported the game. I then made my own page on itch.io and uploaded the game there. Dungeon Climber is now live so go check it out!
Devlog 7 Added simple enemies. Shipped a while ago but decided to continue on the game. I chose to first start making some new enemies. It was easy until I had to code the animations and health loss, so a lot of my time went into that. But I pretty much got it to work. I still need to code the death of the enemy though.
Devlog 8 Big update Continued building the game, and started by adding another level. This level will be above ground, with new enemies and features. So far I have set it up for building, as well as added a fox, that took way too much time to code its death, and animations. I will also add other animals soon. I finished up the enemies in the first level too. But currently haven’t added any more sound effects or music for the new stuff.
Devlog 9 Finished level 2 I added a lot of new features since the last devlog but the most prominent maybe would be dialogue! I basically created a villager that you can talk to just to give you some instruction on what to do. Other than that I added more to the actual level and added another fox near the end. And I ended it with a castle that you have to enter.
Ships:
Dungeon Climber A 2d platformer made in Godot 4 about a knight stuck in a dungeon. This is my game about a knight stuck in a dungeon trying to escape while opening chests along the way and not dying. This is my first Godot game that i made after a long time and it took me a while to learn Godot’s language and system, but I came back to it because I love creating games and I want to make many more in the future. You can play it on it’s itch.io page by clicking the button below. Please give me some feedback for future projects. Thank you for your time!...
|
1793127068.326554
|
1793213468.326554
|
|
70564
|
Orbit by @amirmzte13 | Stardance
|
amirmzte13
|
0
|
10.31
|
0
|
[]
|
[{"post_id": 81137, "ts": "202 [{"post_id": 81137, "ts": "2026-10-20T01:04:53Z", "hours": 10.3089, "text": "Currently working on organizing the folders and linking this to vercel."}]...
|
Title: Orbit by @amirmzte13 | Stardance
Devlogs:
Title: Orbit by @amirmzte13 | Stardance
Devlogs:
Currently working on organizing the folders and linking this to vercel....
|
1793098104.8940303
|
1793702904.8940303
|
|
16795
|
MAGNUS: DIY chess playing robot by @Leo_Zannoni | MAGNUS: DIY chess playing robot by @Leo_Zannoni | Stardance...
|
Leo_Zannoni
|
0
|
8.74
|
0
|
[]
|
[{"post_id": 81134, "ts": "202 [{"post_id": 81134, "ts": "2026-10-20T01:00:50Z", "hours": 8.3128, "text": "What MAGNUS is MAGNUS is a robot that plays chess on a real board against a person and says its moves out loud in Spanish. I’m building it for PRONAFECYT 2026, Costa Rica’s national science fair, and the voice is there for accessibility: you can follow the game without looking at a screen. I started on february with my first 3D models. Today it plays full games by itself and narrates them. About the hours Hackatime only logged about 8.5 h, because it only counts time in the code editor when i downloaded the app. Most of the work was CAD, printing, assembling and testing the arm. My log puts the real total at 350+ hours Vision Every piece is a 22.5 mm disc with an ArUco 4x4_50 marker and a white ring around it for contrast. The four board corners have their own markers, so the board is found from any camera angle. The camera is my phone through Iriun. A piece only counts after 5 detections in a row, and a GameTracker compares what the camera sees against every legal move to work out what the human played, including castling and en passant. Engine Stockfish runs through python-chess with 10 difficulty levels. Stockfish can’t play below about 1320 Elo, so the four easiest levels choose worse moves on purpose. Every move comes with metadata for captures, castling, en passant and promotion, so the arm never has to know any chess. The arm Shoulder and elbow use the encoder motors from the mBot2 kit on a CyberPi, with a LEGO Technic frame plus printed parts. I tried a 3:1 reduction on the shoulder, couldn’t make it work, and direct drive turned out to be enough. Instead of inverse kinematics I recorded the motor angles for all 64 squares once (teach and playback), with the motors powered, because the arm bends differently when you move it by hand. The encoders are incremental, so the arm homes against physical stops every time it starts. Magnets and the gripper The arm carries a 12x3 mm N52 magnet that grabs a piece from about 8 mm away. Each piece has two 10x2 mm magnets, one on top for the arm and one underneath for the board, and every square has a 6x3 mm magnet below it. Neighboring pieces 32 mm away don’t move. A servo lowers the magnet, lifts the piece and releases it. Without the lift step the arm dragged pieces and knocked over the neighbors. Problems I had to solve Magnet holes modeled at exactly 10 mm were too tight, so I made them 10.1 to 10.2 mm to allow for FDM tolerance. The CyberPi doesn’t report its IP, so my Mac runs a TCP server and the CyberPi connects to it as a client. The CyberPi only sees 2.4 GHz WiFi. mBlock’s mlink kept the serial port locked until I ran pkill -f mlink. How the software is organized There are three nodes (vision, engine and arm) that talk through typed messages, ROS2 style. Each hardware part has a fake backend, so the 482 tests run without the robot, and there’s a fully simulated pipeline for testing a whole game. What’s next Tuning arm precision: re-recording the squares where the magnet doesn’t land centered and testing the robot more with people with blind people. Also im working on a demo video with the robot working coming soon"}, {"post_id": 7867, "ts": "2026-06-13T03:49:51Z", "hours": 0.4319, "text": "Added the 3d chess models for the project"}]...
|
Title: MAGNUS: DIY chess playing robot by @Leo_Zan Title: MAGNUS: DIY chess playing robot by @Leo_Zannoni | Stardance
Devlogs:
Added the 3d chess models for the project
What MAGNUS is MAGNUS is a robot that plays chess on a real board against a person and says its moves out loud in Spanish. I’m building it for PRONAFECYT 2026, Costa Rica’s national science fair, and the voice is there for accessibility: you can follow the game without looking at a screen. I started on february with my first 3D models. Today it plays full games by itself and narrates them. About the hours Hackatime only logged about 8.5 h, because it only counts time in the code editor when i downloaded the app. Most of the work was CAD, printing, assembling and testing the arm. My log puts the real total at 350+ hours Vision Every piece is a 22.5 mm disc with an ArUco 4x4_50 marker and a white ring around it for contrast. The four board corners have their own markers, so the board is found from any camera angle. The camera is my phone through Iriun. A piece only counts after 5 detections in a row, and a GameTracker compares what the camera sees against every legal move to work out what the human played, including castling and en passant. Engine Stockfish runs through python-chess with 10 difficulty levels. Stockfish can’t play below about 1320 Elo, so the four easiest levels choose worse moves on purpose. Every move comes with metadata for captures, castling, en passant and promotion, so the arm never has to know any chess. The arm Shoulder and elbow use the encoder motors from the mBot2 kit on a CyberPi, with a LEGO Technic frame plus printed parts. I tried a 3:1 reduction on the shoulder, couldn’t make it work, and direct drive turned out to be enough. Instead of inverse kinematics I recorded the motor angles for all 64 squares once (teach and playback), with the motors powered, because the arm bends differently when you move it by hand. The encoders are incremental, so the arm homes against physical stops every time it starts. Magnets and the gripper The arm carries a 12x3 mm N52 magnet that grabs a piece from about 8 mm away. Each piece has two 10x2 mm magnets, one on top for the arm and one underneath for the board, and every square has a 6x3 mm magnet below it. Neighboring pieces 32 mm away don’t move. A servo lowers the magnet, lifts the piece and releases it. Without the lift step the arm dragged pieces and knocked over the neighbors. Problems I had to solve Magnet holes modeled at exactly 10 mm were too tight, so I made them 10.1 to 10.2 mm to allow for FDM tolerance. The CyberPi doesn’t report its IP, so my Mac runs a TCP server and the CyberPi connects to it as a client. The CyberPi only sees 2.4 GHz WiFi. mBlock’s mlink kept the serial port locked until I ran pkill -f mlink. How the software is organized There are three nodes (vision, engine and arm) that talk through typed messages, ROS2 style. Each hardware part has a fake backend, so the 482 tests run without the robot, and there’s a fully simulated pipeline for testing a whole game. What’s next Tuning arm precision: re-recording the squares where the magnet doesn’t land centered and testing the robot more with people with blind people. Also im working on a demo video with the robot working coming soon...
|
1792630225.427695
|
1793235025.427695
|
|
66920
|
My own site! by @PhantomStorm | Stardance
|
PhantomStorm
|
1
|
11.3
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T01:14:13Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an All about Me website, that portrays my skills, hobbies, and my profile. It was challenging to fit enough time into making this. I am really proud of the UI.", "repo": "https://github.com/Rephantom-Vortex/My-Personal-Website", "demo": "https://my-bio.boomurl.me/"}]...
|
[{"post_id": 81128, "ts": "202 [{"post_id": 81128, "ts": "2026-10-20T00:14:07Z", "hours": 0.2531, "text": "I WILL CRASH OUT, HOW AM I SUPPOSED TO LOWER AI USAGE IF I DIDN’T USE IT ALL. I am literally crying, I wish AI never existed, i took literally 11 hours to do this and I am still being accused of AI, like literally check the code, it is so messed up, there are DIVs everywhere, and random class names cuz I couldn’t make them up."}, {"post_id": 80226, "ts": "2026-10-16T19:50:37Z", "hours": 0.4592, "text": "Y r my projects always flagged as AI, I didn’t use it"}, {"post_id": 80021, "ts": "2026-10-16T00:17:11Z", "hours": 1.9803, "text": "I finished redoing the CSS!"}, {"post_id": 79162, "ts": "2026-10-12T20:56:21Z", "hours": 2.6044, "text": "Had to Redo the CSS, cuz it was flagged as AI. This time I DID NOT use a AI for anything (except for searching how to center a div)"}, {"post_id": 77441, "ts": "2026-10-07T00:55:58Z", "hours": 2.5144, "text": "FINALLY, Finished!"}, {"post_id": 77204, "ts": "2026-10-06T02:49:05Z", "hours": 0.7017, "text": "Got Started On CSS"}, {"post_id": 77194, "ts": "2026-10-06T01:14:40Z", "hours": 3.2092, "text": "Finished the HTML of My Personal Website, Got CSS Left"}]...
|
Title: My own site! by @PhantomStorm | Stardance
Title: My own site! by @PhantomStorm | Stardance
Devlogs:
Finished the HTML of My Personal Website, Got CSS Left
Got Started On CSS
FINALLY, Finished!
Had to Redo the CSS, cuz it was flagged as AI. This time I DID NOT use a AI for anything (except for searching how to center a div)
I finished redoing the CSS!
Y r my projects always flagged as AI, I didn’t use it
I WILL CRASH OUT, HOW AM I SUPPOSED TO LOWER AI USAGE IF I DIDN’T USE IT ALL. I am literally crying, I wish AI never existed, i took literally 11 hours to do this and I am still being accused of AI, like literally check the code, it is so messed up, there are DIVs everywhere, and random class names cuz I couldn’t make them up.
Ships:
I made an All about Me website, that portrays my skills, hobbies, and my profile. It was challenging to fit enough time into making this. I am really proud of the UI....
|
1793217028.155401
|
1793303428.155401
|
|
20340
|
Audio Codec Module by @pui4 | Stardance
|
pui4
|
0
|
7.87
|
0
|
[]
|
[{"post_id": 81127, "ts": "202 [{"post_id": 81127, "ts": "2026-10-20T00:07:01Z", "hours": 1.2197, "text": "I finally got it working. This is a shot devlog just before I ship. I have found an issue with the design (that I have now fixed), I forgot to breakout the output pin on the chip meaning that the mic input doesn’t work. However speaker output works! Here I have attached a video of it hooked up to a pi pico acting as a usb audio device (ignore the messy desk)"}, {"post_id": 63906, "ts": "2026-09-07T22:54:44Z", "hours": 1.4167, "text": "THE BOARDS HAVE ARRIVED!!! JLC has finally delivered the boards and they look fantastic. But do they work? I will get to that shortly. Ordering the boards was a pain in the ass. When I added the boards to my cart and filled everything in, I got a price of 60 USD. I made my application for a grant for 60 USD and got accepted. Then when I later went to purchase the boards, I got hit with 11 USD of hidden taxes that JLC doesn’t show you until after you have already put you card information in and are ready to buy it. So I was 11 USD short to order my boards; so I made a support ticket on the slack to get my grant increased - just for it to get a couple (honestly useless) replies. So in desperation I looked to see if I could decrease the price to fit inside my grant budget and I was able to using a JLC coupon. So I purchased the boards and received an email asking me the orientation of the single IC that is on the board. They had the dot in the top right when it needed to be in the top left. I corrected them and even attached a screenshot from KiCad to further illustrate my point. They thanked me for correcting them and that was the end of it. Fast forward to yesterday and the boards arrived. I was filled with excitement and I hastily soldered on the headers to the board. I then went to test it with an esp32 and a simple vibe-coded (calm down it’s just for testing) esphome app. I wired everything up correctly and saw nothing on the I2C bus. I was scared I made a mistake but all the voltages and pins were where they were supposed to be. Then I noticed it, the IC was rotated 90 degrees from where it should have been; on all of the boards. It was in the original orientation that JLC sent me and not the corrected one that they confirmed. Even though I don’t have the correct tools for the job I attempted at fixing one. The one with the header already on it would have been annoying as I would have had to remove the headers which is a major pain in the ass. So I stuck another board on top of the hotplate that I got from hackclub blueprint and tried. The first attempt ended in destruction as I was using the wrong type of tweezers and so when I went to place the chip down it pinged off and knocked a capacitor and resistor off the board; and I chose to use absolutely tiny passives as the footprints in KiCad are incomprehensible and trying to compare them to LCSC parts was hard. On the third board and attempt I did (or at least I think I did as I don’t have a microscope to properly check it). I ran over to my computer to test it and I saw it on the I2C bus. Then esphome wasn’t letting me use it as a WiFi speaker so I played some rttti sounds on it and it worked! Of course all of this time was not logged (4-5~ hours of work) so what was the 1 hour and 25 mins. Well the original purpose for this board was to be used with Linux SBCs and so I tried to get it to work with the pi zero 2w. I picked the 2w to test with as it has 6.18 kernel which includes a driver for the es8311. However I know next to nothing about Linux embedded development, even though I’ve dail drove Linux on my pc for almost 2 years now - I know it more as a user than a developer. In other words, I couldn’t figure out how to properly write the device trees to get it to work and I couldn’t vibe-code it either as that didn’t work. Now I have to try and get this working on the pi before the end of Star dance so I can ship it. If you are reading this and have any experience in embedded Linux or device trees, please message me on slack: @pui4 . Thanks for reading, I hope to get this done soon. Also I have sent an email complaining about the boards to JLC and I will report when I have any news."}, {"post_id": 26093, "ts": "2026-07-10T17:57:38Z", "hours": 1.7836, "text": "Finally going to submit!! I’ve finished the PCB and the readme (for now). I made blender renders of the PCB. I used a random HDRI I found online and hit render. Also I had to change the PCB as the footprint I was using for the resistors and capacitors were too small for the ones that I actually wanted to use. In fairness to me; it’s difficult to pick the right one when all the footprint names are “R_0201_0603Metric”. It’s so confusing that even claude got it wrong. It said that the second number was metric and the first was imperial and that LCSC has there components listed in metric. That’s wrong, I’m not sure what part of it is wrong - all I know is that the number I wanted for LCSC was the first one. I also changed the footprints so they aren’t the hand-solder ones. This is after @heki told me that it may cause issues, yesterday. This will not be my final post on this design as I guarantee that there will be some issue with the design or repo that requires me to re-submit but we’ll see. I also updated the readme to a some-what final state (until I actually get the boards). It has more info if you want to check it out. The repo is a bit messy at the minute so I need to tidy that up at a later date. Now I just need to wait to get it rejected to do any more work on it. Until then, thanks for reading !!"}, {"post_id": 25557, "ts": "2026-07-09T21:33:20Z", "hours": 0.9833, "text": "I think I’m done. I finished the PCB and fixed some things with the help of @heki (thanks). I did a BOM with the help of the JLC kicad extension and uploaded it to JLC and got a price of $40! I still need to do a render and submit it but I think I’m done for today. Thank you for reading. (I spent a lot longer on this but forgot to record it)"}, {"post_id": 25420, "ts": "2026-07-09T18:06:17Z", "hours": 1.7333, "text": "Hopefully finished routing the PCB. As I said in my last post; I’m not entirely sure on if I have picked the correct footprints for my resistors and capacitors. I picked small ones as it won’t draw much power and is 3.3 volts anyway. Also I ended up keeping the aux jacks and fit them in as shown in the screenshot. Next I need to make a BOM for JLC to assemble it as I currently don’t have the capabilities or expertise to solder SMD components. I have never made a BOM before and I don’t really know how to start - if anyone can help me, please comment on this post or reach out to me on slack. After the BOM is complete, then I will need to see the cost of producing these modules and submit the project for funding. Also excuse the poor quality of my routing and the large amount of Vias, as this is my second PCB ever and I’m just learning by trial and error. I mean my last PCB worked (with some bodges) so surely this vastly more complex one will work too; right? I also need to add some art to the PCB as currently it is very bland (yes the text is in comic sans). I will also do a render in blender and properly add the models for components in a future devlog. I’m also going to post the PCB and the schematic into the slack to see if their is any obvious issues that I have overlooked. If you (the person reading this) spots any issues - comment them or reach me on slack. Thanks for reading and hopefully I’ll get this done soon. :))"}, {"post_id": 24959, "ts": "2026-07-08T20:59:19Z", "hours": 0.7328, "text": "(little annoyed as I am having to re-write this entire thing again as stardance refused to accept my last one) I have just finished the schematic for the module. It is copied from an implementation by waveshare in one of their ESP32 boards here. I’m not 100% sure that it is correct as I’m not good enough at electronics yet to read and understand datasheets. I haven’t yet assigned the footprints to the symbols yet as I need to do more research into the different sizes of SMD resistors and caps. It has 2 aux jacks - one for input and one for output, I’m not fully sure whether or not I’m going to keep these in the final design as they are already broken out to the pin headers; but they are there for now. They are also TRS jacks even though they are both mono, this is due to me requiring a TRS jack for the mic I plan to use for my other project (a Rode videomic shotgun mic). I know that a mono jack would work too, but I’ve chosen to use TRS jacks also because they are easier to obtain. The pin headers are separated into 2 groups of 6 as to keep it small and bread-board compatible - so I can use this module for prototyping other projects more easily. Right now I’m going to submit this schematic into the outpost and stardance slacks to ask for others opinions. I have no intention to go to open sauce as it is too expensive for me to go as I am in the UK; so I’m hoping for as much star dust as possible :) If you have any questions (or you spotted an issue in the design) feel free to reach out to me on slack @pui4 . Thank you for reading and being interested in my project :))"}]...
|
Title: Audio Codec Module by @pui4 | Stardance
De Title: Audio Codec Module by @pui4 | Stardance
Devlogs:
(little annoyed as I am having to re-write this entire thing again as stardance refused to accept my last one) I have just finished the schematic for the module. It is copied from an implementation by waveshare in one of their ESP32 boards here. I’m not 100% sure that it is correct as I’m not good enough at electronics yet to read and understand datasheets. I haven’t yet assigned the footprints to the symbols yet as I need to do more research into the different sizes of SMD resistors and caps. It has 2 aux jacks - one for input and one for output, I’m not fully sure whether or not I’m going to keep these in the final design as they are already broken out to the pin headers; but they are there for now. They are also TRS jacks even though they are both mono, this is due to me requiring a TRS jack for the mic I plan to use for my other project (a Rode videomic shotgun mic). I know that a mono jack would work too, but I’ve chosen to use TRS jacks also because they are easier to obtain. The pin headers are separated into 2 groups of 6 as to keep it small and bread-board compatible - so I can use this module for prototyping other projects more easily. Right now I’m going to submit this schematic into the outpost and stardance slacks to ask for others opinions. I have no intention to go to open sauce as it is too expensive for me to go as I am in the UK; so I’m hoping for as much star dust as possible :) If you have any questions (or you spotted an issue in the design) feel free to reach out to me on slack @pui4 . Thank you for reading and being interested in my project :))
Hopefully finished routing the PCB. As I said in my last post; I’m not entirely sure on if I have picked the correct footprints for my resistors and capacitors. I picked small ones as it won’t draw much power and is 3.3 volts anyway. Also I ended up keeping the aux jacks and fit them in as shown in the screenshot. Next I need to make a BOM for JLC to assemble it as I currently don’t have the capabilities or expertise to solder SMD components. I have never made a BOM before and I don’t really know how to start - if anyone can help me, please comment on this post or reach out to me on slack. After the BOM is complete, then I will need to see the cost of producing these modules and submit the project for funding. Also excuse the poor quality of my routing and the large amount of Vias, as this is my second PCB ever and I’m just learning by trial and error. I mean my last PCB worked (with some bodges) so surely this vastly more complex one will work too; right? I also need to add some art to the PCB as currently it is very bland (yes the text is in comic sans). I will also do a render in blender and properly add the models for components in a future devlog. I’m also going to post the PCB and the schematic into the slack to see if their is any obvious issues that I have overlooked. If you (the person reading this) spots any issues - comment them or reach me on slack. Thanks for reading and hopefully I’ll get this done soon. :))
I think I’m done. I finished the PCB and fixed some things with the help of @heki (thanks). I did a BOM with the help of the JLC kicad extension and uploaded it to JLC and got a price of $40! I still need to do a render and submit it but I think I’m done for today. Thank you for reading. (I spent a lot longer on this but forgot to record it)
Finally going to submit!! I’ve finished the PCB and the readme (for now). I made blender renders of the PCB. I used a random HDRI I found online and hit render. Also I had to change the PCB as the footprint I was using for the resistors and capacitors were too small for the ones that I actually wanted to use. In fairness to me; it’s difficult to pick the right one when all the footprint names are “R_0201_0603Metric”. It’s so confusing that even claude got it wrong. It said that the second number was metric and the first was imperial and that LCSC has there components listed in metric. That’s wrong, I’m not sure what part of it is wrong - all I know is that the number I wanted for LCSC was the first one. I also changed the footprints so they aren’t the hand-solder ones. This is after @heki told me that it may cause issues, yesterday. This will not be my final post on this design as I guarantee that there will be some issue with the design or repo that requires me to re-submit but we’ll see. I also updated the readme to a some-what final state (until I actually get the boards). It has more info if you want to check it out. The repo is a bit messy at the minute so I need to tidy that up at a later date. Now I just need to wait to get it rejected to do any more work on it. Until then, thanks for reading !!
THE BOARDS HAVE ARRIVED!!! JLC has finally delivered the boards and they look fantastic. But do they work? I will get to that shortly. Ordering the boards was a pain in the ass. When I added the boards to my cart and filled everything in, I got a price of 60 USD. I made my application for a grant for 60 USD and got accepted. Then when I later went to purchase the boards, I got hit with 11 USD of hidden taxes that JLC doesn’t show you until after you have already put you card information in and are ready to buy it. So I was 11 USD short to order my boards; so I made a support ticket on the slack to get my grant increased - just for it to get a couple (honestly useless) replies. So in desperation I looked to see if I could decrease the price to fit inside my grant budget and I was able to using a JLC coupon. So I purchased the boards and received an email asking me the orientation of the single IC that is on the board. They had the dot in the top right when it needed to be in the top left. I corrected them and even attached a screenshot from KiCad to further illustrate my point. They thanked me for correcting them and that was the end of it. Fast forward to yesterday and the boards arrived. I was filled with excitement and I hastily soldered on the headers to the board. I then went to test it with an esp32 and a simple vibe-coded (calm down it’s just for testing) esphome app. I wired everything up correctly and saw nothing on the I2C bus. I was scared I made a mistake but all the voltages and pins were where they were supposed to be. Then I noticed it, the IC was rotated 90 degrees from where it should have been; on all of the boards. It was in the original orientation that JLC sent me and not the corrected one that they confirmed. Even though I don’t have the correct tools for the job I attempted at fixing one. The one with the header already on it would have been annoying as I would have had to remove the headers which is a major pain in the ass. So I stuck another board on top of the hotplate that I got from hackclub blueprint and tried. The first attempt ended in destruction as I was using the wrong type of tweezers and so when I went to place the chip down it pinged off and knocked a capacitor and resistor off the board; and I chose to use absolutely tiny passives as the footprints in KiCad are incomprehensible and trying to compare them to LCSC parts was hard. On the third board and attempt I did (or at least I think I did as I don’t have a microscope to properly check it). I ran over to my computer to test it and I saw it on the I2C bus. Then esphome wasn’t letting me use it as a WiFi speaker so I played some rttti sounds on it and it worked! Of course all of this time was not logged (4-5~ hours of work) so what was the 1 hour and 25 mins. Well the original purpose for this board was to be used with Linux SBCs and so I tried to get it to work with the pi zero 2w. I picked the 2w to test with as it has 6.18 kernel which includes a driver for the es8311. However I know next to nothing about Linux embedded development, even though I’ve dail drove Linux on my pc for almost 2 years now - I know it more as a user than a developer. In other words, I couldn’t figure out how to properly write the device trees to get it to work and I couldn’t vibe-code it either as that didn’t work. Now I have to try and get this working on the pi before the end of Star dance so I can ship it. If you are reading this and have any experience in embedded Linux or device trees, please message me on slack: @pui4 . Thanks for reading, I hope to get this done soon. Also I have sent an email complaining about the boards to JLC and I will report when I have any news.
I finally got it working. This is a shot devlog just before I ship. I have found an issue with the design (that I have now fixed), I forgot to breakout the output pin on the chip meaning that the mic input doesn’t work. However speaker output works! Here I have attached a video of it hooked up to a pi pico acting as a usb audio device (ignore the messy desk)...
|
1792698589.5127926
|
1793303389.5127926
|
|
69065
|
Having fun messing with Godot Networking by @Flame Having fun messing with Godot Networking by @FlameWing | Stardance...
|
FlameWing
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-20T00:52:46Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Pretty simple Godot game that shows the concepts of Godot’s networking tools. Simple host/join, with player data syncing across clients. Simple chatting, and spawning physics bodies. Also, local server broadcasting to easily join servers hosted on your local network. One of the first times I used Godot, and had a fun time learning the technical side of it. Got to learn how to use both Godot’s High Level Multiplayer, and Godot’s lower level networking to handle local broadcasting.", "repo": "https://github.com/FlameWing-Code/Godot-Networking-Testing", "demo": "https://github.com/FlameWing-Code/Godot-Networking-Testing/releases/tag/v1"}]...
|
[{"post_id": 81125, "ts": "202 [{"post_id": 81125, "ts": "2026-10-19T23:50:39Z", "hours": 3.1672, "text": "Added local server broadcasting When you host a game, it will constantly send a small packet to 255.255.255.255, which gets sent to every device in the local network. Its a small little packet that simply contains the server’s username and the port their hosting on. Clients can pick up this packet, and it gets displayed so you can join easily. Had to rely on godot’s lower level networking, compared to the rest of the project."}, {"post_id": 78633, "ts": "2026-10-11T04:19:44Z", "hours": 2.6972, "text": "Got chat and usernames working"}]...
|
Title: Having fun messing with Godot Networking by Title: Having fun messing with Godot Networking by @FlameWing | Stardance
Devlogs:
Got chat and usernames working
Added local server broadcasting When you host a game, it will constantly send a small packet to 255.255.255.255, which gets sent to every device in the local network. Its a small little packet that simply contains the server’s username and the port their hosting on. Clients can pick up this packet, and it gets displayed so you can join easily. Had to rely on godot’s lower level networking, compared to the rest of the project.
Ships:
Pretty simple Godot game that shows the concepts of Godot’s networking tools. Simple host/join, with player data syncing across clients. Simple chatting, and spawning physics bodies. Also, local server broadcasting to easily join servers hosted on your local network. One of the first times I used Godot, and had a fun time learning the technical side of it. Got to learn how to use both Godot’s High Level Multiplayer, and Godot’s lower level networking to handle local broadcasting....
|
1793155890.9777288
|
1793242290.9777288
|
|
43700
|
ngarnsworthy.dev by @ngarnsworthy | Stardance
|
ngarnsworthy
|
0
|
30.82
|
0
|
[]
|
[{"post_id": 81120, "ts": "202 [{"post_id": 81120, "ts": "2026-10-19T23:38:02Z", "hours": 14.3867, "text": "I got lost in the sauce and went over 10hrs Done Switched to express Added index page Project showcase Started blog TODO Guest book Outlinks Styling Retrospective It has been nice returning to express.js. I feel React and other modern web development tools are useful but are also cumbersome for many projects. I overall have enjoyed my experience with this “older” tool-chain. It has taken away a lot of the unnecessary abstraction I have seen through react. It has also let me look into accessibility way more so my website can be as accessible as possible! Reasoning When I started work on Termsite I was ready to delete a lot of the project structure from my personal website as Termsite rebuilt that functionality in a even better way. I just ended up deleting everything and starting again from scratch lol, but I like this web concept way more overall!"}, {"post_id": 69141, "ts": "2026-09-16T13:34:43Z", "hours": 7.7217, "text": "Done Added persistent env that can be used to store values between commands. Commands ls: created, a command to see the files in your current directory cat: created, a command to look at the contents of a file cd: created, a command to change your directory theme: created, a command to change your theme to one of the valid themes help: improved, added new commands to help TODO Add more themes Create mobile friendly interaction Create accessible interaction"}, {"post_id": 65025, "ts": "2026-09-09T20:36:07Z", "hours": 8.7106, "text": "Created a fake web terminal interface with each command running without state. Created the following test commands : help , startup, error. The error command is used when a command is not found. The startup command is ran on start and can be used to output usage information and setup state (when that is implemented). The help command outputs help information on all commands."}]...
|
Title: ngarnsworthy.dev by @ngarnsworthy | Stardan Title: ngarnsworthy.dev by @ngarnsworthy | Stardance
Devlogs:
Created a fake web terminal interface with each command running without state. Created the following test commands : help , startup, error. The error command is used when a command is not found. The startup command is ran on start and can be used to output usage information and setup state (when that is implemented). The help command outputs help information on all commands.
Done Added persistent env that can be used to store values between commands. Commands ls: created, a command to see the files in your current directory cat: created, a command to look at the contents of a file cd: created, a command to change your directory theme: created, a command to change your theme to one of the valid themes help: improved, added new commands to help TODO Add more themes Create mobile friendly interaction Create accessible interaction
I got lost in the sauce and went over 10hrs Done Switched to express Added index page Project showcase Started blog TODO Guest book Outlinks Styling Retrospective It has been nice returning to express.js. I feel React and other modern web development tools are useful but are also cumbersome for many projects. I overall have enjoyed my experience with this “older” tool-chain. It has taken away a lot of the unnecessary abstraction I have seen through react. It has also let me look into accessibility way more so my website can be as accessible as possible! Reasoning When I started work on Termsite I was ready to delete a lot of the project structure from my personal website as Termsite rebuilt that functionality in a even better way. I just ended up deleting everything and starting again from scratch lol, but I like this web concept way more overall!...
|
1792558281.4008505
|
1793163081.4008505
|
|
562
|
Chess in Python Turtle 🐢 by @Mehmet | Stardance
|
Mehmet
|
1
|
7.0
|
80
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T21:01:01Z", "hours": 7.0, "multiplier": 12.05, "payout": 80, "blessing": "neutral", "text": "I built pure chess inside Python Turtle. The entire idea of making a fully fledged game in Python’s Turtle seemed absurd, but there is tangible proof now. I’m proud of how I handled the piece moving and square highlighting code snippets; those were really fun to work on. Here are some tests you can do to see if my project holds up: Try clicking outside the board to move a piece, and you’ll see that it doesn’t. Try moving a piece outside the board. Try moving kings to squares that opposing pieces see. Try double pushing pawns. Right now, I haven’t added en passant or castling, but a 99% fledged chess game inside Python Turtle is ready for you to play.", "repo": "https://github.com/SameRainbows/Python-Turtle-Chess", "demo": "https://github.com/SameRainbows/Python-Turtle-Chess/releases/tag/V1"}]...
|
[{"post_id": 8112, "ts": "2026 [{"post_id": 8112, "ts": "2026-06-13T15:19:39Z", "hours": 1.8964, "text": "Finally, I can say that I’ve built chess—fully fledged chess—in Python Turtle. I added check, checks, checkmates, and all the logic that makes them up. I also created a new function called has_legal_moves, which takes one parameter to see if the attacker is white. In total, I defined 11 functions back to back in the Python file. It seems funny, but that’s what was needed. Thank you, every1!"}, {"post_id": 7080, "ts": "2026-06-11T21:14:12Z", "hours": 0.5017, "text": "Added basic promotions when the pawns go to the opposite side (for now they default to only queen promotions, more coming soon) and right now started working on the final boss of chess programming… Checks and checkmates. Wish me luck!"}, {"post_id": 5677, "ts": "2026-06-09T15:40:24Z", "hours": 0.9253, "text": "Welcome back to my pit of inevitable doom, where I’m trying to build fully fledged chess inside pure Python turtle. This devlog is because I finally managed to get a glimpse of the sunlight and add the special moves and captures for pawns. Before right now, pawns could only move one step forward no matter the place, and they actually captured by going forward into the enemy. If you play chess, you know it’s not like that. I have now implemented the following: Two-step support for pawns going on their first move. Logic so that pawns cannot capture pieces directly in front of them. Support for pawns capturing pieces only on their front diagonals. Follow along if you want to see if I ever get out of this!!! :D"}, {"post_id": 2915, "ts": "2026-06-05T20:22:29Z", "hours": 0.9917, "text": "Added legal moves and support for the knight, king, rook and pawn. The bishop is on the way"}, {"post_id": 2776, "ts": "2026-06-05T16:03:50Z", "hours": 0.7839, "text": "Added coordinates for the chessboard with a new function called print_coordinates. I also added a bouncer function to check if a piece is trying to move to a square that has a piece of the same color. If it’s trying to capture its own piece, it doesn’t allow the move. I implemented this by creating a new function called is_legal_move."}, {"post_id": 2264, "ts": "2026-06-04T17:37:49Z", "hours": 1.1539, "text": "Created functions for repeated tasks."}, {"post_id": 980, "ts": "2026-06-02T19:18:29Z", "hours": 0.47, "text": "Making fully fledged chess inside Python Turtle."}]...
|
Title: Chess in Python Turtle 🐢 by @Mehmet | Stard Title: Chess in Python Turtle 🐢 by @Mehmet | Stardance
Devlogs:
Making fully fledged chess inside Python Turtle.
Created functions for repeated tasks.
Added coordinates for the chessboard with a new function called print_coordinates. I also added a bouncer function to check if a piece is trying to move to a square that has a piece of the same color. If it’s trying to capture its own piece, it doesn’t allow the move. I implemented this by creating a new function called is_legal_move.
Added legal moves and support for the knight, king, rook and pawn. The bishop is on the way
Welcome back to my pit of inevitable doom, where I’m trying to build fully fledged chess inside pure Python turtle. This devlog is because I finally managed to get a glimpse of the sunlight and add the special moves and captures for pawns. Before right now, pawns could only move one step forward no matter the place, and they actually captured by going forward into the enemy. If you play chess, you know it’s not like that. I have now implemented the following: Two-step support for pawns going on their first move. Logic so that pawns cannot capture pieces directly in front of them. Support for pawns capturing pieces only on their front diagonals. Follow along if you want to see if I ever get out of this!!! :D
Added basic promotions when the pawns go to the opposite side (for now they default to only queen promotions, more coming soon) and right now started working on the final boss of chess programming… Checks and checkmates. Wish me luck!
Finally, I can say that I’ve built chess—fully fledged chess—in Python Turtle. I added check, checks, checkmates, and all the logic that makes them up. I also created a new function called has_legal_moves, which takes one parameter to see if the attacker is white. In total, I defined 11 functions back to back in the Python file. It seems funny, but that’s what was needed. Thank you, every1!
Ships:
I built pure chess inside Python Turtle. The entire idea of making a fully fledged game in Python’s Turtle seemed absurd, but there is tangible proof now. I’m proud of how I handled the piece moving and square highlighting code snippets; those were really fun to work on. Here are some tests you can do to see if my project holds up: Try clicking outside the board to move a piece, and you’ll see that it doesn’t. Try moving a piece outside the board. Try moving kings to squares that opposing pieces see. Try double pushing pawns. Right now, I haven’t added en passant or castling, but a 99% fledged chess game inside Python Turtle is ready for you to play....
|
1793130711.2842731
|
1793217111.2842731
|
|
67984
|
supder by @allenlin0728 | Stardance
|
allenlin0728
|
0
|
0.36
|
0
|
[]
|
[{"post_id": 81116, "ts": "202 [{"post_id": 81116, "ts": "2026-10-19T23:13:05Z", "hours": 0.3614, "text": "Set spooder back up After realizing all my old components were a little fried, I bought replacements on amazon and replaced them. Additionally, I put in the esp32-s3 dev board, however I had to use double sided tape to mount it because the screw holes for the raspbery pi did not fit the dev board. after I finished this, I rewired the entire thing. However, I realised I rewired it wrong, where I made one leg have three pins in sequential order, like where FRH was 0, FRF was 1, and FRT was 2, instead of 0, 3, 6. I decided to fix this in code instead of hardware because it was cleaner anyways and easier to do Lastly I had to reroute the new wires for i2c. The accelerometer I bought never arrived so i will not be doing anything PID cause im too stupid and my old one was fried. Also because I don’t have enough time I probably won’t set up the led matrix very well and might not even work, i just want reinbursements for now. tomorrow I want to actually start testing my code and see if i have to still do the stupid homing of all my servos again, also because all my code is in arduino ide, it has not been logged, and I JUST set it up for stardance, but I was told hours do not matter for just hardware reinbursements. hopefully i will finish and not be in debt anymore"}]...
|
Title: supder by @allenlin0728 | Stardance
Devlog Title: supder by @allenlin0728 | Stardance
Devlogs:
Set spooder back up After realizing all my old components were a little fried, I bought replacements on amazon and replaced them. Additionally, I put in the esp32-s3 dev board, however I had to use double sided tape to mount it because the screw holes for the raspbery pi did not fit the dev board. after I finished this, I rewired the entire thing. However, I realised I rewired it wrong, where I made one leg have three pins in sequential order, like where FRH was 0, FRF was 1, and FRT was 2, instead of 0, 3, 6. I decided to fix this in code instead of hardware because it was cleaner anyways and easier to do Lastly I had to reroute the new wires for i2c. The accelerometer I bought never arrived so i will not be doing anything PID cause im too stupid and my old one was fried. Also because I don’t have enough time I probably won’t set up the led matrix very well and might not even work, i just want reinbursements for now. tomorrow I want to actually start testing my code and see if i have to still do the stupid homing of all my servos again, also because all my code is in arduino ide, it has not been logged, and I JUST set it up for stardance, but I was told hours do not matter for just hardware reinbursements. hopefully i will finish and not be in debt anymore...
|
1793116297.889785
|
1793721097.889785
|
|
44323
|
FormCheck by @cluelessfr | Stardance
|
cluelessfr
|
0
|
52.92
|
0
|
[]
|
[{"post_id": 81112, "ts": "202 [{"post_id": 81112, "ts": "2026-10-19T22:36:03Z", "hours": 6.5611, "text": "Devlog 14: I started preparing for the feedback. I am planning to mostly give feedback on timing/tempos, so I started adding some functions for that. The first thing I did was correct the scaling of video coordinates before calculating knee angles to ensure higher accuracy. Then I added a lowering-time estimator that looks for sustained movement instead of just angles at timestamps. I ensured to account for rectangular frames, leg switches, observation gaps, and timing integration. All tests passed. The next steps are actually providing feedback from this data, and then connecting this to the UI."}, {"post_id": 77869, "ts": "2026-10-08T16:33:46Z", "hours": 3.5961, "text": "Devlog 13: This devlog was mostly some final touches. I did add 3 things, though. The first of which is a frame progress display on the UI. This shows the user of many of the total frames have been processed after they start the analysis. Second, I added some text that was a disclaimer on the limitations of the analysis. The third thing I added was a reset between long gaps. So if the squat takes too long to get to the next state, then the detection resets and it starts looking for another starting squat. The first test I did was that I sampled different repetition intervals to determine which had the most detail but didn’t take too long to process. I landed on sampling frames every 250 Ms. Then I tested all the different UI states on the emulator using different videos. I then added tests for all the new features that I just mentioned to you. The next step is probably going to be actually implementing feedback."}, {"post_id": 75113, "ts": "2026-09-29T05:01:41Z", "hours": 8.2819, "text": "Devlog 12: I added some more meaningful upgrades this time. I added functionality so that the app could detect a real squat repetition. This works by combining this with the pose sequence analyzer, which contains poses and their timestamps. By mapping the angle formed by the hip, knee, and ankle at different intervals of the video, the app is able to detect if the angle got gradually lower, then gradually got higher. If these angles pass the thresholds needed to create a straight leg angle and a squatted down angle, then we can conclude that a squat repetition was performed. To accomplish this I added many different smaller functions, then combined them all together to get the final result. This allowed me to test each part individually to ensure they all worked. I also added this to the UI of the app, which you can see in the image. Finally I added real video validation, which basically means that I tested the current state of the app with a real video of a person doing a squat. The app was able to successfully recognize the repetition of the squat."}, {"post_id": 70842, "ts": "2026-09-19T21:02:38Z", "hours": 6.1419, "text": "Devlog 11: Now I added a few things. First I added a function that can sample frames at different intervals and stores the MediaPipe result with the timestamp of the frame. I also added hip/knee/ankle extraction for both sides and also confidence-based leg section. Codex wrote a few methods (2-3), and I wrote the rest. I then added timestamped knee angle measurements, and also connected the leg selector to the angle calculator. Finally, I added a sequence analyzer that keeps the valid measurements and skips the unclear frames. I added test for all these functions. There is a little more than this, but this is the gist of what I have been working on right now."}, {"post_id": 65756, "ts": "2026-09-11T03:20:19Z", "hours": 6.9169, "text": "Devlog 10: This time was some meaningful upgrades. First of all I added a function to extract a bitmap from a video given a timestamp. Then I added a separate function in order to convert that bitmap into an MPImage. This allows me to access it from anywhere. Finally I created a new class that combines the decoding, conversion, and pose processing tasks into one pipeline. I also added tests for all of these. Currently only one frame processes, but soon I will start to improve this."}, {"post_id": 63969, "ts": "2026-09-08T01:55:46Z", "hours": 8.5042, "text": "Devlog 09: Now the app stores the selected video’s Uri in an activity field, meaning it can be accessed for later processing instead of only the status text. Also frame timestamps can now be generated. This means that you can input the video duration as well as the interval that you want the timestamps to be generated, then you will get a set of timestamps for the video. The video metadata can also now be read. It uses Android’s MediaMetadataRetriever to open the video. Currently only the duration of the video can be retrieved, but later you will be able to decode individual frames. Finally I added tests for all of these. For the metadata retriever specifically I uploaded a test video to confirm that I could get an accurate measurement. Also updated the documentation."}, {"post_id": 47722, "ts": "2026-08-15T20:26:10Z", "hours": 3.5783, "text": "Devlog 08: I finally added the MediaPipe dependency, as well as a few functions. First of all I also added the Pose Landmarker Full model for it to actually detect poses. Then I created a manager function to initialize and close MediaPipe. I then added a function that could process an already decoded video frame with a timestamp using MediaPipe. I added tests for all of these to ensure they work when the app runs, and updated all the logs."}, {"post_id": 46085, "ts": "2026-08-13T01:19:04Z", "hours": 1.9819, "text": "Devlog 07: I changed the emulator from being on device to remote via Firebase. This allows me to test the app cleanly without lagging my computer. The only problem is I get a limited 30 minutes per month, so I have to use them wisely. I also updated the Point2D function to reject non-finite points. This prevents errors on the future. I also added a class that combines all the other functionality into one. It returns an OptionalDouble, which is useful when you don’t know if you are going to get a result. This new function accepts three LandmarkObservations, Then if the result is valid, it returns the angle degrees between the points. If not, it returns nothing."}, {"post_id": 44348, "ts": "2026-08-10T01:32:26Z", "hours": 1.3133, "text": "Devlog 06: I added the landmark quality gate, which helps determine whether the visibility and presence of the point meet the minimum requirements. If it does, then it passes. If it doesn’t, then the point fails. From here there are two options, either the app tries to find another point, or the app says it cannot reliably determine your form from that video I also added the AI use log. I mainly did this because I will be submitting this to the Congressional App Challenge."}, {"post_id": 44307, "ts": "2026-08-09T23:40:20Z", "hours": 1.0214, "text": "Devlog 05: Today I added landmark storage and reliability tests. What this is is basically a new object that can store a point, its visibility, and presence. The point is the point itself, the visibility says how well the object can be seen, and the presence determines how much of the object is actually in the video frame. These three factors help determine how well the video can be analyzed. If the video cannot be analyzed well enough, then FormCheck will send a message saying so (This hasn’t been implemented yet, but this is the basic idea of why this is there in the first place)."}, {"post_id": 43747, "ts": "2026-08-09T05:12:50Z", "hours": 1.1897, "text": "Devlog 04: I added functions for measuring the angle based on three points (the joints). Basically how this works is that it first takes in three points, the first endpoint, a vertex, and a second endpoint. Then it uses the dot product formula with the two vectors to find the angle between the two lines."}, {"post_id": 43080, "ts": "2026-08-08T04:48:16Z", "hours": 1.5214, "text": "Devlog 03: I added the file picking dialogue. Now whenever you click the “Select a video” button the android folder picker opens and you can choose a video. I think next is working on the actual pose detection logic."}, {"post_id": 42951, "ts": "2026-08-07T22:46:59Z", "hours": 1.3858, "text": "Devlog 02: I added the initial video selection interface. I added some text to describe the app, and a button for the user to be able to select a video to upload. Currently, the button does not do anything. Next I will have to continue working on the button and the actual pose estimation part of this."}, {"post_id": 41569, "ts": "2026-08-05T21:12:03Z", "hours": 0.9278, "text": "Devlog 01: This is the first devlog of the FormCheck project, an Android app that helps you check your form during workouts. Currently I just set everything up in Android Studio, connected Hackatime, and set up GitHub."}]...
|
Title: FormCheck by @cluelessfr | Stardance
Devlo Title: FormCheck by @cluelessfr | Stardance
Devlogs:
Devlog 01: This is the first devlog of the FormCheck project, an Android app that helps you check your form during workouts. Currently I just set everything up in Android Studio, connected Hackatime, and set up GitHub.
Devlog 02: I added the initial video selection interface. I added some text to describe the app, and a button for the user to be able to select a video to upload. Currently, the button does not do anything. Next I will have to continue working on the button and the actual pose estimation part of this.
Devlog 03: I added the file picking dialogue. Now whenever you click the “Select a video” button the android folder picker opens and you can choose a video. I think next is working on the actual pose detection logic.
Devlog 04: I added functions for measuring the angle based on three points (the joints). Basically how this works is that it first takes in three points, the first endpoint, a vertex, and a second endpoint. Then it uses the dot product formula with the two vectors to find the angle between the two lines.
Devlog 05: Today I added landmark storage and reliability tests. What this is is basically a new object that can store a point, its visibility, and presence. The point is the point itself, the visibility says how well the object can be seen, and the presence determines how much of the object is actually in the video frame. These three factors help determine how well the video can be analyzed. If the video cannot be analyzed well enough, then FormCheck will send a message saying so (This hasn’t been implemented yet, but this is the basic idea of why this is there in the first place).
Devlog 06: I added the landmark quality gate, which helps determine whether the visibility and presence of the point meet the minimum requirements. If it does, then it passes. If it doesn’t, then the point fails. From here there are two options, either the app tries to find another point, or the app says it cannot reliably determine your form from that video I also added the AI use log. I mainly did this because I will be submitting this to the Congressional App Challenge.
Devlog 07: I changed the emulator from being on device to remote via Firebase. This allows me to test the app cleanly without lagging my computer. The only problem is I get a limited 30 minutes per month, so I have to use them wisely. I also updated the Point2D function to reject non-finite points. This prevents errors on the future. I also added a class that combines all the other functionality into one. It returns an OptionalDouble, which is useful when you don’t know if you are going to get a result. This new function accepts three LandmarkObservations, Then if the result is valid, it returns the angle degrees between the points. If not, it returns nothing.
Devlog 08: I finally added the MediaPipe dependency, as well as a few functions. First of all I also added the Pose Landmarker Full model for it to actually detect poses. Then I created a manager function to initialize and close MediaPipe. I then added a function that could process an already decoded video frame with a timestamp using MediaPipe. I added tests for all of these to ensure they work when the app runs, and updated all the logs.
Devlog 09: Now the app stores the selected video’s Uri in an activity field, meaning it can be accessed for later processing instead of only the status text. Also frame timestamps can now be generated. This means that you can input the video duration as well as the interval that you want the timestamps to be generated, then you will get a set of timestamps for the video. The video metadata can also now be read. It uses Android’s MediaMetadataRetriever to open the video. Currently only the duration of the video can be retrieved, but later you will be able to decode individual frames. Finally I added tests for all of these. For the metadata retriever specifically I uploaded a test video to confirm that I could get an accurate measurement. Also updated the documentation.
Devlog 10: This time was some meaningful upgrades. First of all I added a function to extract a bitmap from a video given a timestamp. Then I added a separate function in order to convert that bitmap into an MPImage. This allows me to access it from anywhere. Finally I created a new class that combines the decoding, conversion, and pose processing tasks into one pipeline. I also added tests for all of these. Currently only one frame processes, but soon I will start to improve this.
Devlog 11: Now I added a few things. First I added a function that can sample frames at different intervals and stores the MediaPipe result with the timestamp of the frame. I also added hip/knee/ankle extraction for both sides and also confidence-based leg section. Codex wrote a few methods (2-3), and I wrote the rest. I then added timestamped knee angle measurements, and also connected the leg selector to the angle calculator. Finally, I added a sequence analyzer that keeps the valid measurements and skips the unclear frames. I added test for all these functions. There is a little more than this, but this is the gist of what I have been working on right now.
Devlog 12: I added some more meaningful upgrades this time. I added functionality so that the app could detect a real squat repetition. This works by combining this with the pose sequence analyzer, which contains poses and their timestamps. By mapping the angle formed by the hip, knee, and ankle at different intervals of the video, the app is able to detect if the angle got gradually lower, then gradually got higher. If these angles pass the thresholds needed to create a straight leg angle and a squatted down angle, then we can conclude that a squat repetition was performed. To accomplish this I added many different smaller functions, then combined them all together to get the final result. This allowed me to test each part individually to ensure they all worked. I also added this to the UI of the app, which you can see in the image. Finally I added real video validation, which basically means that I tested the current state of the app with a real video of a person doing a squat. The app was able to successfully recognize the repetition of the squat.
Devlog 13: This devlog was mostly some final touches. I did add 3 things, though. The first of which is a frame progress display on the UI. This shows the user of many of the total frames have been processed after they start the analysis. Second, I added some text that was a disclaimer on the limitations of the analysis. The third thing I added was a reset between long gaps. So if the squat takes too long to get to the next state, then the detection resets and it starts looking for another starting squat. The first test I did was that I sampled different repetition intervals to determine which had the most detail but didn’t take too long to process. I landed on sampling frames every 250 Ms. Then I tested all the different UI states on the emulator using different videos. I then added tests for all the new features that I just mentioned to you. The next step is probably going to be actually implementing feedback.
Devlog 14: I started preparing for the feedback. I am planning to mostly give feedback on timing/tempos, so I started adding some functions for that. The first thing I did was correct the scaling of video coordinates before calculating knee angles to ensure higher accuracy. Then I added a lowering-time estimator that looks for sustained movement instead of just angles at timestamps. I ensured to account for rectangular frames, leg switches, observation gaps, and timing integration. All tests passed. The next steps are actually providing feedback from this data, and then connecting this to the UI....
|
1792583275.8698568
|
1793188075.8698568
|
|
35722
|
GBWeb by @Doodl0 | Stardance
|
Doodl0
|
0
|
50.76
|
0
|
[]
|
[{"post_id": 81110, "ts": "202 [{"post_id": 81110, "ts": "2026-10-19T22:32:59Z", "hours": 6.6672, "text": "Devlog 10 - (basically) Finishing the CPU After the last devlog, I did some cleaning up with the graphics, which included fixing the last scanline not being rendered, and also adding a screen before the ROM is loaded, telling the user which key to press to load the ROM. I also set up some functions to allow easier access to the I/O registers related to the PPU, such as the x and y scroll and the control flags. Afterwards, I felt a bit burnt out of the PPU, so I went back to finish off most of the CPU. This started with implementing the CFL, CPL, CF, CPL, SCF, SLA, SRA, RL, RLA, RLC, RRC, RLCA, and RRCA instructions, most of which are bit rotations, so once I had a few implemented, it got easier to add the rest. This allowed me to pass CPU test ROM 9. Then, I implemented the rest of the CB prefix instructions, which were all bit related; BIT, RES and SET, which allowed me to pass ROM 10 After those, I implemented some stack pointer related instructions; ADD SP,d and LD HL SP+d, which then allowed me to pass ROM 3 Finally, I added DAA. This one is a bit more unique, as it is designed to convert the result of an add or subtract with binary coded decimal numbers, into a binary coded decimal number. This gets a bit complicated, but I used these resources ( Demystifying the GameBoy/SM83’s DAA Instruction and the RGBDS assembler/linker instruction documentation ) to implement this properly, allowing me to also pass test ROM 1 With a semi-functioning PPU, and some fixes, I was also able to boot into the copyright screen of Tetris for the first time, although I couldn’t get any further without implementing interrupts. The image below shows that, and my emulator passing all of the previously mentioned test ROMs. The only test ROM I haven’t passed yet is the 2nd one, which also requires interrupts."}, {"post_id": 80353, "ts": "2026-10-17T11:17:07Z", "hours": 4.04, "text": "Devlog 9 - Basic graphics (finally) I’ve finally gotten some basic picture processing unit (PPU) functionality implemented into the emulator, which will hopefully make debugging a lot easier going forward. Firstly, to implement this, I had to move the timing logic out of cpu.c and into cycles.c . This was so that, when the loop calls a CPU step, it also calls a PPU step at the same time. I also refactored some of the cycle functions and removed the ones that were no longer being used Then, I implemented the timing code for the PPU. This part and the actual rendering were mostly based on this tutorial series that shows you how to make a GB emulator in javascript, which I based my C code on. Basically, the PPU runs on the clock as the CPU, and a ‘dot’ on the PPU is equal to a T-cycle on the CPU. The PPU renders progressively, like a CRT television, and so also has modes to move the nonexistent electron beam down and back to the start of a scanline before it continutes rendering, known as VBLANK and HBLANK, (vertical and horizontal blank). The Pan Docs were also quite helpful for understanding the basic functionality, although the tutorial was useful to understand the programmatic side. The PPU also has 2 other modes, used for scanning the Object Attribute Memory (OAM) and actually drawing, and all 4 modes have a precise amount of dots that they run for. In terms of actual rendering, the Gameboy doesn’t have a full framebuffer, and instead uses different tiles to create a full image. I implemented a function that, when the CPU writes to VRAM, also updates the data in a separate tileset variables, for easier access in the render pipeline. Each tile is 16 bytes, with 2 bits per pixel colour depth, and 8 x 8 pixels per tile. As the Gameboy renders progressively, I then implemented the function to draw a scanline to the screen, based on the tile data in the background layer. The afformentioned tutorial series helped a lot here, as the tiles need to have a specific offset and mapping applied which would be quite hard to figure out on my own. Then, that function calls a draw pixel function for each each of the 160 pixels in a scanline, which writes the corresponding colour from the palette to an SDL_Surface as the framebuffer. Once the frame is finished, the surface is converted into a texture, which is then scaled to fit the screen size and rendered, with another frame being made afterwards. Below you can see the screen of the previously mentioned blargg’s test ROM 7."}, {"post_id": 79179, "ts": "2026-10-12T22:23:50Z", "hours": 6.5228, "text": "Devlog 8 - Organisation, and timing, again Ok, so this didn’t exactly go how I wanted (again), but most of this devlog time was spent fixing the past devlog, and organising code in a better way Firstly: I realised that before, my timing code checked based on M-cycles, rather than T-cycles. There’s a specific reason for the distinction, but for now all you need to know is that there’s 4 T-cycles in an M-cycle, so my code was targeting a 4x faster speed. I changed this to be correct, but changed it again later so it doesn’t really matter. Then, I cleaned up a lot of cpu.c , changing functions to return values directly rather than using a local variable first, pre-calculating some variables, et cetera. This was an attempt to speed up the CPU, as I was having a bit of trouble meeting the target speed with debug builds (mentioned in devlog 7), but again, this was a bit pointless because I changed the way the timing worked later. While doing this, I also replaced all of the numerical types with their stdint.h counterparts; for example, an unsigned char became a Uint8 (SDL has macros for the stdint types, so they have a slight naming difference from standard C in my code). This was mainly done for specificity and some Hail Mary for performance (although fruitless), and should make the code at least a bit more portable and easy to maintain. I also implemented a couple of new instructions; RST and SWAP. RST effectively calls from a set of pre-specified addresses , and SWAP just swaps the upper and lower 8 bits in a byte, so these weren’t too hard. I also had to fix some bugs with the flags register´s value after an SBC A instruction, which admittedly did take me a while to fix because I basically banged my head against the wall to fix it. The main change in this devlog was switching the timing system (again). Previously, the CPU ran one instruction for each loop of the SDL_AppIterate function. After reading the documentation and realising that this function is supposed to run each frame, I realised that I was causing all of my speed issues by only doing one cycle per iteration. Instead, the code now does as many instructions as it can until it has run enough T-cycles for a full frame to render (70224). It then renders (to be implemented), and moves on to the next iteration. This is way more performant, and has the added benefit of being more cross-platform, as SDL specifies that sometimes AppIterate may only run at the refresh rate on some devices. Tbh, this took me a while, maybe too long, to conceptualise and implement, and basically made all of the time on the other timing system wasted, but in the end it was worth it for a much better system. You can see the uncapped FPS (in a debug build mind you) here, although when actually playing games, the framerate will be locked to around 60 FPS. Finally, there was a few more miscellaneous changes: copying a ROM file into memory uses memcpy instead of a loop, which may or may not be faster; memory is now a union of smaller arrays of memory banks, for each function, such as work ram (WRAM), high ram (HRAM), ROM banks 0-n and etc; and lastly, some register code has been moved out of cpu.c for organisation."}, {"post_id": 77175, "ts": "2026-10-05T22:31:28Z", "hours": 5.0036, "text": "Devlog 7 - Timing The next main thing I implemented were some more instructions - namely SRL, RR, RRA and ADD HL. These weren’t too hard, as the first 3 are similar to regular bit shifts, and ADD HL is just adding. While I was working on these, I also fixed some bugs with the existing instructions This allowed me to finally pass the cpu_instrs 6 test ROM, which although not really a massive goal, did help to signify the progress I had made. I then moved onto the 7th test, for which I implemented some load functions for the stack pointer register The biggest improvement of this devlog was getting everything timing correctly. The Gameboy is supposed to run at 4.19 MHz and 59.7 FPS, but at the time, the emulator was just running as fast as possible. To solve this, I first made each instruction call a function to add the amount of cycles it takes to a unwaitedCycles variable. Then, I saved the current time in nanoseconds since the program started (provided by the SDL_GetTicksNS() function) into a variable at the start of an instruction’s execution. After the instruction is executed, a function is then called that finds the expected execution time the by doing the amount of cycles multiplied by the period of 4.19MHz (about 238 nanoseconds). This expected time is then subtracted from the actual time, which is the start time stored previously subtracted from the current time. The program is then delayed by the result, which should keep the CPU at around 4.19MHz, unless it takes too long. I did have some concerns with my emulator’s performance, as when running as a debug build, it wasn’t running nearly fast enough to reach 4.19MHz, but after compiling as a release build with optimisation, it was much faster and ran under the required time. However, I’m not sure how consistent this will be between devices, so I may have to optimise later Finally, I added a similar function to limit the FPS to around 60 (technically 59.7), which just checks the time since the last frame was rendered, and if it hasn’t been long enough, it continues CPU execution and doesn’t render. You can see the frame limit working in the screenshot, where the frametime is a consistent 16.8 ms and the FPS is locked to 60, as opposed to before where it was unlimited. (Ignore the text, it doesn’t change yet to show a ROM has been loaded)"}, {"post_id": 76068, "ts": "2026-10-02T07:40:09Z", "hours": 5.4931, "text": "Devlog 6 - An unfortunate amount of debugging This devlog is probably going to be shorter than the other, simply because I haven’t done as much as I hoped The main reason for this is that I got completely stuck on a bug, and wasted so much time trying to find it. I first noticed this bug when I got this error message (screenshot) in gameboy-doctor, with a mismatch with a load from memory not being the right value. This got me so stuck, because I didn’t know where to find when the memory was supposed to be written to, so I was basically blindly guessing what was wrong with any previous loads or register writes. Eventually, I caved and asked for help online, and I got my answer after asking on the EmuDev subreddit , where I found out it was an issue with my implementation of the LD (FF00+u8), A instructions, where I wrote LD_n16_n8((0xFF00 + address + 1), registers.a); instead of the correct LD_n16_n8((0xFF00 + ReadMemory(address + 1)), registers.a); so basically any writes to memory using that function were in the complete wrong location. Stupid mistake on my part, and I wasted way too much time on it. I also did implement some basic instructions, like EI and RETI. EI simply enables the emi register, and RETI basically just does that, then calls RET to return from a subroutine. In addition, I also restructured quite a lot of the code, as too much was piling up in the cpu.c file, and I also renamed quite a few functions to follow a Component_Function syntax, so it was easier to tell where they were located in the code"}, {"post_id": 73310, "ts": "2026-09-24T20:22:22Z", "hours": 6.5411, "text": "Devlog 5 - Adding instructions, the stack and lots of debugging After the last devlog, the first think I did was implement some more instructions, namely the jump instructions, and the increment and decrement functions. Luckily these were pretty simple; all the jumps do are set the program counter (effectively the next instruction) to a specified value, and the increment and decrement are pretty self explanatory, increasing or decreasing a register or memory byte by 1; After this, I started implementing the stack. The stack is a section of memory that is ordered, with values being written to it (pushed) and read off of it (popped). You must read the “top” value, meaning the most recently pushed, which is then removed and the next highest is the next available to read. This wasn’t too hard, although I did have to introduce a new register, the stack pointer (sp). While I was at it, I also implemented load functions, which load data into a specified memory byte or register. After realising it would cause issues down the line, I walked back my previous decision to make the flags register a struct of booleans, and instead made it a single byte with 4 bits representing the 4 flags, making it more accurate. I also made some functions to easily set or reset each flag, rather than use bitwise operations everywhere. Finally, I implemented logging support, so that I could use Gameboy Doctor , a brilliant debugging script that reads a log file from your emulator with a known ROM, and compares it to the correct result. All you have to do is write a line to a log file with all the register values and some memory bytes after each instruction, and it automatically tells you where the first error is, what register or piece of memory is wrong, and even the last instruction to give you a hint as to the problem. This didn’t take much time to implement, but I did spend a considerable amount of time debugging, as previously I hadn’t actually got a way to check that my functions worked correctly (which is why this devlog has quite a few more hours on it). You can see an example of a error in the screenshot; I intentionally changed the SUB instruction to add instead because I forgot to take screenshots of the actual errors 🥀. Next time, I want to implement more of the CPU, especially more complex behaviours like halting and interrupts, and also implement some of the graphics, so that the games can actually be seen visually."}, {"post_id": 71263, "ts": "2026-09-20T15:22:40Z", "hours": 5.355, "text": "Devlog 4 - Memory mapping and instruction stepping The next thing I worked on was getting a basic function set up for stepping through instructions and calling the execute function. To do this, I also had to make a program counter, which is a 16 bit register storing the address of the next instruction. Currently, the step function is pretty barebones, but it simply calls the execute function, passes it the PC as a parameter, and then sets the program counter to be the returned address. The execute function has also been modified, meaning it reads the instruction from memory (more on that later) rather than being passed it directly, and return the address plus 1 to 3 bytes, depending on the instruction that was executed. The next bit I made was the Game Boy’s memory. This is simply an char array with 64K values, equivalent to 64KiB of memory. Then, any address can be accessed simply by accessing the array value at an address. After working on the other parts of the CPU, I went back to working on some instructions, implementing the rest of the disassembly tables , including the condition call table, which checks the flags register before executing an instruction. I also implemented some of the instructions that require inputting an address in memory to use instead of a number or register. Finally, I also worked on some quality of life features. First, I made a function to replace missing functions, which simply sends an error message with the function name, and quits with an error code. Secondly, I made / edited some functions to actually move the loaded ROM file into the main GB memory rather than the program memory. I had a little trouble troubleshooting this, as I didn’t at first have a reliable way to verify that the data had been copied successfully, and after I did, I still had trouble with pointers, as I am still pretty new to C’s manual memory management (I usually just keep things in the stack, or have global variables that will persist throughout the program’s lifetime.). I also added basic functionality for loading a ROM on desktop rather than the web, but it doesn’t use the system dialog yet, only loading a rom.gb file in the executable directory. After everything was working, I added a debug message to send the ROM’s header title, showing that it actually works. You can see this in the screenshot. It sends the message twice, once when the file is loaded, and once when it’s moved to GB memory, which I did to make sure that the transfer didn’t mess up the data accidentally."}, {"post_id": 68852, "ts": "2026-09-15T21:21:15Z", "hours": 3.9186, "text": "Devlog 3 - Algorithmically parsing opcodes After getting things functioning well in the browser, I wanted to move onto the actual emulator bit of the project. Firstly, I looked at a bunch of examples and info, mostly compiled from gbdev.io . At first, I followed both the development blog of Cinoop and the guide DMG-01 . I used these guides to first write the register struct, which is basically just a struct of bytes (in char form as I’m using C), as well as the flags register, which I took inspiration from DMG-01 by making it primarily a struct of 4 bools rather than a binary value, for easier setting. I also wrote functions for converting this into binary though so that I didn’t lose compatibility. Next, I used Decoding Gameboy Z80 Opcodes to write an algorithmic way to decide which instruction correlates to an opcode, instead of a large switch case (although admittedly it does have a lot of nested switch cases). Finally, I added in the “alu” table instructions as the first few instructions, which also happened to be quite simple as they were basically just addition, subtraction and some bitwise operations. Next, I plan to fill in the remaining instructions, add them all to the algorithm and get started on the actual control flow for the CPU"}, {"post_id": 47709, "ts": "2026-08-15T20:02:53Z", "hours": 3.5792, "text": "Devlog 2 - SDL3 and File Loading After setting up the project basics, I spent some time on another project, also using SDL, but a desktop app. This used SDL3 instead of SDL2, which is default for Emscripten. I decided to switch this project to SDL3 as well, since I feel more comfortable with it and it has some features like main callbacks that should help with Emscripten. Instead of using the SDL library bundled with Emscripten, I instead added the SDL3 repo as a submodule, so I should be able to make a desktop version of the program later relatively easily. After switching to SDL3, I researched how to load a file from the user in the web browser into the webasm program. I found a StackOverflow thread that helped a lot, which included a link to a more developed header library, however I opted not to use this, as it was C++ based, and I wanted to remain using C. Instead I just implemented the bits I needed from the thread in C, which wasn’t too hard, although included some JS, which I’ve never used and some pointers which I made a few stupid mistakes with, causing me to think it didn’t work for a while. Finally, I also added a keybind to open the file dialog, which currently is tab, and also made sure that the keys only register on the down press, and not the up as well."}, {"post_id": 29056, "ts": "2026-07-15T18:26:42Z", "hours": 3.6419, "text": "Devlog 1 - Setup and basic input I took a while to find a toolchain that I liked, but I’ve settled on using Emscripten, and it’s built in version of SDL2. Emscripten is a library and compiler for CXX that allows direct compilation to web assembly and JavaScript, also allowing graphics and input with SDL. This makes it a lot easier for me to write the program, as I don’t really need to know as much JS or find multiple different libraries to use. Originally I wanted to use SDL3, but I couldn’t get the input to work automatically with Emscripten, and with this being my first major C and web project, I decided to take the easier path and simply use the fully supported SDL2. I also spent some time setting up a simple CMake system and some scripts for building and running, which took me a while to figure out, especially as I was also learning Emscripten for the first time, however it will hopefully save me time in the long run. Just to test my implementation, I set up some keybinds for the eventual emulator to come. I just used SDL scancodes to check for the key press, and they printed the corresponding Gameboy button to the output. You can see this in the video below. For simplicity, I decided to just set keys in code, with WASD being the dpad, J being A, K being B, Return being Start and Backspace being select."}]...
|
Title: GBWeb by @Doodl0 | Stardance
Devlogs:
Devl Title: GBWeb by @Doodl0 | Stardance
Devlogs:
Devlog 1 - Setup and basic input I took a while to find a toolchain that I liked, but I’ve settled on using Emscripten, and it’s built in version of SDL2. Emscripten is a library and compiler for CXX that allows direct compilation to web assembly and JavaScript, also allowing graphics and input with SDL. This makes it a lot easier for me to write the program, as I don’t really need to know as much JS or find multiple different libraries to use. Originally I wanted to use SDL3, but I couldn’t get the input to work automatically with Emscripten, and with this being my first major C and web project, I decided to take the easier path and simply use the fully supported SDL2. I also spent some time setting up a simple CMake system and some scripts for building and running, which took me a while to figure out, especially as I was also learning Emscripten for the first time, however it will hopefully save me time in the long run. Just to test my implementation, I set up some keybinds for the eventual emulator to come. I just used SDL scancodes to check for the key press, and they printed the corresponding Gameboy button to the output. You can see this in the video below. For simplicity, I decided to just set keys in code, with WASD being the dpad, J being A, K being B, Return being Start and Backspace being select.
Devlog 2 - SDL3 and File Loading After setting up the project basics, I spent some time on another project, also using SDL, but a desktop app. This used SDL3 instead of SDL2, which is default for Emscripten. I decided to switch this project to SDL3 as well, since I feel more comfortable with it and it has some features like main callbacks that should help with Emscripten. Instead of using the SDL library bundled with Emscripten, I instead added the SDL3 repo as a submodule, so I should be able to make a desktop version of the program later relatively easily. After switching to SDL3, I researched how to load a file from the user in the web browser into the webasm program. I found a StackOverflow thread that helped a lot, which included a link to a more developed header library, however I opted not to use this, as it was C++ based, and I wanted to remain using C. Instead I just implemented the bits I needed from the thread in C, which wasn’t too hard, although included some JS, which I’ve never used and some pointers which I made a few stupid mistakes with, causing me to think it didn’t work for a while. Finally, I also added a keybind to open the file dialog, which currently is tab, and also made sure that the keys only register on the down press, and not the up as well.
Devlog 3 - Algorithmically parsing opcodes After getting things functioning well in the browser, I wanted to move onto the actual emulator bit of the project. Firstly, I looked at a bunch of examples and info, mostly compiled from gbdev.io . At first, I followed both the development blog of Cinoop and the guide DMG-01 . I used these guides to first write the register struct, which is basically just a struct of bytes (in char form as I’m using C), as well as the flags register, which I took inspiration from DMG-01 by making it primarily a struct of 4 bools rather than a binary value, for easier setting. I also wrote functions for converting this into binary though so that I didn’t lose compatibility. Next, I used Decoding Gameboy Z80 Opcodes to write an algorithmic way to decide which instruction correlates to an opcode, instead of a large switch case (although admittedly it does have a lot of nested switch cases). Finally, I added in the “alu” table instructions as the first few instructions, which also happened to be quite simple as they were basically just addition, subtraction and some bitwise operations. Next, I plan to fill in the remaining instructions, add them all to the algorithm and get started on the actual control flow for the CPU
Devlog 4 - Memory mapping and instruction stepping The next thing I worked on was getting a basic function set up for stepping through instructions and calling the execute function. To do this, I also had to make a program counter, which is a 16 bit register storing the address of the next instruction. Currently, the step function is pretty barebones, but it simply calls the execute function, passes it the PC as a parameter, and then sets the program counter to be the returned address. The execute function has also been modified, meaning it reads the instruction from memory (more on that later) rather than being passed it directly, and return the address plus 1 to 3 bytes, depending on the instruction that was executed. The next bit I made was the Game Boy’s memory. This is simply an char array with 64K values, equivalent to 64KiB of memory. Then, any address can be accessed simply by accessing the array value at an address. After working on the other parts of the CPU, I went back to working on some instructions, implementing the rest of the disassembly tables , including the condition call table, which checks the flags register before executing an instruction. I also implemented some of the instructions that require inputting an address in memory to use instead of a number or register. Finally, I also worked on some quality of life features. First, I made a function to replace missing functions, which simply sends an error message with the function name, and quits with an error code. Secondly, I made / edited some functions to actually move the loaded ROM file into the main GB memory rather than the program memory. I had a little trouble troubleshooting this, as I didn’t at first have a reliable way to verify that the data had been copied successfully, and after I did, I still had trouble with pointers, as I am still pretty new to C’s manual memory management (I usually just keep things in the stack, or have global variables that will persist throughout the program’s lifetime.). I also added basic functionality for loading a ROM on desktop rather than the web, but it doesn’t use the system dialog yet, only loading a rom.gb file in the executable directory. After everything was working, I added a debug message to send the ROM’s header title, showing that it actually works. You can see this in the screenshot. It sends the message twice, once when the file is loaded, and once when it’s moved to GB memory, which I did to make sure that the transfer didn’t mess up the data accidentally.
Devlog 5 - Adding instructions, the stack and lots of debugging After the last devlog, the first think I did was implement some more instructions, namely the jump instructions, and the increment and decrement functions. Luckily these were pretty simple; all the jumps do are set the program counter (effectively the next instruction) to a specified value, and the increment and decrement are pretty self explanatory, increasing or decreasing a register or memory byte by 1; After this, I started implementing the stack. The stack is a section of memory that is ordered, with values being written to it (pushed) and read off of it (popped). You must read the “top” value, meaning the most recently pushed, which is then removed and the next highest is the next available to read. This wasn’t too hard, although I did have to introduce a new register, the stack pointer (sp). While I was at it, I also implemented load functions, which load data into a specified memory byte or register. After realising it would cause issues down the line, I walked back my previous decision to make the flags register a struct of booleans, and instead made it a single byte with 4 bits representing the 4 flags, making it more accurate. I also made some functions to easily set or reset each flag, rather than use bitwise operations everywhere. Finally, I implemented logging support, so that I could use Gameboy Doctor , a brilliant debugging script that reads a log file from your emulator with a known ROM, and compares it to the correct result. All you have to do is write a line to a log file with all the register values and some memory bytes after each instruction, and it automatically tells you where the first error is, what register or piece of memory is wrong, and even the last instruction to give you a hint as to the problem. This didn’t take much time to implement, but I did spend a considerable amount of time debugging, as previously I hadn’t actually got a way to check that my functions worked correctly (which is why this devlog has quite a few more hours on it). You can see an example of a error in the screenshot; I intentionally changed the SUB instruction to add instead because I forgot to take screenshots of the actual errors 🥀. Next time, I want to implement more of the CPU, especially more complex behaviours like halting and interrupts, and also implement some of the graphics, so that the games can actually be seen visually.
Devlog 6 - An unfortunate amount of debugging This devlog is probably going to be shorter than the other, simply because I haven’t done as much as I hoped The main reason for this is that I got completely stuck on a bug, and wasted so much time trying to find it. I first noticed this bug when I got this error message (screenshot) in gameboy-doctor, with a mismatch with a load from memory not being the right value. This got me so stuck, because I didn’t know where to find when the memory was supposed to be written to, so I was basically blindly guessing what was wrong with any previous loads or register writes. Eventually, I caved and asked for help online, and I got my answer after asking on the EmuDev subreddit , where I found out it was an issue with my implementation of the LD (FF00+u8), A instructions, where I wrote LD_n16_n8((0xFF00 + address + 1), registers.a); instead of the correct LD_n16_n8((0xFF00 + ReadMemory(address + 1)), registers.a); so basically any writes to memory using that function were in the complete wrong location. Stupid mistake on my part, and I wasted way too much time on it. I also did implement some basic instructions, like EI and RETI. EI simply enables the emi register, and RETI basically just does that, then calls RET to return from a subroutine. In addition, I also restructured quite a lot of the code, as too much was piling up in the cpu.c file, and I also renamed quite a few functions to follow a Component_Function syntax, so it was easier to tell where they were located in the code
Devlog 7 - Timing The next main thing I implemented were some more instructions - namely SRL, RR, RRA and ADD HL. These weren’t too hard, as the first 3 are similar to regular bit shifts, and ADD HL is just adding. While I was working on these, I also fixed some bugs with the existing instructions This allowed me to finally pass the cpu_instrs 6 test ROM, which although not really a massive goal, did help to signify the progress I had made. I then moved onto the 7th test, for which I implemented some load functions for the stack pointer register The biggest improvement of this devlog was getting everything timing correctly. The Gameboy is supposed to run at 4.19 MHz and 59.7 FPS, but at the time, the emulator was just running as fast as possible. To solve this, I first made each instruction call a function to add the amount of cycles it takes to a unwaitedCycles variable. Then, I saved the current time in nanoseconds since the program started (provided by the SDL_GetTicksNS() function) into a variable at the start of an instruction’s execution. After the instruction is executed, a function is then called that finds the expected execution time the by doing the amount of cycles multiplied by the period of 4.19MHz (about 238 nanoseconds). This expected time is then subtracted from the actual time, which is the start time stored previously subtracted from the current time. The program is then delayed by the result, which should keep the CPU at around 4.19MHz, unless it takes too long. I did have some concerns with my emulator’s performance, as when running as a debug build, it wasn’t running nearly fast enough to reach 4.19MHz, but after compiling as a release build with optimisation, it was much faster and ran under the required time. However, I’m not sure how consistent this will be between devices, so I may have to optimise later Finally, I added a similar function to limit the FPS to around 60 (technically 59.7), which just checks the time since the last frame was rendered, and if it hasn’t been long enough, it continues CPU execution and doesn’t render. You can see the frame limit working in the screenshot, where the frametime is a consistent 16.8 ms and the FPS is locked to 60, as opposed to before where it was unlimited. (Ignore the text, it doesn’t change yet to show a ROM has been loaded)
Devlog 8 - Organisation, and timing, again Ok, so this didn’t exactly go how I wanted (again), but most of this devlog time was spent fixing the past devlog, and organising code in a better way Firstly: I realised that before, my timing code checked based on M-cycles, rather than T-cycles. There’s a specific reason for the distinction, but for now all you need to know is that there’s 4 T-cycles in an M-cycle, so my code was targeting a 4x faster speed. I changed this to be correct, but changed it again later so it doesn’t really matter. Then, I cleaned up a lot of cpu.c , changing functions to return values directly rather than using a local variable first, pre-calculating some variables, et cetera. This was an attempt to speed up the CPU, as I was having a bit of trouble meeting the target speed with debug builds (mentioned in devlog 7), but again, this was a bit pointless because I changed the way the timing worked later. While doing this, I also replaced all of the numerical types with their stdint.h counterparts; for example, an unsigned char became a Uint8 (SDL has macros for the stdint types, so they have a slight naming difference from standard C in my code). This was mainly done for specificity and some Hail Mary for performance (although fruitless), and should make the code at least a bit more portable and easy to maintain. I also implemented a couple of new instructions; RST and SWAP. RST effectively calls from a set of pre-specified addresses , and SWAP just swaps the upper and lower 8 bits in a byte, so these weren’t too hard. I also had to fix some bugs with the flags register´s value after an SBC A instruction, which admittedly did take me a while to fix because I basically banged my head against the wall to fix it. The main change in this devlog was switching the timing system (again). Previously, the CPU ran one instruction for each loop of the SDL_AppIterate function. After reading the documentation and realising that this function is supposed to run each frame, I realised that I was causing all of my speed issues by only doing one cycle per iteration. Instead, the code now does as many instructions as it can until it has run enough T-cycles for a full frame to render (70224). It then renders (to be implemented), and moves on to the next iteration. This is way more performant, and has the added benefit of being more cross-platform, as SDL specifies that sometimes AppIterate may only run at the refresh rate on some devices. Tbh, this took me a while, maybe too long, to conceptualise and implement, and basically made all of the time on the other timing system wasted, but in the end it was worth it for a much better system. You can see the uncapped FPS (in a debug build mind you) here, although when actually playing games, the framerate will be locked to around 60 FPS. Finally, there was a few more miscellaneous changes: copying a ROM file into memory uses memcpy instead of a loop, which may or may not be faster; memory is now a union of smaller arrays of memory banks, for each function, such as work ram (WRAM), high ram (HRAM), ROM banks 0-n and etc; and lastly, some register code has been moved out of cpu.c for organisation.
Devlog 9 - Basic graphics (finally) I’ve finally gotten some basic picture processing unit (PPU) functionality implemented into the emulator, which will hopefully make debugging a lot easier going forward. Firstly, to implement this, I had to move the timing logic out of cpu.c and into cycles.c . This was so that, when the loop calls a CPU step, it also calls a PPU step at the same time. I also refactored some of the cycle functions and removed the ones that were no longer being used Then, I implemented the timing code for the PPU. This part and the actual rendering were mostly based on this tutorial series that shows you how to make a GB emulator in javascript, which I based my C code on. Basically, the PPU runs on the clock as the CPU, and a ‘dot’ on the PPU is equal to a T-cycle on the CPU. The PPU renders progressively, like a CRT television, and so also has modes to move the nonexistent electron beam down and back to the start of a scanline before it continutes rendering, known as VBLANK and HBLANK, (vertical and horizontal blank). The Pan Docs were also quite helpful for understanding the basic functionality, although the tutorial was useful to understand the programmatic side. The PPU also has 2 other modes, used for scanning the Object Attribute Memory (OAM) and actually drawing, and all 4 modes have a precise amount of dots that they run for. In terms of actual rendering, the Gameboy doesn’t have a full framebuffer, and instead uses different tiles to create a full image. I implemented a function that, when the CPU writes to VRAM, also updates the data in a separate tileset variables, for easier access in the render pipeline. Each tile is 16 bytes, with 2 bits per pixel colour depth, and 8 x 8 pixels per tile. As the Gameboy renders progressively, I then implemented the function to draw a scanline to the screen, based on the tile data in the background layer. The afformentioned tutorial series helped a lot here, as the tiles need to have a specific offset and mapping applied which would be quite hard to figure out on my own. Then, that function calls a draw pixel function for each each of the 160 pixels in a scanline, which writes the corresponding colour from the palette to an SDL_Surface as the framebuffer. Once the frame is finished, the surface is converted into a texture, which is then scaled to fit the screen size and rendered, with another frame being made afterwards. Below you can see the screen of the previously mentioned blargg’s test ROM 7.
Devlog 10 - (basically) Finishing the CPU After the last devlog, I did some cleaning up with the graphics, which included fixing the last scanline not being rendered, and also adding a screen before the ROM is loaded, telling the user which key to press to load the ROM. I also set up some functions to allow easier access to the I/O registers related to the PPU, such as the x and y scroll and the control flags. Afterwards, I felt a bit burnt out of the PPU, so I went back to finish off most of the CPU. This started with implementing the CFL, CPL, CF, CPL, SCF, SLA, SRA, RL, RLA, RLC, RRC, RLCA, and RRCA instructions, most of which are bit rotations, so once I had a few implemented, it got easier to add the rest. This allowed me to pass CPU test ROM 9. Then, I implemented the rest of the CB prefix instructions, which were all bit related; BIT, RES and SET, which allowed me to pass ROM 10 After those, I implemented some stack pointer related instructions; ADD SP,d and LD HL SP+d, which then allowed me to pass ROM 3 Finally, I added DAA. This one is a bit more unique, as it is designed to convert the result of an add or subtract with binary coded decimal numbers, into a binary coded decimal number. This gets a bit complicated, but I used these resources ( Demystifying the GameBoy/SM83’s DAA Instruction and the RGBDS assembler/linker instruction documentation ) to implement this properly, allowing me to also pass test ROM 1 With a semi-functioning PPU, and some fixes, I was also able to boot into the copyright screen of Tetris for the first time, although I couldn’t get any further without implementing interrupts. The image below shows that, and my emulator passing all of the previously mentioned test ROMs. The only test ROM I haven’t passed yet is the 2nd one, which also requires interrupts....
|
1792587169.3497012
|
1793191969.3497012
|
|
70556
|
80mm velocity stack by @kapkupi | Stardance
|
kapkupi
|
0
|
1.42
|
0
|
[]
|
[{"post_id": 81108, "ts": "202 [{"post_id": 81108, "ts": "2026-10-19T22:12:43Z", "hours": 1.42, "text": "Yeah while waiting for a print of another project to finish I decided to make this velocity stack. Nothing to difficult or complicated but useful maybe. Will probably get a crisp 10 stardust from this but who cares. It is not about the money it is about the airflow ,’) … I think it is a tad bit too big There is never too big >.>"}]...
|
Title: 80mm velocity stack by @kapkupi | Stardance Title: 80mm velocity stack by @kapkupi | Stardance
Devlogs:
Yeah while waiting for a print of another project to finish I decided to make this velocity stack. Nothing to difficult or complicated but useful maybe. Will probably get a crisp 10 stardust from this but who cares. It is not about the money it is about the airflow ,’) … I think it is a tad bit too big There is never too big >.>...
|
1793062316.162566
|
1793667116.162566
|
|
69481
|
My awesome macropad! by @FineDust | Stardance
|
FineDust
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T22:33:13Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hackpad From the mission my awesome macropad one of the biger problems I faced was not understanding the software properly witch I was useing. apart from that the rest of the project was more less smooth sailing", "repo": "https://github.com/xxfinedustxx/HackPad", "demo": ""}]...
|
[{"post_id": 81107, "ts": "202 [{"post_id": 81107, "ts": "2026-10-19T22:12:14Z", "hours": 2.7911, "text": "Hackpad Hackpad at 99% done design stage"}, {"post_id": 80753, "ts": "2026-10-18T18:20:21Z", "hours": 9.6578, "text": "Devlog 3 Hi everyone! It’s a lil’ update today. Just made my HackPad CAD case model so it can be checked off the list: PCB layout HackPad case modeled Code & firmware It took about 8 hours of compromising with the CAD software, but the enclosure layout is roughly 90% done. So it’s about time to start cooking up some custom firmware."}, {"post_id": 80009, "ts": "2026-10-15T23:25:18Z", "hours": 4.5928, "text": "2. Devlog ~01:00 16.10.2026 Hey everyone! I’ve just finished the PCB layout for my HackPad project! Next up, I’ll be diving into the 3D design phase for the case. That’s all for this update—if you have any suggestions or questions, feel free to drop them below!"}, {"post_id": 79653, "ts": "2026-10-14T22:31:15Z", "hours": 1.6694, "text": "I did some work on the PCB but not that much to make a devlog. So here; who wants to rate my Linux setup x/10."}, {"post_id": 79417, "ts": "2026-10-13T21:43:00Z", "hours": 1.4689, "text": "This is a PCB (not yet, but still a PCB); it’s going to be a great Stream Deck one day."}]...
|
Title: My awesome macropad! by @FineDust | Stardan Title: My awesome macropad! by @FineDust | Stardance
Devlogs:
This is a PCB (not yet, but still a PCB); it’s going to be a great Stream Deck one day.
I did some work on the PCB but not that much to make a devlog. So here; who wants to rate my Linux setup x/10.
2. Devlog ~01:00 16.10.2026 Hey everyone! I’ve just finished the PCB layout for my HackPad project! Next up, I’ll be diving into the 3D design phase for the case. That’s all for this update—if you have any suggestions or questions, feel free to drop them below!
Devlog 3 Hi everyone! It’s a lil’ update today. Just made my HackPad CAD case model so it can be checked off the list: PCB layout HackPad case modeled Code & firmware It took about 8 hours of compromising with the CAD software, but the enclosure layout is roughly 90% done. So it’s about time to start cooking up some custom firmware.
Hackpad Hackpad at 99% done design stage
Ships:
Hackpad From the mission my awesome macropad one of the biger problems I faced was not understanding the software properly witch I was useing. apart from that the rest of the project was more less smooth sailing...
|
1793155733.9858465
|
1793242133.9858465
|
|
68590
|
CAR HOME THEATER by @GOST | Stardance
|
GOST
|
0
|
10.96
|
0
|
[]
|
[{"post_id": 81102, "ts": "202 [{"post_id": 81102, "ts": "2026-10-19T21:26:02Z", "hours": 0.3175, "text": "sub bracket desine"}, {"post_id": 80363, "ts": "2026-10-17T12:40:33Z", "hours": 0.5156, "text": "stand for seround speaker"}, {"post_id": 79777, "ts": "2026-10-15T11:06:48Z", "hours": 0.9733, "text": "emproving the centre sound speaker"}, {"post_id": 79767, "ts": "2026-10-15T10:02:51Z", "hours": 9.1583, "text": "i am working one using car items to mack a home theater"}]...
|
Title: CAR HOME THEATER by @GOST | Stardance
Devl Title: CAR HOME THEATER by @GOST | Stardance
Devlogs:
i am working one using car items to mack a home theater
emproving the centre sound speaker
stand for seround speaker
sub bracket desine...
|
1793123435.8605554
|
1793728235.8605554
|
|
30067
|
ThickBerryPi by @kapkupi | Stardance
|
kapkupi
|
1
|
24.73
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T20:52:06Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello everybody! I present to you my compact clamshell raspberry pi 5 handheld. It features a little keyboard and a 3.2 inch screen. The whole thing is also assembled with almost no screws! The only screws you will need are for the screen. Isn’t it wild what is possible with 3D printing? I mean getting the hinge or the latches right wasn’t easy but in the end having it be assembled with almost no tools really is amazing. I at least think so. It also has no battery because the pi 5 is a bit to picky and I carry powerbanks with me anyway so I decided not to package a battery with my project. Besides the additional size needed for it of course. So I am excited for others to try it out and maybe expand on it!", "repo": "https://github.com/Kapkupi/RPI5-Palmtop", "demo": ""}]...
|
[{"post_id": 81096, "ts": "202 [{"post_id": 81096, "ts": "2026-10-19T21:04:59Z", "hours": 0.7253, "text": "So I have started working on it again. I mean there is not much more to do besides waiting for it to get approved but after using it for a bit I did in fact made some changes. So first thing as you may have noticed is the bigger buttons on the screen. Not only are they way easier to assemble but also easier to use as they are bigger. The old ones were just too small and these are just more satisfying to click. click click :3 … There are also a few other small changes I might tackle so I’ll try doing a bit until October 22nd👀"}, {"post_id": 76224, "ts": "2026-10-02T19:01:07Z", "hours": 0.3236, "text": "I feel like I need to do this devlog. As you may have noticed is that I still have not shipped. The reason for that is that I have not been able to finish it last weekend and then fell sick on monday and am still sick. I am In better shape now and want to finally finish my project and collect my promised startdust /j >:3. I am very relieved that the challenge has been extended and I am not sure what I would have done without that. You can see my progress on github. (The first picture you see there is just a place holder dw)"}, {"post_id": 71496, "ts": "2026-09-20T22:36:34Z", "hours": 0.4603, "text": "Wow, about 7 hours of hardware work (which I didn’t record because nobody needs to see that ¬w¬) which consists of pretty much only soldering is behind me. I completely butchered my cardkb but everything still works. My immaculate cable management is also questionable but it works so now time to write and then ship. I should probably go to bed but it’s fine."}, {"post_id": 71182, "ts": "2026-09-20T12:25:21Z", "hours": 1.2714, "text": "So, I have finished my design and I won’t be needing to make any more changes. I am currently waiting for my final print which has a few tweaks such as an additional latch but other then that I am done. I have also made a version with an open back so any heatsink should work, not only my specific one. Now I only need to do some soldering and documenting before I can finally ship! I am soo excited"}, {"post_id": 70875, "ts": "2026-09-19T22:15:13Z", "hours": 2.0283, "text": "Yes another devlog. I made my changes and am printing again! As you can see there is another latch in the back. Of course that is not all I did but it is the most notable change. Some small details to actually make it fit were my priorities and now that I am finished with them I am printing. Excited to wake up tomorrow and see if I am ready to ship or not."}, {"post_id": 70789, "ts": "2026-09-19T19:20:43Z", "hours": 0.8183, "text": "Intermission! I have reprinted the face plate in a different orientation and now the latches are strong enough! I will still add another one to the back. Also I am sorry if my pictures look like memories but I was to lazy to use my phone and instead just used a webcam :P"}, {"post_id": 70737, "ts": "2026-09-19T17:50:23Z", "hours": 2.5175, "text": "So, I have made the first print and it is looking very promising. The hinge only needs slight changes in terms of tolerance so it can be easily disassembled, it also seems sturdy enough! What did not work is, as you can see, the RPI did not fit. I will need to make some changes to the ports on the right side. The latches are also not too bad but they both broke off. I will also need to add another latch in the back because it is too sloppy for my taste. The screen and buttons for it are pretty good. Gives me hope for the power button. But for now time to make some changes before I ship hopefully tomorrow."}, {"post_id": 70249, "ts": "2026-09-18T20:02:27Z", "hours": 2.4361, "text": "I am almost finished with the first version! I only need to do some buttons and holes and a bit of little extras and then I am finished and can print. I will not ship yet because I want to make a few different versions so most people can find enjoyment in what fits for them but I will probably do that tomorrow. Today I did a majority of the hinge in terms of function. I made a spring which makes the hinge snap into different places and makes the lid stay shut. Which you can see in the picture bellow. I am excited to be almost finished!"}, {"post_id": 69817, "ts": "2026-09-17T20:44:27Z", "hours": 1.8333, "text": "oh wow, I have added the ports on the back. You can see the seam where the holes are split which divides it into the top part which snaps on to the bottom. Easy to assemble as long as the latches do not break. I am trying my best to make the print possible with normal PLA and a 0.4mm nozzle size which currently should still be possible. I am really confident that the final product (which I am pretty close to ;3) should not be too difficult to print for the average user but I need to print it to judge that which hopefully happens this week as I will not be able to work on it next week :<"}, {"post_id": 68282, "ts": "2026-09-14T20:51:48Z", "hours": 0.5514, "text": "Did the second hinge. Of course this is far from the finished design it would not even work right now but to at least have something. I am also not completely sure on how I should do the back. Like should I leave it open, cover it completely or partially. Well I will eventually find something which I like. But still not entirely sure on how the back will look like."}, {"post_id": 67692, "ts": "2026-09-13T21:27:06Z", "hours": 3.1181, "text": "So I have continued with the display case and have added most things already. I have also started with the hinge which gave me such a headache I spent too much time finding a solution for my space requirements but I have decided on my current setup which should work well enough. And an important decision I took is that the whole hinge will be completely 3D printed! This could fail miserably and then I would need to revert back to a more simpler design with screws but if it works which I am confident it will then that would be really cool."}, {"post_id": 66939, "ts": "2026-09-12T22:16:44Z", "hours": 1.2167, "text": "Started with the display case. Just some simple things to finish off the day. And also because y’all have not seen it yet here is a view from the top of my current progress where you can see the keyboard holder which will connect to the bottom via latches."}, {"post_id": 66819, "ts": "2026-09-12T18:36:11Z", "hours": 2.8147, "text": "Wow, I would say that I am almost completely done with the enclosure for the keyboard and raspberry pi. Now the screen remains and thus the hinge. Should not be too difficult but I need to watch out for the space I need for the HDMI cables. Could be a tight fit. Notable things I have done since the last devlog are: latches, I hope they will work after finally printing exhaust and additional heat dissipation openings intake “optimisation”; will probably not make a difference but still fun small additional details"}, {"post_id": 65403, "ts": "2026-09-10T14:59:11Z", "hours": 2.7164, "text": "Did a bunch of openings for i/o such as sd card, gpio, usb and such. The back is still open but that will be addressed later on. Opening for the cooling fan was also added, no exhaust tho. I also split my main case into top and bottom because I realised that I would not be able to assemble it otherwise. Also lost my sticky streak because I am lowkey delusional :<"}, {"post_id": 61814, "ts": "2026-09-04T21:58:43Z", "hours": 0.6942, "text": "After coming back from my vacation I continued working on my project. Had to stop the recording because I havent uploaded today. Streaks and all. Today I started building the main body of my case which is not nearly finished. Tomorrow I will probably do the side with usb and ethernet port and an opening for the gpio and heatsink entry and exit."}, {"post_id": 46314, "ts": "2026-08-13T13:42:10Z", "hours": 0.9797, "text": "Ok I lied. I did in fact not start building the next day but 10 days later . Well now I am working again. I did some reference planes of the pcbs so I can use them to create my case more easier. Edited cardkb. I also was very sceptical that lapse just did not record as there were some problems but it somehow still worked. Now I can really start working on it :3"}, {"post_id": 40381, "ts": "2026-08-03T20:58:47Z", "hours": 0.45, "text": "Added my components to my assembly :D Real building will start tomorrow :P"}]...
|
Title: ThickBerryPi by @kapkupi | Stardance
Devlo Title: ThickBerryPi by @kapkupi | Stardance
Devlogs:
Added my components to my assembly :D Real building will start tomorrow :P
Ok I lied. I did in fact not start building the next day but 10 days later . Well now I am working again. I did some reference planes of the pcbs so I can use them to create my case more easier. Edited cardkb. I also was very sceptical that lapse just did not record as there were some problems but it somehow still worked. Now I can really start working on it :3
After coming back from my vacation I continued working on my project. Had to stop the recording because I havent uploaded today. Streaks and all. Today I started building the main body of my case which is not nearly finished. Tomorrow I will probably do the side with usb and ethernet port and an opening for the gpio and heatsink entry and exit.
Did a bunch of openings for i/o such as sd card, gpio, usb and such. The back is still open but that will be addressed later on. Opening for the cooling fan was also added, no exhaust tho. I also split my main case into top and bottom because I realised that I would not be able to assemble it otherwise. Also lost my sticky streak because I am lowkey delusional :<
Wow, I would say that I am almost completely done with the enclosure for the keyboard and raspberry pi. Now the screen remains and thus the hinge. Should not be too difficult but I need to watch out for the space I need for the HDMI cables. Could be a tight fit. Notable things I have done since the last devlog are: latches, I hope they will work after finally printing exhaust and additional heat dissipation openings intake “optimisation”; will probably not make a difference but still fun small additional details
Started with the display case. Just some simple things to finish off the day. And also because y’all have not seen it yet here is a view from the top of my current progress where you can see the keyboard holder which will connect to the bottom via latches.
So I have continued with the display case and have added most things already. I have also started with the hinge which gave me such a headache I spent too much time finding a solution for my space requirements but I have decided on my current setup which should work well enough. And an important decision I took is that the whole hinge will be completely 3D printed! This could fail miserably and then I would need to revert back to a more simpler design with screws but if it works which I am confident it will then that would be really cool.
Did the second hinge. Of course this is far from the finished design it would not even work right now but to at least have something. I am also not completely sure on how I should do the back. Like should I leave it open, cover it completely or partially. Well I will eventually find something which I like. But still not entirely sure on how the back will look like.
oh wow, I have added the ports on the back. You can see the seam where the holes are split which divides it into the top part which snaps on to the bottom. Easy to assemble as long as the latches do not break. I am trying my best to make the print possible with normal PLA and a 0.4mm nozzle size which currently should still be possible. I am really confident that the final product (which I am pretty close to ;3) should not be too difficult to print for the average user but I need to print it to judge that which hopefully happens this week as I will not be able to work on it next week :<
I am almost finished with the first version! I only need to do some buttons and holes and a bit of little extras and then I am finished and can print. I will not ship yet because I want to make a few different versions so most people can find enjoyment in what fits for them but I will probably do that tomorrow. Today I did a majority of the hinge in terms of function. I made a spring which makes the hinge snap into different places and makes the lid stay shut. Which you can see in the picture bellow. I am excited to be almost finished!
So, I have made the first print and it is looking very promising. The hinge only needs slight changes in terms of tolerance so it can be easily disassembled, it also seems sturdy enough! What did not work is, as you can see, the RPI did not fit. I will need to make some changes to the ports on the right side. The latches are also not too bad but they both broke off. I will also need to add another latch in the back because it is too sloppy for my taste. The screen and buttons for it are pretty good. Gives me hope for the power button. But for now time to make some changes before I ship hopefully tomorrow.
Intermission! I have reprinted the face plate in a different orientation and now the latches are strong enough! I will still add another one to the back. Also I am sorry if my pictures look like memories but I was to lazy to use my phone and instead just used a webcam :P
Yes another devlog. I made my changes and am printing again! As you can see there is another latch in the back. Of course that is not all I did but it is the most notable change. Some small details to actually make it fit were my priorities and now that I am finished with them I am printing. Excited to wake up tomorrow and see if I am ready to ship or not.
So, I have finished my design and I won’t be needing to make any more changes. I am currently waiting for my final print which has a few tweaks such as an additional latch but other then that I am done. I have also made a version with an open back so any heatsink should work, not only my specific one. Now I only need to do some soldering and documenting before I can finally ship! I am soo excited
Wow, about 7 hours of hardware work (which I didn’t record because nobody needs to see that ¬w¬) which consists of pretty much only soldering is behind me. I completely butchered my cardkb but everything still works. My immaculate cable management is also questionable but it works so now time to write and then ship. I should probably go to bed but it’s fine.
I feel like I need to do this devlog. As you may have noticed is that I still have not shipped. The reason for that is that I have not been able to finish it last weekend and then fell sick on monday and am still sick. I am In better shape now and want to finally finish my project and collect my promised startdust /j >:3. I am very relieved that the challenge has been extended and I am not sure what I would have done without that. You can see my progress on github. (The first picture you see there is just a place holder dw)
So I have started working on it again. I mean there is not much more to do besides waiting for it to get approved but after using it for a bit I did in fact made some changes. So first thing as you may have noticed is the bigger buttons on the screen. Not only are they way easier to assemble but also easier to use as they are bigger. The old ones were just too small and these are just more satisfying to click. click click :3 … There are also a few other small changes I might tackle so I’ll try doing a bit until October 22nd👀
Ships:
Hello everybody! I present to you my compact clamshell raspberry pi 5 handheld. It features a little keyboard and a 3.2 inch screen. The whole thing is also assembled with almost no screws! The only screws you will need are for the screen. Isn’t it wild what is possible with 3D printing? I mean getting the hinge or the latches right wasn’t easy but in the end having it be assembled with almost no tools really is amazing. I at least think so. It also has no battery because the pi 5 is a bit to picky and I carry powerbanks with me anyway so I decided not to package a battery with my project. Besides the additional size needed for it of course. So I am excited for others to try it out and maybe expand on it!...
|
1793152506.3906796
|
1793238906.3906796
|
|
70543
|
Maware by @cauadev | Stardance
|
cauadev
|
0
|
0.68
|
0
|
[]
|
[{"post_id": 81091, "ts": "202 [{"post_id": 81091, "ts": "2026-10-19T20:52:08Z", "hours": 0.6833, "text": "Hello! About Maware Maware (Ma WarioWare, pun with “Malware” kinda intended) is my own clone of WarioWare, meant to learn Godot and earn the Stardust it lacks for me to get the Bambu Lab A1 Mini 3D printer. What I did for now Only the main menu (at least the buttons do their work)"}]...
|
Title: Maware by @cauadev | Stardance
Devlogs:
He Title: Maware by @cauadev | Stardance
Devlogs:
Hello! About Maware Maware (Ma WarioWare, pun with “Malware” kinda intended) is my own clone of WarioWare, meant to learn Godot and earn the Stardust it lacks for me to get the Bambu Lab A1 Mini 3D printer. What I did for now Only the main menu (at least the buttons do their work)...
|
1793047698.1894777
|
1793652498.1894777
|
|
15004
|
PixieR by @Cryskyy | Stardance
|
Cryskyy
|
1
|
7.0
|
95
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T07:36:32Z", "hours": 6.0, "multiplier": 15.1, "payout": 95, "blessing": "neutral", "text": "I make a project called “PixieR”, PixieR is a 100% client-side web tool that converts any image into pixel art directly in your browser. no backend, no API calls — everything happens locally using the HTML5 Canvas API. The Challenging part in my project is managing all the logic such as main.js and whole web logic system Im so proud that I can make this project without any trouble, and I hope everyone can test out my project :) Check up my github to try my project :))", "repo": "https://github.com/cryskyyexp-ux/PixieR-Project", "demo": "https://pixier.netlify.app/"}]...
|
[{"post_id": 8109, "ts": "2026 [{"post_id": 8109, "ts": "2026-06-13T15:13:52Z", "hours": 1.0, "text": "PixieR Project Devlog — Fixing the Stretching Bug & Other Issues Compare Slider stretching (main issue) Cause: syncCmpCanvas() set cmp.style.width='100%' and cmp.style.height='100%' together with objectFit:'contain' . object-fit only works on replaced elements like <img> and <video> — it has no effect on <canvas> , so the canvas was forced to fill the wrapper’s full 100% x 100% box regardless of its actual pixel aspect ratio, stretching the pixel art. Fix: Compute the display size manually based on the pixel canvas’s own aspect ratio ( src.width / src.height ), fit it within the wrapper width and a max height of 400px, then explicitly set cmp-canvas and cmp-orig-img width/height in pixels (with horizontal centering via marginLeft ). Both layers now share identical dimensions so the slider overlay aligns correctly. Pixel Only view overflow/stretch Cause: solo-canvas had a fixed inline max-width:100%;max-height:480px , while syncSoloCanvas() separately set style.width / style.height to width*zoom / height*zoom in px. At high zoom levels this could overflow the frame, and the max-width/max-height constraints distorted the aspect ratio independently on each axis. Fix: Removed the conflicting inline max-width/max-height. syncSoloCanvas() now computes the zoomed size, then uniformly scales both dimensions down by the same factor if it exceeds the frame’s width or a 480px height cap, preserving aspect ratio. Eyedropper coordinate mismatch Cause: pixelCanvas mousemove/click handlers divided mouse coordinates by the zoom slider value to find the pixel under the cursor. This breaks if the canvas’s rendered size ever differs from width * zoom (e.g. after future layout changes), giving wrong color picks. Fix: Replaced the zoom-based division with a ratio of the canvas’s actual bitmap size to its rendered bounding box size ( pixelCanvas.width / rect.width ), which is robust to any CSS scaling. Compare slider not resizing on window resize Cause: No resize handler existed for the compare/pixel-only views, so resizing the browser left stale dimensions and a stretched look. Fix: Added a resize listener that re-runs syncCmpCanvas() or syncSoloCanvas() depending on the active view. Dead/unused popup duplication Cause: The star popup markup was hardcoded in the page AND re-inserted via createPopupHTML() using insertAdjacentHTML , creating a duplicate #starPopup risk and unnecessary DOM bloat. Fix: Removed the redundant insertAdjacentHTML injection since the markup already exists in the page; createPopupHTML() now just guards against duplicates. Toast fallback dead code Cause: showToast() inside the popup IIFE recreated a whole second #toast element with inline styles if the existing one wasn’t found — but it always exists in the page, making this branch dead and bug-prone (it referenced var(--text, ...) colors that may not exist)."}, {"post_id": 7336, "ts": "2026-06-12T07:27:25Z", "hours": 0.0, "text": "Detailing My Project README.md and adding some detail"}, {"post_id": 7282, "ts": "2026-06-12T04:18:31Z", "hours": 3.0, "text": "Hi Guys this is my project explaination how does the Pixelate work on steps: Step 1: Shrink (this is where the magic happens) jsconst small = document.createElement(‘canvas’); small.width = 64; small.height = 64; small.getContext(‘2d’).drawImage(srcImg, 0, 0, 64, 64); Imagine your photo is 1920×1080 pixels. You squish it down into a 64×64 canvas. To fit a million pixrls into 64×64, the browser has to merge groups of pixels into one. It looks at a chunk of the original image (say, a 30×17 block) and blends them all into a single average color. Result: you now have a real, tiny image — 64×64 actual pixels, each one a blended color from a chunk of the original. Step 2: Blow it bacl up (with no smoothing) jscanvas.style.width = ‘384px’; // 64 × 6 canvas.style.height = ‘384px’; cssimage-rendering: pixelated; Now you take that tiny 64×64 image and stretch it to be way bigger on screen. Normally, browsers smooth out stretched images (blurry). The pixelated setting turns smoothing off. So each of the 64×64 pixels just gets copied into a big solid square — no blending, no blur. Result: big, crisp, blocky squares = the pixel art look. Putting It Together big detailed photo ↓ (squish down — merges pixels, loses detail) tiny 64×64 image ↓ (stretch up — no smoothing, just copy each pixel bigger) big blocky pixel art The squish is what creates the pixel art (real data, real file). The stretch is just so you can see it clearly on screen — it adds zero new information. Why the Download File is Small When you hit download, it saves the tiny 64×64 image (from Step 1) — not the big stretched version. The “blow it back up” part was only for your screen. And this done in client side, we dont collect your image or saving ur image"}, {"post_id": 6742, "ts": "2026-06-11T09:10:40Z", "hours": 1.0, "text": "DEVLOG : Project: PixieR Version: 2.0.0 Type: Web App (100% client-side) Stack: Vanilla JS + Canvas API + CSS License: MIT Status: Beta [+] Built: - Basic HTML structure with card-based UI - File upload with drag & drop support - Canvas setup for pixelation using Canvas API - Dark/light theme toggle with CSS custom properties - Interactive grid background with cursor glow effect [+] Pixelation Engine: - doPixelate() function that downsamples images - Three scale modes: Fit, Stretch, Crop - Realtime preview with 120ms debounce - Custom grid size input (4×4 to 1024×1024) - Preset chips: 16, 32, 64, 128, 256 - Linked dimensions toggle (🔗 / 🔓) [+] How pixelation works: Original Image ↓ drawImage(src, 0, 0, pixelW, pixelH) Tiny Canvas (W×H pixels) ↓ CSS image-rendering: pixelated Final display (zoomed with crisp edges) [+] Core Code Snippet: const small = document.createElement('canvas'); small.width = sw; small.height = sh; const sc = small.getContext('2d'); sc.drawImage(srcImg, 0, 0, sw, sh); out.getContext('2d').drawImage(small, 0, 0); [+] Key Decisions: - No frameworks → keep it lightweight (~18KB) - Single HTML file → easy to share, no build step - Canvas API → native browser support, fast [+] Challenges & Solutions: Challenge: Crop mode required calculating source coordinates Solution: Used aspect ratio comparison to determine sx, sy, sW, sH Challenge: Maintaining aspect ratio in Fit mode Solution: Compare pw/ph vs srcRatio to determine scaling axis Challenge: Making chips highlight correctly on value change Solution: setChipActive() toggles .on class based on value [+] View Modes: - Side by Side (split-view) - Compare Slider (drag to compare original vs pixelated) - Pixel Only (fullscreen pixel art display) [+] Compare Slider Implementation: /* Clip the pixelated layer */ #compare-pixel { clip-path: inset(0 50% 0 0); } Drag updates percentage → changes clip-path value dynamically. Supports both mouse and touch events for mobile. [+] Eyedropper Tool: - Hover over any pixel to see hex color - Click to copy hex code to clipboard - Tooltip follows cursor with color preview [+] Eyedropper Logic: pixelCanvas.addEventListener('mousemove', (e) => { const cx = Math.floor((e.clientX - rect.left) / zoom); const cy = Math.floor((e.clientY - rect.top) / zoom); const px = ctx.getImageData(cx, cy, 1, 1).data; const hex = '#' + px[0].toString(16) + ...; tip.innerHTML = `${hex} (${cx},${cy})`; }); [+] Export Features: - Download as PNG, JPG, or WebP - Automatic filename: pixier_{W}x{H}.ext [+] Zoom Slider: - Range: 1× to 20× - CSS-based scaling, doesn’t re-render - Maintains crisp pixelated edges [+] The “Pixelate!” Button Experience: - Disabled until image loaded - 5-second “processing” animation (UX theater) - Controls unlock after first conversion - Shimmer effect on completion - After first use: realtime updates (120ms debounce)"}]...
|
Title: PixieR by @Cryskyy | Stardance
Devlogs:
DE Title: PixieR by @Cryskyy | Stardance
Devlogs:
DEVLOG : Project: PixieR Version: 2.0.0 Type: Web App (100% client-side) Stack: Vanilla JS + Canvas API + CSS License: MIT Status: Beta [+] Built: - Basic HTML structure with card-based UI - File upload with drag & drop support - Canvas setup for pixelation using Canvas API - Dark/light theme toggle with CSS custom properties - Interactive grid background with cursor glow effect [+] Pixelation Engine: - doPixelate() function that downsamples images - Three scale modes: Fit, Stretch, Crop - Realtime preview with 120ms debounce - Custom grid size input (4×4 to 1024×1024) - Preset chips: 16, 32, 64, 128, 256 - Linked dimensions toggle (🔗 / 🔓) [+] How pixelation works: Original Image ↓ drawImage(src, 0, 0, pixelW, pixelH) Tiny Canvas (W×H pixels) ↓ CSS image-rendering: pixelated Final display (zoomed with crisp edges) [+] Core Code Snippet: const small = document.createElement('canvas'); small.width = sw; small.height = sh; const sc = small.getContext('2d'); sc.drawImage(srcImg, 0, 0, sw, sh); out.getContext('2d').drawImage(small, 0, 0); [+] Key Decisions: - No frameworks → keep it lightweight (~18KB) - Single HTML file → easy to share, no build step - Canvas API → native browser support, fast [+] Challenges & Solutions: Challenge: Crop mode required calculating source coordinates Solution: Used aspect ratio comparison to determine sx, sy, sW, sH Challenge: Maintaining aspect ratio in Fit mode Solution: Compare pw/ph vs srcRatio to determine scaling axis Challenge: Making chips highlight correctly on value change Solution: setChipActive() toggles .on class based on value [+] View Modes: - Side by Side (split-view) - Compare Slider (drag to compare original vs pixelated) - Pixel Only (fullscreen pixel art display) [+] Compare Slider Implementation: /* Clip the pixelated layer */ #compare-pixel { clip-path: inset(0 50% 0 0); } Drag updates percentage → changes clip-path value dynamically. Supports both mouse and touch events for mobile. [+] Eyedropper Tool: - Hover over any pixel to see hex color - Click to copy hex code to clipboard - Tooltip follows cursor with color preview [+] Eyedropper Logic: pixelCanvas.addEventListener('mousemove', (e) => { const cx = Math.floor((e.clientX - rect.left) / zoom); const cy = Math.floor((e.clientY - rect.top) / zoom); const px = ctx.getImageData(cx, cy, 1, 1).data; const hex = '#' + px[0].toString(16) + ...; tip.innerHTML = `${hex} (${cx},${cy})`; }); [+] Export Features: - Download as PNG, JPG, or WebP - Automatic filename: pixier_{W}x{H}.ext [+] Zoom Slider: - Range: 1× to 20× - CSS-based scaling, doesn’t re-render - Maintains crisp pixelated edges [+] The “Pixelate!” Button Experience: - Disabled until image loaded - 5-second “processing” animation (UX theater) - Controls unlock after first conversion - Shimmer effect on completion - After first use: realtime updates (120ms debounce)
Hi Guys this is my project explaination how does the Pixelate work on steps: Step 1: Shrink (this is where the magic happens) jsconst small = document.createElement(‘canvas’); small.width = 64; small.height = 64; small.getContext(‘2d’).drawImage(srcImg, 0, 0, 64, 64); Imagine your photo is 1920×1080 pixels. You squish it down into a 64×64 canvas. To fit a million pixrls into 64×64, the browser has to merge groups of pixels into one. It looks at a chunk of the original image (say, a 30×17 block) and blends them all into a single average color. Result: you now have a real, tiny image — 64×64 actual pixels, each one a blended color from a chunk of the original. Step 2: Blow it bacl up (with no smoothing) jscanvas.style.width = ‘384px’; // 64 × 6 canvas.style.height = ‘384px’; cssimage-rendering: pixelated; Now you take that tiny 64×64 image and stretch it to be way bigger on screen. Normally, browsers smooth out stretched images (blurry). The pixelated setting turns smoothing off. So each of the 64×64 pixels just gets copied into a big solid square — no blending, no blur. Result: big, crisp, blocky squares = the pixel art look. Putting It Together big detailed photo ↓ (squish down — merges pixels, loses detail) tiny 64×64 image ↓ (stretch up — no smoothing, just copy each pixel bigger) big blocky pixel art The squish is what creates the pixel art (real data, real file). The stretch is just so you can see it clearly on screen — it adds zero new information. Why the Download File is Small When you hit download, it saves the tiny 64×64 image (from Step 1) — not the big stretched version. The “blow it back up” part was only for your screen. And this done in client side, we dont collect your image or saving ur image
Detailing My Project README.md and adding some detail
PixieR Project Devlog — Fixing the Stretching Bug & Other Issues Compare Slider stretching (main issue) Cause: syncCmpCanvas() set cmp.style.width='100%' and cmp.style.height='100%' together with objectFit:'contain' . object-fit only works on replaced elements like <img> and <video> — it has no effect on <canvas> , so the canvas was forced to fill the wrapper’s full 100% x 100% box regardless of its actual pixel aspect ratio, stretching the pixel art. Fix: Compute the display size manually based on the pixel canvas’s own aspect ratio ( src.width / src.height ), fit it within the wrapper width and a max height of 400px, then explicitly set cmp-canvas and cmp-orig-img width/height in pixels (with horizontal centering via marginLeft ). Both layers now share identical dimensions so the slider overlay aligns correctly. Pixel Only view overflow/stretch Cause: solo-canvas had a fixed inline max-width:100%;max-height:480px , while syncSoloCanvas() separately set style.width / style.height to width*zoom / height*zoom in px. At high zoom levels this could overflow the frame, and the max-width/max-height constraints distorted the aspect ratio independently on each axis. Fix: Removed the conflicting inline max-width/max-height. syncSoloCanvas() now computes the zoomed size, then uniformly scales both dimensions down by the same factor if it exceeds the frame’s width or a 480px height cap, preserving aspect ratio. Eyedropper coordinate mismatch Cause: pixelCanvas mousemove/click handlers divided mouse coordinates by the zoom slider value to find the pixel under the cursor. This breaks if the canvas’s rendered size ever differs from width * zoom (e.g. after future layout changes), giving wrong color picks. Fix: Replaced the zoom-based division with a ratio of the canvas’s actual bitmap size to its rendered bounding box size ( pixelCanvas.width / rect.width ), which is robust to any CSS scaling. Compare slider not resizing on window resize Cause: No resize handler existed for the compare/pixel-only views, so resizing the browser left stale dimensions and a stretched look. Fix: Added a resize listener that re-runs syncCmpCanvas() or syncSoloCanvas() depending on the active view. Dead/unused popup duplication Cause: The star popup markup was hardcoded in the page AND re-inserted via createPopupHTML() using insertAdjacentHTML , creating a duplicate #starPopup risk and unnecessary DOM bloat. Fix: Removed the redundant insertAdjacentHTML injection since the markup already exists in the page; createPopupHTML() now just guards against duplicates. Toast fallback dead code Cause: showToast() inside the popup IIFE recreated a whole second #toast element with inline styles if the existing one wasn’t found — but it always exists in the page, making this branch dead and bug-prone (it referenced var(--text, ...) colors that may not exist).
Ships:
I make a project called “PixieR”, PixieR is a 100% client-side web tool that converts any image into pixel art directly in your browser. no backend, no API calls — everything happens locally using the HTML5 Canvas API. The Challenging part in my project is managing all the logic such as main.js and whole web logic system Im so proud that I can make this project without any trouble, and I hope everyone can test out my project :) Check up my github to try my project :))...
|
1792878745.9209418
|
1793742745.9209418
|
|
41271
|
Fleer by @johan | Stardance
|
johan
|
1
|
76.21
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T21:52:34Z", "hours": 64.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "School is coming back soon, Stardance may be ending tomorrow, and I’m currently at 15% of what I want to do. I got an entire planning on Linear on what to do now. Fleer is a toxic-love project for me because of the numbers of issues I encountered, but I still want it to be done so bad. And yeah, I know testing is kinda hard now, I can’t publish an hosted testing instance so you will need to host it yourself (just one 30 MB Docker image to compile on any system and any architecture).", "repo": "https://github.com/johan-perso/fleer-relay", "demo": "https://github.com/johan-perso/fleer-cli#installation"}]...
|
[{"post_id": 81085, "ts": "202 [{"post_id": 81085, "ts": "2026-10-19T20:04:48Z", "hours": 4.6358, "text": "Fleer is a decentralized platform, meaning anyone can host one or multiple relay servers. This devlog brings this concept even more to the Fleer CLI. Three lists of relay servers are hosted (on the GitHub repo, on my main website, and obviously on the Fleer landing page itself). These lists contain the URL for the currently only hosted relay. You can also add your own custom lists. In the future, the officials lists will include many more relays, from me or from anyone that contributes to the ecosystem, and the CLI is already prepared for that! I’m on a hotspot with like not even 1 Mbps so the video is just here for illustrative purposes 💀"}, {"post_id": 72709, "ts": "2026-09-23T15:38:39Z", "hours": 7.5769, "text": "After a few weeks without being able to do proper coding sessions (only got time to do it while being at school), I can finally release a new feature for Fleer! Integrity checking: after sending files, the receiver can ask the sender for a list of SHA-256 hashes. All communications are using encrypted messages to reduce the amount of things a malicious relay server can do. Integrity checking allows the receiver to be sure that files are identical from the sent one, and that the relay didn’t skipped chunks/files. I also added proper (and definitive) instructions for selfhosting a relay server by using Docker Compose (with prebuilt images via GitHub Actions), by building the image yourself with a Dockerfile, or to run from source. Reduce chunkSize when sending files if network conditions were really really bad before starting to send chunks."}, {"post_id": 58469, "ts": "2026-08-30T21:45:51Z", "hours": 7.2975, "text": "Not sure if Stardance will get extended until something like the end of September, so here am I (didn’t got many times to update the app and encountered many problems). A new command fleer relay followed by any Fleer Relay URL will output details about it. Receiver device name was sent in clear to the relay, it is now exchanged using encrypted messages. The transfer will be deleted if too many restarts happen (because messages size exceeds the limit for example). A structure containing all files, folders and path is included to give the receiver some visuals indications. If it’s too large, the structure will be dropped entirely. The amount of received/sent bytes will be displayed in Kbps instead of Mbps if it’s slow asf. Many bugs fixes and optimizations. The relay can now pauses transfers if it’s processing too many transfers at once. The indicated transfer size will include an estimated encryption overhead (the algorithm used can add some bytes to files). Transfers that shares MANY messages can use a feature from the relay that give clients ability to select the amount of cached bytes for messages and chunks. Inactives shares are deleted from the memory of the relay. The build version and latest commit pulled is returned to clients from the relay. Rate limits now apply to WebSocket messages."}, {"post_id": 53427, "ts": "2026-08-23T23:35:26Z", "hours": 3.7667, "text": "Didn’t wrote many lines of code on this project the last few days, was busy with personnal things so I’m listing what I pushed this week: User can decide what to do if a file already exist in the current directory (replace it, rename the new one, or skip this file). A new command fdd allows to start a download even faster, by checking the first parameter ( fdd <share_link> ) or any URL in the clipboard. fleer send command can generate a QR Code image, and display it for supported terminals (such as the incredible Ghostty). Download speed is displayed live in Mbps. Some fixes concerning security and downloading in specific conditions."}, {"post_id": 49259, "ts": "2026-08-17T23:04:04Z", "hours": 4.8894, "text": "A few minors QoL changes: The CLI is automatically closed when download is finished, synced for both sender and receiver through an encrypted message that acts as a signal to tell both party they have done their job. Share Link is automatically copied into the clipboard of the sender, even if he’s remotely connected via SSH to another server. The directory in which files are saved is displayed at the end of execution (default to current folder). Improved performances when downloading. Some more verifications with the relay server used. Protect against Path Traversal vulnerability."}, {"post_id": 46633, "ts": "2026-08-14T01:00:19Z", "hours": 8.6061, "text": "Okay, changelog required even though I wasn’t planning on publishing it right now. Apart from some additions such as: --debug-socket flag that logs every actions happening between the client and a relay server Encryption protocol indicator (which is used by clients to know what algorithm and settings to use) is NOT known by the server anymore, as it is transferred in the share link itself Proper exit (and closure of spinner animations) when using Ctrl+C A few optimizations for responsive logs Downloading files is ALMOST done, I’m currently having many issues with slow file upload, and many attempts at optimizing it (that litteraly give me the idea of just quitting this project) and I’m making this changelog now because I think we might not finish this part of the CLI before at least 2 days. In the meantime, I daydreamed about many things I want to introduce into the project that will hopefully make a difference with others apps, even if I don’t have the same speed as them."}, {"post_id": 45231, "ts": "2026-08-11T15:54:32Z", "hours": 1.0211, "text": "Made a command to explain how Fleer relays, encryption and decryption work - always with a nice focus on terminal design, with colors, responsive and auto resize"}, {"post_id": 44327, "ts": "2026-08-10T00:30:37Z", "hours": 7.3697, "text": "We can send files using the CLI! I have some optimizations to make because sending small files is just as slow as sending large files, causing super low speed upload 💀 We also display the URL, command, and keys (used by the server) to connect as a receiver and start downloading files. The protocol is kinda complex and I’m planning to write a documentation on how to use it for any matter (like automations or 3rd party clients), and a terminal generally being for nerds (especially when a desktop GUI app is planned) make this the best place to showcase how the relay system really work, so I implemented a flag --debug-performances that log every actions into a file, also useful to debug performances (if you didn’t guessed…). The sender sends files to the relay, one by one, chunk by chunk to the relay, which will pipe them to the receiver afterwards. Chunks are fully encrypted on both clients and server cannot access their content whatsoever. To ensure even better security, I also display a warning with confirmation before continuing if the server is using HTTP instead of HTTPS. There is many things happening that isn’t easy to see, and many little details (like some responsive resizing for low sized terminals) that many people may never encounteer, and I’m proud of how those devlogs are only like 7h long?? Anyway, here’s a video of where I currently am, and thanks for reading all of that garbage nonsense written by a french guy that isn’t quite good at telling things in foreign languages."}, {"post_id": 42308, "ts": "2026-08-06T23:19:36Z", "hours": 6.6911, "text": "Spent a few hours starting the CLI! For now it can only search for files and directory to send, while excluding socket and symlinks, and asking user if he want to excludes some others directory (like node_modules, cache or trashed files on macOS/Linux). Interface use colors, spinners and terminal screen width detection to avoid overflowing texts on another lines, providing a nice display when displaying large quantity of text, even if it’s only on screen for a few milliseconds. The files searching is really fast thank to Bun and some optimizations I did, here is a demo."}, {"post_id": 41111, "ts": "2026-08-05T03:10:10Z", "hours": 6.4781, "text": "Receiver can now receive chunks of data even if he wasn’t connected when the sender started sending them. Also, some communications are added between the receiver and the sender, such as a warning when the other one disconnect, or any other form of encrypted message. Senders were informed when they reached the max cached data limit, but are also now informed when this limit can be ignored (when the receiver download those cached data to free some space). And the thing you can see in the demo video: it is now possible to, as the receiver, restart an entire transfer if you connect to the download, disconnect, and reconnect again (because cached data are cleaned by the backend, which mean the sender has to send them again). I know “sender” and “receiver” are repeated 300x but idk how to explain this in a better way 😭🙏 (+ i’m french idk we’re all bad in this language tbh)"}, {"post_id": 38550, "ts": "2026-08-01T00:54:39Z", "hours": 6.45, "text": "After starting to get some progress on a test CLI (with both sending and receiving sides), we can now encrypt/send, and decrypt/download chunks on storage. I will make a few changes on how files saving will be handled because for now the receiver only get chunks data, and don’t know how to reassemble them. If you want, one of my git commit got this long ahh description: - Many more checks - Receiver can set their name (sender get notified) - Chunks are sent to receiver - receiver can acknowledge when they receive one, and chunks sending is paused if they have at least three chunks not ack. - An encryption protocol indicator is exchanged (not encrypted) to let clients know what encryption parameters to use - Chunks that are in the memory of the server has a maximum, afterwards we stop accepting more - Auto removal of all in-memory data of acknowledged chunks"}, {"post_id": 36745, "ts": "2026-07-29T00:19:25Z", "hours": 11.2589, "text": "Just started this new project! I’ve already wrote a loooong list of things I want to do (and how I want them to be done), will not post it here to avoid spoiling so wait a few changelog to know how the service will work! For now, I’ve only implemented a basic API that allows to create a share, returning a shareId that allows to request details about it ; I also started the implementation of a socket that will allow someone to download a file while it’s being uploaded. The backend will be done in Dart to allow the build of a light executable file, allowing an easier self-hosting while consuming less ressources. This language also enable me the possibility of including the server directly inside a Flutter made client, but I’m not sure I will use this possibility, I guess we will see!"}]...
|
Title: Fleer by @johan | Stardance
Devlogs:
Just Title: Fleer by @johan | Stardance
Devlogs:
Just started this new project! I’ve already wrote a loooong list of things I want to do (and how I want them to be done), will not post it here to avoid spoiling so wait a few changelog to know how the service will work! For now, I’ve only implemented a basic API that allows to create a share, returning a shareId that allows to request details about it ; I also started the implementation of a socket that will allow someone to download a file while it’s being uploaded. The backend will be done in Dart to allow the build of a light executable file, allowing an easier self-hosting while consuming less ressources. This language also enable me the possibility of including the server directly inside a Flutter made client, but I’m not sure I will use this possibility, I guess we will see!
After starting to get some progress on a test CLI (with both sending and receiving sides), we can now encrypt/send, and decrypt/download chunks on storage. I will make a few changes on how files saving will be handled because for now the receiver only get chunks data, and don’t know how to reassemble them. If you want, one of my git commit got this long ahh description: - Many more checks - Receiver can set their name (sender get notified) - Chunks are sent to receiver - receiver can acknowledge when they receive one, and chunks sending is paused if they have at least three chunks not ack. - An encryption protocol indicator is exchanged (not encrypted) to let clients know what encryption parameters to use - Chunks that are in the memory of the server has a maximum, afterwards we stop accepting more - Auto removal of all in-memory data of acknowledged chunks
Receiver can now receive chunks of data even if he wasn’t connected when the sender started sending them. Also, some communications are added between the receiver and the sender, such as a warning when the other one disconnect, or any other form of encrypted message. Senders were informed when they reached the max cached data limit, but are also now informed when this limit can be ignored (when the receiver download those cached data to free some space). And the thing you can see in the demo video: it is now possible to, as the receiver, restart an entire transfer if you connect to the download, disconnect, and reconnect again (because cached data are cleaned by the backend, which mean the sender has to send them again). I know “sender” and “receiver” are repeated 300x but idk how to explain this in a better way 😭🙏 (+ i’m french idk we’re all bad in this language tbh)
Spent a few hours starting the CLI! For now it can only search for files and directory to send, while excluding socket and symlinks, and asking user if he want to excludes some others directory (like node_modules, cache or trashed files on macOS/Linux). Interface use colors, spinners and terminal screen width detection to avoid overflowing texts on another lines, providing a nice display when displaying large quantity of text, even if it’s only on screen for a few milliseconds. The files searching is really fast thank to Bun and some optimizations I did, here is a demo.
We can send files using the CLI! I have some optimizations to make because sending small files is just as slow as sending large files, causing super low speed upload 💀 We also display the URL, command, and keys (used by the server) to connect as a receiver and start downloading files. The protocol is kinda complex and I’m planning to write a documentation on how to use it for any matter (like automations or 3rd party clients), and a terminal generally being for nerds (especially when a desktop GUI app is planned) make this the best place to showcase how the relay system really work, so I implemented a flag --debug-performances that log every actions into a file, also useful to debug performances (if you didn’t guessed…). The sender sends files to the relay, one by one, chunk by chunk to the relay, which will pipe them to the receiver afterwards. Chunks are fully encrypted on both clients and server cannot access their content whatsoever. To ensure even better security, I also display a warning with confirmation before continuing if the server is using HTTP instead of HTTPS. There is many things happening that isn’t easy to see, and many little details (like some responsive resizing for low sized terminals) that many people may never encounteer, and I’m proud of how those devlogs are only like 7h long?? Anyway, here’s a video of where I currently am, and thanks for reading all of that garbage nonsense written by a french guy that isn’t quite good at telling things in foreign languages.
Made a command to explain how Fleer relays, encryption and decryption work - always with a nice focus on terminal design, with colors, responsive and auto resize
Okay, changelog required even though I wasn’t planning on publishing it right now. Apart from some additions such as: --debug-socket flag that logs every actions happening between the client and a relay server Encryption protocol indicator (which is used by clients to know what algorithm and settings to use) is NOT known by the server anymore, as it is transferred in the share link itself Proper exit (and closure of spinner animations) when using Ctrl+C A few optimizations for responsive logs Downloading files is ALMOST done, I’m currently having many issues with slow file upload, and many attempts at optimizing it (that litteraly give me the idea of just quitting this project) and I’m making this changelog now because I think we might not finish this part of the CLI before at least 2 days. In the meantime, I daydreamed about many things I want to introduce into the project that will hopefully make a difference with others apps, even if I don’t have the same speed as them.
A few minors QoL changes: The CLI is automatically closed when download is finished, synced for both sender and receiver through an encrypted message that acts as a signal to tell both party they have done their job. Share Link is automatically copied into the clipboard of the sender, even if he’s remotely connected via SSH to another server. The directory in which files are saved is displayed at the end of execution (default to current folder). Improved performances when downloading. Some more verifications with the relay server used. Protect against Path Traversal vulnerability.
Didn’t wrote many lines of code on this project the last few days, was busy with personnal things so I’m listing what I pushed this week: User can decide what to do if a file already exist in the current directory (replace it, rename the new one, or skip this file). A new command fdd allows to start a download even faster, by checking the first parameter ( fdd <share_link> ) or any URL in the clipboard. fleer send command can generate a QR Code image, and display it for supported terminals (such as the incredible Ghostty). Download speed is displayed live in Mbps. Some fixes concerning security and downloading in specific conditions.
Not sure if Stardance will get extended until something like the end of September, so here am I (didn’t got many times to update the app and encountered many problems). A new command fleer relay followed by any Fleer Relay URL will output details about it. Receiver device name was sent in clear to the relay, it is now exchanged using encrypted messages. The transfer will be deleted if too many restarts happen (because messages size exceeds the limit for example). A structure containing all files, folders and path is included to give the receiver some visuals indications. If it’s too large, the structure will be dropped entirely. The amount of received/sent bytes will be displayed in Kbps instead of Mbps if it’s slow asf. Many bugs fixes and optimizations. The relay can now pauses transfers if it’s processing too many transfers at once. The indicated transfer size will include an estimated encryption overhead (the algorithm used can add some bytes to files). Transfers that shares MANY messages can use a feature from the relay that give clients ability to select the amount of cached bytes for messages and chunks. Inactives shares are deleted from the memory of the relay. The build version and latest commit pulled is returned to clients from the relay. Rate limits now apply to WebSocket messages.
After a few weeks without being able to do proper coding sessions (only got time to do it while being at school), I can finally release a new feature for Fleer! Integrity checking: after sending files, the receiver can ask the sender for a list of SHA-256 hashes. All communications are using encrypted messages to reduce the amount of things a malicious relay server can do. Integrity checking allows the receiver to be sure that files are identical from the sent one, and that the relay didn’t skipped chunks/files. I also added proper (and definitive) instructions for selfhosting a relay server by using Docker Compose (with prebuilt images via GitHub Actions), by building the image yourself with a Dockerfile, or to run from source. Reduce chunkSize when sending files if network conditions were really really bad before starting to send chunks.
Fleer is a decentralized platform, meaning anyone can host one or multiple relay servers. This devlog brings this concept even more to the Fleer CLI. Three lists of relay servers are hosted (on the GitHub repo, on my main website, and obviously on the Fleer landing page itself). These lists contain the URL for the currently only hosted relay. You can also add your own custom lists. In the future, the officials lists will include many more relays, from me or from anyone that contributes to the ecosystem, and the CLI is already prepared for that! I’m on a hotspot with like not even 1 Mbps so the video is just here for illustrative purposes 💀
Ships:
School is coming back soon, Stardance may be ending tomorrow, and I’m currently at 15% of what I want to do. I got an entire planning on Linear on what to do now. Fleer is a toxic-love project for me because of the numbers of issues I encountered, but I still want it to be done so bad. And yeah, I know testing is kinda hard now, I can’t publish an hosted testing instance so you will need to host it yourself (just one 30 MB Docker image to compile on any system and any architecture)....
|
1793087902.8764782
|
1793174302.8764782
|
|
34259
|
DungeonMan by @avycado13 | Stardance
|
avycado13
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T20:05:14Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a library to implement RPG fight mechanics for text based games", "repo": "https://github.com/avycado13/dungeonman", "demo": "https://pypi.org/project/dungeonman/"}]...
|
[{"post_id": 81084, "ts": "202 [{"post_id": 81084, "ts": "2026-10-19T20:03:52Z", "hours": 0.3539, "text": "I added Documentation for the libraryand got it render via sphinx."}, {"post_id": 80983, "ts": "2026-10-19T14:45:43Z", "hours": 0.5758, "text": "I set it up to also be a library so you can use the exposed functions and classes fro basic RPGs"}, {"post_id": 80884, "ts": "2026-10-19T04:51:37Z", "hours": 0.3697, "text": "I added a room system and in the rooms you can pick up items and fight that room’s monsters."}, {"post_id": 27522, "ts": "2026-07-13T04:48:35Z", "hours": 1.5, "text": "i made some basic mechanics for fighting"}]...
|
Title: DungeonMan by @avycado13 | Stardance
Devlo Title: DungeonMan by @avycado13 | Stardance
Devlogs:
i made some basic mechanics for fighting
I added a room system and in the rooms you can pick up items and fight that room’s monsters.
I set it up to also be a library so you can use the exposed functions and classes fro basic RPGs
I added Documentation for the libraryand got it render via sphinx.
Ships:
I made a library to implement RPG fight mechanics for text based games...
|
1793195737.511903
|
1793282137.511903
|
|
69868
|
catpad by @lollo22 | Stardance
|
lollo22
|
0
|
5.59
|
0
|
[]
|
[{"post_id": 81083, "ts": "202 [{"post_id": 81083, "ts": "2026-10-19T20:02:52Z", "hours": 5.5947, "text": "my catpad, an hackpad that resembles a cat i worked hard on this project, just need to make the firmware to complete the design"}]...
|
Title: catpad by @lollo22 | Stardance
Devlogs:
my Title: catpad by @lollo22 | Stardance
Devlogs:
my catpad, an hackpad that resembles a cat i worked hard on this project, just need to make the firmware to complete the design...
|
1792878647.703754
|
1793483447.703754
|
|
69914
|
Macropad esp32s3 universal software by @danielmb | Macropad esp32s3 universal software by @danielmb | Stardance...
|
danielmb
|
0
|
12.08
|
0
|
[]
|
[{"post_id": 81082, "ts": "202 [{"post_id": 81082, "ts": "2026-10-19T19:58:43Z", "hours": 2.4361, "text": "So the screen and the numpad are working, i still need to add some more config options to the display and fix a few small things in the keypad, so after that i only will need to add rgb led and potentiometor functionality, a check so that pins are not used twice and better authentication. Then ill probably be finished"}, {"post_id": 79866, "ts": "2026-10-15T17:33:51Z", "hours": 9.6406, "text": "Hi, i am making software for a macropad thats run by an esp32s3, at the moment i have the wifi, buttons and mqtt functions working. I am working on the screen and letting it act as a numlock keypad atm. I am planning to add functionality for potentiometors and rgb leds next, after that ill might add more mqtt functions."}]...
|
Title: Macropad esp32s3 universal software by @dan Title: Macropad esp32s3 universal software by @danielmb | Stardance
Devlogs:
Hi, i am making software for a macropad thats run by an esp32s3, at the moment i have the wifi, buttons and mqtt functions working. I am working on the screen and letting it act as a numlock keypad atm. I am planning to add functionality for potentiometors and rgb leds next, after that ill might add more mqtt functions.
So the screen and the numpad are working, i still need to add some more config options to the display and fix a few small things in the keypad, so after that i only will need to add rgb led and potentiometor functionality, a check so that pins are not used twice and better authentication. Then ill probably be finished...
|
1792957827.6366296
|
1793562627.6366296
|
|
70342
|
To do list by @Aisha_Shay | Stardance
|
Aisha_Shay
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T19:38:18Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a chrome extension for keeping track of tasks! I added a storage as well so this could even be used for long term projects. I found it fun it wasnt really that hard. I had a lot of fun doing the html and colours. This is one of my fist projects so i got to learn alot doing this. Long term tasks, short reminders and a way to easily keep track of things. I feel like this would be really helpful in general.", "repo": "https://github.com/flowerkeji-ux/ToDo-list-Extension", "demo": "https://flowerkeji-ux.github.io/ToDo-list-Extension/"}]...
|
[{"post_id": 81073, "ts": "202 [{"post_id": 81073, "ts": "2026-10-19T19:32:14Z", "hours": 1.4106, "text": "i Think this is my final vesion. I really enjoyed this"}, {"post_id": 80730, "ts": "2026-10-18T17:10:48Z", "hours": 0.2625, "text": "I made the icon. kept the font."}, {"post_id": 80708, "ts": "2026-10-18T16:14:02Z", "hours": 1.4539, "text": "To-Do list. cant think of a good name for it .working on the icons now. dont really like the font might change it"}]...
|
Title: To do list by @Aisha_Shay | Stardance
Devl Title: To do list by @Aisha_Shay | Stardance
Devlogs:
To-Do list. cant think of a good name for it .working on the icons now. dont really like the font might change it
I made the icon. kept the font.
i Think this is my final vesion. I really enjoyed this
Ships:
I made a chrome extension for keeping track of tasks! I added a storage as well so this could even be used for long term projects. I found it fun it wasnt really that hard. I had a lot of fun doing the html and colours. This is one of my fist projects so i got to learn alot doing this. Long term tasks, short reminders and a way to easily keep track of things. I feel like this would be really helpful in general....
|
1793144877.328514
|
1793231277.328514
|
|
69580
|
Spider game for CardputerADV by @Grant19 | Stardan Spider game for CardputerADV by @Grant19 | Stardance...
|
Grant19
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T19:32:56Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I attempted to make a recreation of Daddy Long Legs, an IOS game by setSnail, on the cardputer ADV with Arduino C++", "repo": "https://github.com/GitDog1203/DaddyLongLegs", "demo": "https://youtu.be/QfPZ_8-vjX0?si=IZk7pHv-R4PdxiLq"}]...
|
[{"post_id": 81071, "ts": "202 [{"post_id": 81071, "ts": "2026-10-19T19:27:51Z", "hours": 1.1536, "text": "finished up the movment!"}, {"post_id": 80727, "ts": "2026-10-18T17:00:34Z", "hours": 8.0569, "text": "I’ve gotten so far on this project! Walking, colors, text, highscores, I’m going to make walking more smooth but other than that I’m almost done!"}]...
|
Title: Spider game for CardputerADV by @Grant19 | Title: Spider game for CardputerADV by @Grant19 | Stardance
Devlogs:
I’ve gotten so far on this project! Walking, colors, text, highscores, I’m going to make walking more smooth but other than that I’m almost done!
finished up the movment!
Ships:
I attempted to make a recreation of Daddy Long Legs, an IOS game by setSnail, on the cardputer ADV with Arduino C++...
|
1793155805.6228464
|
1793242205.6228464
|
|
67710
|
Self Learning AI Agents by @arushkalra52 | Stardan Self Learning AI Agents by @arushkalra52 | Stardance...
|
arushkalra52
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-20T13:47:11Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a self-learning AI Agent that thinks, searches the web in real time, and remembers all information across sessions. It will reason through the answer and provide you with the answer by obtaining results directly from web. A simple dark-themed chat UI was built using streamlit. Challenging task was getting all the packages to get along as LangChain had major version conflicts with Gemini’s. So, I started building the agent loop from scratch by using Google’s genai package. The memory system is which I personally liked the most which means it becomes smarted every time you ask something as it stores and learns from that information. Also with the real-time web search it ensured that the agent gets you results from acquired knowledge along with saved information. Anyone can use it by just opening the link and start asking questions. You can try asking something out of which follow-up questions can be asked. You can also clear the memory anytime with the ‘Clear Memory’ button.", "repo": "https://github.com/arush4213/Self-Learning-AI-Agent", "demo": "https://selflearning-aiagent.streamlit.app/"}]...
|
[{"post_id": 81069, "ts": "202 [{"post_id": 81069, "ts": "2026-10-19T19:05:32Z", "hours": 0.5494, "text": "Updated UI with Streamlit."}, {"post_id": 80235, "ts": "2026-10-16T20:21:02Z", "hours": 4.2467, "text": "I created a self-learning AI agent entirely from scratch using Python. It uses Google Gemini, carries out real-time web searches using DuckDuckGo, and retains all the information between sessions with the help of persistent JSON memory."}]...
|
Title: Self Learning AI Agents by @arushkalra52 | Title: Self Learning AI Agents by @arushkalra52 | Stardance
Devlogs:
I created a self-learning AI agent entirely from scratch using Python. It uses Google Gemini, carries out real-time web searches using DuckDuckGo, and retains all the information between sessions with the help of persistent JSON memory.
Updated UI with Streamlit.
Ships:
I made a self-learning AI Agent that thinks, searches the web in real time, and remembers all information across sessions. It will reason through the answer and provide you with the answer by obtaining results directly from web. A simple dark-themed chat UI was built using streamlit. Challenging task was getting all the packages to get along as LangChain had major version conflicts with Gemini’s. So, I started building the agent loop from scratch by using Google’s genai package. The memory system is which I personally liked the most which means it becomes smarted every time you ask something as it stores and learns from that information. Also with the real-time web search it ensured that the agent gets you results from acquired knowledge along with saved information. Anyone can use it by just opening the link and start asking questions. You can try asking something out of which follow-up questions can be asked. You can also clear the memory anytime with the ‘Clear Memory’ button....
|
1793112841.90452
|
1793199241.90452
|
|
67902
|
Refract by @mixidmb | Stardance
|
mixidmb
|
1
|
32.0
|
594
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T19:56:54Z", "hours": 32.0, "multiplier": 18.8, "payout": 594, "blessing": "neutral", "text": "Refract! Quest Games Translation Layer. Haii! I made a way to play Quest games like Batman, Iron Man VR and AC Nexus on PC, Or any PCVR headset. You can even play Resident Evil 4 now, which is one of the most requested one :P It runs on Windows or Linux. The Android Emulator on Windows is the most compatible one. Refract Native is also on Windows and runs the game’s ARM64 code directly on the CPU, so its faster but still experimental (While recording a demo i got a pink cube in AC nexus lol, but through android emulator works!). Linux uses waydroid that just shares kernel. It’s still experimental though, so not every game works yet. Here is a video of me yapping a ton about it, and showing some gameplay >_> https://youtu.be/OpW-374mX74", "repo": "https://github.com/MIXIDtheSilly/Refract", "demo": "https://github.com/MIXIDtheSilly/Refract/releases"}]...
|
[{"post_id": 81063, "ts": "202 [{"post_id": 81063, "ts": "2026-10-19T18:20:30Z", "hours": 6.1647, "text": "Bug fixes and compatibility Okay let’s start with the big things. Iron Man VR works and runs at 140+ fps. And one of the most requested games, Resident Evil 4, runs too! It’s at around 160+ fps. It uses the old VrApi, which now works (still experimental, and 32-bit games aren’t supported). Controller haptics, the Linux Android build tools fix (game imports work now), and viewer crash reporting also work. Crashes go to viewer.err with el reason."}, {"post_id": 80654, "ts": "2026-10-18T12:31:32Z", "hours": 8.0708, "text": "Its even faster now Since last devlog, I swapped default translation layer on linux to my optimized Digitalis, and from dynarmic to Digitalis on Refract Native (windows). AND DAMNN, no one can tell me dynarmic is faster lol, from 200 fps in one of the games to 300+. Batman also runs at 120+ Linux has a working launcher now, and windows got texture compression improvements (RIP Vram) Then there are a bunch of other fixes, like Meta audio SDK working on Linux, or /sdcard storage path now resolving properly. Oh and almost forgot, FINALLY OPTIMIZED THE MAIN THREAD! It can hit 100% now because of lighter code also being JIT. This was probably the last bottleneck."}, {"post_id": 79125, "ts": "2026-10-12T19:11:22Z", "hours": 9.4442, "text": "Refract without an emulator now hai again, so over the past week I worked on Linux support and Refract Native , now you can run Quest games directly (well, translation layer) on the CPU without using QEMU. Funny JIT floating point error lol, broke my friend’s rig apart. What about Linux progress? The games run great! I tried it on North Star and it’s hitting 80 fps, cuz as you probably know we also don’t have to emulate the kernel there as Linux and Android are basically the same thing. also I hit 12 issues on GitHub (help)"}, {"post_id": 77853, "ts": "2026-10-08T15:22:14Z", "hours": 7.9314, "text": "Haii! So some of you know i got banned for a while but i’m back! New Project Refract! (You can now play Meta Quest titles on PC & PCVR) Refract runs Quest games on a Windows PC (Linux support soon! ), and in a PC VR headset through SteamVR. The APK runs in Android on your machine, Refract gives it fake Quest calls, and the eye frames come back out to your headset. Refract is for games you own! credit required if you use the code :P It started as a fork of AXRB by Feline Reintgen (But now its using my code so ig we are superior lol), and the launcher’s Meta sign-in comes from RiftLift. Translator is Digitalis. Oh forgot to mention that i already worked on it for a while, but wasn’t able to track time because of the suspension. And here is my playing batman on it."}]...
|
Title: Refract by @mixidmb | Stardance
Devlogs:
H Title: Refract by @mixidmb | Stardance
Devlogs:
Haii! So some of you know i got banned for a while but i’m back! New Project Refract! (You can now play Meta Quest titles on PC & PCVR) Refract runs Quest games on a Windows PC (Linux support soon! ), and in a PC VR headset through SteamVR. The APK runs in Android on your machine, Refract gives it fake Quest calls, and the eye frames come back out to your headset. Refract is for games you own! credit required if you use the code :P It started as a fork of AXRB by Feline Reintgen (But now its using my code so ig we are superior lol), and the launcher’s Meta sign-in comes from RiftLift. Translator is Digitalis. Oh forgot to mention that i already worked on it for a while, but wasn’t able to track time because of the suspension. And here is my playing batman on it.
Refract without an emulator now hai again, so over the past week I worked on Linux support and Refract Native , now you can run Quest games directly (well, translation layer) on the CPU without using QEMU. Funny JIT floating point error lol, broke my friend’s rig apart. What about Linux progress? The games run great! I tried it on North Star and it’s hitting 80 fps, cuz as you probably know we also don’t have to emulate the kernel there as Linux and Android are basically the same thing. also I hit 12 issues on GitHub (help)
Its even faster now Since last devlog, I swapped default translation layer on linux to my optimized Digitalis, and from dynarmic to Digitalis on Refract Native (windows). AND DAMNN, no one can tell me dynarmic is faster lol, from 200 fps in one of the games to 300+. Batman also runs at 120+ Linux has a working launcher now, and windows got texture compression improvements (RIP Vram) Then there are a bunch of other fixes, like Meta audio SDK working on Linux, or /sdcard storage path now resolving properly. Oh and almost forgot, FINALLY OPTIMIZED THE MAIN THREAD! It can hit 100% now because of lighter code also being JIT. This was probably the last bottleneck.
Bug fixes and compatibility Okay let’s start with the big things. Iron Man VR works and runs at 140+ fps. And one of the most requested games, Resident Evil 4, runs too! It’s at around 160+ fps. It uses the old VrApi, which now works (still experimental, and 32-bit games aren’t supported). Controller haptics, the Linux Android build tools fix (game imports work now), and viewer crash reporting also work. Crashes go to viewer.err with el reason.
Ships:
Refract! Quest Games Translation Layer. Haii! I made a way to play Quest games like Batman, Iron Man VR and AC Nexus on PC, Or any PCVR headset. You can even play Resident Evil 4 now, which is one of the most requested one :P It runs on Windows or Linux. The Android Emulator on Windows is the most compatible one. Refract Native is also on Windows and runs the game’s ARM64 code directly on the CPU, so its faster but still experimental (While recording a demo i got a pink cube in AC nexus lol, but through android emulator works!). Linux uses waydroid that just shares kernel. It’s still experimental though, so not every game works yet. Here is a video of me yapping a ton about it, and showing some gameplay >_> https://youtu.be/OpW-374mX74...
|
1793155836.2462945
|
1793242236.2462945
|
|
70531
|
Chess Trainer But better?? by @Trofek | Stardance
|
Trofek
|
0
|
0.5
|
0
|
[]
|
[{"post_id": 81053, "ts": "202 [{"post_id": 81053, "ts": "2026-10-19T17:54:43Z", "hours": 0.5036, "text": "I am currently working on something simillar to chess.com. I am a big chess enjoyer so i started a project to play chess like a video game, right now im wondering if it should be an app or website, i have a prototype of it right now setup. plz like"}]...
|
Title: Chess Trainer But better?? by @Trofek | Sta Title: Chess Trainer But better?? by @Trofek | Stardance
Devlogs:
I am currently working on something simillar to chess.com. I am a big chess enjoyer so i started a project to play chess like a video game, right now im wondering if it should be an app or website, i have a prototype of it right now setup. plz like...
|
1793040486.989727
|
1793645286.989727
|
|
28432
|
RadiaX (Mechanics) by @Marco_da_mechanic | Stardan RadiaX (Mechanics) by @Marco_da_mechanic | Stardance...
|
Marco_da_mechanic
|
0
|
19.49
|
0
|
[]
|
[{"post_id": 81051, "ts": "202 [{"post_id": 81051, "ts": "2026-10-19T17:46:48Z", "hours": 1.4336, "text": "ALR. This thing is finished, BOM is ready and Github repo too. The assembly guide will follow soon, cause I think it’ll make more sence with the actual hardware as a ref picture"}, {"post_id": 71280, "ts": "2026-09-20T15:52:45Z", "hours": 4.2839, "text": "The Scanner is now finished, atleast the mechanical principles. The only things missing now are @Luka ’s electronics and the Lead."}, {"post_id": 69270, "ts": "2026-09-16T18:24:02Z", "hours": 3.3336, "text": "Back to the Cad. I added and adjusted some stuff in the Dual X-Ray tube design. And fit @Luka ‘s electronics in there. Also I’ve kinda finished the first scanner prototype. Some adjustments needed"}, {"post_id": 45779, "ts": "2026-08-12T14:13:00Z", "hours": 1.15, "text": "One of the last steps. A small step for y’all but a big one for me. The filter system is done, I designed them and added the mounting. Now I need to find some magnets with a 10mm diameter and a threaded rod attached. The last things are the ventilation and the cable routing. Btw if someone followed the last logs you can see a huge diffrence, I was on vacation and had my laptop with me, and I didn’t have internet. So I couldn’t upload lapses. Smt around 40h are missing but they are in the fusion time tracker (it’s a add-on if someone cares). So yeah that’s it."}, {"post_id": 22450, "ts": "2026-07-04T22:24:56Z", "hours": 6.5544, "text": "The dual tube design is nearly finished yayy. So I can’t really tell all the things I did, but this was mostly CAD, the Important structual Parts are calculated and integrated. But this design was really fun due to the challanges I’ve experienced with it. The percicion needed, the integration of the HV electronics, Cooling, how to keep it sealed and yeah. There are still a few things missing, Luka’s PCB, a mounting for the movement shaft and the exact dimensions of the slip ring. And really important side notice, if you’re doing a longer CAD session, please safe every major step. Fusion crashed and I got the biggest scare of my life cause I thought everything was gone, so yeah thats it."}, {"post_id": 20254, "ts": "2026-07-01T20:00:41Z", "hours": 1.5203, "text": "(I know the CAD looks bad but it’s just a Dummy) Today I started with the design of the dual X-Ray tube design and It’s so much worse than a single tube design, the HV is still a problem, the sword like thingie you can see in the middle is a copper cooling pipe, and copper likes to conduct electricity. Transformer Oil will be used in there, but the metal residue and just dust can have a hugeee impact on the isolation factor, than the kables which don’t like to be twisted, the weight bc I only have one mounting point, or i take a second mounting with a bearing to suport the weight and use the other mounting point just for the rotation. And yeah that’s basically it for today"}, {"post_id": 18676, "ts": "2026-06-29T21:19:17Z", "hours": 1.2142, "text": "Stuff I’ve done in maccondo, summary is AI written . I’ve added radial bearings to handle the radial loads and updated the CAD model accordingly. I calculated everything for the radial force distribution and integrated it into the design. I also fixed issues in the Fusion assembly and rebuilt parts of the mounting plate–flange connection because components kept moving in the wrong direction during assembly. I created an assembly setup on the flange and mounting plate, then exported it into an animation for later use. I updated the technical drawings with additional parameters and spent around 1h45 in CAD work. I worked through a lot of math for the scanner design, mainly the lead shielding requirements and the geometry between the X-ray tube and the screen. That took most of the time since I had to go back and forth with missing values and references, and it also changed the overall tube-to-detector geometry. The calculations are done now and fully integrated into the design. I redesigned the entire enclosure because the old one looked like a shoe box. The new one is more like a proper housing/oven design. I also added cable mountings and defined parts of the internal lead geometry, which will later depend on the electronics. I realized the plate could slip or put load on the stepper motor if the object isn’t perfectly centered, so I added a proper flange connection part to stabilize it. I also started planning manufacturing, but it’s still unclear who will machine the 10mm aluminum plates or how exactly the parts will be produced. On the electronics side, I integrated components into the assembly. I also revisited the peristaltic pump design, which I originally built, printed, and assembled with a stepper motor. It generated pressure at first, but when I tried pumping water, the stepper motor stalled. I tried troubleshooting possible causes like tube compression, friction, and PLA interference, but nothing fully solved it yet. I started a new improved pump design with better geometry, even though the first version made me question the design. That’s basically everything I worked on so far. Lapse somehow doesn’t like me, and there are a pretty many hours missing. 12.4h after July 1"}]...
|
Title: RadiaX (Mechanics) by @Marco_da_mechanic | Title: RadiaX (Mechanics) by @Marco_da_mechanic | Stardance
Devlogs:
Stuff I’ve done in maccondo, summary is AI written . I’ve added radial bearings to handle the radial loads and updated the CAD model accordingly. I calculated everything for the radial force distribution and integrated it into the design. I also fixed issues in the Fusion assembly and rebuilt parts of the mounting plate–flange connection because components kept moving in the wrong direction during assembly. I created an assembly setup on the flange and mounting plate, then exported it into an animation for later use. I updated the technical drawings with additional parameters and spent around 1h45 in CAD work. I worked through a lot of math for the scanner design, mainly the lead shielding requirements and the geometry between the X-ray tube and the screen. That took most of the time since I had to go back and forth with missing values and references, and it also changed the overall tube-to-detector geometry. The calculations are done now and fully integrated into the design. I redesigned the entire enclosure because the old one looked like a shoe box. The new one is more like a proper housing/oven design. I also added cable mountings and defined parts of the internal lead geometry, which will later depend on the electronics. I realized the plate could slip or put load on the stepper motor if the object isn’t perfectly centered, so I added a proper flange connection part to stabilize it. I also started planning manufacturing, but it’s still unclear who will machine the 10mm aluminum plates or how exactly the parts will be produced. On the electronics side, I integrated components into the assembly. I also revisited the peristaltic pump design, which I originally built, printed, and assembled with a stepper motor. It generated pressure at first, but when I tried pumping water, the stepper motor stalled. I tried troubleshooting possible causes like tube compression, friction, and PLA interference, but nothing fully solved it yet. I started a new improved pump design with better geometry, even though the first version made me question the design. That’s basically everything I worked on so far. Lapse somehow doesn’t like me, and there are a pretty many hours missing. 12.4h after July 1
(I know the CAD looks bad but it’s just a Dummy) Today I started with the design of the dual X-Ray tube design and It’s so much worse than a single tube design, the HV is still a problem, the sword like thingie you can see in the middle is a copper cooling pipe, and copper likes to conduct electricity. Transformer Oil will be used in there, but the metal residue and just dust can have a hugeee impact on the isolation factor, than the kables which don’t like to be twisted, the weight bc I only have one mounting point, or i take a second mounting with a bearing to suport the weight and use the other mounting point just for the rotation. And yeah that’s basically it for today
The dual tube design is nearly finished yayy. So I can’t really tell all the things I did, but this was mostly CAD, the Important structual Parts are calculated and integrated. But this design was really fun due to the challanges I’ve experienced with it. The percicion needed, the integration of the HV electronics, Cooling, how to keep it sealed and yeah. There are still a few things missing, Luka’s PCB, a mounting for the movement shaft and the exact dimensions of the slip ring. And really important side notice, if you’re doing a longer CAD session, please safe every major step. Fusion crashed and I got the biggest scare of my life cause I thought everything was gone, so yeah thats it.
One of the last steps. A small step for y’all but a big one for me. The filter system is done, I designed them and added the mounting. Now I need to find some magnets with a 10mm diameter and a threaded rod attached. The last things are the ventilation and the cable routing. Btw if someone followed the last logs you can see a huge diffrence, I was on vacation and had my laptop with me, and I didn’t have internet. So I couldn’t upload lapses. Smt around 40h are missing but they are in the fusion time tracker (it’s a add-on if someone cares). So yeah that’s it.
Back to the Cad. I added and adjusted some stuff in the Dual X-Ray tube design. And fit @Luka ‘s electronics in there. Also I’ve kinda finished the first scanner prototype. Some adjustments needed
The Scanner is now finished, atleast the mechanical principles. The only things missing now are @Luka ’s electronics and the Lead.
ALR. This thing is finished, BOM is ready and Github repo too. The assembly guide will follow soon, cause I think it’ll make more sence with the actual hardware as a ref picture...
|
1793184917.3648505
|
1793789717.3648505
|
|
32613
|
ImageTranslation by @nbth | Stardance
|
nbth
|
0
|
23.33
|
0
|
[]
|
[{"post_id": 81042, "ts": "202 [{"post_id": 81042, "ts": "2026-10-19T17:24:25Z", "hours": 0.4008, "text": "First Release work good on https://cubari.moe/read/mangadex/7a82d0ef-034e-427b-bf5c-ed7d08ddbd6b/1/1/ check the release note please https://github.com/code-ga/image-translate-extension/releases/tag/v0.1.0"}, {"post_id": 80698, "ts": "2026-10-18T15:29:22Z", "hours": 3.6092, "text": "Devlog TL;DR Translation: Experimented with local NLLB and Google Translate, weighing privacy against performance. Architecture: Moved translation into an offscreen document with a dedicated Web Worker. Performance: Added caching, task scheduling, and bounded concurrency. OCR: Improved error handling, caching, and image processing reliability. Release: Brought the core features together for Image Translate v0.1.0. Privacy vs. performance My original goal was to keep everything local, so users wouldn’t have to send their text to an external service. However, NLLB-200 comes with a hefty model size of around 2.4 GB, which can put serious pressure on browser memory. I experimented with Google Translate as an alternative. It’s much lighter on the user’s device, but there’s a trade-off: text sent for translation leaves the device and is processed by a third-party service. That means giving up some privacy for convenience and lower resource usage. Neither approach is perfect. Local inference costs memory and performance; hosted translation introduces an external data dependency. I’m still figuring out the right balance for an extension whose original motivation was privacy. Moving heavy work out of the background Chrome’s Manifest V3 service worker isn’t ideal for heavy inference. I moved translation into an offscreen document and added a dedicated Web Worker for model inference. The background script now mainly routes messages. I also switched to runtime.connect ports for longer-running communication to reduce messaging failures when the service worker gets suspended. Caching and scheduling Repeated requests were wasting time, so I added an L1 memory cache and an L2 IndexedDB cache, using SHA-256 keys to identify repeated requests. A priority queue, bounded concurrency, and admission control help prevent pages containing lots of images from overwhelming the extension. Debugging wasn’t fun I ran into WebGPU/WASM initialization failures, an OCR crash caused by getContext is not a function , and InvalidCharacterError from malformed Base64 data. Turns out, running an ML model is only half the battle. Browser APIs, cross-origin restrictions, and memory limits can be just as frustrating. Making OCR more reliable I switched batch processing to Promise.allSettled , allowing individual images to fail without breaking the whole batch. OCR results are cached locally with a seven-day TTL, and the popup now tracks errors per item. I also added script detection, a tinyld fallback, text normalization, OCR region grouping, and token protection to support the translation pipeline. What’s next? Image Translate v0.1.0 brings together automatic image and canvas detection, PaddleOCR, translation, hover popups, caching, domain settings, and error tracking. The next challenge is finding a sensible balance between translation quality, memory usage, and privacy. Ideally, users should have a clear choice between local translation and hosted services rather than having that trade-off hidden from them."}, {"post_id": 59653, "ts": "2026-09-01T15:55:27Z", "hours": 4.4203, "text": "TL;DR Messaging: Fixed a silent settings synchronization bug by introducing typed, namespaced messages. Hover Translation: Added a hover-to-translate popup with language selection and race-condition-safe handling. Default Language: Users can now configure a default translation language that syncs across tabs. Error Feedback: OCR and translation failures now show toast notifications instead of silently failing. Domain Rules: Fixed empty domain lists incorrectly allowing translation everywhere. Auto-translate: Restored automatic translation behavior that was accidentally removed during the refactor. Unified messaging I discovered a pretty annoying bug in the settings synchronization system. The popup was sending: ts\"notify-settings-changed\" while the background script was listening for: ts\"settings/notify-changed\" Because of this mismatch, settings changes were not propagated correctly and failed silently. To avoid this kind of problem in the future, I introduced types/messages.ts with typed, namespaced message routing. Now the message names are centralized instead of being manually written across different parts of the extension. Settings changes can now propagate correctly and update active tabs in real time. Hover translation popup The overlay can now translate individual OCR regions directly through a hover popup. When hovering over an OCR box, the extension displays: The original detected text A target language selector The translated result The popup uses a small debounce before appearing and has a delayed close behavior when the mouse leaves. If the user moves back into the popup, the close action is cancelled. I also had to handle race conditions. Translation requests can finish in a different order than they were created, so late responses are ignored when they no longer belong to the currently active popup. The popup handles its own translation request and lifecycle, which makes it much more self-contained. Default translation language (model error) Users can now choose a default target language in Settings. The current default is Vietnamese ( vi ), with support for 17 languages. The setting is stored using browser.storage.sync and changes are broadcast to active tabs. The language selected inside a hover popup is temporary, while the configured default language remains the user’s persistent preference. In the future we will switch from machine translate or deep learning translate Error feedback instead of silent failures Previously, OCR and translation errors could fail without giving the user any useful feedback. I added utils/toast.ts to provide inline error notifications. Errors are debounced and deduplicated so the user does not get spammed with notifications when multiple failures happen at once. I also extracted shared popup styling into utils/popup-base.ts to reduce duplicated UI logic. Empty domains fix There was another logic issue with enabledDomains . An empty domain list should mean: Translate nothing. However, the previous implementation treated an empty list as if every domain was allowed. This has now been fixed in both background.ts and isDomainAllowed() . An empty list correctly disables translation entirely. Auto-translate restored During the refactor, some of the automatic translation logic was accidentally removed. This included: autoTranslateIfAllowed() URL polling The live DOM observer As a result, the extension would remain inactive until the user manually triggered it. These behaviors have now been restored, so automatic translation works again when the page loads and when new content appears dynamically."}, {"post_id": 49630, "ts": "2026-08-18T14:56:13Z", "hours": 5.2028, "text": "tl;dr WXT.js: Refactored the extension into smaller, more maintainable modules. Context Menu: Inject content scripts on pages to reliably detect clicked elements — a privacy/resource trade-off. Overlay: Reworked image overlays to be more independent from the website’s DOM and avoid rendering on invisible images. SPA Support: Added DOM-change detection for React-style navigation, at the cost of some extra resource usage. PaddleOCR: Still fighting text-box grouping 😭. Current grouping is imperfect, and we’re considering a better OCR model. WXT.js This is really easy. Almost everything is guided on their introduction page, so I need to follow it. Also, I need to refactor code from 1 huge file into many smaller files, which helps me maintain this more easily better context menu ( and first trade-off) Uh, due to the main problem that extensions don’t know which one was clicked. So I need to trade off user privacy with convenience. From now on, extensions will inject a content script into every page that you open, including enabling and disabling auto-translation better overlay box Over time, the extension displays an image by adding an extension element to a div, which is the image tag’s parent. But now we switch the approach to create a separate div that does not depend ( or depends less) on how the page works. Also, we need to check whether the current image displays are visible, or we will not render an overlay box for them. Add case for SPA web For frameworks like React.js, navigation is often handled as a Single-Page Application (SPA) update rather than a traditional page reload. When the user navigates to a different page, the application may update the DOM and the URL in the browser without triggering a full page refresh.Because of this, the extension cannot rely only on events such as page reloads or tab switches to detect when it needs to update its state. We therefore need to listen for DOM changes so the extension can detect when the application has rendered new content and reload or reinitialize its functionality accordingly. This will consume more resources, but we are unable to measure them Paddle-OCR and grouping text box (I hate this; why yolo ) This is the very unsolved problem that may annoy the user and me. The problem is paddle-ocr working like this, meaning it will separate the text bubble into smaller parts, which will make translation crazy. Currently, we are adding grouping to solve the issue of text on the same line, but the solution is not ready yet. Also, we are considering switching models for a better experience"}, {"post_id": 36271, "ts": "2026-07-28T08:22:41Z", "hours": 6.1336, "text": "tl;dr I am trying to make the extension more convenient for the user and boost the performance of AI tasks. And switch to a new framework for a better development cycle ( https://crxjs.dev is really bad; don’t use that currently) Why Because I recently found a manga page that has the manga that I want to read, I tried to make the extension more useful by adding a domain system (URL matching system ) which will automatically translate pages that match the URL. CORS problem This is not the main section, but I want to tell you about why this extension has some limitations with strictly page. Due to the original idea, focus on local first, but Chrome’s security design mainly blocks other processes from accessing image data of pages that have a config to block ( their CORS config ), so our extension will unable to run on that page, also i will work on a local backend to handle this problem (in a good situation) #Domain system design This design is quite weird because that firstly working on all page start will that domain. Then I used that, and all image include thumnail will be translated, and so i switched to a regex design, which will be more dynamic for users Extension page I am trying to make them easier to use, so I designed a simple ui ( tell AI to do that ). That will be more useful in the future ( currently, that just helps me in debug stage ) Background change Because of real-time (auto-translation mode ), we need to switch from using single mode to batch mode of the OCR library. If we continue to use the legacy solution that will make the user’s computer overloaded and cause a huge delay ( and error rate ). So we are switching to this solution. Also, is the batching solution for the background ( manager process, orchestrator) The background process will collect tasks from the content.js process in all tabs and then send them to the OCR and translate process ( batchingly, like 5 images per step, in about 80ms if no image is in the queue to keep offscreen work) build problem Vite builds to modular JavaScript code. But browsers don’t like that due to backward compatibility, so they reject it. next step I will migrating to mordern framework ( https://wxt.dev/ ), which will help me in the build process (I have a build problem with the module webpack of Vite, sadly )"}, {"post_id": 24788, "ts": "2026-07-08T16:12:20Z", "hours": 3.5633, "text": "After many efforts, I can OCR the image locally. (pic. 1 ) Tech choosing Firstly, I need to find a way to help me use the npm ecosystem. So I know that I can use Vite ( because Chrome just cares about how you define config in manifest, other files are not important ). but their don’t support live-reload, which makes me feel very bad in development. I hope I can use https://crxjs.dev/guide/installation/create-crxjs/ for this. UI and UX development Then I think that I want to build up some menu in the extension page, which will make my extension very modern. But I think about that, if I try to translate just one image, how can the user translate just one image? Because of that, I decided to build up a context menu that allows users to choose what they want to translate and just leave the extension page there with hello text. (pic. 2 and pic. 3 ) CORS problem Then I need to solve some problem with CORS in Chrome ( legendary web development problem ). They won’t allow me to just read the image tag, so I need to send the image URL to the background Context problem But background doesn’t have the context (like document.createElement or canvas, which will be able to boost my OCR speed ) which normal HTML page has, so I need to create an offscreen. Then the CORS problem comes back, and I need to build up some indexed storage solution to fix this. Thanks to Chrome. TL;DR And after their cors problem, isolation problem, chrome problem i here to present you the image that has the box showing you text that you see 😢😢"}]...
|
Title: ImageTranslation by @nbth | Stardance
Devl Title: ImageTranslation by @nbth | Stardance
Devlogs:
After many efforts, I can OCR the image locally. (pic. 1 ) Tech choosing Firstly, I need to find a way to help me use the npm ecosystem. So I know that I can use Vite ( because Chrome just cares about how you define config in manifest, other files are not important ). but their don’t support live-reload, which makes me feel very bad in development. I hope I can use https://crxjs.dev/guide/installation/create-crxjs/ for this. UI and UX development Then I think that I want to build up some menu in the extension page, which will make my extension very modern. But I think about that, if I try to translate just one image, how can the user translate just one image? Because of that, I decided to build up a context menu that allows users to choose what they want to translate and just leave the extension page there with hello text. (pic. 2 and pic. 3 ) CORS problem Then I need to solve some problem with CORS in Chrome ( legendary web development problem ). They won’t allow me to just read the image tag, so I need to send the image URL to the background Context problem But background doesn’t have the context (like document.createElement or canvas, which will be able to boost my OCR speed ) which normal HTML page has, so I need to create an offscreen. Then the CORS problem comes back, and I need to build up some indexed storage solution to fix this. Thanks to Chrome. TL;DR And after their cors problem, isolation problem, chrome problem i here to present you the image that has the box showing you text that you see 😢😢
tl;dr I am trying to make the extension more convenient for the user and boost the performance of AI tasks. And switch to a new framework for a better development cycle ( https://crxjs.dev is really bad; don’t use that currently) Why Because I recently found a manga page that has the manga that I want to read, I tried to make the extension more useful by adding a domain system (URL matching system ) which will automatically translate pages that match the URL. CORS problem This is not the main section, but I want to tell you about why this extension has some limitations with strictly page. Due to the original idea, focus on local first, but Chrome’s security design mainly blocks other processes from accessing image data of pages that have a config to block ( their CORS config ), so our extension will unable to run on that page, also i will work on a local backend to handle this problem (in a good situation) #Domain system design This design is quite weird because that firstly working on all page start will that domain. Then I used that, and all image include thumnail will be translated, and so i switched to a regex design, which will be more dynamic for users Extension page I am trying to make them easier to use, so I designed a simple ui ( tell AI to do that ). That will be more useful in the future ( currently, that just helps me in debug stage ) Background change Because of real-time (auto-translation mode ), we need to switch from using single mode to batch mode of the OCR library. If we continue to use the legacy solution that will make the user’s computer overloaded and cause a huge delay ( and error rate ). So we are switching to this solution. Also, is the batching solution for the background ( manager process, orchestrator) The background process will collect tasks from the content.js process in all tabs and then send them to the OCR and translate process ( batchingly, like 5 images per step, in about 80ms if no image is in the queue to keep offscreen work) build problem Vite builds to modular JavaScript code. But browsers don’t like that due to backward compatibility, so they reject it. next step I will migrating to mordern framework ( https://wxt.dev/ ), which will help me in the build process (I have a build problem with the module webpack of Vite, sadly )
tl;dr WXT.js: Refactored the extension into smaller, more maintainable modules. Context Menu: Inject content scripts on pages to reliably detect clicked elements — a privacy/resource trade-off. Overlay: Reworked image overlays to be more independent from the website’s DOM and avoid rendering on invisible images. SPA Support: Added DOM-change detection for React-style navigation, at the cost of some extra resource usage. PaddleOCR: Still fighting text-box grouping 😭. Current grouping is imperfect, and we’re considering a better OCR model. WXT.js This is really easy. Almost everything is guided on their introduction page, so I need to follow it. Also, I need to refactor code from 1 huge file into many smaller files, which helps me maintain this more easily better context menu ( and first trade-off) Uh, due to the main problem that extensions don’t know which one was clicked. So I need to trade off user privacy with convenience. From now on, extensions will inject a content script into every page that you open, including enabling and disabling auto-translation better overlay box Over time, the extension displays an image by adding an extension element to a div, which is the image tag’s parent. But now we switch the approach to create a separate div that does not depend ( or depends less) on how the page works. Also, we need to check whether the current image displays are visible, or we will not render an overlay box for them. Add case for SPA web For frameworks like React.js, navigation is often handled as a Single-Page Application (SPA) update rather than a traditional page reload. When the user navigates to a different page, the application may update the DOM and the URL in the browser without triggering a full page refresh.Because of this, the extension cannot rely only on events such as page reloads or tab switches to detect when it needs to update its state. We therefore need to listen for DOM changes so the extension can detect when the application has rendered new content and reload or reinitialize its functionality accordingly. This will consume more resources, but we are unable to measure them Paddle-OCR and grouping text box (I hate this; why yolo ) This is the very unsolved problem that may annoy the user and me. The problem is paddle-ocr working like this, meaning it will separate the text bubble into smaller parts, which will make translation crazy. Currently, we are adding grouping to solve the issue of text on the same line, but the solution is not ready yet. Also, we are considering switching models for a better experience
TL;DR Messaging: Fixed a silent settings synchronization bug by introducing typed, namespaced messages. Hover Translation: Added a hover-to-translate popup with language selection and race-condition-safe handling. Default Language: Users can now configure a default translation language that syncs across tabs. Error Feedback: OCR and translation failures now show toast notifications instead of silently failing. Domain Rules: Fixed empty domain lists incorrectly allowing translation everywhere. Auto-translate: Restored automatic translation behavior that was accidentally removed during the refactor. Unified messaging I discovered a pretty annoying bug in the settings synchronization system. The popup was sending: ts"notify-settings-changed" while the background script was listening for: ts"settings/notify-changed" Because of this mismatch, settings changes were not propagated correctly and failed silently. To avoid this kind of problem in the future, I introduced types/messages.ts with typed, namespaced message routing. Now the message names are centralized instead of being manually written across different parts of the extension. Settings changes can now propagate correctly and update active tabs in real time. Hover translation popup The overlay can now translate individual OCR regions directly through a hover popup. When hovering over an OCR box, the extension displays: The original detected text A target language selector The translated result The popup uses a small debounce before appearing and has a delayed close behavior when the mouse leaves. If the user moves back into the popup, the close action is cancelled. I also had to handle race conditions. Translation requests can finish in a different order than they were created, so late responses are ignored when they no longer belong to the currently active popup. The popup handles its own translation request and lifecycle, which makes it much more self-contained. Default translation language (model error) Users can now choose a default target language in Settings. The current default is Vietnamese ( vi ), with support for 17 languages. The setting is stored using browser.storage.sync and changes are broadcast to active tabs. The language selected inside a hover popup is temporary, while the configured default language remains the user’s persistent preference. In the future we will switch from machine translate or deep learning translate Error feedback instead of silent failures Previously, OCR and translation errors could fail without giving the user any useful feedback. I added utils/toast.ts to provide inline error notifications. Errors are debounced and deduplicated so the user does not get spammed with notifications when multiple failures happen at once. I also extracted shared popup styling into utils/popup-base.ts to reduce duplicated UI logic. Empty domains fix There was another logic issue with enabledDomains . An empty domain list should mean: Translate nothing. However, the previous implementation treated an empty list as if every domain was allowed. This has now been fixed in both background.ts and isDomainAllowed() . An empty list correctly disables translation entirely. Auto-translate restored During the refactor, some of the automatic translation logic was accidentally removed. This included: autoTranslateIfAllowed() URL polling The live DOM observer As a result, the extension would remain inactive until the user manually triggered it. These behaviors have now been restored, so automatic translation works again when the page loads and when new content appears dynamically.
Devlog TL;DR Translation: Experimented with local NLLB and Google Translate, weighing privacy against performance. Architecture: Moved translation into an offscreen document with a dedicated Web Worker. Performance: Added caching, task scheduling, and bounded concurrency. OCR: Improved error handling, caching, and image processing reliability. Release: Brought the core features together for Image Translate v0.1.0. Privacy vs. performance My original goal was to keep everything local, so users wouldn’t have to send their text to an external service. However, NLLB-200 comes with a hefty model size of around 2.4 GB, which can put serious pressure on browser memory. I experimented with Google Translate as an alternative. It’s much lighter on the user’s device, but there’s a trade-off: text sent for translation leaves the device and is processed by a third-party service. That means giving up some privacy for convenience and lower resource usage. Neither approach is perfect. Local inference costs memory and performance; hosted translation introduces an external data dependency. I’m still figuring out the right balance for an extension whose original motivation was privacy. Moving heavy work out of the background Chrome’s Manifest V3 service worker isn’t ideal for heavy inference. I moved translation into an offscreen document and added a dedicated Web Worker for model inference. The background script now mainly routes messages. I also switched to runtime.connect ports for longer-running communication to reduce messaging failures when the service worker gets suspended. Caching and scheduling Repeated requests were wasting time, so I added an L1 memory cache and an L2 IndexedDB cache, using SHA-256 keys to identify repeated requests. A priority queue, bounded concurrency, and admission control help prevent pages containing lots of images from overwhelming the extension. Debugging wasn’t fun I ran into WebGPU/WASM initialization failures, an OCR crash caused by getContext is not a function , and InvalidCharacterError from malformed Base64 data. Turns out, running an ML model is only half the battle. Browser APIs, cross-origin restrictions, and memory limits can be just as frustrating. Making OCR more reliable I switched batch processing to Promise.allSettled , allowing individual images to fail without breaking the whole batch. OCR results are cached locally with a seven-day TTL, and the popup now tracks errors per item. I also added script detection, a tinyld fallback, text normalization, OCR region grouping, and token protection to support the translation pipeline. What’s next? Image Translate v0.1.0 brings together automatic image and canvas detection, PaddleOCR, translation, hover popups, caching, domain settings, and error tracking. The next challenge is finding a sensible balance between translation quality, memory usage, and privacy. Ideally, users should have a clear choice between local translation and hosted services rather than having that trade-off hidden from them.
First Release work good on https://cubari.moe/read/mangadex/7a82d0ef-034e-427b-bf5c-ed7d08ddbd6b/1/1/ check the release note please https://github.com/code-ga/image-translate-extension/releases/tag/v0.1.0...
|
1792799364.855267
|
1793404164.855267
|
|
46067
|
My own site! by @nitikpsn | Stardance
|
nitikpsn
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T17:27:09Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "shipping my site ;)", "repo": "https://github.com/Nitikpsn/nitik-personal-siite", "demo": "https://www.nitikpsn.xyz/"}]...
|
[{"post_id": 81041, "ts": "202 [{"post_id": 81041, "ts": "2026-10-19T17:21:50Z", "hours": 2.3806, "text": "My personal site is done ;)"}]...
|
Title: My own site! by @nitikpsn | Stardance
Devl Title: My own site! by @nitikpsn | Stardance
Devlogs:
My personal site is done ;)
Ships:
shipping my site ;)...
|
1793195762.7548575
|
1793282162.7548575
|
|
16497
|
HYDRA by @JoonHyuk | Stardance
|
JoonHyuk
|
0
|
1.37
|
0
|
[]
|
[{"post_id": 8104, "ts": "2026 [{"post_id": 8104, "ts": "2026-06-13T15:01:43Z", "hours": 0.2733, "text": "FINISHED ALL WIRING!"}, {"post_id": 7263, "ts": "2026-06-12T03:36:02Z", "hours": 1.0928, "text": "FINSIHED DAY 1"}]...
|
Title: HYDRA by @JoonHyuk | Stardance
Devlogs:
FI Title: HYDRA by @JoonHyuk | Stardance
Devlogs:
FINSIHED DAY 1
FINISHED ALL WIRING!...
|
1792763260.9811487
|
1793368060.9811487
|
|
70380
|
Cosmic Pulse by @ayush_madan2010 | Stardance
|
ayush_madan2010
|
0
|
1.0
|
0
|
[]
|
[{"post_id": 81039, "ts": "202 [{"post_id": 81039, "ts": "2026-10-19T17:20:41Z", "hours": 1.0033, "text": "Cosmic Pulse — Development Log Today, I built the initial Cosmic Pulse astronomy dashboard. I worked on the dark space-themed interface, live local clock, NASA astronomy image integration, and readable astronomy descriptions. I also worked through API and rendering issues to get the main features functioning. Next session Plans:*Add date navigation, explore previous astronomy discoveries, and improve the interactive experience. Time spent: Around an hour to set everything and start working"}]...
|
Title: Cosmic Pulse by @ayush_madan2010 | Stardanc Title: Cosmic Pulse by @ayush_madan2010 | Stardance
Devlogs:
Cosmic Pulse — Development Log Today, I built the initial Cosmic Pulse astronomy dashboard. I worked on the dark space-themed interface, live local clock, NASA astronomy image integration, and readable astronomy descriptions. I also worked through API and rendering issues to get the main features functioning. Next session Plans:*Add date navigation, explore previous astronomy discoveries, and improve the interactive experience. Time spent: Around an hour to set everything and start working...
|
1793008379.5380685
|
1793613179.5380685
|
|
60348
|
Frenzi by @frenchwizz | Stardance
|
frenchwizz
|
0
|
0.38
|
0
|
[]
|
[{"post_id": 81037, "ts": "202 [{"post_id": 81037, "ts": "2026-10-19T17:05:02Z", "hours": 0.3778, "text": "Initial Devlog"}]...
|
Title: Frenzi by @frenchwizz | Stardance
Devlogs: Title: Frenzi by @frenchwizz | Stardance
Devlogs:
Initial Devlog...
|
1793033428.9715018
|
1793638228.9715018
|
|
68159
|
willy's blog by @asherwandenreich | Stardance
|
asherwandenreich
|
0
|
5.52
|
0
|
[]
|
[{"post_id": 81035, "ts": "202 [{"post_id": 81035, "ts": "2026-10-19T17:01:55Z", "hours": 2.4525, "text": "Pushed “dark mode & about pg.” Deleted some unused files that came from installing next.js on the wrong layer/folder. Launched the website via npm run dev and used the VS Code Simple Browser feature. Took html notes in html.md, learned spacing, font size, and font color code. Found out I couldn’t use an apostrophe, and learned how to make next.js understand. Deleted all the default next.js features and started using Tailwind to make it look presentable. Finally made what I’m most proud of this devlog: the light/dark mode toggle switch. Switched dark mode from following the OS light/dark mode to following a class. Tested if it works by adding the class to layout.tsx. Made first client component (components/darkmode.tsx). Made my own button, troubleshooted an error caused by a missing return, and import/export."}, {"post_id": 79730, "ts": "2026-10-15T07:39:26Z", "hours": 0.7, "text": "Finished “Build Your Own Blog,” yay! In the repo there’s a little .md I created to take notes on the git commands and the flags I used. Spent a while pushing the code to GitHub through the terminal instead of using Claude, which I was used to doing because of a hackathon I did with my friends. Spent more time finnicking around with Vercel (time which wasn’t recorded for Stardance) and finally deploying the website. Super happy with the end result and I have ambitious plans for the next steps. I spent a few hours last night setting up Oracle Cloud and installing Headscape on that server. I want to use Cloudflare for DNS and buy my own domain, and host the Oracle Cloud / Headscape VPN on a subdomain."}, {"post_id": 79257, "ts": "2026-10-13T07:22:19Z", "hours": 2.3686, "text": "Following the tutorial, “Build your own Blog.” Currently on step 7/9, but somewhere along the line something went wrong. (screenshot attached below) Maybe because I wanted to type out the code instead of copy and pasting, but idk. Trying to finish the tutorial and deploy to Vercel, and then I want to start experimenting with 3D libraries and motion like you often see on Instagram reels."}]...
|
Title: willy's blog by @asherwandenreich | Sta Title: willy's blog by @asherwandenreich | Stardance
Devlogs:
Following the tutorial, “Build your own Blog.” Currently on step 7/9, but somewhere along the line something went wrong. (screenshot attached below) Maybe because I wanted to type out the code instead of copy and pasting, but idk. Trying to finish the tutorial and deploy to Vercel, and then I want to start experimenting with 3D libraries and motion like you often see on Instagram reels.
Finished “Build Your Own Blog,” yay! In the repo there’s a little .md I created to take notes on the git commands and the flags I used. Spent a while pushing the code to GitHub through the terminal instead of using Claude, which I was used to doing because of a hackathon I did with my friends. Spent more time finnicking around with Vercel (time which wasn’t recorded for Stardance) and finally deploying the website. Super happy with the end result and I have ambitious plans for the next steps. I spent a few hours last night setting up Oracle Cloud and installing Headscape on that server. I want to use Cloudflare for DNS and buy my own domain, and host the Oracle Cloud / Headscape VPN on a subdomain.
Pushed “dark mode & about pg.” Deleted some unused files that came from installing next.js on the wrong layer/folder. Launched the website via npm run dev and used the VS Code Simple Browser feature. Took html notes in html.md, learned spacing, font size, and font color code. Found out I couldn’t use an apostrophe, and learned how to make next.js understand. Deleted all the default next.js features and started using Tailwind to make it look presentable. Finally made what I’m most proud of this devlog: the light/dark mode toggle switch. Switched dark mode from following the OS light/dark mode to following a class. Tested if it works by adding the class to layout.tsx. Made first client component (components/darkmode.tsx). Made my own button, troubleshooted an error caused by a missing return, and import/export....
|
1793119741.215464
|
1793724541.215464
|
|
70339
|
MausOS by @dahmaus | Stardance
|
dahmaus
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T19:29:07Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finally done with MausOS , the most swaggy WebOS you’ve ever seen! Swagged out with music , live wallpaper , games and more. Check it out :D", "repo": "https://github.com/DahMaus/MausOS", "demo": "https://dahmaus.github.io/MausOS"}]...
|
[{"post_id": 81029, "ts": "202 [{"post_id": 81029, "ts": "2026-10-19T16:49:01Z", "hours": 1.5219, "text": "MausOS release! :D apps swag windows even more swag"}, {"post_id": 80978, "ts": "2026-10-19T14:06:16Z", "hours": 1.1642, "text": "MausOS added live wallpaper topbar music :D"}, {"post_id": 80685, "ts": "2026-10-18T14:46:01Z", "hours": 0.2658, "text": "Part1 of doing my Own WebOS!"}]...
|
Title: MausOS by @dahmaus | Stardance
Devlogs:
Pa Title: MausOS by @dahmaus | Stardance
Devlogs:
Part1 of doing my Own WebOS!
MausOS added live wallpaper topbar music :D
MausOS release! :D apps swag windows even more swag
Ships:
Finally done with MausOS , the most swaggy WebOS you’ve ever seen! Swagged out with music , live wallpaper , games and more. Check it out :D...
|
1793144875.5189614
|
1793231275.5189614
|
|
65921
|
Gamer's Baku by @PrakstheBruce | Stardance
|
PrakstheBruce
|
0
|
4.22
|
0
|
[]
|
[{"post_id": 81027, "ts": "202 [{"post_id": 81027, "ts": "2026-10-19T16:37:03Z", "hours": 4.2247, "text": "Gamer Baku — Game Development Devlog 1 Engine used - Godot “ WarioWare-style minigame collection” The Idea Gamer Baku is a fast-paced minigame project inspired by WarioWare. The idea is to create a fun collection of short challenges, starting with a Kung Fu Panda-inspired character jumping across platforms to catch dumplings. I began developing it using Godot and the Stardance WarioWare mission guide. Building the Game I started by creating the title screen and connecting the Start button to the main level. This took some debugging because of incorrect scene paths and button signals, but I eventually got the transition working. Next, I built the level interface with a timer, level display, and dumpling icons. I created a separate themed timer scene and worked on the countdown logic to make it reusable. Making the Gameplay Work I created the player using CharacterBody2D and implemented horizontal movement, jumping, and gravity. One of my biggest challenges was the player falling through platforms. After debugging the collision shapes, I discovered that two platforms shared the same RectangleShape2D resource. Separating them fixed the problem. Once movement and collisions worked, I added dumpling collectibles using Area2D . Collecting a dumpling increases the global counter, hides the dumpling, and makes it reappear after five seconds. I also added a UI counter that updates automatically. #Challenges and Learning Throughout development, I worked through issues involving scene transitions, collision detection, timers, signals, and global variables. Each bug helped me understand Godot’s scene system and how different gameplay components communicate. The project has taught me that game development isn’t just about writing code. It’s also about testing, debugging, and connecting individual systems into a working experience. What’s Next? My next goals are to: Connect the timer to proper win and failure conditions. Finish the lives system and minigame transitions. Build a second minigame with a different challenge. Create original Winner and Death screens. Polish the gameplay, write a README, and publish the finished game. -> Final Thoughts Gamer Baku is still a work in progress, but the foundation is taking shape. The title screen, player movement, platform collisions, and dumpling collection mechanics are working. What started as an idea inspired by WarioWare has become a hands-on learning experience in game development. Now, the goal is to turn these individual systems into a complete and enjoyable minigame collection. This is only the beginning of Gamer Baku."}]...
|
Title: Gamer's Baku by @PrakstheBruce | Starda Title: Gamer's Baku by @PrakstheBruce | Stardance
Devlogs:
Gamer Baku — Game Development Devlog 1 Engine used - Godot “ WarioWare-style minigame collection” The Idea Gamer Baku is a fast-paced minigame project inspired by WarioWare. The idea is to create a fun collection of short challenges, starting with a Kung Fu Panda-inspired character jumping across platforms to catch dumplings. I began developing it using Godot and the Stardance WarioWare mission guide. Building the Game I started by creating the title screen and connecting the Start button to the main level. This took some debugging because of incorrect scene paths and button signals, but I eventually got the transition working. Next, I built the level interface with a timer, level display, and dumpling icons. I created a separate themed timer scene and worked on the countdown logic to make it reusable. Making the Gameplay Work I created the player using CharacterBody2D and implemented horizontal movement, jumping, and gravity. One of my biggest challenges was the player falling through platforms. After debugging the collision shapes, I discovered that two platforms shared the same RectangleShape2D resource. Separating them fixed the problem. Once movement and collisions worked, I added dumpling collectibles using Area2D . Collecting a dumpling increases the global counter, hides the dumpling, and makes it reappear after five seconds. I also added a UI counter that updates automatically. #Challenges and Learning Throughout development, I worked through issues involving scene transitions, collision detection, timers, signals, and global variables. Each bug helped me understand Godot’s scene system and how different gameplay components communicate. The project has taught me that game development isn’t just about writing code. It’s also about testing, debugging, and connecting individual systems into a working experience. What’s Next? My next goals are to: Connect the timer to proper win and failure conditions. Finish the lives system and minigame transitions. Build a second minigame with a different challenge. Create original Winner and Death screens. Polish the gameplay, write a README, and publish the finished game. -> Final Thoughts Gamer Baku is still a work in progress, but the foundation is taking shape. The title screen, player movement, platform collisions, and dumpling collection mechanics are working. What started as an idea inspired by WarioWare has become a hands-on learning experience in game development. Now, the goal is to turn these individual systems into a complete and enjoyable minigame collection. This is only the beginning of Gamer Baku....
|
1793094441.3785517
|
1793699241.3785517
|
|
67845
|
BrainF#ckery Compiler by @mindstormpro3 | Stardanc BrainF#ckery Compiler by @mindstormpro3 | Stardance...
|
mindstormpro3
|
0
|
5.43
|
0
|
[]
|
[{"post_id": 81025, "ts": "202 [{"post_id": 81025, "ts": "2026-10-19T16:25:31Z", "hours": 2.5642, "text": "BrainF#ckery Devlog #3! What’s Changed? Well… I added command line arguments!!! Gone are the days of manually typing your BF code into the terminal, now you can specify and input and output file, as well as pass flags! I also published to PyPi!!! Find it Here! On top of all that, I also made a bunch of small changes and modifications to fix bugs and make my compiler work better. Command Line Args! Here’s the current full list: -h , or --Help -> Your basic help command, don’t need to say much here -v , or --Verbose -> Enables verbose (extra) logging -i or --Input -> Takes a file path as an input file (a .bf file) -o or --Output -> Takes a file path to be the outputted executable (a .exe file)| -r or --Run -> Runs the newly compiled executable right after it’s done being compiled. c or --Clean -> deletes the build files ( .obj and .asm product files) after compilation is complete ***And hopefully more to come! I already have some ideas! : b WE’RE ON PYPI!!!!!!!!!! Check it out HERE!!! And finally, the boring bugfixes… :( A couple things: I realized, after a very smart friend of mine pointed it out, that I was not popping the stack after pushing it to call a function… If I left this in, more complex programs would crash due to a stack overflow…. I added comment clearing! Originally, the compiler would only read BF code that happened to be one of the 8 valid characters, but what if you happened to put a valid BF char in a comment? Well now there’s a loop that runs before the rest of the compiler that strips all lines of their text after a ; character, meaning all comments get deleted! I also added more error handling, so in case of a file not found or something, instead of the code crashing it just prints an error to the logs and returns. Thanks for sticking around for my devlog! see ya next time! : b"}, {"post_id": 77560, "ts": "2026-10-07T14:07:07Z", "hours": 2.4694, "text": "BrainF#ckery Devlog #2! What’s Changed? A LOT! Since the last devlog, I’ve practically finished the BF -> Assembly compiler, and even used subprocess.run() to call NASM and GCC to build the script! It currently looks for a file called in.bf and then compiles it into an EXE that gets dumped straight into a build/ folder along with the out.asm and out.obj files! How does the Compiler actually work? Right now, all the compiler really does is go character by character in the input file, and if the character is one of the special 8, ( <>+-,.[] ) I just append some assembly into the out.asm file that corresponds with the instruction. For example, for + I just add inc byte [ebx] which increments the byte stored at the location the EBX register is pointing at. (EBX stores the tape pointer, and you manipulate it with < and > ). The cool thing about writing the compiler like this is that it literally just ignores everything else, so I don’t have to write code to “clean” the input file of newlines, tabs, spaces, comments, ect. Now for [ and ] , they’re a bit special. The way these guys work is I have a stack and counter. Whenever I add a [ to the assembly, I first increment the counter by 1 and then push the value to the stack. Then I use fstrings to modify the assembly I’m about to add by doing this: cmp byte [ebx], 0 jz loopEnd{bracketCounter} Now to break this down, cmp is comparing the current cell ( byte [ebx] ) with 0. Then, the next instruction, jz only jumps to the given location in code if the two values compared previously are equal to eachother. The fstrings come into play because they modify this jump location to be loopEnd(whatever the counter is) , and this location becomes the corrisponding ] when that instruction is read. What’s next? Well, firstly I need to make a bunch of QoL changes to the compiler, like allowing the user to pass custom input and output names/directories, specify whether or not to fully compile or leave it as a chunk of assembly, ect I also want to make a slightly higher level BF-esque language, where you can do stuff like + 2, 5 to increase cell 2 by 5, if statements, batch outputting, ect, but that’s not gonna be the easiest thing… See Ya Later! - Elio"}, {"post_id": 76632, "ts": "2026-10-04T06:57:23Z", "hours": 0.3983, "text": "BrainF#ckery Devlog #1! What is BrainF#ckery? BrainF#ckery, or BFery for short, is a compiler for Brainf#ck! It’s written fully in python and takes BF and converts it into working assembly that you can plug into NASM and gcc to turn BF into a working executable! But why? Shut Up. How will it work? BFery will essentially just read and translate any BF directly into assembly. It’s actually really simple, since most of BF converts into a single line of assembly, like > , which moves the tape pointer up one, translates to inc rbx . That’s it! the rest are as follows: < -> dec rbx (dec means to decrease) + -> inc byte [rbx] ( byte tells NASM to only write one byte of data, and the two brackets here are the equivalent of dereferencing a pointer in C.) - -> dec byte [rbx] the rest( [ ] , . ) I have yet to figure out… OK Thats really all for this devlog, thanks for stoppin’ by! Elio"}]...
|
Title: BrainF#ckery Compiler by @mindstormpro3 | S Title: BrainF#ckery Compiler by @mindstormpro3 | Stardance
Devlogs:
BrainF#ckery Devlog #1! What is BrainF#ckery? BrainF#ckery, or BFery for short, is a compiler for Brainf#ck! It’s written fully in python and takes BF and converts it into working assembly that you can plug into NASM and gcc to turn BF into a working executable! But why? Shut Up. How will it work? BFery will essentially just read and translate any BF directly into assembly. It’s actually really simple, since most of BF converts into a single line of assembly, like > , which moves the tape pointer up one, translates to inc rbx . That’s it! the rest are as follows: < -> dec rbx (dec means to decrease) + -> inc byte [rbx] ( byte tells NASM to only write one byte of data, and the two brackets here are the equivalent of dereferencing a pointer in C.) - -> dec byte [rbx] the rest( [ ] , . ) I have yet to figure out… OK Thats really all for this devlog, thanks for stoppin’ by! Elio
BrainF#ckery Devlog #2! What’s Changed? A LOT! Since the last devlog, I’ve practically finished the BF -> Assembly compiler, and even used subprocess.run() to call NASM and GCC to build the script! It currently looks for a file called in.bf and then compiles it into an EXE that gets dumped straight into a build/ folder along with the out.asm and out.obj files! How does the Compiler actually work? Right now, all the compiler really does is go character by character in the input file, and if the character is one of the special 8, ( <>+-,.[] ) I just append some assembly into the out.asm file that corresponds with the instruction. For example, for + I just add inc byte [ebx] which increments the byte stored at the location the EBX register is pointing at. (EBX stores the tape pointer, and you manipulate it with < and > ). The cool thing about writing the compiler like this is that it literally just ignores everything else, so I don’t have to write code to “clean” the input file of newlines, tabs, spaces, comments, ect. Now for [ and ] , they’re a bit special. The way these guys work is I have a stack and counter. Whenever I add a [ to the assembly, I first increment the counter by 1 and then push the value to the stack. Then I use fstrings to modify the assembly I’m about to add by doing this: cmp byte [ebx], 0 jz loopEnd{bracketCounter} Now to break this down, cmp is comparing the current cell ( byte [ebx] ) with 0. Then, the next instruction, jz only jumps to the given location in code if the two values compared previously are equal to eachother. The fstrings come into play because they modify this jump location to be loopEnd(whatever the counter is) , and this location becomes the corrisponding ] when that instruction is read. What’s next? Well, firstly I need to make a bunch of QoL changes to the compiler, like allowing the user to pass custom input and output names/directories, specify whether or not to fully compile or leave it as a chunk of assembly, ect I also want to make a slightly higher level BF-esque language, where you can do stuff like + 2, 5 to increase cell 2 by 5, if statements, batch outputting, ect, but that’s not gonna be the easiest thing… See Ya Later! - Elio
BrainF#ckery Devlog #3! What’s Changed? Well… I added command line arguments!!! Gone are the days of manually typing your BF code into the terminal, now you can specify and input and output file, as well as pass flags! I also published to PyPi!!! Find it Here! On top of all that, I also made a bunch of small changes and modifications to fix bugs and make my compiler work better. Command Line Args! Here’s the current full list: -h , or --Help -> Your basic help command, don’t need to say much here -v , or --Verbose -> Enables verbose (extra) logging -i or --Input -> Takes a file path as an input file (a .bf file) -o or --Output -> Takes a file path to be the outputted executable (a .exe file)| -r or --Run -> Runs the newly compiled executable right after it’s done being compiled. c or --Clean -> deletes the build files ( .obj and .asm product files) after compilation is complete ***And hopefully more to come! I already have some ideas! : b WE’RE ON PYPI!!!!!!!!!! Check it out HERE!!! And finally, the boring bugfixes… :( A couple things: I realized, after a very smart friend of mine pointed it out, that I was not popping the stack after pushing it to call a function… If I left this in, more complex programs would crash due to a stack overflow…. I added comment clearing! Originally, the compiler would only read BF code that happened to be one of the 8 valid characters, but what if you happened to put a valid BF char in a comment? Well now there’s a loop that runs before the rest of the compiler that strips all lines of their text after a ; character, meaning all comments get deleted! I also added more error handling, so in case of a file not found or something, instead of the code crashing it just prints an error to the logs and returns. Thanks for sticking around for my devlog! see ya next time! : b...
|
1793116112.2914374
|
1793720912.2914374
|
|
64430
|
Void Run by @rayyans4890 | Stardance
|
rayyans4890
|
1
|
24.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T17:33:38Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Void Run is a 2D browser shooter I made for Stardance. You play as a ship in space and shoot aliens that keep coming at you. There are 3 enemy types: Drifter, Stinger and Brute. Stingers show up from wave 2 and Brutes from wave 4. A new wave starts every 25 seconds and the enemies spawn faster each time, so the game keeps getting harder. The hardest part was the JavaScript. The movement and shooting took a while to get working, and the title screen took a lot longer than I expected. I used AI to help with the sectioning of the title screen in a few places, but most of the code is my own. I’m proud that I finished it. I built the HUD, the menus, the three enemies and the wave system myself, and it works on a phone too. To test it, press Play or Enter to start. Move with WASD or the arrow keys, shoot with Space or the mouse, and press P to pause. Your best score is saved in your browser, so try to beat it.", "repo": "https://github.com/rayyans4890-png/Void-Run", "demo": "https://rayyans4890-png.github.io/Void-Run/"}]...
|
[{"post_id": 81015, "ts": "202 [{"post_id": 81015, "ts": "2026-10-19T16:18:36Z", "hours": 8.7747, "text": "Devlog 4: Final Version The game is finished. The JavaScript is fully complete and the final CSS file is done. I added 3 enemy types to the game, Drifter, Stinger and Brute, and I’m very satisfied with the result. The title screen was also updated with a new tagline and a bit more information, and the HUD now shows the best score and the current wave. The waves get faster as you play, so the game gets harder the longer you survive. Completed JavaScript Final CSS 3 enemies Final title screen and HUD Remaining Write the README Upload the project to GitHub Ship the project Next steps Only the README is left. I will write it, upload everything to GitHub and then ship the project. I really hope it gets a good rating, since my goal is the Aula F75 keyboard."}, {"post_id": 77833, "ts": "2026-10-08T13:27:17Z", "hours": 4.6917, "text": "Devlog 3: JavaScript I finally wrote the JavaScript. The main movement and shooting are now working, and enemies appear on the screen. The game is playable for the first time, even though it is still rough. The boss keeps giving me problems and I could not get it to work properly. I decided to leave it for later instead of wasting more time on it today. Another issue is that the ship can only move left and right along a horizontal line. I plan to change this so it moves freely in every direction while you control it. Completed Main JavaScript Shooting Movement (horizontal only for now) Enemies showing on screen Pause button Known issues The boss is not working properly The ship can only move along a horizontal line Remaining Fix the boss Add free movement in all directions Next steps Fixing the movement comes first, since it affects how the whole game feels. Then I will go back to the boss."}, {"post_id": 77202, "ts": "2026-10-06T02:31:58Z", "hours": 7.305, "text": "Devlog 2: Title Screen The title screen is finally finished. It took a lot longer than I expected, but I’m happy with how clean it looks. I used AI to help me with the sectioning of the title screen in a few places, but most of the code was written by me. The screen now has the Void Run logo, the tagline, and a Play button. You can also press Enter to start. The HUD shows the score, hull, best score and wave number. At the bottom there is a controls bar and a list of the enemy types, which are Drifter, Stinger and Brute. Completed Title screen with logo and tagline Play button and Enter shortcut HUD layout Controls bar and enemy list HTML and CSS Remaining JavaScript Next steps Only the JavaScript is left. That includes movement, shooting and the enemies. I will try to finish it tomorrow."}, {"post_id": 76178, "ts": "2026-10-02T16:26:20Z", "hours": 2.8008, "text": "Devlog 1: Project Start I started working on Void Run today. It is a 2D browser shooter set in space, where you play as a ship shooting aliens that are coming at you. The idea is simple on purpose, and I want to keep it that way so I can actually finish it. For now I focused on the base of the project. I set up the styles with a dark theme and built the basic HUD and the title screen. I wanted the layout in place first so the game logic has something to sit on later. Completed Project setup Basic HUD Title screen Base styles in style.css Remaining Player movement Shooting mechanics Main game design Next steps Later today I will start on movement, shooting and the main design of the game. After that I can begin adding the aliens."}]...
|
Title: Void Run by @rayyans4890 | Stardance
Devlo Title: Void Run by @rayyans4890 | Stardance
Devlogs:
Devlog 1: Project Start I started working on Void Run today. It is a 2D browser shooter set in space, where you play as a ship shooting aliens that are coming at you. The idea is simple on purpose, and I want to keep it that way so I can actually finish it. For now I focused on the base of the project. I set up the styles with a dark theme and built the basic HUD and the title screen. I wanted the layout in place first so the game logic has something to sit on later. Completed Project setup Basic HUD Title screen Base styles in style.css Remaining Player movement Shooting mechanics Main game design Next steps Later today I will start on movement, shooting and the main design of the game. After that I can begin adding the aliens.
Devlog 2: Title Screen The title screen is finally finished. It took a lot longer than I expected, but I’m happy with how clean it looks. I used AI to help me with the sectioning of the title screen in a few places, but most of the code was written by me. The screen now has the Void Run logo, the tagline, and a Play button. You can also press Enter to start. The HUD shows the score, hull, best score and wave number. At the bottom there is a controls bar and a list of the enemy types, which are Drifter, Stinger and Brute. Completed Title screen with logo and tagline Play button and Enter shortcut HUD layout Controls bar and enemy list HTML and CSS Remaining JavaScript Next steps Only the JavaScript is left. That includes movement, shooting and the enemies. I will try to finish it tomorrow.
Devlog 3: JavaScript I finally wrote the JavaScript. The main movement and shooting are now working, and enemies appear on the screen. The game is playable for the first time, even though it is still rough. The boss keeps giving me problems and I could not get it to work properly. I decided to leave it for later instead of wasting more time on it today. Another issue is that the ship can only move left and right along a horizontal line. I plan to change this so it moves freely in every direction while you control it. Completed Main JavaScript Shooting Movement (horizontal only for now) Enemies showing on screen Pause button Known issues The boss is not working properly The ship can only move along a horizontal line Remaining Fix the boss Add free movement in all directions Next steps Fixing the movement comes first, since it affects how the whole game feels. Then I will go back to the boss.
Devlog 4: Final Version The game is finished. The JavaScript is fully complete and the final CSS file is done. I added 3 enemy types to the game, Drifter, Stinger and Brute, and I’m very satisfied with the result. The title screen was also updated with a new tagline and a bit more information, and the HUD now shows the best score and the current wave. The waves get faster as you play, so the game gets harder the longer you survive. Completed JavaScript Final CSS 3 enemies Final title screen and HUD Remaining Write the README Upload the project to GitHub Ship the project Next steps Only the README is left. I will write it, upload everything to GitHub and then ship the project. I really hope it gets a good rating, since my goal is the Aula F75 keyboard.
Ships:
Void Run is a 2D browser shooter I made for Stardance. You play as a ship in space and shoot aliens that keep coming at you. There are 3 enemy types: Drifter, Stinger and Brute. Stingers show up from wave 2 and Brutes from wave 4. A new wave starts every 25 seconds and the enemies spawn faster each time, so the game keeps getting harder. The hardest part was the JavaScript. The movement and shooting took a while to get working, and the title screen took a lot longer than I expected. I used AI to help with the sectioning of the title screen in a few places, but most of the code is my own. I’m proud that I finished it. I built the HUD, the menus, the three enemies and the wave system myself, and it works on a phone too. To test it, press Play or Enter to start. Move with WASD or the arrow keys, shoot with Space or the mouse, and press P to pause. Your best score is saved in your browser, so try to beat it....
|
1792857132.190074
|
1793721132.190074
|
|
70293
|
WNXVRA by @wnxvra011 | Stardance
|
wnxvra011
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T16:20:12Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "First i made it online using render but after that i got that i need to use nest so far so i fixed and i am still don’t know how i made the cool chinese web it is a crazy project", "repo": "https://github.com/spyx011/WNXVRA", "demo": "https://chimerical-bunny-dda43c.netlify.app"}]...
|
[{"post_id": 81012, "ts": "202 [{"post_id": 81012, "ts": "2026-10-19T16:16:21Z", "hours": 0.7047, "text": "guy’s i made this web online so any one can see this one and I also add some sounds like background music and some stuff"}, {"post_id": 80682, "ts": "2026-10-18T14:23:18Z", "hours": 0.7175, "text": "guy’s not much i made the UI look crazy and the rest is next day"}]...
|
Title: WNXVRA by @wnxvra011 | Stardance
Devlogs:
Title: WNXVRA by @wnxvra011 | Stardance
Devlogs:
guy’s not much i made the UI look crazy and the rest is next day
guy’s i made this web online so any one can see this one and I also add some sounds like background music and some stuff
Ships:
First i made it online using render but after that i got that i need to use nest so far so i fixed and i am still don’t know how i made the cool chinese web it is a crazy project...
|
1793116188.1166334
|
1793202588.1166334
|
|
70434
|
MelodyPad by @aagam3023 | Stardance
|
aagam3023
|
0
|
1.2
|
0
|
[]
|
[{"post_id": 81011, "ts": "202 [{"post_id": 81011, "ts": "2026-10-19T16:15:12Z", "hours": 1.2, "text": "I’ve been working on the design of my MelodyPad using Onshape. I made the enclosure with eight raised keys, a USB port opening, and mounting points for the electronics. I’m still working on improving the design, but I’m happy with how it’s coming along so far. I also recorded a one-hour timelapse of my progress. Next, I want to refine the design and start figuring out how to fit all the electronic components inside."}]...
|
Title: MelodyPad by @aagam3023 | Stardance
Devlog Title: MelodyPad by @aagam3023 | Stardance
Devlogs:
I’ve been working on the design of my MelodyPad using Onshape. I made the enclosure with eight raised keys, a USB port opening, and mounting points for the electronics. I’m still working on improving the design, but I’m happy with how it’s coming along so far. I also recorded a one-hour timelapse of my progress. Next, I want to refine the design and start figuring out how to fit all the electronic components inside....
|
1793008444.2814562
|
1793613244.2814562
|
|
17333
|
Frictionless by @NITHIN | Stardance
|
NITHIN
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T20:20:11Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "QuickBox What I made: QuickBox is a single-page web toolbox that bundles together several small everyday tools into one place. It includes a clipboard history manager, text formatting tools, a quick to-do list, a unit converter, a password generator, a snippet vault for saving reusable text, timestamp tools, and a QR code generator. What was challenging: Getting all the different tools to work smoothly together on one page without conflicts was tricky, especially making sure each tool saved its own data separately using local storage so nothing got mixed up. Building the unit converter to handle multiple categories like length, weight, time, data size, and temperature with correct formulas also took careful testing. What I am proud of: I am proud of how everything works together as one cohesive toolbox instead of separate scattered tools. The clipboard history and snippet vault in particular solve a real repetitive annoyance, since copying and reusing text normally takes several steps, and here it is reduced to a single click. How to test it: Open the quickbox.html file in any modern browser. No installation, login, or setup is required. All data is stored locally in the browser, so your clipboard history, to-do list, and snippets will be saved even after closing and reopening the page. Try saving some text to the clipboard history or snippet vault, then click on an item to copy it instantly. You can also try the text tools by pasting text and applying transformations, or generate a password and a QR code to see the results update immediately.", "repo": "https://github.com/Nithinfgs/frictionless", "demo": "https://astonishing-souffle-d55679.netlify.app/"}]...
|
[{"post_id": 8101, "ts": "2026 [{"post_id": 8101, "ts": "2026-06-13T14:58:37Z", "hours": 4.0, "text": "8:28 PMClaude responded: Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look.Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look. Added two new features: a Pomodoro-style Focus Timer and a Decision Picker tool."}, {"post_id": 7664, "ts": "2026-06-12T20:09:55Z", "hours": 2.0, "text": "Just finished"}, {"post_id": 7529, "ts": "2026-06-12T16:01:50Z", "hours": 0.0, "text": "Building the frontend foundation. Refactoring CSS, polishing the design system, and making the dashboard responsive across screen sizes."}]...
|
Title: Frictionless by @NITHIN | Stardance
Devlog Title: Frictionless by @NITHIN | Stardance
Devlogs:
Building the frontend foundation. Refactoring CSS, polishing the design system, and making the dashboard responsive across screen sizes.
Just finished
8:28 PMClaude responded: Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look.Reworked the UI with a bold neo-brutalist style (cream background, hard shadows, custom fonts) instead of the generic AI look. Added two new features: a Pomodoro-style Focus Timer and a Decision Picker tool.
Ships:
QuickBox What I made: QuickBox is a single-page web toolbox that bundles together several small everyday tools into one place. It includes a clipboard history manager, text formatting tools, a quick to-do list, a unit converter, a password generator, a snippet vault for saving reusable text, timestamp tools, and a QR code generator. What was challenging: Getting all the different tools to work smoothly together on one page without conflicts was tricky, especially making sure each tool saved its own data separately using local storage so nothing got mixed up. Building the unit converter to handle multiple categories like length, weight, time, data size, and temperature with correct formulas also took careful testing. What I am proud of: I am proud of how everything works together as one cohesive toolbox instead of separate scattered tools. The clipboard history and snippet vault in particular solve a real repetitive annoyance, since copying and reusing text normally takes several steps, and here it is reduced to a single click. How to test it: Open the quickbox.html file in any modern browser. No installation, login, or setup is required. All data is stored locally in the browser, so your clipboard history, to-do list, and snippets will be saved even after closing and reopening the page. Try saving some text to the clipboard history or snippet vault, then click on an item to copy it instantly. You can also try the text tools by pasting text and applying transformations, or generate a password and a QR code to see the results update immediately....
|
1792882140.0688329
|
1793746140.0688329
|
|
64380
|
SELENE by @lakshay99_b | Stardance
|
lakshay99_b
|
2
|
36.0
|
98
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T08:01:16Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Let me tell u this is my 2nd ship and might be a meaningful one. I want to make it clear that i was able to post develog after 24 hour of coding as all previous devlogs got deleted due some misunderstanding of team.", "repo": "https://github.com/lakshay-boora/selene", "demo": "https://selene-angvians.vercel.app"}, {"ship_num": 2, "ts": "2026-10-16T10:15:14Z", "hours": 32.0, "multiplier": 6.23, "payout": 98, "blessing": "neutral", "text": "Finally hosted Selene Bench on both platforms: Vercel: selene-bench.vercel.app EdgeOne: advisory-gray-xyuz9gon.edgeone.dev Live Earth–Moon physics lab — tweak gravity, watch eclipses, and try the cinematic collision mode.", "repo": "https://github.com/lakshay-boora/selene", "demo": "https://selene-angvians.vercel.app"}]...
|
[{"post_id": 81004, "ts": "202 [{"post_id": 81004, "ts": "2026-10-19T15:57:10Z", "hours": 0.4719, "text": "isnt it good? can any one tell me isnt a good readme or should i improve it?"}, {"post_id": 80599, "ts": "2026-10-18T08:21:50Z", "hours": 0.3261, "text": "isnt it crazy that u can make the following geometry with my demo by just setting gravity to max…."}, {"post_id": 80594, "ts": "2026-10-18T08:02:40Z", "hours": 0.4247, "text": "huff. finaly i changed a lot and try to code the badest i can or else reviewer would flag it as ai. i have edited the whole three.js all the styles of moon and earth , removed all camera angles and tried to make it as simple as possible, and now i am sending it for recheck. hope everything would go smooth."}, {"post_id": 80590, "ts": "2026-10-18T07:30:47Z", "hours": 1.4233, "text": "it is really a heart breaking movement when someone rejects your 3week’s efforts saying that it is ai😔. but its ok i respect the reviewers i would make some alteration and then try to resubmite it."}, {"post_id": 80425, "ts": "2026-10-17T16:30:01Z", "hours": 1.7658, "text": "should i change my readme? its being around a day from when i have submited my site and it is still pending, so i am doubting my readme is it a good one? can u check it and recommend me."}, {"post_id": 80131, "ts": "2026-10-16T10:13:18Z", "hours": 0.3211, "text": "Finally hosted Selene Bench on both platforms: Vercel: selene-bench.vercel.app EdgeOne: advisory-gray-xyuz9gon.edgeone.dev Live Earth–Moon physics lab — tweak gravity, watch eclipses, and try the cinematic collision mode."}, {"post_id": 80130, "ts": "2026-10-16T09:55:18Z", "hours": 2.3431, "text": "it’s almost done just fixing some left over render. i would host it through edgeone as vercel is not responding to 3.js i hope judges would not mark it as a flag as they did last time with me."}, {"post_id": 79837, "ts": "2026-10-15T16:16:26Z", "hours": 2.0581, "text": "it’s very interesting to work with the physics of the planets and setting the variables, although it need too much research but it was a fun task."}, {"post_id": 79784, "ts": "2026-10-15T12:18:20Z", "hours": 1.0386, "text": "i finally found the way to place the right configuration for the three.js. it’s the most difficult part i am facing in the full deveopment of ‘studania’. one more update, studania project have a bit change in it. nowonwards it would help u learn the relation between moon and earth through simulated 3d models of moon and earth , u can alter their physical constant and see what would happen! enjoy the space!!!!"}, {"post_id": 71650, "ts": "2026-09-21T07:33:20Z", "hours": 26.0361, "text": "THIS IS GOING TO BE MY NEW START FROM NOW"}]...
|
Title: SELENE by @lakshay99_b | Stardance
Devlogs Title: SELENE by @lakshay99_b | Stardance
Devlogs:
THIS IS GOING TO BE MY NEW START FROM NOW
i finally found the way to place the right configuration for the three.js. it’s the most difficult part i am facing in the full deveopment of ‘studania’. one more update, studania project have a bit change in it. nowonwards it would help u learn the relation between moon and earth through simulated 3d models of moon and earth , u can alter their physical constant and see what would happen! enjoy the space!!!!
it’s very interesting to work with the physics of the planets and setting the variables, although it need too much research but it was a fun task.
it’s almost done just fixing some left over render. i would host it through edgeone as vercel is not responding to 3.js i hope judges would not mark it as a flag as they did last time with me.
Finally hosted Selene Bench on both platforms: Vercel: selene-bench.vercel.app EdgeOne: advisory-gray-xyuz9gon.edgeone.dev Live Earth–Moon physics lab — tweak gravity, watch eclipses, and try the cinematic collision mode.
should i change my readme? its being around a day from when i have submited my site and it is still pending, so i am doubting my readme is it a good one? can u check it and recommend me.
it is really a heart breaking movement when someone rejects your 3week’s efforts saying that it is ai😔. but its ok i respect the reviewers i would make some alteration and then try to resubmite it.
huff. finaly i changed a lot and try to code the badest i can or else reviewer would flag it as ai. i have edited the whole three.js all the styles of moon and earth , removed all camera angles and tried to make it as simple as possible, and now i am sending it for recheck. hope everything would go smooth.
isnt it crazy that u can make the following geometry with my demo by just setting gravity to max….
isnt it good? can any one tell me isnt a good readme or should i improve it?
Ships:
Finally hosted Selene Bench on both platforms: Vercel: selene-bench.vercel.app EdgeOne: advisory-gray-xyuz9gon.edgeone.dev Live Earth–Moon physics lab — tweak gravity, watch eclipses, and try the cinematic collision mode.
Let me tell u this is my 2nd ship and might be a meaningful one. I want to make it clear that i was able to post develog after 24 hour of coding as all previous devlogs got deleted due some misunderstanding of team....
|
1793155795.7930295
|
1793242195.7930295
|
|
51213
|
AquariumOS by @defenestrantor | Stardance
|
defenestrantor
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T16:20:03Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Aquarium OS. Im proud of how I got it able to work online and got it to run well. I also like the ripples that I added, however GitHub pages is down right now so the latest update isn’t visible.", "repo": "https://github.com/ethaenall/aquariumos", "demo": "https://ethaenall.github.io/aquariumos/"}]...
|
[{"post_id": 81003, "ts": "202 [{"post_id": 81003, "ts": "2026-10-19T15:50:07Z", "hours": 3.2186, "text": "I gave the water moving light patterns and ripples Fish now grow and change forms when you feed them + tank has memory now. A goldfish can become a koi, then a dragon koi. I also replaced the dock with little objects sitting in the sand. Notes opens from a treehouse, Calculator from a treasure chest, and Music from a shell. Minimized apps go to sleep until you click them again."}, {"post_id": 50115, "ts": "2026-08-19T05:47:34Z", "hours": 0.5861, "text": "I wanted the cursor to feel like something in the water. When it gets close, fish peel away instead of swimming through it, and the water keeps a little ripple. Notes now say when they’re saved, windows remember where you left them, and Esc closes the focused one."}, {"post_id": 50092, "ts": "2026-08-19T04:49:12Z", "hours": 0.3969, "text": "Cursor ripples in the water, and nearby fish peel away Notes show “Saved in this tank” Windows remember where you dragged them Esc closes the focused window A first run hint: “Move around — the fish notice you.”"}, {"post_id": 50079, "ts": "2026-08-19T04:12:15Z", "hours": 0.5472, "text": "Draggable, stackable windows with click-to-focus and close Notes: autosaves to locally Calculator — + − × ÷, decimals, clear, equals Music:play/pause, progress, volume, royalty free loop Tide Lights About: short Stardance / WebOS 1 writeup Fish cursor interaction: nearby fish peel away slightly (the extra feature)"}]...
|
Title: AquariumOS by @defenestrantor | Stardance
Title: AquariumOS by @defenestrantor | Stardance
Devlogs:
Draggable, stackable windows with click-to-focus and close Notes: autosaves to locally Calculator — + − × ÷, decimals, clear, equals Music:play/pause, progress, volume, royalty free loop Tide Lights About: short Stardance / WebOS 1 writeup Fish cursor interaction: nearby fish peel away slightly (the extra feature)
Cursor ripples in the water, and nearby fish peel away Notes show “Saved in this tank” Windows remember where you dragged them Esc closes the focused window A first run hint: “Move around — the fish notice you.”
I wanted the cursor to feel like something in the water. When it gets close, fish peel away instead of swimming through it, and the water keeps a little ripple. Notes now say when they’re saved, windows remember where you left them, and Esc closes the focused one.
I gave the water moving light patterns and ripples Fish now grow and change forms when you feed them + tank has memory now. A goldfish can become a koi, then a dragon koi. I also replaced the dock with little objects sitting in the sand. Notes opens from a treehouse, Calculator from a treasure chest, and Music from a shell. Minimized apps go to sleep until you click them again.
Ships:
I made Aquarium OS. Im proud of how I got it able to work online and got it to run well. I also like the ripples that I added, however GitHub pages is down right now so the latest update isn’t visible....
|
1793198905.5030792
|
1793285305.5030792
|
|
69666
|
Asteroid Game by @Sadiya | Stardance
|
Sadiya
|
0
|
1.16
|
0
|
[]
|
[{"post_id": 81001, "ts": "202 [{"post_id": 81001, "ts": "2026-10-19T15:37:04Z", "hours": 1.1606, "text": "This is how my project looks so far. I am currently doing the JS but I have changed somethings in CSS like the background color is an image and I have resized the gameCanvas and moved the gameContainer to make it align with everything."}]...
|
Title: Asteroid Game by @Sadiya | Stardance
Devlo Title: Asteroid Game by @Sadiya | Stardance
Devlogs:
This is how my project looks so far. I am currently doing the JS but I have changed somethings in CSS like the background color is an image and I have resized the gameCanvas and moved the gameContainer to make it align with everything....
|
1792857296.713508
|
1793462096.713508
|
|
70043
|
Mini flight sim by @ellingsworthgavin | Stardance
|
ellingsworthgavin
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T15:36:22Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Mini Flight Sim. Check the journal.md file for all the time logs. It was a fun build and I learned a lot from it", "repo": "https://github.com/justbetter-12/Mini-Flight-Sim", "demo": ""}]...
|
[{"post_id": 80998, "ts": "202 [{"post_id": 80998, "ts": "2026-10-19T15:33:52Z", "hours": 0.6008, "text": "Finished writing GitHub files"}, {"post_id": 80222, "ts": "2026-10-16T19:47:29Z", "hours": 0.3, "text": "My tiny flight sim got over 100k views 🎉"}]...
|
Title: Mini flight sim by @ellingsworthgavin | Sta Title: Mini flight sim by @ellingsworthgavin | Stardance
Devlogs:
My tiny flight sim got over 100k views 🎉
Finished writing GitHub files
Ships:
Mini Flight Sim. Check the journal.md file for all the time logs. It was a fun build and I learned a lot from it...
|
1793184670.2300878
|
1793271070.2300878
|
|
70281
|
Starlight Shield by @fawazkhan21769 | Stardance
|
fawazkhan21769
|
0
|
1.05
|
0
|
[]
|
[{"post_id": 80994, "ts": "202 [{"post_id": 80994, "ts": "2026-10-19T15:20:13Z", "hours": 0.6917, "text": "Added interactive features to Starlight Shield including command history navigation via Up/Down arrow keys, an automated threat generator interval, and dynamic UI theme toggling (green, amber, cyan). Tested full mitigation flows for active network incidents."}, {"post_id": 80970, "ts": "2026-10-19T12:56:52Z", "hours": 0.3553, "text": "Retro CRT Terminal Interface: Styled a green-screen terminal UI featuring custom font rendering (Courier New), glowing borders, and responsive command-line prompt styling."}]...
|
Title: Starlight Shield by @fawazkhan21769 | Stard Title: Starlight Shield by @fawazkhan21769 | Stardance
Devlogs:
Retro CRT Terminal Interface: Styled a green-screen terminal UI featuring custom font rendering (Courier New), glowing borders, and responsive command-line prompt styling.
Added interactive features to Starlight Shield including command history navigation via Up/Down arrow keys, an automated threat generator interval, and dynamic UI theme toggling (green, amber, cyan). Tested full mitigation flows for active network incidents....
|
1792975961.7932541
|
1793580761.7932541
|
|
26760
|
Orb package manager by @Hamuz | Stardance
|
Hamuz
|
0
|
0.96
|
0
|
[]
|
[{"post_id": 80993, "ts": "202 [{"post_id": 80993, "ts": "2026-10-19T15:17:18Z", "hours": 0.9625, "text": "Devlog 1 — Today I had DeepSeek write the first part of the code so I can understand how the script works, but I’m going to write the rest of the code by hand. So far the only command that works is orb -S/install"}]...
|
Title: Orb package manager by @Hamuz | Stardance
Title: Orb package manager by @Hamuz | Stardance
Devlogs:
Devlog 1 — Today I had DeepSeek write the first part of the code so I can understand how the script works, but I’m going to write the rest of the code by hand. So far the only command that works is orb -S/install...
|
1793188299.2127175
|
1793793099.2127175
|