|
63040
|
NikhilOS by @Nikhil_jais | Stardance
|
Nikhil_jais
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T09:32:35Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I made Nikhil-OS, a browser-based desktop environment inspired by modern computer operating systems. It has a boot experience, animated desktop, dock, app windows, settings, music, themes, and several interactive mini-apps and games. I wanted it to feel like an actual little computer you can explore rather than just a webpage with buttons. What was challenging? The hardest part was making everything work together smoothly. I had to deal with window opening and closing animations, draggable apps, desktop interactions, audio, different themes, responsive layouts, and making the whole interface feel consistent. Getting the project from something that looked like a simple mockup into something that actually behaved like a desktop environment took a lot of testing and fixing. What are you proud of? I’m most proud that Nikhil-OS became an interactive experience instead of just a visual design. You can actually open apps, move around the desktop, interact with different features, change settings and themes, play games, and explore the environment. I", "repo": "https://github.com/Nikhil-jais/Nikhil-OS-", "demo": "https://nikhil-jais.github.io/Nikhil-OS/"}]...
|
[{"post_id": 72192, "ts": "202 [{"post_id": 72192, "ts": "2026-09-22T13:03:12Z", "hours": 1.2939, "text": "i am on my way for the completion of Nikhil-OS . I hope you all are going to love this ❤️."}, {"post_id": 70619, "ts": "2026-09-19T13:55:50Z", "hours": 2.0258, "text": "“This is the animated boot screen for Nikhil-OS, a web-based desktop environment. It appears when Nikhil-OS starts, introduces the system with its visual identity, and uses animations and a loading progress effect before entering the desktop. i hope you all will like this"}, {"post_id": 70084, "ts": "2026-09-18T13:01:03Z", "hours": 1.2225, "text": "In my NIKHIL-OS i have added 4 different themes whatever you likes you can choose"}, {"post_id": 69637, "ts": "2026-09-17T13:38:59Z", "hours": 0.8392, "text": "This Is Nikhil-OS in which you can play games , perview notes and as well as you can changes themes into 4 designs as in yellow , dark , light and purple theme . i hope you all are going to love my project and also sugggest me what other i can replace and add into it ❤️❤️"}, {"post_id": 69591, "ts": "2026-09-17T11:29:50Z", "hours": 2.1303, "text": "Hello everyone currently i am working on NIKHIL-OS . and i am totally contributing my efforts to make it more enjoyable for you people i have my work will impress . follow me to get interacted with the result soon i will be shipping it and also don’t forget to tell me even its good or worse but i want one thing , be honest with my project if its bad suggest me what should i can do to make it more useful ❤️❤️"}]...
|
Title: NikhilOS by @Nikhil_jais | Stardance
Devlo Title: NikhilOS by @Nikhil_jais | Stardance
Devlogs:
Hello everyone currently i am working on NIKHIL-OS . and i am totally contributing my efforts to make it more enjoyable for you people i have my work will impress . follow me to get interacted with the result soon i will be shipping it and also don’t forget to tell me even its good or worse but i want one thing , be honest with my project if its bad suggest me what should i can do to make it more useful ❤️❤️
This Is Nikhil-OS in which you can play games , perview notes and as well as you can changes themes into 4 designs as in yellow , dark , light and purple theme . i hope you all are going to love my project and also sugggest me what other i can replace and add into it ❤️❤️
In my NIKHIL-OS i have added 4 different themes whatever you likes you can choose
“This is the animated boot screen for Nikhil-OS, a web-based desktop environment. It appears when Nikhil-OS starts, introduces the system with its visual identity, and uses animations and a loading progress effect before entering the desktop. i hope you all will like this
i am on my way for the completion of Nikhil-OS . I hope you all are going to love this ❤️.
Ships:
What did you make? I made Nikhil-OS, a browser-based desktop environment inspired by modern computer operating systems. It has a boot experience, animated desktop, dock, app windows, settings, music, themes, and several interactive mini-apps and games. I wanted it to feel like an actual little computer you can explore rather than just a webpage with buttons. What was challenging? The hardest part was making everything work together smoothly. I had to deal with window opening and closing animations, draggable apps, desktop interactions, audio, different themes, responsive layouts, and making the whole interface feel consistent. Getting the project from something that looked like a simple mockup into something that actually behaved like a desktop environment took a lot of testing and fixing. What are you proud of? I’m most proud that Nikhil-OS became an interactive experience instead of just a visual design. You can actually open apps, move around the desktop, interact with different features, change settings and themes, play games, and explore the environment. I...
|
1792814001.7967288
|
1792900401.7967288
|
|
46281
|
ASTRA by @BobbyLovesShrek | Stardance
|
BobbyLovesShrek
|
1
|
87.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T09:22:20Z", "hours": 87.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ASTRA 3D is an interactive Solar System explorer. You can change the date and clock speed, select planets, compare distances, experiment with orbital parameters, and try simplified flights and transfers. It also includes a local notebook and an offline guide. The challenging part was connecting the orbital calculations to an interactive 3D scene while making clear what the simplified model can and cannot tell you. I’m proud that the project lets people explore these ideas hands-on and explains its limits: it isn’t a full physics simulation or a mission-planning tool. To try it, start the app with pnpm install and pnpm dev, then use the controls to change the date, select planets, measure distances, or launch an experiment.", "repo": "https://github.com/Sid95-44/ASTRA-3D", "demo": "https://sid95-44.github.io/ASTRA-3D/"}]...
|
[{"post_id": 74795, "ts": "202 [{"post_id": 74795, "ts": "2026-09-28T08:44:38Z", "hours": 11.8558, "text": "Alright guys, It might genuinely be time to ship this Goddamn I finished milestone 4 and 5 now, last minute grind Milestone 4 is where ASTRA gets more interactive. There’s more satellites, moons, spacecraft, etc. You can move around the 3d environment, so that it starts actually feeling like space simulation. In milestone 5, you can actually do stuff with those objects. You can create a mission, choose a destination, set objectives, plan the mission steps, and see everything play out in the 3D environment."}, {"post_id": 74010, "ts": "2026-09-26T14:53:28Z", "hours": 12.6856, "text": "Guys, so like I started grinding on this thing Like this has been my main centre of focus atp. I finished building milestone 3 and added some features. Milestone 3 is the Expedition phase: adding moons, spacecraft missions, live data, and guided learning and discovery tools. Basically, ASTRA grows from exploring the solar system to taking little learning trips through it. Some of the trickier parts of milestone 3 were getting planets and moons to move in a convincing way, while keeping the controls responsive; showing useful live readouts without making the screen feel overloaded; and making spacecraft trips and orbital data understandable without pretending they’re accurate enough for real mission planning. The project simplifies some of the physics, and the roadmap still calls out live data and guided discovery as future work."}, {"post_id": 73012, "ts": "2026-09-24T06:48:26Z", "hours": 13.2147, "text": "Milestone 2 is basically about taking ASTRA from a working demo to a more complete learning tool, with things like extra satellites, better mission lessons, more detailed visuals, and useful features like saving or exporting your measurements. Added ASTRA Guide, a built-in educational assistant. It can explain planets, orbital speed, orbital periods, Kepler-inspired motion, eccentricity, inclination, AU, simulation time, distances, and the model’s limits. Answers use the currently selected planet, simulation date, speed, and active distance measurement. Added suggested questions to help beginners know what to ask. Milestone 3 will probably focus on making ASTRA more advanced and useful, with deeper mission-planning lessons, more satellites, better visuals, and tools for saving or exporting your measurements."}, {"post_id": 72035, "ts": "2026-09-22T01:15:27Z", "hours": 11.0403, "text": "Devlog #6: Milestone 1 is where ASTRA stops being just a cool landing page and becomes an actual interactive Solar System. You can look around in 3D, select planets and moons, speed up or pause time, check live information, measure distances, and try simple spacecraft missions and orbit experiments. There were a few challenges along the way of building milestone 1, bugs and alot of errors. But I’ve created milestone 1, and I’m simultaenoulsy creating milestone 2."}, {"post_id": 70959, "ts": "2026-09-20T03:17:22Z", "hours": 6.7439, "text": "Devlog #5: Hello Earthlings, For Milestone 0, I upgraded the landing page into a proper interactive intro for ASTRA. It now has the orbital blueprint design, animated planet cards, scroll and pointer effects, section reveals, mobile navigation, reduced-motion support, and a clearer button that takes you into the simulation. The simulation itself stayed mostly the same for now, while I focused on making the first screen feel more polished and connected to the project’s space-science theme. As you can see, the design of the website has been improved a lot from before. I had some help from my friends at school, but I did around 65% of the work."}, {"post_id": 69171, "ts": "2026-09-16T15:01:55Z", "hours": 7.0864, "text": "So, hello It has been a long time since I made my previous devlog. I actually went from milestone 1 to making milestone 0. So milestone 0 is the landing page, that describes what ASTRA 3D is and has a scroll driven narrative system. Clicking the ‘enter observatory’ button will take the user into the main logic of this website. I’ve integrated milestone 1 and milestone 0, and I’m progressing through milestone 2. That’s it, I guess. Byeeeeeeee"}, {"post_id": 51372, "ts": "2026-08-21T00:36:22Z", "hours": 6.1872, "text": "Devlog#3-ish Hello mighty earthlings, I’m not really done with phase 3 of my project, hell, I’m not even done with phase 2 . I am currently adding moon textures and planet textures to the planets to make them look more realistic and I’m improving my UI. The thing is, there is a lot of errors and bugs, so this might be the most boring and brain-draining part yet. I think I would need another 6-7 hours to stop all errors and polish it. Until next time I guess"}, {"post_id": 50863, "ts": "2026-08-20T09:49:11Z", "hours": 10.8689, "text": "Devlog#2: Hello earthlings I have a lot of bugs and errors in phase 2 development. I can see that its a long road of fixing. But hey, atleast it’s for a good cause"}, {"post_id": 49304, "ts": "2026-08-18T01:28:06Z", "hours": 7.5714, "text": "Devlog #1: Hello Earthlings So I started with phase 1 of ASTRA-3D, which is a website that shows a lot of stuff, like 3D Solar System, info about planets, asteroid details, weather details and might have a ASTRA AI Chatbot as we progress through more updates and phases. Phase 1 is basic and basically shows the 3D solar system and you can rotate to move the camera around. Moreover, you can click on planets to display the info abt them. Thats it Thx"}]...
|
Title: ASTRA by @BobbyLovesShrek | Stardance
Devl Title: ASTRA by @BobbyLovesShrek | Stardance
Devlogs:
Devlog #1: Hello Earthlings So I started with phase 1 of ASTRA-3D, which is a website that shows a lot of stuff, like 3D Solar System, info about planets, asteroid details, weather details and might have a ASTRA AI Chatbot as we progress through more updates and phases. Phase 1 is basic and basically shows the 3D solar system and you can rotate to move the camera around. Moreover, you can click on planets to display the info abt them. Thats it Thx
Devlog#2: Hello earthlings I have a lot of bugs and errors in phase 2 development. I can see that its a long road of fixing. But hey, atleast it’s for a good cause
Devlog#3-ish Hello mighty earthlings, I’m not really done with phase 3 of my project, hell, I’m not even done with phase 2 . I am currently adding moon textures and planet textures to the planets to make them look more realistic and I’m improving my UI. The thing is, there is a lot of errors and bugs, so this might be the most boring and brain-draining part yet. I think I would need another 6-7 hours to stop all errors and polish it. Until next time I guess
So, hello It has been a long time since I made my previous devlog. I actually went from milestone 1 to making milestone 0. So milestone 0 is the landing page, that describes what ASTRA 3D is and has a scroll driven narrative system. Clicking the ‘enter observatory’ button will take the user into the main logic of this website. I’ve integrated milestone 1 and milestone 0, and I’m progressing through milestone 2. That’s it, I guess. Byeeeeeeee
Devlog #5: Hello Earthlings, For Milestone 0, I upgraded the landing page into a proper interactive intro for ASTRA. It now has the orbital blueprint design, animated planet cards, scroll and pointer effects, section reveals, mobile navigation, reduced-motion support, and a clearer button that takes you into the simulation. The simulation itself stayed mostly the same for now, while I focused on making the first screen feel more polished and connected to the project’s space-science theme. As you can see, the design of the website has been improved a lot from before. I had some help from my friends at school, but I did around 65% of the work.
Devlog #6: Milestone 1 is where ASTRA stops being just a cool landing page and becomes an actual interactive Solar System. You can look around in 3D, select planets and moons, speed up or pause time, check live information, measure distances, and try simple spacecraft missions and orbit experiments. There were a few challenges along the way of building milestone 1, bugs and alot of errors. But I’ve created milestone 1, and I’m simultaenoulsy creating milestone 2.
Milestone 2 is basically about taking ASTRA from a working demo to a more complete learning tool, with things like extra satellites, better mission lessons, more detailed visuals, and useful features like saving or exporting your measurements. Added ASTRA Guide, a built-in educational assistant. It can explain planets, orbital speed, orbital periods, Kepler-inspired motion, eccentricity, inclination, AU, simulation time, distances, and the model’s limits. Answers use the currently selected planet, simulation date, speed, and active distance measurement. Added suggested questions to help beginners know what to ask. Milestone 3 will probably focus on making ASTRA more advanced and useful, with deeper mission-planning lessons, more satellites, better visuals, and tools for saving or exporting your measurements.
Guys, so like I started grinding on this thing Like this has been my main centre of focus atp. I finished building milestone 3 and added some features. Milestone 3 is the Expedition phase: adding moons, spacecraft missions, live data, and guided learning and discovery tools. Basically, ASTRA grows from exploring the solar system to taking little learning trips through it. Some of the trickier parts of milestone 3 were getting planets and moons to move in a convincing way, while keeping the controls responsive; showing useful live readouts without making the screen feel overloaded; and making spacecraft trips and orbital data understandable without pretending they’re accurate enough for real mission planning. The project simplifies some of the physics, and the roadmap still calls out live data and guided discovery as future work.
Alright guys, It might genuinely be time to ship this Goddamn I finished milestone 4 and 5 now, last minute grind Milestone 4 is where ASTRA gets more interactive. There’s more satellites, moons, spacecraft, etc. You can move around the 3d environment, so that it starts actually feeling like space simulation. In milestone 5, you can actually do stuff with those objects. You can create a mission, choose a destination, set objectives, plan the mission steps, and see everything play out in the 3D environment.
Ships:
ASTRA 3D is an interactive Solar System explorer. You can change the date and clock speed, select planets, compare distances, experiment with orbital parameters, and try simplified flights and transfers. It also includes a local notebook and an offline guide. The challenging part was connecting the orbital calculations to an interactive 3D scene while making clear what the simplified model can and cannot tell you. I’m proud that the project lets people explore these ideas hands-on and explains its limits: it isn’t a full physics simulation or a mission-planning tool. To try it, start the app with pnpm install and pnpm dev, then use the controls to change the date, select planets, measure distances, or launch an experiment....
|
1792853698.8964293
|
1792940098.8964293
|
|
66259
|
os by @fraunzen07 | Stardance
|
fraunzen07
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T08:38:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a simple OS running completely locally on your browser. I am currently working on other function, this is just a demo. It would be really helpful if you tell me what you think about it!", "repo": "https://github.com/neverwinter6/bobOS", "demo": "https://bob-os-lac.vercel.app/"}]...
|
[{"post_id": 74792, "ts": "202 [{"post_id": 74792, "ts": "2026-09-28T08:17:13Z", "hours": 0.2667, "text": "Demo is finished!"}, {"post_id": 74469, "ts": "2026-09-27T13:29:07Z", "hours": 1.9147, "text": "Currently working on the OS layout"}]...
|
Title: os by @fraunzen07 | Stardance
Devlogs:
Cur Title: os by @fraunzen07 | Stardance
Devlogs:
Currently working on the OS layout
Demo is finished!
Ships:
This is a simple OS running completely locally on your browser. I am currently working on other function, this is just a demo. It would be really helpful if you tell me what you think about it!...
|
1792817319.3396397
|
1792903719.3396397
|
|
66307
|
EKG using arduino by @Nakul27 | Stardance
|
Nakul27
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T08:08:08Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an EKG using arduino uno and an ad8232 sensor. It wasnt that hard but the correct debugging in the arduino ide was required as it was too twitchy now its fixed. I hope a more advanced/more accurate version of this EKG can be made within this budget as I believe it can hepl people with low to no access to medical devices due to various things like wars ,famines etc. Thank you", "repo": "https://github.com/GLizzyGoose/Primitive-ekg", "demo": ""}]...
|
[{"post_id": 74489, "ts": "202 [{"post_id": 74489, "ts": "2026-09-27T14:27:38Z", "hours": 0.3064, "text": "im making a simple ekg using arduino. Today i made the base build tomorrow im making a shell or case . it works using an arduino uno,ad 8232, and a few wires and the output is shown in the arduino ide’s serial plotter will change it into a proccessing program"}]...
|
Title: EKG using arduino by @Nakul27 | Stardance
Title: EKG using arduino by @Nakul27 | Stardance
Devlogs:
im making a simple ekg using arduino. Today i made the base build tomorrow im making a shell or case . it works using an arduino uno,ad 8232, and a few wires and the output is shown in the arduino ide’s serial plotter will change it into a proccessing program
Ships:
I made an EKG using arduino uno and an ad8232 sensor. It wasnt that hard but the correct debugging in the arduino ide was required as it was too twitchy now its fixed. I hope a more advanced/more accurate version of this EKG can be made within this budget as I believe it can hepl people with low to no access to medical devices due to various things like wars ,famines etc. Thank you...
|
1792817324.4647367
|
1792903724.4647367
|
|
49715
|
First os by @saatvik_270211 | Stardance
|
saatvik_270211
|
4
|
16.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T07:53:34Z", "hours": 5.0, "multiplier": 3.44, "payout": 18, "blessing": "neutral", "text": "Added new featured including Clock , Tic-Tac-Toe and character information . It was challenging to make working tic-tac-toe game have to look for different tutorials and explanation with syntax errors correction by AI .", "repo": "https://github.com/Kingplayer-eng/Web-OS", "demo": "https://kingplayer-eng.github.io/Web-OS/"}, {"ship_num": 2, "ts": "2026-09-18T10:33:48Z", "hours": 3.0, "multiplier": 1.69, "payout": 2, "blessing": "neutral", "text": "Fixed some common issues and added new feature like clock and characters . Will be adding more character in dossier .", "repo": "https://github.com/Kingplayer-eng/Web-OS", "demo": "https://kingplayer-eng.github.io/Web-OS/"}, {"ship_num": 3, "ts": "2026-09-14T09:09:31Z", "hours": 6.0, "multiplier": 1.97, "payout": 6, "blessing": "neutral", "text": "I made a working JJK styled Web Os with working api key from Nasa that chages background image. Also added Note box in top right with working buttons for 4 doman like in the anime itself . I hope you like this . If you got any suggestion feel free to tell me .", "repo": "https://github.com/Kingplayer-eng/Web-OS", "demo": "https://kingplayer-eng.github.io/Web-OS/"}, {"ship_num": 4, "ts": "2026-08-31T14:58:19Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I Made a simple Web OS for JJK anime . It had great challenges from finding an idea or to get image in the web . Most user can try out without any efforts", "repo": "https://github.com/Kingplayer-eng/Web-OS", "demo": "https://kingplayer-eng.github.io/Web-OS/"}]...
|
[{"post_id": 74787, "ts": "202 [{"post_id": 74787, "ts": "2026-09-28T07:46:51Z", "hours": 0.4742, "text": "Added 3 more character info in the icon ."}, {"post_id": 74291, "ts": "2026-09-27T04:11:32Z", "hours": 1.0492, "text": "Finally completed Tic-tac-toe game inside web os it was kinda difficult got so many errors making it . Have to use ai to fix errors."}, {"post_id": 73528, "ts": "2026-09-25T10:12:46Z", "hours": 0.6944, "text": "Making better icon for Tic-Tac-Toe . This is the progress till now ."}, {"post_id": 72165, "ts": "2026-09-22T10:58:43Z", "hours": 0.8167, "text": "Making tic-tac-toe game icon and game ."}, {"post_id": 70582, "ts": "2026-09-19T12:06:11Z", "hours": 1.5758, "text": "Made it good than previous one . Though it was quite challenging and got into many syntax errors."}, {"post_id": 70436, "ts": "2026-09-19T05:58:20Z", "hours": 0.6706, "text": "Trying to learn weather system . Will be going through tutorials for live weather in vs cod .Currently it’s not ."}, {"post_id": 70031, "ts": "2026-09-18T10:23:11Z", "hours": 0.6794, "text": "Completed Song require login spotify browser ."}, {"post_id": 69082, "ts": "2026-09-16T10:38:57Z", "hours": 0.5944, "text": "Adding every JJK character information . Today added Satoru Gojo . It was really confusing to code this but i fixed syntax errors by Ai."}, {"post_id": 68523, "ts": "2026-09-15T08:06:05Z", "hours": 0.8719, "text": "I added a icon to left of my WebOS will be customizing this a little better soon ."}, {"post_id": 68092, "ts": "2026-09-14T14:33:18Z", "hours": 0.4289, "text": "Added a little clock to left of Web OS."}, {"post_id": 67404, "ts": "2026-09-13T14:34:30Z", "hours": 1.7758, "text": "Learing css and making chnages in this project . I added button for welcome."}, {"post_id": 65878, "ts": "2026-09-11T09:57:10Z", "hours": 0.5578, "text": "Hi guys today i added cursed Notes allows you to write anything in that box . With Nasa API keys whenever you go back from domain it open new image ."}, {"post_id": 65292, "ts": "2026-09-10T10:17:11Z", "hours": 1.84, "text": "Hello guys Today i added NASA free API keys to web OS so every time you open it new image appear. This took so long to understand and write with several syntax errors hopefully it was correct by AI . I also added new images url with sound effects."}, {"post_id": 63628, "ts": "2026-09-07T15:37:40Z", "hours": 0.6272, "text": "Hey guys I hope you all doing well . I started my first OS project again from starting . I added new image and font size changes ."}, {"post_id": 59516, "ts": "2026-09-01T11:53:06Z", "hours": 0.3661, "text": "Added Volume control bar and fixed bugs and sounds with live weather option."}, {"post_id": 59482, "ts": "2026-09-01T10:53:11Z", "hours": 0.4989, "text": "Changed the whole layout of JJK themed Web OS"}, {"post_id": 58952, "ts": "2026-08-31T14:51:57Z", "hours": 0.25, "text": "Done creating domain expansion for sukuna , gojo and mahito."}, {"post_id": 58772, "ts": "2026-08-31T10:45:22Z", "hours": 2.0403, "text": "First time coding and making web OS . With working start button"}]...
|
Title: First os by @saatvik_270211 | Stardance
De Title: First os by @saatvik_270211 | Stardance
Devlogs:
First time coding and making web OS . With working start button
Done creating domain expansion for sukuna , gojo and mahito.
Changed the whole layout of JJK themed Web OS
Added Volume control bar and fixed bugs and sounds with live weather option.
Hey guys I hope you all doing well . I started my first OS project again from starting . I added new image and font size changes .
Hello guys Today i added NASA free API keys to web OS so every time you open it new image appear. This took so long to understand and write with several syntax errors hopefully it was correct by AI . I also added new images url with sound effects.
Hi guys today i added cursed Notes allows you to write anything in that box . With Nasa API keys whenever you go back from domain it open new image .
Learing css and making chnages in this project . I added button for welcome.
Added a little clock to left of Web OS.
I added a icon to left of my WebOS will be customizing this a little better soon .
Adding every JJK character information . Today added Satoru Gojo . It was really confusing to code this but i fixed syntax errors by Ai.
Completed Song require login spotify browser .
Trying to learn weather system . Will be going through tutorials for live weather in vs cod .Currently it’s not .
Made it good than previous one . Though it was quite challenging and got into many syntax errors.
Making tic-tac-toe game icon and game .
Making better icon for Tic-Tac-Toe . This is the progress till now .
Finally completed Tic-tac-toe game inside web os it was kinda difficult got so many errors making it . Have to use ai to fix errors.
Added 3 more character info in the icon .
Ships:
I Made a simple Web OS for JJK anime . It had great challenges from finding an idea or to get image in the web . Most user can try out without any efforts
I made a working JJK styled Web Os with working api key from Nasa that chages background image. Also added Note box in top right with working buttons for 4 doman like in the anime itself . I hope you like this . If you got any suggestion feel free to tell me .
Fixed some common issues and added new feature like clock and characters . Will be adding more character in dossier .
Added new featured including Clock , Tic-Tac-Toe and character information . It was challenging to make working tic-tac-toe game have to look for different tutorials and explanation with syntax errors correction by AI ....
|
1792839262.5476925
|
1792925662.5476925
|
|
65919
|
My very own WebOS by @Zuffii | Stardance
|
Zuffii
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T05:48:58Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my very own WebOS. Well just version 1 now. I always wanted my very own web and I always loved how apple designs its OS and website. So naturally, I combined the both to make LumenOS", "repo": "https://github.com/Zuffii/lumenos", "demo": "https://zuffii.github.io/lumenos/"}]...
|
[{"post_id": 74136, "ts": "202 [{"post_id": 74136, "ts": "2026-09-26T18:54:16Z", "hours": 0.5333, "text": "devlog #3 — the island era i put a dynamic island in the top of the screen, like the iphone. it’s a black pill that sits over the menu bar and morphs: the bigger news: the music is real . i didn’t want to embed mp3 files so the music app synthesizes lo-fi loops with the WebAudio api — triangle wave chords, a sine bass, random pentatonic notes sprinkled on top, plus a looped noise buffer filtered down for vinyl hiss. there are 3 “tracks” (bpm + chord progressions) and a live frequency visualizer on a canvas. no files, no copyright, just math. also added: settings app — 4 gradient wallpapers, 4 accent colors (the island equalizer, dock dots, progress bars all recolor), saved to localStorage, plus a factory reset button links app — grid of glass cards terminal got an open command, so open settings launches apps island notifications wired into notes, terminal and settings that wraps version 1.0. one html file, no frameworks, no login, and it actually feels like an os. on to WebOS 2 🚀"}, {"post_id": 74110, "ts": "2026-09-26T18:15:12Z", "hours": 0.6, "text": "devlog #2 — window manager arc the os grew a real window system . everything is managed from one createWindow(app) function, so adding a new app is just adding an object with a name, an icon and a render function. what’s new: 3 apps now: about, notes, terminal close / minimize / maximize on every window (green button remembers your old size + position and puts it back) windows resize from a corner grip, focus raises them above the others a dock with the mac hover-magnify effect and little dots under running apps — minimized windows can be brought back from there notes autosave to localStorage as you type (“saving…” → “saved ✓”) terminal got a tiny shell: help, neofetch, echo, ls, clear… the dock magnify is just a css transform on hover:"}, {"post_id": 74056, "ts": "2026-09-26T16:32:14Z", "hours": 0.9, "text": "devlog #1 started making my own os that runs in a browser tab. no frameworks, just one html file, because i want to actually understand every line of it. first build has: a boot screen with a logo + loading bar that fades away a frosted menu bar at the top with a live clock an aurora gradient wallpaper (just layered radial-gradients) one glass window (“about.txt”) with mac style traffic lights the fun part was making the window draggable. i used pointer events instead of mouse events so it would also work if someone opens this on a phone. the trick that made it feel smooth: instead of tracking where the mouse is, next up: more windows, real minimize/maximize, and a dock."}]...
|
Title: My very own WebOS by @Zuffii | Stardance
D Title: My very own WebOS by @Zuffii | Stardance
Devlogs:
devlog #1 started making my own os that runs in a browser tab. no frameworks, just one html file, because i want to actually understand every line of it. first build has: a boot screen with a logo + loading bar that fades away a frosted menu bar at the top with a live clock an aurora gradient wallpaper (just layered radial-gradients) one glass window (“about.txt”) with mac style traffic lights the fun part was making the window draggable. i used pointer events instead of mouse events so it would also work if someone opens this on a phone. the trick that made it feel smooth: instead of tracking where the mouse is, next up: more windows, real minimize/maximize, and a dock.
devlog #2 — window manager arc the os grew a real window system . everything is managed from one createWindow(app) function, so adding a new app is just adding an object with a name, an icon and a render function. what’s new: 3 apps now: about, notes, terminal close / minimize / maximize on every window (green button remembers your old size + position and puts it back) windows resize from a corner grip, focus raises them above the others a dock with the mac hover-magnify effect and little dots under running apps — minimized windows can be brought back from there notes autosave to localStorage as you type (“saving…” → “saved ✓”) terminal got a tiny shell: help, neofetch, echo, ls, clear… the dock magnify is just a css transform on hover:
devlog #3 — the island era i put a dynamic island in the top of the screen, like the iphone. it’s a black pill that sits over the menu bar and morphs: the bigger news: the music is real . i didn’t want to embed mp3 files so the music app synthesizes lo-fi loops with the WebAudio api — triangle wave chords, a sine bass, random pentatonic notes sprinkled on top, plus a looped noise buffer filtered down for vinyl hiss. there are 3 “tracks” (bpm + chord progressions) and a live frequency visualizer on a canvas. no files, no copyright, just math. also added: settings app — 4 gradient wallpapers, 4 accent colors (the island equalizer, dock dots, progress bars all recolor), saved to localStorage, plus a factory reset button links app — grid of glass cards terminal got an open command, so open settings launches apps island notifications wired into notes, terminal and settings that wraps version 1.0. one html file, no frameworks, no login, and it actually feels like an os. on to WebOS 2 🚀
Ships:
I made my very own WebOS. Well just version 1 now. I always wanted my very own web and I always loved how apple designs its OS and website. So naturally, I combined the both to make LumenOS...
|
1792817285.2354262
|
1792903685.2354262
|
|
66432
|
RamWatcher by @AbhiRamS | Stardance
|
AbhiRamS
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T04:32:55Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I had to spend a lot of time researching this. I made a program that watches your ram limit and deletes the programs that are taking up the most ram. If it’s not sure, it’ll ask you about it. Look at ram_watcher_log.txt to see your history.", "repo": "https://github.com/abhiramsuravajjala/RamWatcher", "demo": "https://abhiramsuravajjala.github.io/RamWatcher/"}]...
|
[{"post_id": 74754, "ts": "202 [{"post_id": 74754, "ts": "2026-09-28T04:29:46Z", "hours": 0.2914, "text": "Fixed annoying popups"}]...
|
Title: RamWatcher by @AbhiRamS | Stardance
Devlog Title: RamWatcher by @AbhiRamS | Stardance
Devlogs:
Fixed annoying popups
Ships:
I had to spend a lot of time researching this. I made a program that watches your ram limit and deletes the programs that are taking up the most ram. If it’s not sure, it’ll ask you about it. Look at ram_watcher_log.txt to see your history....
|
1792817333.2553058
|
1792903733.2553058
|
|
56391
|
jam by @tiydwe | Stardance
|
tiydwe
|
1
|
74.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T03:15:45Z", "hours": 74.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Introducing JAM, a 2D puzzle game based off of creating and modifying road networks to get cars from here to there! In JAM, you build a road network and watch simulated cars try their best to traverse it. Then, you get feedback on your road network and try to make it better! If you want to play JAM, it is incredibly easy! Just follow the quickstart instructions in the README here https://github.com/tiydwe/jam ! JAM is the most challenging, in depth, project I’ve ever done, and I’m proud of it! JAM is built from scratch using C++ and the Simple and Fast Multimedia Library, without any game engine. I’ve learned and grown throughout building this project and many ways. For example, one thing I’m proud of is the underlying abstraction and code structure. I’ve spent countless hours making, learning, and struggling with proper memory management, ownership models, and relationships. Another example is the UI. Although the UI might look a bit simplistic, it was built entirely from basic primitives, without fancy game engine features. Getting the UI functional and good looking was a major challenge for me. After spending over 70 hours on JAM, I’m proud to say that this project has exceeded all of my expectations and been an amazing learning experience!", "repo": "https://github.com/tiydwe/jam", "demo": "https://github.com/tiydwe/jam/releases"}]...
|
[{"post_id": 74715, "ts": "202 [{"post_id": 74715, "ts": "2026-09-28T01:43:45Z", "hours": 1.7006, "text": "Added cars fade out animation Cars now fade out when they despawn and when they reach a destination! So when I sent this to a friend they got confused why cars kept disappearing, so I added this. When a car reaches the destination, the car will fade out green, but if the car despawns because it has no route it will fade out red. This was actually harder than it seems because my code was just basically freeing the car class as soon as the car reached the destination, but I changed the code so it would decrement a counter before deleting itself and use the counter to change the color of the car."}, {"post_id": 73808, "ts": "2026-09-26T02:02:07Z", "hours": 2.2122, "text": "Fixed some copyright issues (oops) and created first release So basically since the beginning of this project, I’ve been just putting ARIAL.TTF in the assets folder. It turns out that thats actually illigal and copyright infringement (oops), so I’ve switched to a different open-source font (and I included the license/attribution). I’ve also cleaned the repository history to remove any lingering font files so I’m not violating copyright or anything. Besides that, I’ve created the first release, v0.1.5 (the 4 before were all broken/tests/copyright font issues). I used AI to help me write the github actions workflow (because like literally NO ONE knows how to do that) and got builds for Linux, MacOS, and Windows. I’ve only tested it on windows so far, but I’ll try and test linux on a VM later. Anyway, I’ll be continuing to work on the game and make some UI/UX improvements."}, {"post_id": 73442, "ts": "2026-09-25T03:14:55Z", "hours": 0.9517, "text": "Improved the title screens, fixed some more bugs Bugs fixed / features added: Added another car type For some reason cars went backward, so I fixed the sprites Added title screen images"}, {"post_id": 72969, "ts": "2026-09-24T04:08:22Z", "hours": 1.5692, "text": "Tried adding buildings, but didn’t work out So I tried putting SimCity style buildings and it didn’t really go very well. I think its mainly because I’m not a good artist The roads aren’t axis aligned and I’m not going to do some crazy work to get all the buildings nicely lined up and angled like City Skylines. Other than that, I also updated the stats screen to make it look better and more easily show the requirements."}, {"post_id": 72903, "ts": "2026-09-24T00:11:43Z", "hours": 1.9867, "text": "Lots of new misc. features! I got some more friends to try my game and got lots of feedback. Here’s what I added: Crosswalks at intersections (makes them look so much better) Cars will show a no route icon if they can’t find a route (now players won’t get stuck wondering why cars arn’t moving) Hovering over cars will show their intended destination. Another level! I’ll keep working on more UI/UX upgrades. The game is looking a lot nicer now too!"}, {"post_id": 72524, "ts": "2026-09-23T04:09:01Z", "hours": 0.7831, "text": "Added some more UI features and fixed misc. bugs So I showed this to some of my friends and got some very helpful feedback especially on UX. Feature improvements: In the simulate window, I added a back button to go back and cancel the simulation so you no longer have to wait for the simulation to finish. When you are building the start of the road, it shows a preview of where the road will be to help with snapping Bugfixes: My buttons were previously accepting any clicks, even when the focus was not on the application, I fixed that by checking the focus of the application before accepting mouse clicks. Road snapping stayed the same distance from intersections even though there might be cases when the user wants to create a road near another road but not directly adjacent. I fixed this by multiplying the snap distance by the zoom factor to get a new corrected version. Overall, I don’t plan to make many more changes and will probably just add another 3-5 levels, work on the title screen, and get the game ready for shipping."}, {"post_id": 71412, "ts": "2026-09-20T19:39:32Z", "hours": 1.2444, "text": "Fixed a few problematic bugs and updated the buttons. There were two major bugs that I fixed today: Lane merging: Cars would often get stuck trying to merge when other cars also wanted to merge. This was because the merging positon was behind the actual car so they were in a deadlock. Fixed it by making sure to actualy update the new merge position if the car still has velocity. Button press: Pressing a button which switched to a new screen would press the button on the new screen directly under the press. This took me embarassly long to debug, mostly because evey time I put a breakpoint, the issue would go away. The fix was changing the initilization of a button from isPressed false to true, which was pretty funny considering I spent 30 minutes debugging this. I also updated the buttons and added a 4th level where cars are going both directions. It’s actually pretty hard to reach the target. I also changed the pathfinding to take into account the speed limit of the road and put penalties for going through routes with more intersections."}, {"post_id": 70974, "ts": "2026-09-20T04:32:09Z", "hours": 3.6283, "text": "Huge UI upgrade and fixed a few small bugs! I’ve added a background, two different car assets, and 3 different levels! I also upgraded the buttons (but I forgot to apply them to the simulation window, so you’ll see them in the next devlog). Additionally, I added dragging in the simulation window, which was in the Editor but not the Simulation for some reason. There were also two major bugs that I fixed today: Broken pathfinding on some cases: I was kind of stupid and had this weird edge case in a set where roads would not insert because the set thought they were equal because of a dumb comparison function, but that is fixed now. It took me way to long to fix this, but at least that’s done now. Cars always faced right (east): If you didn’t notice, in all my previous devlogs, the cars (which were just placeholder red squares) didn’t ever turn, which was kind of silly of me. Luckily, that was pretty easy to fix and I only had to change 3 functions."}, {"post_id": 70398, "ts": "2026-09-19T03:16:36Z", "hours": 1.6942, "text": "Added 3 new road types and updated visuals for the 4-lane road! Well, all 4 road types are now added so I can safely say that I am done with ALL the major parts of the game! Saving/Loading New game Title screen Editor window Simulation End-of-game window I also added anti-aliasing so the roads don’t look so jagged anymore. One lane roads were surprisingly easy (only like 2 easy bugs in the code) because most of the work I already did was generic enough to accept a road with 0 lanes on the left side. The rest of the time will be spent polishing everything up! Here’s my idea list so far: Add backgrounds so everything isn’t all black Change the color palette (those were supposed to be placeholder colors…) Add some more QOL features (i.e. shows if you are building the road before you click) Improve the car visuals (maybe add some random cars if its not to hard) Add audio! Do a bunch of testing to get it ready for shipping If you want to add any more to this list, just tell me."}, {"post_id": 69939, "ts": "2026-09-18T03:04:12Z", "hours": 2.1767, "text": "Added road hitboxes and placement restrictions! Roads can no longer be placed overlapping other roads! Implementing this feature might seem really easy, but actually it was really, really annoying. One main problem was that SFML doesn’t have a native way to check if two sprites/rectangleShapes are intersecting so I had too implment the Separating Axis Theorem to check if two arbitray rectangles are intersecting. I also had some issues with rotating (wrong origin), but thankfully I fixed that pretty quick. Anyway, I think the only thing left is to add all the road types (I’m planning on 1-lane one way, 2-lane one way, 2 lane road, 4 lane road, and maybe 6 lane road) and polish everything up!"}, {"post_id": 69474, "ts": "2026-09-17T04:09:40Z", "hours": 3.6081, "text": "Almost done core game + ui! I spend the last 4 hours working on the UI! So now when you start the game, you will see a simple title screen where you can start a new game from one of the levels (not shown in video) or load a saved game. Then you can go into the core gameplay loop: edit -> simulate -> stats screen (now shows pass/fail based on level conditions!). It was mostly tedious to write every single ui class, but at least I finished most of the UI. The remaining things that I need to do is add more road placement constraints (no overlapping), add more types of roads, and POLISH! I’ll be working on those for the next two weeks until the end of Stardance I guess."}, {"post_id": 68971, "ts": "2026-09-16T04:07:16Z", "hours": 3.555, "text": "Added game saving! Pretty self explanatory I guess? The UI is still pretty horrible, so I’m still going to have to work on that. I couldn’t figure out how to get choose a folder, so I’m just using the portable-file-dialogs library. The file saving is pretty straightforward, you just choose a folder and it saves there. The file format is pretty simple because it only saves the layout you made. Later, I’ll probably polish up the save dialogue and implement loading from the file. I might also work on the level selector screen or the stats screen to show how well you did!"}, {"post_id": 68848, "ts": "2026-09-15T21:12:46Z", "hours": 2.5681, "text": "Added road demolishing! Roads can now be demolished! Also, if you are in demolish mode and you hover over a road, it will highlight the road red. Some roads cannot be demolished, only roads that you placed can be demolished. This feature seems really simple but it was a huge pain to implement, mostly because of the crazy amount of pointers to other objects everywhere. Also, remember how I said I shouldn’t be using size_t for both physical and internal IDs, well that came back to bite me. I spent like an hour debugging that, but at least that’s fixed now!"}, {"post_id": 67846, "ts": "2026-09-14T03:37:33Z", "hours": 2.4819, "text": "Made intersections have some visuals! As you can see in the video, intersections now are filled grey and it actually looks okay. The main issue currently is that if an intersection only has two roads or if the roads are really close together, it causes the polygon to look quite skewed. I’ll probally be working on that next."}, {"post_id": 66941, "ts": "2026-09-12T22:21:13Z", "hours": 2.0508, "text": "Made cars move smoothly at intersections! This was an absolute nightmare to do. Mostly because my previous code was not designed at all to do this. I had to hack together a solution where below a certain threshold the car is in the intersection. This has some side effects of sometimes the car goes slow in the intersection and sometimes fast, but I think its reasonable (tighter curve = slower?). The biggest issue is that my code was designed assuming the two roads on the intersection were symmetrical (idk why i did that) so I had to basically re write the whole intersection code."}, {"post_id": 66333, "ts": "2026-09-12T03:20:36Z", "hours": 1.27, "text": "Fixed my BFS algorithm to use Dijkstra’s now! IDK why but earlier when I first made the BFS I was lazy and just used number of roads. Well, now it uses real road length to calculate distance. I had some problems involving queues and stuff, but it was pretty straightforward to get Dijkstra’s working. The video just shows a case where the old algorithm would choose the super long route because it had less roads, but now it correctly chooses the shorter route."}, {"post_id": 65765, "ts": "2026-09-11T03:46:40Z", "hours": 2.0719, "text": "I was feeling pretty tired today, so I didn’t add any major features and instead focuesd on quality of life stuff. As you can see in the video, the biggest improvements are the road preview and clicking [ESC] cancels building the road. The road preview also shows whether the road is valid. I had a ton of issues with the coordinate systems (there are like 3 different ones! pixels, global, view), but I was able to figure it out. There wasn’t anything very complicated, but next time I’ll add some kind of visuals at intersections and probally work on fixing BFS."}, {"post_id": 65179, "ts": "2026-09-10T03:54:45Z", "hours": 3.1253, "text": "You can now see basic stats once the simulation is done! The video also demonstrates additional features. The UI is still a bit simple, but that isn’t really the number one priority. To do this, I reworked the game loop to use a new state variable to control if the screen would show the editor, simulator, or stats window (notice how it no longer opens a new window). I came across some bugs involving cars going the wrong way on roads and the app crashing if I added a new intersection (that was because I mixed up internal and external IDs). Next, I think I will add a scoring system or a save load system. If you have any ideas on features that you think would make this better (besides the obvious), let me know!"}, {"post_id": 63886, "ts": "2026-09-07T21:57:33Z", "hours": 3.2367, "text": "Now roads can be drawn and it’s looking cool! As you can see in the recording, without drawing the roads, the cars just stop at the intersection because they cannot find any routes (gaps between roads are intersections, I’ll fix that later). By drawing a road, the cars can drive to their destination in the simulation. The biggest issue I had while coding this was mixing up physical IDs and internal IDs, which are not interchangable (I should have probally used a class or struct to represent IDs instead of a raw size_t). Next, I’ll work on making the intersections look better and maybe get some statistics on how well the cars preformed at the end of the simulation!"}, {"post_id": 63245, "ts": "2026-09-06T23:18:58Z", "hours": 1.535, "text": "Added some player controls and separated the editor window and simulation window. As you can see, the simulation now works okay and can be changed to 3 different speeds. I haven’t done too much, but next I will probally fix the roads meeting at the intersections."}, {"post_id": 62688, "ts": "2026-09-06T05:31:03Z", "hours": 5.7889, "text": "I know it doesn’t look like much, but this represents a lot or work and progress. I spent almost 6 hours to refactor my code to use a much cleaner ownership system that should completely prevent memory leaks and have much better separation of the static parts of simulation vs. parts that area ctually getting simulated. In a nutshell, what I did was make two classes, Layout and Simulation. Layout always exists and is the thing that is drawn on screen. Layout doesn’t have any cars or moving stuff and you can edit layout. When you start a simulation a NEW simulation object is created with all the cars which can simulated it. The clean split makes it a lot easier to know everything and edit/save stuff which might be usefull later. I had to do a lot of changing and if you look at the git commit basically every file was modified, but now the architecture is much cleaner. Next, I’ll work on adding the Simulate button and making a new window show up with the cars to simulate it."}, {"post_id": 61974, "ts": "2026-09-05T05:15:06Z", "hours": 3.2656, "text": "Made some progress, but then decided to revert back to yesterday So now I know why smart pointers are discouraged! So my ownership model was really screwed up and super confusing and I had some crazy memory problems and segmentation faults so I reverted back to yesterdays commit and am going to refactor the code to use SMART POINTERS (wow) and have a better ownership model. I feel pretty sad that I basically made no progress with 3 hours of work but I guess I learned something? SO the new plan is that Layout class will handle all things that are static in simulation and are just there (roads and intersections, both physical/logical) and Simulation will only handle all the cars and driving around. The EditorWindow class will have a pointer to (but now own) Layout so it can modify Layout but not Simulation. The SimulationWindow class will have a smart pointer to (and own) a simulation (fresh) and PhysicalCar s. This should help clarify ownership and prevent memory management issues."}, {"post_id": 61269, "ts": "2026-09-04T03:47:53Z", "hours": 5.1006, "text": "More visuals (multiple roads + intersection support) and LOADING PRESETS! I had to refactor a bunch of my code to use stuff allocated on the heap because I, stupidly, decided to initialize a bunch of my objects on the stack in a loop, causing a lot of the pointers to become hanging. Oh well, now I just have to make sure to remember to delete the allocated objects. Some plain and dirty presets can be loaded and the textures look pretty bad, but it will look a lot better pretty soon. I’m going to work on adding the first player interaction: allowing the player to add a road by clicking twice. I expect this might be a bit hard and school’s starting so it will probably be a while before I post another devlog (depending on how hard it is for me to add it) I also might try to get the road offsets and intersections better so it is more playable."}, {"post_id": 60024, "ts": "2026-09-02T03:57:47Z", "hours": 4.4422, "text": "Got some real visuals going! It’s a bit messy but if you look closely you can see the car follow the road (that road is supposed to be a 4 lane road but I didn’t draw it), switch onto a lane on the side, and keep accelerating. The framework has been built to easily expand to different types of roads like one way, 2 lane, 4 lane, etc. Next I’ll start working on getting the car to transition at intersections and finish the simulation portion. Then I can get started on working on the player interaction part!"}, {"post_id": 59324, "ts": "2026-09-01T01:34:13Z", "hours": 2.2528, "text": "Finally got the cars to be a little bit intelligent and traffic lights to actually work Traffic lights The traffic lights now enforce lane rules (cars must be on a certain lane when light is green to go to the next lane). The traffic lights are also auto generated in a bit of a “dumb” way. The traffic light just gives turns to each incoming road to go wherever they want and all other roads cannot go. Later, I might allow valid right turns, but that’s a problem for later. Car pathfinding Although I haven’t implemented the BFS search for the cars, given a route cars will now look ahead to the next intersection and randomly auto merge onto the lane (the cars are more likely to merge when they are closer to the intersection). This is to make sure that cars won’t all merge at the same time, which would be weird."}, {"post_id": 58657, "ts": "2026-08-31T04:38:04Z", "hours": 9.5722, "text": "Started my new video game, JAM JAM is a puzzle video game about solving traffic jams! I don’t have much experience writing video games so this will be a first for me (although I have plenty of regular c++ experience). So far I’ve just written the very very basic car driving logic and have it printed out to the debug console (I plan to add actual graphics once core logic is done). Currently I’ve got simple one-lane roads working and some really stupid intersections, but I’m working on multi-lane roads, merging, traffic light schedules, and cars actually waiting at intersections!"}]...
|
Title: jam by @tiydwe | Stardance
Devlogs:
Starte Title: jam by @tiydwe | Stardance
Devlogs:
Started my new video game, JAM JAM is a puzzle video game about solving traffic jams! I don’t have much experience writing video games so this will be a first for me (although I have plenty of regular c++ experience). So far I’ve just written the very very basic car driving logic and have it printed out to the debug console (I plan to add actual graphics once core logic is done). Currently I’ve got simple one-lane roads working and some really stupid intersections, but I’m working on multi-lane roads, merging, traffic light schedules, and cars actually waiting at intersections!
Finally got the cars to be a little bit intelligent and traffic lights to actually work Traffic lights The traffic lights now enforce lane rules (cars must be on a certain lane when light is green to go to the next lane). The traffic lights are also auto generated in a bit of a “dumb” way. The traffic light just gives turns to each incoming road to go wherever they want and all other roads cannot go. Later, I might allow valid right turns, but that’s a problem for later. Car pathfinding Although I haven’t implemented the BFS search for the cars, given a route cars will now look ahead to the next intersection and randomly auto merge onto the lane (the cars are more likely to merge when they are closer to the intersection). This is to make sure that cars won’t all merge at the same time, which would be weird.
Got some real visuals going! It’s a bit messy but if you look closely you can see the car follow the road (that road is supposed to be a 4 lane road but I didn’t draw it), switch onto a lane on the side, and keep accelerating. The framework has been built to easily expand to different types of roads like one way, 2 lane, 4 lane, etc. Next I’ll start working on getting the car to transition at intersections and finish the simulation portion. Then I can get started on working on the player interaction part!
More visuals (multiple roads + intersection support) and LOADING PRESETS! I had to refactor a bunch of my code to use stuff allocated on the heap because I, stupidly, decided to initialize a bunch of my objects on the stack in a loop, causing a lot of the pointers to become hanging. Oh well, now I just have to make sure to remember to delete the allocated objects. Some plain and dirty presets can be loaded and the textures look pretty bad, but it will look a lot better pretty soon. I’m going to work on adding the first player interaction: allowing the player to add a road by clicking twice. I expect this might be a bit hard and school’s starting so it will probably be a while before I post another devlog (depending on how hard it is for me to add it) I also might try to get the road offsets and intersections better so it is more playable.
Made some progress, but then decided to revert back to yesterday So now I know why smart pointers are discouraged! So my ownership model was really screwed up and super confusing and I had some crazy memory problems and segmentation faults so I reverted back to yesterdays commit and am going to refactor the code to use SMART POINTERS (wow) and have a better ownership model. I feel pretty sad that I basically made no progress with 3 hours of work but I guess I learned something? SO the new plan is that Layout class will handle all things that are static in simulation and are just there (roads and intersections, both physical/logical) and Simulation will only handle all the cars and driving around. The EditorWindow class will have a pointer to (but now own) Layout so it can modify Layout but not Simulation. The SimulationWindow class will have a smart pointer to (and own) a simulation (fresh) and PhysicalCar s. This should help clarify ownership and prevent memory management issues.
I know it doesn’t look like much, but this represents a lot or work and progress. I spent almost 6 hours to refactor my code to use a much cleaner ownership system that should completely prevent memory leaks and have much better separation of the static parts of simulation vs. parts that area ctually getting simulated. In a nutshell, what I did was make two classes, Layout and Simulation. Layout always exists and is the thing that is drawn on screen. Layout doesn’t have any cars or moving stuff and you can edit layout. When you start a simulation a NEW simulation object is created with all the cars which can simulated it. The clean split makes it a lot easier to know everything and edit/save stuff which might be usefull later. I had to do a lot of changing and if you look at the git commit basically every file was modified, but now the architecture is much cleaner. Next, I’ll work on adding the Simulate button and making a new window show up with the cars to simulate it.
Added some player controls and separated the editor window and simulation window. As you can see, the simulation now works okay and can be changed to 3 different speeds. I haven’t done too much, but next I will probally fix the roads meeting at the intersections.
Now roads can be drawn and it’s looking cool! As you can see in the recording, without drawing the roads, the cars just stop at the intersection because they cannot find any routes (gaps between roads are intersections, I’ll fix that later). By drawing a road, the cars can drive to their destination in the simulation. The biggest issue I had while coding this was mixing up physical IDs and internal IDs, which are not interchangable (I should have probally used a class or struct to represent IDs instead of a raw size_t). Next, I’ll work on making the intersections look better and maybe get some statistics on how well the cars preformed at the end of the simulation!
You can now see basic stats once the simulation is done! The video also demonstrates additional features. The UI is still a bit simple, but that isn’t really the number one priority. To do this, I reworked the game loop to use a new state variable to control if the screen would show the editor, simulator, or stats window (notice how it no longer opens a new window). I came across some bugs involving cars going the wrong way on roads and the app crashing if I added a new intersection (that was because I mixed up internal and external IDs). Next, I think I will add a scoring system or a save load system. If you have any ideas on features that you think would make this better (besides the obvious), let me know!
I was feeling pretty tired today, so I didn’t add any major features and instead focuesd on quality of life stuff. As you can see in the video, the biggest improvements are the road preview and clicking [ESC] cancels building the road. The road preview also shows whether the road is valid. I had a ton of issues with the coordinate systems (there are like 3 different ones! pixels, global, view), but I was able to figure it out. There wasn’t anything very complicated, but next time I’ll add some kind of visuals at intersections and probally work on fixing BFS.
Fixed my BFS algorithm to use Dijkstra’s now! IDK why but earlier when I first made the BFS I was lazy and just used number of roads. Well, now it uses real road length to calculate distance. I had some problems involving queues and stuff, but it was pretty straightforward to get Dijkstra’s working. The video just shows a case where the old algorithm would choose the super long route because it had less roads, but now it correctly chooses the shorter route.
Made cars move smoothly at intersections! This was an absolute nightmare to do. Mostly because my previous code was not designed at all to do this. I had to hack together a solution where below a certain threshold the car is in the intersection. This has some side effects of sometimes the car goes slow in the intersection and sometimes fast, but I think its reasonable (tighter curve = slower?). The biggest issue is that my code was designed assuming the two roads on the intersection were symmetrical (idk why i did that) so I had to basically re write the whole intersection code.
Made intersections have some visuals! As you can see in the video, intersections now are filled grey and it actually looks okay. The main issue currently is that if an intersection only has two roads or if the roads are really close together, it causes the polygon to look quite skewed. I’ll probally be working on that next.
Added road demolishing! Roads can now be demolished! Also, if you are in demolish mode and you hover over a road, it will highlight the road red. Some roads cannot be demolished, only roads that you placed can be demolished. This feature seems really simple but it was a huge pain to implement, mostly because of the crazy amount of pointers to other objects everywhere. Also, remember how I said I shouldn’t be using size_t for both physical and internal IDs, well that came back to bite me. I spent like an hour debugging that, but at least that’s fixed now!
Added game saving! Pretty self explanatory I guess? The UI is still pretty horrible, so I’m still going to have to work on that. I couldn’t figure out how to get choose a folder, so I’m just using the portable-file-dialogs library. The file saving is pretty straightforward, you just choose a folder and it saves there. The file format is pretty simple because it only saves the layout you made. Later, I’ll probably polish up the save dialogue and implement loading from the file. I might also work on the level selector screen or the stats screen to show how well you did!
Almost done core game + ui! I spend the last 4 hours working on the UI! So now when you start the game, you will see a simple title screen where you can start a new game from one of the levels (not shown in video) or load a saved game. Then you can go into the core gameplay loop: edit -> simulate -> stats screen (now shows pass/fail based on level conditions!). It was mostly tedious to write every single ui class, but at least I finished most of the UI. The remaining things that I need to do is add more road placement constraints (no overlapping), add more types of roads, and POLISH! I’ll be working on those for the next two weeks until the end of Stardance I guess.
Added road hitboxes and placement restrictions! Roads can no longer be placed overlapping other roads! Implementing this feature might seem really easy, but actually it was really, really annoying. One main problem was that SFML doesn’t have a native way to check if two sprites/rectangleShapes are intersecting so I had too implment the Separating Axis Theorem to check if two arbitray rectangles are intersecting. I also had some issues with rotating (wrong origin), but thankfully I fixed that pretty quick. Anyway, I think the only thing left is to add all the road types (I’m planning on 1-lane one way, 2-lane one way, 2 lane road, 4 lane road, and maybe 6 lane road) and polish everything up!
Added 3 new road types and updated visuals for the 4-lane road! Well, all 4 road types are now added so I can safely say that I am done with ALL the major parts of the game! Saving/Loading New game Title screen Editor window Simulation End-of-game window I also added anti-aliasing so the roads don’t look so jagged anymore. One lane roads were surprisingly easy (only like 2 easy bugs in the code) because most of the work I already did was generic enough to accept a road with 0 lanes on the left side. The rest of the time will be spent polishing everything up! Here’s my idea list so far: Add backgrounds so everything isn’t all black Change the color palette (those were supposed to be placeholder colors…) Add some more QOL features (i.e. shows if you are building the road before you click) Improve the car visuals (maybe add some random cars if its not to hard) Add audio! Do a bunch of testing to get it ready for shipping If you want to add any more to this list, just tell me.
Huge UI upgrade and fixed a few small bugs! I’ve added a background, two different car assets, and 3 different levels! I also upgraded the buttons (but I forgot to apply them to the simulation window, so you’ll see them in the next devlog). Additionally, I added dragging in the simulation window, which was in the Editor but not the Simulation for some reason. There were also two major bugs that I fixed today: Broken pathfinding on some cases: I was kind of stupid and had this weird edge case in a set where roads would not insert because the set thought they were equal because of a dumb comparison function, but that is fixed now. It took me way to long to fix this, but at least that’s done now. Cars always faced right (east): If you didn’t notice, in all my previous devlogs, the cars (which were just placeholder red squares) didn’t ever turn, which was kind of silly of me. Luckily, that was pretty easy to fix and I only had to change 3 functions.
Fixed a few problematic bugs and updated the buttons. There were two major bugs that I fixed today: Lane merging: Cars would often get stuck trying to merge when other cars also wanted to merge. This was because the merging positon was behind the actual car so they were in a deadlock. Fixed it by making sure to actualy update the new merge position if the car still has velocity. Button press: Pressing a button which switched to a new screen would press the button on the new screen directly under the press. This took me embarassly long to debug, mostly because evey time I put a breakpoint, the issue would go away. The fix was changing the initilization of a button from isPressed false to true, which was pretty funny considering I spent 30 minutes debugging this. I also updated the buttons and added a 4th level where cars are going both directions. It’s actually pretty hard to reach the target. I also changed the pathfinding to take into account the speed limit of the road and put penalties for going through routes with more intersections.
Added some more UI features and fixed misc. bugs So I showed this to some of my friends and got some very helpful feedback especially on UX. Feature improvements: In the simulate window, I added a back button to go back and cancel the simulation so you no longer have to wait for the simulation to finish. When you are building the start of the road, it shows a preview of where the road will be to help with snapping Bugfixes: My buttons were previously accepting any clicks, even when the focus was not on the application, I fixed that by checking the focus of the application before accepting mouse clicks. Road snapping stayed the same distance from intersections even though there might be cases when the user wants to create a road near another road but not directly adjacent. I fixed this by multiplying the snap distance by the zoom factor to get a new corrected version. Overall, I don’t plan to make many more changes and will probably just add another 3-5 levels, work on the title screen, and get the game ready for shipping.
Lots of new misc. features! I got some more friends to try my game and got lots of feedback. Here’s what I added: Crosswalks at intersections (makes them look so much better) Cars will show a no route icon if they can’t find a route (now players won’t get stuck wondering why cars arn’t moving) Hovering over cars will show their intended destination. Another level! I’ll keep working on more UI/UX upgrades. The game is looking a lot nicer now too!
Tried adding buildings, but didn’t work out So I tried putting SimCity style buildings and it didn’t really go very well. I think its mainly because I’m not a good artist The roads aren’t axis aligned and I’m not going to do some crazy work to get all the buildings nicely lined up and angled like City Skylines. Other than that, I also updated the stats screen to make it look better and more easily show the requirements.
Improved the title screens, fixed some more bugs Bugs fixed / features added: Added another car type For some reason cars went backward, so I fixed the sprites Added title screen images
Fixed some copyright issues (oops) and created first release So basically since the beginning of this project, I’ve been just putting ARIAL.TTF in the assets folder. It turns out that thats actually illigal and copyright infringement (oops), so I’ve switched to a different open-source font (and I included the license/attribution). I’ve also cleaned the repository history to remove any lingering font files so I’m not violating copyright or anything. Besides that, I’ve created the first release, v0.1.5 (the 4 before were all broken/tests/copyright font issues). I used AI to help me write the github actions workflow (because like literally NO ONE knows how to do that) and got builds for Linux, MacOS, and Windows. I’ve only tested it on windows so far, but I’ll try and test linux on a VM later. Anyway, I’ll be continuing to work on the game and make some UI/UX improvements.
Added cars fade out animation Cars now fade out when they despawn and when they reach a destination! So when I sent this to a friend they got confused why cars kept disappearing, so I added this. When a car reaches the destination, the car will fade out green, but if the car despawns because it has no route it will fade out red. This was actually harder than it seems because my code was just basically freeing the car class as soon as the car reached the destination, but I changed the code so it would decrement a counter before deleting itself and use the counter to change the color of the car.
Ships:
Introducing JAM, a 2D puzzle game based off of creating and modifying road networks to get cars from here to there! In JAM, you build a road network and watch simulated cars try their best to traverse it. Then, you get feedback on your road network and try to make it better! If you want to play JAM, it is incredibly easy! Just follow the quickstart instructions in the README here https://github.com/tiydwe/jam ! JAM is the most challenging, in depth, project I’ve ever done, and I’m proud of it! JAM is built from scratch using C++ and the Simple and Fast Multimedia Library, without any game engine. I’ve learned and grown throughout building this project and many ways. For example, one thing I’m proud of is the underlying abstraction and code structure. I’ve spent countless hours making, learning, and struggling with proper memory management, ownership models, and relationships. Another example is the UI. Although the UI might look a bit simplistic, it was built entirely from basic primitives, without fancy game engine features. Getting the UI functional and good looking was a major challenge for me. After spending over 70 hours on JAM, I’m proud to say that this project has exceeded all of my expectations and been an amazing learning experience!...
|
1792853706.8220153
|
1792940106.8220153
|
|
50555
|
NeuralNetwork by @BeytiKebab | Stardance
|
BeytiKebab
|
1
|
19.29
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:52:43Z", "hours": 18.0, "multiplier": 17.25, "payout": 0, "blessing": "neutral", "text": "I build this digit classifier CLI tool, which basically allows you to pass and image and guesses which digit it features. I built/trained the neural network from strach using pure python. I did not use and machine learning libraries because I wanted to learn how they work in a deeper level. it is currently trained on 5000 images with 15 iterations, this may sound very little but due to using python list instead of numpy arrays my runtime is alread about ~300 seconds for training. I learned a lot about neural networks while building this project. Although I did not follow any tutorials when builing it I found 3Blue1Brown’s Naural Network videos extremely helpfull when researching fundemental concpets! Even though the research part was hard I feel like the hardest part was optimizing the train function I had to do more research on how batch gradient decesent works and more techniques. Its currently at 92% accuracy with testing data but it might still styrugle with picture that have grey or weird back grounds which I plan to fix next! The model can be tested using the PyPi install route, I also have detailed install/run instructions in my readme. Thank you for reading allong that far!", "repo": "https://github.com/alr11118/NeuralNetwokFromStratch", "demo": "https://pypi.org/project/digitReader/"}]...
|
[{"post_id": 82084, "ts": "202 [{"post_id": 82084, "ts": "2026-10-23T20:07:33Z", "hours": 0.3256, "text": "Added image drawing and imported the drawn image to the neral network. So far the predictions are correct 40% of the time, I suspect thats because of the sharper use drawing mode compared to my training images which are rounder and more blended in yo the background. It also took me a while to realise the MNIST images have black backgrounds"}, {"post_id": 81874, "ts": "2026-10-22T20:29:46Z", "hours": 0.3194, "text": "Adding drawing in progress…. (will have a pygame windows where useds can draw their own digits and view the neeural networks predicion)"}, {"post_id": 78257, "ts": "2026-10-10T05:40:37Z", "hours": 0.6431, "text": "Touch up on the readme and installation"}, {"post_id": 72536, "ts": "2026-09-23T05:01:34Z", "hours": 0.9611, "text": "I’m finally on PyPi! It took way longer than I expected to turn the trained model into teh CLI tool but here we are! I also polised and edited the README. It can be installed by python3 -m pip install digitReader and run by classifyDigit –image image.jpeg. Feel free to check out my project demo!"}, {"post_id": 72109, "ts": "2026-09-22T05:56:02Z", "hours": 3.1719, "text": "Worked on making the woring project a comman line app that precits the digit in the given picture. Next I will write the readme"}, {"post_id": 71442, "ts": "2026-09-20T20:27:55Z", "hours": 1.0694, "text": "Fixed my batch training, my loss calculation was off. Also added weight saving so I dont have to retarin everytime I want to test. And of course seperated test from train! Although it still runs preetry slow 50s train runtime…. I will experinment with different batch sizes, training sizes, number of neurons, learning rates soon. I might also do a version with numpy, my original goal was to not use any libraries to learn the fundementals, but numpy is much faster than python list so I might use that to reduce runtime in a seperate version to see how much of a difference it makes!"}, {"post_id": 71009, "ts": "2026-09-20T06:20:35Z", "hours": 0.9586, "text": "I tried to optimize and add more trainign data but accidently made it even less acurate and take longer to process. Will have to do some research!"}, {"post_id": 70378, "ts": "2026-09-19T02:15:29Z", "hours": 0.8175, "text": "Trained the network with 10 images (first tried with 100 but it was SO SLOW), but it runs and makes a prediction!!!!! altough it thought 5 was a 3….. I am gonna try figure out ways to optimize my train function next fo I can train 100!"}, {"post_id": 70360, "ts": "2026-09-19T01:19:18Z", "hours": 0.7417, "text": "Decoding MINST images! Deconding those with no libraries are harder than I thought and I had to do a TON of research about the data files. But here it is the color value of each pixel of the first imege!! I just have to extract them all, maybe find a better way to store them so I dont have to decode them each time, and pass them to my neural network, which currently have 784 hidden input nurons, 64 hidden neurons and 10 output neurons corresponding to each digit I am trying to predict. Sorry for the super long devlog, I guess I am just excited that its turning into what I am trying to build!"}, {"post_id": 69834, "ts": "2026-09-17T21:28:37Z", "hours": 1.9986, "text": "I added 3 output neurons meaning the neural network will respond in tems of class 1: 0.01, class 2: 0.03, class 3: 0.96. To implement that I had to add softmax fucntion chnage my forwardPass and backwardPass implementations to work with new matrixes."}, {"post_id": 65796, "ts": "2026-09-11T05:26:02Z", "hours": 1.9072, "text": "Added a second varable to the hidden neurons, and organised the code to work with it. Managed to get a very low loss!!!!!"}, {"post_id": 63702, "ts": "2026-09-07T17:08:14Z", "hours": 2.3275, "text": "I worked on the PCB for my Hackpad project for 2 hours and 19 minutes, but accidentally connected the Lapce recording to this project instead. I asked about the situation in #stardance-help, and support confirmed that the time cannot be reassigned due to Hackatime’s data protections. They advised me to mention the situation in both projects’ devlogs so the extra time can be accounted for during review. More details can be found here https://hackclub.slack.com/archives/C0AP0NMSP3P/p1788725484466219"}, {"post_id": 61914, "ts": "2026-09-05T02:46:01Z", "hours": 0.3, "text": "Did the backtpolation to work with many x’s and y’s"}, {"post_id": 61006, "ts": "2026-09-03T18:21:31Z", "hours": 0.9353, "text": "Added 2 more hidden neurons, set up lists to manage their related variables and set up backpropagation for each."}, {"post_id": 60408, "ts": "2026-09-02T18:26:06Z", "hours": 1.1461, "text": "I added a hidden neuron and used backpropagation to set the weights"}, {"post_id": 49127, "ts": "2026-08-17T19:20:35Z", "hours": 1.3722, "text": "Started practicing with a simple linear regression with 3 points!"}]...
|
Title: NeuralNetwork by @BeytiKebab | Stardance
D Title: NeuralNetwork by @BeytiKebab | Stardance
Devlogs:
Started practicing with a simple linear regression with 3 points!
I added a hidden neuron and used backpropagation to set the weights
Added 2 more hidden neurons, set up lists to manage their related variables and set up backpropagation for each.
Did the backtpolation to work with many x’s and y’s
I worked on the PCB for my Hackpad project for 2 hours and 19 minutes, but accidentally connected the Lapce recording to this project instead. I asked about the situation in #stardance-help, and support confirmed that the time cannot be reassigned due to Hackatime’s data protections. They advised me to mention the situation in both projects’ devlogs so the extra time can be accounted for during review. More details can be found here https://hackclub.slack.com/archives/C0AP0NMSP3P/p1788725484466219
Added a second varable to the hidden neurons, and organised the code to work with it. Managed to get a very low loss!!!!!
I added 3 output neurons meaning the neural network will respond in tems of class 1: 0.01, class 2: 0.03, class 3: 0.96. To implement that I had to add softmax fucntion chnage my forwardPass and backwardPass implementations to work with new matrixes.
Decoding MINST images! Deconding those with no libraries are harder than I thought and I had to do a TON of research about the data files. But here it is the color value of each pixel of the first imege!! I just have to extract them all, maybe find a better way to store them so I dont have to decode them each time, and pass them to my neural network, which currently have 784 hidden input nurons, 64 hidden neurons and 10 output neurons corresponding to each digit I am trying to predict. Sorry for the super long devlog, I guess I am just excited that its turning into what I am trying to build!
Trained the network with 10 images (first tried with 100 but it was SO SLOW), but it runs and makes a prediction!!!!! altough it thought 5 was a 3….. I am gonna try figure out ways to optimize my train function next fo I can train 100!
I tried to optimize and add more trainign data but accidently made it even less acurate and take longer to process. Will have to do some research!
Fixed my batch training, my loss calculation was off. Also added weight saving so I dont have to retarin everytime I want to test. And of course seperated test from train! Although it still runs preetry slow 50s train runtime…. I will experinment with different batch sizes, training sizes, number of neurons, learning rates soon. I might also do a version with numpy, my original goal was to not use any libraries to learn the fundementals, but numpy is much faster than python list so I might use that to reduce runtime in a seperate version to see how much of a difference it makes!
Worked on making the woring project a comman line app that precits the digit in the given picture. Next I will write the readme
I’m finally on PyPi! It took way longer than I expected to turn the trained model into teh CLI tool but here we are! I also polised and edited the README. It can be installed by python3 -m pip install digitReader and run by classifyDigit –image image.jpeg. Feel free to check out my project demo!
Touch up on the readme and installation
Adding drawing in progress…. (will have a pygame windows where useds can draw their own digits and view the neeural networks predicion)
Added image drawing and imported the drawn image to the neral network. So far the predictions are correct 40% of the time, I suspect thats because of the sharper use drawing mode compared to my training images which are rounder and more blended in yo the background. It also took me a while to realise the MNIST images have black backgrounds
Ships:
I build this digit classifier CLI tool, which basically allows you to pass and image and guesses which digit it features. I built/trained the neural network from strach using pure python. I did not use and machine learning libraries because I wanted to learn how they work in a deeper level. it is currently trained on 5000 images with 15 iterations, this may sound very little but due to using python list instead of numpy arrays my runtime is alread about ~300 seconds for training. I learned a lot about neural networks while building this project. Although I did not follow any tutorials when builing it I found 3Blue1Brown’s Naural Network videos extremely helpfull when researching fundemental concpets! Even though the research part was hard I feel like the hardest part was optimizing the train function I had to do more research on how batch gradient decesent works and more techniques. Its currently at 92% accuracy with testing data but it might still styrugle with picture that have grey or weird back grounds which I plan to fix next! The model can be tested using the PyPi install route, I also have detailed install/run instructions in my readme. Thank you for reading allong that far!...
|
1792853629.292521
|
1792940029.292521
|
|
1954
|
The Emerald Engineers Website by @Rizzington_I | S The Emerald Engineers Website by @Rizzington_I | Stardance...
|
Rizzington_I
|
1
|
17.0
|
190
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:46:38Z", "hours": 17.0, "multiplier": 11.05, "payout": 190, "blessing": "neutral", "text": "I created a website for my team that has information about my team and who we are and what we do. Rather than just creating any other boring site I have designed a dynamic background that makes the site more interesting. Other than that I have also created a 3D visualizer where viewers can drag the image around and take a look at our robot from the past season at various angles. There is also a fun Team Gallery page with captions and funny moments from our season. The Meet the Team page shows us our members and who we are. The hardest part of making this website was the 3D visualizer and the dynamic background. Both elements require complex javascript which made it extremely hard to code. I spent almost half of my time dedicated just to both of those elements in this website just because of how much time it took to perfect it. For the visualizer I ended up taking over 72 photos to get everything at the right angle and compress all the images together with javascript in order to get the visualizer working. I put a lot of time into perfecting the small kinks here and there to make this site stand out so I hope you enjoy it!", "repo": "https://github.com/Rizzington-III/FTC-Team-Website-32483", "demo": "https://rizzington-iii.github.io/FTC-Team-Website-32483/index.html"}]...
|
[{"post_id": 73995, "ts": "202 [{"post_id": 73995, "ts": "2026-09-26T14:17:34Z", "hours": 8.6269, "text": "DevLog #5: Final Touches In this final Devlog I have spent countless hours touching up on final edits to make sure this project is ready to ship. It took a lot of configuring to get the site running up on GitHub pages and unfortunately because this website is a part of my team repository I cannot create it. DONT WORRY: I found a solution… Instead, I have put the website code into a new repository where I have admin access and I have added the link for the GitHub Pages! I hope you guys enjoy it and I’ll put the link here if you want to check it out. BTW: I reccomend taking a look at the Team Gallery and the Robot Page as I would consider those the fun parts of the site. LINK: https://rizzington-iii.github.io/FTC-Team-Website-32483/index.html Enjoy!"}, {"post_id": 23013, "ts": "2026-07-05T18:46:08Z", "hours": 4.7439, "text": "The Article Hub page is complete with scrolling containers for differing categories that hold cards with the article title, date, article-class, as well as an image. These cards are linked to HTML pages that contain the actual article but those are yet to be updated. Now I’ve moved onto the robot page where I am going to insert information on our past season’s robot (ARC). I am currently trying to put in a 3D image visualizer where the user can drag around the see the image, which is going to be our robot. I’ve also added contact details that are linked onto the sidebar. One thing that was really annoying was formatting and making sure that the containers are all aligned because some of the scrolling containers overlapped into other categories and it looked really messy. Turns out in the end it was just one misplaced line between two css classes."}, {"post_id": 19904, "ts": "2026-07-01T10:32:37Z", "hours": 2.5964, "text": "So far this is what I have finished: The sidebar is complete but I may still have to add other pages The About Us, Meet the Team, Sponsor Us, Feedback, Mission Statement, and Outreach page are complete. Although some of them have placeholder images for the time being until I can dig up the right ones from my phone. The stuff that I am currently working on: I am working on the Article Hub page which is essentially a page that contains more pages. It has links to these small blog posts (articles) that could be useful for other robotics teams that participate in the upcoming season. The stuff that still hasn’t been touched: The robot page isn’t done and all the links to the blogs lead me to a blank white page. So I still have more work to do. Back to what I’m working on: In the article hub, for some reason the div cards that are links to their respective articles are placed correctly in my first section which is labeled latest releases. On the other hand in my second section (Hardware Articles), the cards don’t start in the same spot and for some reason the title of the Hardware Article is covered behind the scrolling container of the first section. By the way the article cards are div cards that are linked to the html blog pages as well as contain the title of the article, an image, the date, and what type of info is covered: (hardware, software, team management, exclusive stories). Debugging this is going to take some extra time but all great things take time and hopefully this turns out well."}, {"post_id": 19066, "ts": "2026-06-30T08:09:48Z", "hours": 1.2281, "text": "Currently on the website I am working on the outreach page of our team website. I am part of a FTC (FIRST Tech Challenge) team and I am coding this website for our team. This is going to be our second year and we want to share our knowledge from the past season to other rookie teams which is why we have created this website. I have added an Article Hub page which I will start to edit next once the outreach page is done. The article Hub contains articles for teams and viewers to read which have information that can help teams be successful during their season. The outreach page that I am working on right now contains an image carousel that I have the css styling for on a different page. I tried to create a version two but make it smaller and it worked but for some reason it doesn’t allow the div card with text show up. When I change images I can see the text show up and then vanish as it moves from one image to another. I tinkered with this for a while and I’m either going to have to re-create a new css styling class for the image carousel or shift it to the right. For some reason if I keep the carousel to the right with the text on the left it works perfectly but if do it the other way around it messes it up."}]...
|
Title: The Emerald Engineers Website by @Rizzingto Title: The Emerald Engineers Website by @Rizzington_I | Stardance
Devlogs:
Currently on the website I am working on the outreach page of our team website. I am part of a FTC (FIRST Tech Challenge) team and I am coding this website for our team. This is going to be our second year and we want to share our knowledge from the past season to other rookie teams which is why we have created this website. I have added an Article Hub page which I will start to edit next once the outreach page is done. The article Hub contains articles for teams and viewers to read which have information that can help teams be successful during their season. The outreach page that I am working on right now contains an image carousel that I have the css styling for on a different page. I tried to create a version two but make it smaller and it worked but for some reason it doesn’t allow the div card with text show up. When I change images I can see the text show up and then vanish as it moves from one image to another. I tinkered with this for a while and I’m either going to have to re-create a new css styling class for the image carousel or shift it to the right. For some reason if I keep the carousel to the right with the text on the left it works perfectly but if do it the other way around it messes it up.
So far this is what I have finished: The sidebar is complete but I may still have to add other pages The About Us, Meet the Team, Sponsor Us, Feedback, Mission Statement, and Outreach page are complete. Although some of them have placeholder images for the time being until I can dig up the right ones from my phone. The stuff that I am currently working on: I am working on the Article Hub page which is essentially a page that contains more pages. It has links to these small blog posts (articles) that could be useful for other robotics teams that participate in the upcoming season. The stuff that still hasn’t been touched: The robot page isn’t done and all the links to the blogs lead me to a blank white page. So I still have more work to do. Back to what I’m working on: In the article hub, for some reason the div cards that are links to their respective articles are placed correctly in my first section which is labeled latest releases. On the other hand in my second section (Hardware Articles), the cards don’t start in the same spot and for some reason the title of the Hardware Article is covered behind the scrolling container of the first section. By the way the article cards are div cards that are linked to the html blog pages as well as contain the title of the article, an image, the date, and what type of info is covered: (hardware, software, team management, exclusive stories). Debugging this is going to take some extra time but all great things take time and hopefully this turns out well.
The Article Hub page is complete with scrolling containers for differing categories that hold cards with the article title, date, article-class, as well as an image. These cards are linked to HTML pages that contain the actual article but those are yet to be updated. Now I’ve moved onto the robot page where I am going to insert information on our past season’s robot (ARC). I am currently trying to put in a 3D image visualizer where the user can drag around the see the image, which is going to be our robot. I’ve also added contact details that are linked onto the sidebar. One thing that was really annoying was formatting and making sure that the containers are all aligned because some of the scrolling containers overlapped into other categories and it looked really messy. Turns out in the end it was just one misplaced line between two css classes.
DevLog #5: Final Touches In this final Devlog I have spent countless hours touching up on final edits to make sure this project is ready to ship. It took a lot of configuring to get the site running up on GitHub pages and unfortunately because this website is a part of my team repository I cannot create it. DONT WORRY: I found a solution… Instead, I have put the website code into a new repository where I have admin access and I have added the link for the GitHub Pages! I hope you guys enjoy it and I’ll put the link here if you want to check it out. BTW: I reccomend taking a look at the Team Gallery and the Robot Page as I would consider those the fun parts of the site. LINK: https://rizzington-iii.github.io/FTC-Team-Website-32483/index.html Enjoy!
Ships:
I created a website for my team that has information about my team and who we are and what we do. Rather than just creating any other boring site I have designed a dynamic background that makes the site more interesting. Other than that I have also created a 3D visualizer where viewers can drag the image around and take a look at our robot from the past season at various angles. There is also a fun Team Gallery page with captions and funny moments from our season. The Meet the Team page shows us our members and who we are. The hardest part of making this website was the 3D visualizer and the dynamic background. Both elements require complex javascript which made it extremely hard to code. I spent almost half of my time dedicated just to both of those elements in this website just because of how much time it took to perfect it. For the visualizer I ended up taking over 72 photos to get everything at the right angle and compress all the images together with javascript in order to get the visualizer working. I put a lot of time into perfecting the small kinks here and there to make this site stand out so I hope you enjoy it!...
|
1792853608.860654
|
1792940008.860654
|
|
21381
|
super tuff devboard by @Sreekar | Stardance
|
Sreekar
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:35:09Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an rp2040 devboard with four times the memory of a pi pico, more gpio pins, usb-c connection, onboard user buttons and LEDs that can be controlled from code, proper component labels, AND super cute domo themed decoration covering as much of the board as i could physically fit. I had SO much fun making this project, i learned a lot about how to route stuff in kicad and I got to post out at outpost which was like the best thing ever", "repo": "https://github.com/Sreekar617/domo-2040/", "demo": ""}]...
|
[{"post_id": 18942, "ts": "202 [{"post_id": 18942, "ts": "2026-06-30T03:49:18Z", "hours": 14.6292, "text": "PCB – Routing (~3 hours) This was definitely the hardest part. I just sat in front of the Kicad and tried different variations on routing until I found one that was satisfactory. I had to move some of the capacitors out of the way to make space, and I ended up putting some of them underneath the chip, on the back side. The bulky 16MB chip really overcomplicated this, but at this point I was reluctant to change it out so I tried my best to work around it. Once I had all the resistors and stuff down, I had to route the 40ish header pins, which were less strict about speed and impedance and stuff so I could use vias for those. PCB – Debug (~4 hours) This was a lot of running DRC, fixing the error that came up, then running DRC and fixing the two more that pop up in its place. One thing I encoutered a lot is incomplete thermal relief where there was only one spoke instead of two spokes: I fixed this by just extending a small trace outwards from the pad, which is a solution i read somewhere on Slack and seemed to appease DRC. Also, there were sections of the ground pour that were kinda just floating and not actually connected to ground, so I added some more vias to fix that. I also cleaned up some of the suboptimal routing, and fixed some of the text being too small to print properly. Also there was some basic stuff like a couple traces/vias accidentally placed too close to each other but that was pretty simple to fix. Back to the schematic (~2 hours) I decided it was too cringe to not deviate from the original Pico design, so I decided to make use of every pin on the rp2040, and also use every single header pin on the 1x20 connectors. My original design had GP25 marked as N/C, and both the original Pico and the Orpheus Pico have two N/C pins on the headers (well technically theyre not NC on the pico but they’re basically useless to normal people). After some tweaks to the schematic, I added a user LED so it can look cool and light up, and I added another button for user input, using all the GPIO pins on the RP2040. Then, I shuffled around the header pins a bit and added one GP pin so all the slots are used, but I did my best to make it still compatible with normal Pico uses so it won’t explode or something. low cortisol decorating oops there’s a catastrophic error (~2 hours) it turns out all of the 3v3 traces need to be connected to each other and not just to their own capacitor so i had to reposition a bunch of the capacitors to make it possible to connect them together. This was pretty hard because at this stage of the design, a lot of stuff was already placed down, and i kinda had to place capacitors around the stuff. Here’s a picture of the error (notice the thin cyan lines showing it’s unconnected): and here’s my solution 😭:"}, {"post_id": 11060, "ts": "2026-06-18T02:58:33Z", "hours": 9.04, "text": "Using Kai Pereira’s devboard tutorial, I was able to get a schematic together relatively quickly. The decoupling capacitors were kinda confusing at first, but then I checked the datasheet and it made sense that since there were 8 3v3 outputs you’d use 8 capacitors for 3v3 https://cdn.hackclub.com/019ed780-8f91-724d-be31-46112cdec84a/image.png USB Starting at the top left, USB is the USB-C connection because wireless power isn’t good enough yet and micro usb is trash. The CC lines are pulled to GND via 5.1k resistors as specified by the datasheet. Data is transmitted via D- and D+, and there’s two identical outputs for each line. I just have them connected to a single line and connected to the MCU via 27 ohm resistors. The power given by the USB C receptacle is 5V, so i use an LDO to step it down to 3V3 which is much tastier and can efffectively juice up not just the components on the pcb but also any external components i may want to connect to the devboard. both the 5V and 3.3V lines have bulk caps to smooth out large voltage ripples caused by the LDO not being a massless frictionless ideal gas. DECOUPLING This is pretty simple, there’s eight small 3V3 capacitors and two 1V1 capacitors to filter out high frequency noise, one per output on the chip, and then a larger decoupling capacitor for each of the lines. CRYSTAL This is a super tuff crystal that oscillates at a known frequency to help the MCU time stuff. It needs two 33pF (tiny!) external load capacitors to work for some super cool math reasons i don’t really understand. It’s connected to the MCU through a 1k damping resistor that protects it. FLASH I deviated from the tutorial a bit here and used a 16MB flash chip instead of the 2MB that the tutorial used, so hopefully that’ll be fine. It communicates with the MCU using quad SPI for fast data transfer. Side note, the widely used terms to talk about SPI are master and slave, but the other (and imo better) way to say it is controller and peripheral. However, it’s labeled both ways on my schematic so bear with me a little. When the Slave Select (or Chip Select) pin on the flash is pulled to ground, it acts as a reset signal, so that’s what the 1k, SW, and GND are for. The rest of the time, it has to be pulled to HIGH, so we have a 10k resistor connected to 3V3 to pull up the CS pin the rest of the time. There’s a 0.1uF decoupling capacitor next to the power, and there’s four data lines going back to the MCU (hence quad spi) RP2040/OUTPUT There’s nothing super crazy going on here, from my side I just connect all the peripherals back to this, and also make sure to connect the GPIO outputs and whatnot to the header pins. PCB – Edge.Cuts, Placement, and Caps (~3 hours) The first thing I did on the PCB was make the Edge.Cuts, since I want this to be able to match the footprint of a normal Pico I matched the dimensions. I then placed down all the big components, and placed the decoupling capacitors as close as I could to the things they were supposed to decouple. Following the advice of the guide, I tried to wire the high speed components first, without using any vias. Using the 16MB chip made it kinda hard since it’s just so bulky, but eventually I got it wired pretty good. The USB-C data lines needed to be differential pairs, and they needed to be exactly the same length, but I tried for a while and I could not figure out how to use the length tuning tool, so I ended up just adding a little kink by hand.i was confused about some simple things (like “will the usb c port fit underneath the board”) so i tried asking the big claude and the big gpt but they were completely useless so i had to actually lock in and solve my problems on my own."}]...
|
Title: super tuff devboard by @Sreekar | Stardance Title: super tuff devboard by @Sreekar | Stardance
Devlogs:
Using Kai Pereira’s devboard tutorial, I was able to get a schematic together relatively quickly. The decoupling capacitors were kinda confusing at first, but then I checked the datasheet and it made sense that since there were 8 3v3 outputs you’d use 8 capacitors for 3v3 https://cdn.hackclub.com/019ed780-8f91-724d-be31-46112cdec84a/image.png USB Starting at the top left, USB is the USB-C connection because wireless power isn’t good enough yet and micro usb is trash. The CC lines are pulled to GND via 5.1k resistors as specified by the datasheet. Data is transmitted via D- and D+, and there’s two identical outputs for each line. I just have them connected to a single line and connected to the MCU via 27 ohm resistors. The power given by the USB C receptacle is 5V, so i use an LDO to step it down to 3V3 which is much tastier and can efffectively juice up not just the components on the pcb but also any external components i may want to connect to the devboard. both the 5V and 3.3V lines have bulk caps to smooth out large voltage ripples caused by the LDO not being a massless frictionless ideal gas. DECOUPLING This is pretty simple, there’s eight small 3V3 capacitors and two 1V1 capacitors to filter out high frequency noise, one per output on the chip, and then a larger decoupling capacitor for each of the lines. CRYSTAL This is a super tuff crystal that oscillates at a known frequency to help the MCU time stuff. It needs two 33pF (tiny!) external load capacitors to work for some super cool math reasons i don’t really understand. It’s connected to the MCU through a 1k damping resistor that protects it. FLASH I deviated from the tutorial a bit here and used a 16MB flash chip instead of the 2MB that the tutorial used, so hopefully that’ll be fine. It communicates with the MCU using quad SPI for fast data transfer. Side note, the widely used terms to talk about SPI are master and slave, but the other (and imo better) way to say it is controller and peripheral. However, it’s labeled both ways on my schematic so bear with me a little. When the Slave Select (or Chip Select) pin on the flash is pulled to ground, it acts as a reset signal, so that’s what the 1k, SW, and GND are for. The rest of the time, it has to be pulled to HIGH, so we have a 10k resistor connected to 3V3 to pull up the CS pin the rest of the time. There’s a 0.1uF decoupling capacitor next to the power, and there’s four data lines going back to the MCU (hence quad spi) RP2040/OUTPUT There’s nothing super crazy going on here, from my side I just connect all the peripherals back to this, and also make sure to connect the GPIO outputs and whatnot to the header pins. PCB – Edge.Cuts, Placement, and Caps (~3 hours) The first thing I did on the PCB was make the Edge.Cuts, since I want this to be able to match the footprint of a normal Pico I matched the dimensions. I then placed down all the big components, and placed the decoupling capacitors as close as I could to the things they were supposed to decouple. Following the advice of the guide, I tried to wire the high speed components first, without using any vias. Using the 16MB chip made it kinda hard since it’s just so bulky, but eventually I got it wired pretty good. The USB-C data lines needed to be differential pairs, and they needed to be exactly the same length, but I tried for a while and I could not figure out how to use the length tuning tool, so I ended up just adding a little kink by hand.i was confused about some simple things (like “will the usb c port fit underneath the board”) so i tried asking the big claude and the big gpt but they were completely useless so i had to actually lock in and solve my problems on my own.
PCB – Routing (~3 hours) This was definitely the hardest part. I just sat in front of the Kicad and tried different variations on routing until I found one that was satisfactory. I had to move some of the capacitors out of the way to make space, and I ended up putting some of them underneath the chip, on the back side. The bulky 16MB chip really overcomplicated this, but at this point I was reluctant to change it out so I tried my best to work around it. Once I had all the resistors and stuff down, I had to route the 40ish header pins, which were less strict about speed and impedance and stuff so I could use vias for those. PCB – Debug (~4 hours) This was a lot of running DRC, fixing the error that came up, then running DRC and fixing the two more that pop up in its place. One thing I encoutered a lot is incomplete thermal relief where there was only one spoke instead of two spokes: I fixed this by just extending a small trace outwards from the pad, which is a solution i read somewhere on Slack and seemed to appease DRC. Also, there were sections of the ground pour that were kinda just floating and not actually connected to ground, so I added some more vias to fix that. I also cleaned up some of the suboptimal routing, and fixed some of the text being too small to print properly. Also there was some basic stuff like a couple traces/vias accidentally placed too close to each other but that was pretty simple to fix. Back to the schematic (~2 hours) I decided it was too cringe to not deviate from the original Pico design, so I decided to make use of every pin on the rp2040, and also use every single header pin on the 1x20 connectors. My original design had GP25 marked as N/C, and both the original Pico and the Orpheus Pico have two N/C pins on the headers (well technically theyre not NC on the pico but they’re basically useless to normal people). After some tweaks to the schematic, I added a user LED so it can look cool and light up, and I added another button for user input, using all the GPIO pins on the RP2040. Then, I shuffled around the header pins a bit and added one GP pin so all the slots are used, but I did my best to make it still compatible with normal Pico uses so it won’t explode or something. low cortisol decorating oops there’s a catastrophic error (~2 hours) it turns out all of the 3v3 traces need to be connected to each other and not just to their own capacitor so i had to reposition a bunch of the capacitors to make it possible to connect them together. This was pretty hard because at this stage of the design, a lot of stuff was already placed down, and i kinda had to place capacitors around the stuff. Here’s a picture of the error (notice the thin cyan lines showing it’s unconnected): and here’s my solution 😭:
Ships:
I made an rp2040 devboard with four times the memory of a pi pico, more gpio pins, usb-c connection, onboard user buttons and LEDs that can be controlled from code, proper component labels, AND super cute domo themed decoration covering as much of the board as i could physically fit. I had SO much fun making this project, i learned a lot about how to route stuff in kicad and I got to post out at outpost which was like the best thing ever...
|
1792857013.0181603
|
1792943413.0181603
|
|
63327
|
yes by @rosie123 | Stardance
|
rosie123
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:24:11Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "im a beginner so i dont know a lot but i tried my best(:", "repo": "https://github.com/1raselle/boba/commit/4ca04855baa39c12c16a645339e917af25965142#diff-0eb547304658805aad788d320f10bf1f292797b5e6d745a3bf617584da017051", "demo": "https://ideal-disco-p7w6gvr695573rqvg-5501.app.github.dev/"}]...
|
[{"post_id": 74724, "ts": "202 [{"post_id": 74724, "ts": "2026-09-28T02:19:40Z", "hours": 0.3281, "text": "a site abt how boba is made!!!"}, {"post_id": 74716, "ts": "2026-09-28T01:44:32Z", "hours": 1.1403, "text": "a site abt how boba is made!!!"}]...
|
Title: yes by @rosie123 | Stardance
Devlogs:
a si Title: yes by @rosie123 | Stardance
Devlogs:
a site abt how boba is made!!!
a site abt how boba is made!!!
Ships:
im a beginner so i dont know a lot but i tried my best(:...
|
1792814020.1640074
|
1792900420.1640074
|
|
53860
|
Epic MP3 Player by @Amanojaku | Stardance
|
Amanojaku
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:22:26Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It uses the dac pin to play audio instead of an actual audio module. Also whenever you plug in earbuds the voltage drops and the program resets which is cool. Its also really quiet and it’s way too big. My CAD is all messed up and nothing fits correctly. Anything but using a pcb", "repo": "https://github.com/zxcvbnmzxcvbnmzxcv/mymp3player", "demo": ""}]...
|
[{"post_id": 74719, "ts": "202 [{"post_id": 74719, "ts": "2026-09-28T02:07:29Z", "hours": 3.1833, "text": "Added the menu and a random song feature"}, {"post_id": 66991, "ts": "2026-09-13T00:18:34Z", "hours": 0.9667, "text": "I think it’s too small for an mp3 player I tried really hard to make it as big as I could but now it’s just too portable. Also I didn’t have any buttons so im just gonna use a potentiometer instead."}, {"post_id": 66315, "ts": "2026-09-12T02:30:49Z", "hours": 1.2489, "text": "I like food that is fun to eat. I’d rather eat pasta than noodles because it’s in a nicer shape. I’d rather eat the toblerone chocolate triangular prisms than a cube of chocolate. Cereal is fun to eat. Rice is fun to eat. Hardshell tacos are funner to eat. Cheese in the shape of little circles is more fun to eat."}, {"post_id": 65731, "ts": "2026-09-11T02:14:04Z", "hours": 0.8281, "text": "The pencil is a part of the structural integrity"}, {"post_id": 65119, "ts": "2026-09-10T01:11:20Z", "hours": 4.0808, "text": "3D modeled the case with ports"}, {"post_id": 57732, "ts": "2026-08-30T00:09:59Z", "hours": 0.9, "text": "Adding lcd and battery pack. Bumping the Banjo Kazooie soundtrack in 16-bit audio just like reggie intended"}, {"post_id": 56323, "ts": "2026-08-28T01:47:39Z", "hours": 0.5417, "text": "I need to wire the screen and buttons"}]...
|
Title: Epic MP3 Player by @Amanojaku | Stardance
Title: Epic MP3 Player by @Amanojaku | Stardance
Devlogs:
I need to wire the screen and buttons
Adding lcd and battery pack. Bumping the Banjo Kazooie soundtrack in 16-bit audio just like reggie intended
3D modeled the case with ports
The pencil is a part of the structural integrity
I like food that is fun to eat. I’d rather eat pasta than noodles because it’s in a nicer shape. I’d rather eat the toblerone chocolate triangular prisms than a cube of chocolate. Cereal is fun to eat. Rice is fun to eat. Hardshell tacos are funner to eat. Cheese in the shape of little circles is more fun to eat.
I think it’s too small for an mp3 player I tried really hard to make it as big as I could but now it’s just too portable. Also I didn’t have any buttons so im just gonna use a potentiometer instead.
Added the menu and a random song feature
Ships:
It uses the dac pin to play audio instead of an actual audio module. Also whenever you plug in earbuds the voltage drops and the program resets which is cool. Its also really quiet and it’s way too big. My CAD is all messed up and nothing fits correctly. Anything but using a pcb...
|
1792856914.4512656
|
1792943314.4512656
|
|
29073
|
MR. ELECTRIC! by @Nicholas-Reyne | Stardance
|
Nicholas-Reyne
|
2
|
35.0
|
403
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:17:38Z", "hours": 9.0, "multiplier": 6.27, "payout": 55, "blessing": "neutral", "text": "I made an electric field simulator, and added two new key features from the last ship. The first being a ring charge, the second being a permittivity changer. I found the physics behind the ring charge to be very challenging, and it required many hours of brainstorming and drafting on paper to figure out. I’m very happy with how it all turned out, and I think the actual html now looks very pretty with the new background and organization!", "repo": "https://github.com/RaduUdrea1/Mr_Electric2", "demo": "https://raduudrea1.github.io/Mr_Electric2/"}, {"ship_num": 2, "ts": "2026-08-29T02:34:50Z", "hours": 26.0, "multiplier": 14.95, "payout": 348, "blessing": "neutral", "text": "I made an electric field simulator. It took about the past two or so months to actually figure out how anything works. It’s designed to help people visualize electric fields when doing electrostatics. It took a long time to learn the HTML, Python and JS to actually code it but I’m proud of the fact that it even exists. Future modes will include more stuff, and I’m happy to get a chance to ship it!", "repo": "https://github.com/RaduUdrea1/Mr_Electric2", "demo": "https://raduudrea1.github.io/Mr_Electric2/"}]...
|
[{"post_id": 74721, "ts": "202 [{"post_id": 74721, "ts": "2026-09-28T02:15:44Z", "hours": 4.9092, "text": "Hello all: I replaced the buggy dirac-delta mode with two new modes. The first is the ring charge mode, this creates a superposition of 36 point charges, which effectively simulates a continuous charged ring (not perfectly, but close enough to minimize error). This is especially useful for physics problems, as tons of them involve ring charges. Next, I added a mode that allowed you to change the permittivity of the space the charge is in, with a handful of presets ranging from the vacuum (free space) to pure water, all the way to titanium dioxide. In so doing, I also modified the guide and physics, enjoy these modes as you please. Furthermore, electric potential and electric potential energy were added to each mode, denoted by variables V and U. More additions to come in the future, stay tuned!"}, {"post_id": 68954, "ts": "2026-09-16T03:25:31Z", "hours": 3.9431, "text": "Hello all: I added a new background to make Mr. Electric feel less bland. I organized the information in the pages into blocks, this way it is easier to read, and less info-dumpy. I introduced a slider mode for the charges as well, this way you could drag the slider along and it would update the charge. Future changes are coming: Potentials, Electric Potential Energy, Better Dirac-Delta and more! Stay tuned!"}, {"post_id": 56994, "ts": "2026-08-29T01:55:13Z", "hours": 4.7481, "text": "Devlog 3: I added the ability to set a probe point on the first three run modes, the probe point will return electric field magnitude at that point, but it will also return the x, y and z components of that magnitude, so that anyone doing electrostatics problems can check their work as well. The graph now takes inputs in nanocoulombs, and it grows when larger inputs are put in, rather than changing the color. Guide and gallery have been updated to include these changes as well. Inputs have also been stacked neatly rather than arrayed one by one. Honest limits: One single color for all the plots, Gaussian mode not yet helpful because it still only contains one charge, and Dirac Delta is still just cosmetic! Future work will fix these!"}, {"post_id": 53475, "ts": "2026-08-24T01:20:19Z", "hours": 13.0117, "text": "It’s been a while since I’ve posted a devlog! This is Mr. Electric updates. I’ve brought the simulator into the html proper with a new simulate page. The code uses python connected to javascript. New features: Smoothed out the html and cleaned up any bugs. Added a simulate.html page where the simulator actually runs using Pyodide. Added dropdown options and menus to input values for the simulator. Future features: Planned expansion of simulator with more probe points, and drag and drop feature for probes. Ability to do actual calculations with the fields, and more dynamic fields that are prettier and smoother. Cleaner html and better style and buttons, including a unified nav style."}, {"post_id": 34082, "ts": "2026-07-24T15:36:43Z", "hours": 8.5542, "text": "This is the first devlog for my Mr. Electric project, its a small scale passion project designed to simulate electric fields with user input. I designed it over the span of about eight hours, alongside working the physics problems myself from Griffiths Electrodynamics Fourth Edition. Cursor assisted in debugging the code. The code uses NumPy, SciPy and Matplotlib. There are a few honest limits: I had to scale the arrows so nothing was generated close to the origin, the result was monstrous arrows because of the divide by zero issue. Dirac Delta is furthermore, simply a cosmetic feature. Dirac Delta represents particles, and graphically it is just an infinitely tall spike, I tried to simulate that in 3d and ended up with the current delta cluster. The project contains four run modes, one charge, two charge, Gaussian sphere plus probe and delta cluster. The main issue for this log was simply setting up the functions, and making sure everything worked! Up next is a public demo, more features, and a heatmap to help indicate relative vector strength."}]...
|
Title: MR. ELECTRIC! by @Nicholas-Reyne | Stardanc Title: MR. ELECTRIC! by @Nicholas-Reyne | Stardance
Devlogs:
This is the first devlog for my Mr. Electric project, its a small scale passion project designed to simulate electric fields with user input. I designed it over the span of about eight hours, alongside working the physics problems myself from Griffiths Electrodynamics Fourth Edition. Cursor assisted in debugging the code. The code uses NumPy, SciPy and Matplotlib. There are a few honest limits: I had to scale the arrows so nothing was generated close to the origin, the result was monstrous arrows because of the divide by zero issue. Dirac Delta is furthermore, simply a cosmetic feature. Dirac Delta represents particles, and graphically it is just an infinitely tall spike, I tried to simulate that in 3d and ended up with the current delta cluster. The project contains four run modes, one charge, two charge, Gaussian sphere plus probe and delta cluster. The main issue for this log was simply setting up the functions, and making sure everything worked! Up next is a public demo, more features, and a heatmap to help indicate relative vector strength.
It’s been a while since I’ve posted a devlog! This is Mr. Electric updates. I’ve brought the simulator into the html proper with a new simulate page. The code uses python connected to javascript. New features: Smoothed out the html and cleaned up any bugs. Added a simulate.html page where the simulator actually runs using Pyodide. Added dropdown options and menus to input values for the simulator. Future features: Planned expansion of simulator with more probe points, and drag and drop feature for probes. Ability to do actual calculations with the fields, and more dynamic fields that are prettier and smoother. Cleaner html and better style and buttons, including a unified nav style.
Devlog 3: I added the ability to set a probe point on the first three run modes, the probe point will return electric field magnitude at that point, but it will also return the x, y and z components of that magnitude, so that anyone doing electrostatics problems can check their work as well. The graph now takes inputs in nanocoulombs, and it grows when larger inputs are put in, rather than changing the color. Guide and gallery have been updated to include these changes as well. Inputs have also been stacked neatly rather than arrayed one by one. Honest limits: One single color for all the plots, Gaussian mode not yet helpful because it still only contains one charge, and Dirac Delta is still just cosmetic! Future work will fix these!
Hello all: I added a new background to make Mr. Electric feel less bland. I organized the information in the pages into blocks, this way it is easier to read, and less info-dumpy. I introduced a slider mode for the charges as well, this way you could drag the slider along and it would update the charge. Future changes are coming: Potentials, Electric Potential Energy, Better Dirac-Delta and more! Stay tuned!
Hello all: I replaced the buggy dirac-delta mode with two new modes. The first is the ring charge mode, this creates a superposition of 36 point charges, which effectively simulates a continuous charged ring (not perfectly, but close enough to minimize error). This is especially useful for physics problems, as tons of them involve ring charges. Next, I added a mode that allowed you to change the permittivity of the space the charge is in, with a handful of presets ranging from the vacuum (free space) to pure water, all the way to titanium dioxide. In so doing, I also modified the guide and physics, enjoy these modes as you please. Furthermore, electric potential and electric potential energy were added to each mode, denoted by variables V and U. More additions to come in the future, stay tuned!
Ships:
I made an electric field simulator. It took about the past two or so months to actually figure out how anything works. It’s designed to help people visualize electric fields when doing electrostatics. It took a long time to learn the HTML, Python and JS to actually code it but I’m proud of the fact that it even exists. Future modes will include more stuff, and I’m happy to get a chance to ship it!
I made an electric field simulator, and added two new key features from the last ship. The first being a ring charge, the second being a permittivity changer. I found the physics behind the ring charge to be very challenging, and it required many hours of brainstorming and drafting on paper to figure out. I’m very happy with how it all turned out, and I think the actual html now looks very pretty with the new background and organization!...
|
1792832024.0736177
|
1792918424.0736177
|
|
65145
|
Receipt by @govindrkumar | Stardance
|
govindrkumar
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:20:32Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hack club challenge", "repo": "https://github.com/govindrkumar/receipt", "demo": "https://private-user-images.githubusercontent.com/76465140/658122564-3d42d9fa-5ce9-4f78-85d9-d41a1de1c637.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTA1NTg1ODUsIm5iZiI6MTc5MDU1ODI4NSwicGF0aCI6Ii83NjQ2NTE0MC82NTgxMjI1NjQtM2Q0MmQ5ZmEtNWNlOS00Zjc4LTg1ZDktZDQxYTFkZTFjNjM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA5MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwOTI4VDAxMTgwNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdmNWE3NzcwNGY2OWVjNDhkNDk2MGYwYzFjNjQ4ZWNhYTZkMmUwYzhhOTYzM2MyYTI4MTAxZmJjOWI0NWVkNzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.nfokstDwnqTY-IVCC7XQ3hhCTHOOdO7WU3xTP0x10M8"}]...
|
[{"post_id": 74706, "ts": "202 [{"post_id": 74706, "ts": "2026-09-28T01:19:04Z", "hours": 2.9508, "text": "Devlog2 : Completed the challenge….."}, {"post_id": 72955, "ts": "2026-09-24T03:22:17Z", "hours": 0.4111, "text": "DID something"}]...
|
Title: Receipt by @govindrkumar | Stardance
Devlo Title: Receipt by @govindrkumar | Stardance
Devlogs:
DID something
Devlog2 : Completed the challenge…..
Ships:
Hack club challenge...
|
1792814208.0539582
|
1792900608.0539582
|
|
42229
|
Storm Glide by @thenetheritedog | Stardance
|
thenetheritedog
|
1
|
69.0
|
430
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:20:17Z", "hours": 69.0, "multiplier": 6.27, "payout": 430, "blessing": "neutral", "text": "Storm glide is a 3D action platformer where you are gliding down a stormy mountain. In order to do you must use the caves meaning you must keep your glider intact and avoid the obstacles. Holding onto the glider will cause it to fall faster meaning you have to manage how long you stay on it. Your able to grapple and wall run for extra help. You can test it in the Itch.io page on your web, however it needs a PC to run with keyboard and mouse. The struggles of creation were just as expected with how games are made and were in the beginning mostly physics related. They were fixed through trial and error or just left out of the final game. Originally the glider would of had mechanics where you go glide and then soar by pulling back up which never made it to the final game. The models were relatively easy to make however the first design of the character was a cat. Also I had major issues with making the music so it ended up not being the best. I am proud of the renders. Apparently they reminded people so much of the PS1 that a bad edit of one render on a PS1 disc holder was enough for people to think it was real. Even if sent into an art channel. I am also proud of the controls and how fun it was even though it took so long to get the levels right. I don’t know much about how to ship these games to be honest, I have turned in 1 other project and it got lower results due to lack of dev logging and history so hopefully the read me and other stuff is good enough for this.", "repo": "https://github.com/thenetheritedog/StarDance-Platformer", "demo": "https://netheritedog.itch.io/storm-glide"}]...
|
[{"post_id": 74700, "ts": "202 [{"post_id": 74700, "ts": "2026-09-28T01:09:28Z", "hours": 7.1181, "text": "It has been completed the and is on Itch.io We have added decorations and a win screen. Everything that was used for debugging is removed. The game is able to be played on web and everything is now over. It is all done"}, {"post_id": 70437, "ts": "2026-09-19T05:59:06Z", "hours": 8.6503, "text": "Levels are made I honestly forgot to track unity time so it’s a lot more time then actually logged. Ok first of all we have a win screen added and a new glider model, next we have a lock on indicator for your grapple. Bugs: Physics bugs exist and make me mad Potential solutions: Remove rotating player model on sloped surfaces. limit slopes. ignore it. I am probably going to finish it this weekend as I just want the CPU grant at this point. Also I did a lot of shader testing and this was the best i could do"}, {"post_id": 48682, "ts": "2026-08-17T05:53:35Z", "hours": 4.5081, "text": "NEW LEVELS, now when you reach the end of a level with your glider you win the level. This is done by just deleting the level and finding the level with the next number in the resources.load. I feel as if I am another 10-20 hours away from finishing this as I still need more levels. Better visuals for said levels. Title screen and maybe some simple 90s CGI animations. A new PS1 filter . And maybe a wind mechanic? I’ll keep you all updated on this. Also there is a release to test this"}, {"post_id": 46569, "ts": "2026-08-13T21:54:55Z", "hours": 8.1131, "text": "Storm Glide has a new banner and new levels are in the works. Also a CGI character built for renders is made using high subdivision counts, procedural texturing, procedural effects and a rendering system that is low intensive to really recreate that 90s CGI look"}, {"post_id": 44879, "ts": "2026-08-10T22:25:28Z", "hours": 6.7169, "text": "While I did not finish the cave like I said I would I did make a prerelease build available now and add a pause menu. I will either make a title screen next or the cave. Please check it out I want play testers, however it does not work on the web. I just realized the pause menu is broken so I’ll fix that too"}, {"post_id": 43811, "ts": "2026-08-09T07:38:03Z", "hours": 6.8208, "text": "It took me a while but I finished the animations and had to fight unity about the way the animations were shown however it is done. For some reason Unity instead of making forward for the animation what I said in the modeling program just made up forward based on the hip rotation? So I fixed that by changing import settings. Model is based off a paraglider I thought of in my head and the animations show that. I was going to make a glider animation but the grapple animation already fits with it so I might not. Slight CRT filter added will refine, stone texture as place holder I will make a new cave for the next devlog, maybe I’ll also fix the glider. I’m tired as hell so I’m going to bed now"}, {"post_id": 43177, "ts": "2026-08-08T09:20:56Z", "hours": 4.7072, "text": "Music and Model have been actually added into the game. So in the game now you have some visuals and audio to look at besides the most basic things. Animations are not finished and should end up being finished tomorrow. The running, walking and idle are in the game though. Music is probably final unless I really hate it. Also in the video you can see spikes and the void killing you."}, {"post_id": 42451, "ts": "2026-08-07T05:40:44Z", "hours": 2.2183, "text": "Spikes, effects and speed lines have been added. A song and model are in progress I am nearing the end of the features I want to add to the game. Next I will work on the visuals and story. Story is currently you are performing a stunt where you paraglide through a storm. In order to do this you are going through caves down a mountain. I will probably refine both the model and music but for now they work. Spikes are just if you hit them it resets everything, speedlines and running smoke are both particles, speedlines just being out of view at lower FOVs which go up as you gain speed. Smoke becomes more and more the faster you go. Gliding can go through spikes (Will change but rn need for testing levels) Also I added a cat model project I was thinking of adding into the game so I got the time from it, so a half hour of this was from that."}, {"post_id": 41851, "ts": "2026-08-06T10:12:52Z", "hours": 5.1969, "text": "Glider and Grapple update. What was added Well I have added a glider that you can grapple on to, increasing the weight and falling speed of it while doing so. You also can use your speed to push it faster. The grapple also now has a normal stat that lets me set the players rotation once in it allowing for smoother wall running. Reason why it took so long I wanted some aerodynamic glider but got stuck between it being overpowered, broken, or not fun in its intended use. Game idea is now Decided You are a mountain climber needing to get down, you have a glider however due to the storm you cannot dive through normally meaning you have to go down the mountain through the caves. The deeper you go the more you unveil. Next is probably music."}, {"post_id": 40602, "ts": "2026-08-04T08:05:22Z", "hours": 5.2825, "text": "Grappling hook added, polished, terrain testing and a new obstacle course added…. also I tried fixing slopes again and they still are alright So I currently don’t know what to add next or what the main character will be, I have an old model I might be able to use that I made for a different game that I didn’t finish. I did turn it in however as part of a website so I might not be able to use it. My ideas for what next will be added is particles, character, environment and maybe some new cool ability. Issues: Wallrun acts weird on curved surfaces Slopes are still buggy Camera is a bit weird I will probably start a thread on slack about this. I don’t have a clue what to do for 3d platforming. (Maybe something involving a mountain and gliding?) Hard to keep motivation, might just deal with the weird bugs and wait to fix them. Probably will do music or art next devlog."}, {"post_id": 39329, "ts": "2026-08-02T07:37:15Z", "hours": 6.4725, "text": "Wall slide is here, slopes also have been fixed and give you a velocity boost to show you gaining speed while going down and losing speed going up. Otherwise I have a cat model made but I don’t know if imma keep it."}, {"post_id": 38469, "ts": "2026-07-31T21:10:23Z", "hours": 2.8192, "text": "Basic controls added. Character can move jump, hold jump, walk up and down slopes, turn camera and have a little bit of time after falling to jump (coyote time). Next I will probably add a sprint. fix up collision issues and make a model for the character."}]...
|
Title: Storm Glide by @thenetheritedog | Stardance Title: Storm Glide by @thenetheritedog | Stardance
Devlogs:
Basic controls added. Character can move jump, hold jump, walk up and down slopes, turn camera and have a little bit of time after falling to jump (coyote time). Next I will probably add a sprint. fix up collision issues and make a model for the character.
Wall slide is here, slopes also have been fixed and give you a velocity boost to show you gaining speed while going down and losing speed going up. Otherwise I have a cat model made but I don’t know if imma keep it.
Grappling hook added, polished, terrain testing and a new obstacle course added…. also I tried fixing slopes again and they still are alright So I currently don’t know what to add next or what the main character will be, I have an old model I might be able to use that I made for a different game that I didn’t finish. I did turn it in however as part of a website so I might not be able to use it. My ideas for what next will be added is particles, character, environment and maybe some new cool ability. Issues: Wallrun acts weird on curved surfaces Slopes are still buggy Camera is a bit weird I will probably start a thread on slack about this. I don’t have a clue what to do for 3d platforming. (Maybe something involving a mountain and gliding?) Hard to keep motivation, might just deal with the weird bugs and wait to fix them. Probably will do music or art next devlog.
Glider and Grapple update. What was added Well I have added a glider that you can grapple on to, increasing the weight and falling speed of it while doing so. You also can use your speed to push it faster. The grapple also now has a normal stat that lets me set the players rotation once in it allowing for smoother wall running. Reason why it took so long I wanted some aerodynamic glider but got stuck between it being overpowered, broken, or not fun in its intended use. Game idea is now Decided You are a mountain climber needing to get down, you have a glider however due to the storm you cannot dive through normally meaning you have to go down the mountain through the caves. The deeper you go the more you unveil. Next is probably music.
Spikes, effects and speed lines have been added. A song and model are in progress I am nearing the end of the features I want to add to the game. Next I will work on the visuals and story. Story is currently you are performing a stunt where you paraglide through a storm. In order to do this you are going through caves down a mountain. I will probably refine both the model and music but for now they work. Spikes are just if you hit them it resets everything, speedlines and running smoke are both particles, speedlines just being out of view at lower FOVs which go up as you gain speed. Smoke becomes more and more the faster you go. Gliding can go through spikes (Will change but rn need for testing levels) Also I added a cat model project I was thinking of adding into the game so I got the time from it, so a half hour of this was from that.
Music and Model have been actually added into the game. So in the game now you have some visuals and audio to look at besides the most basic things. Animations are not finished and should end up being finished tomorrow. The running, walking and idle are in the game though. Music is probably final unless I really hate it. Also in the video you can see spikes and the void killing you.
It took me a while but I finished the animations and had to fight unity about the way the animations were shown however it is done. For some reason Unity instead of making forward for the animation what I said in the modeling program just made up forward based on the hip rotation? So I fixed that by changing import settings. Model is based off a paraglider I thought of in my head and the animations show that. I was going to make a glider animation but the grapple animation already fits with it so I might not. Slight CRT filter added will refine, stone texture as place holder I will make a new cave for the next devlog, maybe I’ll also fix the glider. I’m tired as hell so I’m going to bed now
While I did not finish the cave like I said I would I did make a prerelease build available now and add a pause menu. I will either make a title screen next or the cave. Please check it out I want play testers, however it does not work on the web. I just realized the pause menu is broken so I’ll fix that too
Storm Glide has a new banner and new levels are in the works. Also a CGI character built for renders is made using high subdivision counts, procedural texturing, procedural effects and a rendering system that is low intensive to really recreate that 90s CGI look
NEW LEVELS, now when you reach the end of a level with your glider you win the level. This is done by just deleting the level and finding the level with the next number in the resources.load. I feel as if I am another 10-20 hours away from finishing this as I still need more levels. Better visuals for said levels. Title screen and maybe some simple 90s CGI animations. A new PS1 filter . And maybe a wind mechanic? I’ll keep you all updated on this. Also there is a release to test this
Levels are made I honestly forgot to track unity time so it’s a lot more time then actually logged. Ok first of all we have a win screen added and a new glider model, next we have a lock on indicator for your grapple. Bugs: Physics bugs exist and make me mad Potential solutions: Remove rotating player model on sloped surfaces. limit slopes. ignore it. I am probably going to finish it this weekend as I just want the CPU grant at this point. Also I did a lot of shader testing and this was the best i could do
It has been completed the and is on Itch.io We have added decorations and a win screen. Everything that was used for debugging is removed. The game is able to be played on web and everything is now over. It is all done
Ships:
Storm glide is a 3D action platformer where you are gliding down a stormy mountain. In order to do you must use the caves meaning you must keep your glider intact and avoid the obstacles. Holding onto the glider will cause it to fall faster meaning you have to manage how long you stay on it. Your able to grapple and wall run for extra help. You can test it in the Itch.io page on your web, however it needs a PC to run with keyboard and mouse. The struggles of creation were just as expected with how games are made and were in the beginning mostly physics related. They were fixed through trial and error or just left out of the final game. Originally the glider would of had mechanics where you go glide and then soar by pulling back up which never made it to the final game. The models were relatively easy to make however the first design of the character was a cat. Also I had major issues with making the music so it ended up not being the best. I am proud of the renders. Apparently they reminded people so much of the PS1 that a bad edit of one render on a PS1 disc holder was enough for people to think it was real. Even if sent into an art channel. I am also proud of the controls and how fun it was even though it took so long to get the levels right. I don’t know much about how to ship these games to be honest, I have turned in 1 other project and it got lower results due to lack of dev logging and history so hopefully the read me and other stuff is good enough for this....
|
1792853312.2013416
|
1792939712.2013416
|
|
63771
|
ViniClock by @Vini_dev | Stardance
|
Vini_dev
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:16:03Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Throughout the development of this project, I had the opportunity to dive deep into various 3D modeling concepts and practical techniques. I gained hands-on experience with Fusion 360, particularly in mastering key workflows like sketching, extrusions, and secondary modeling features. Beyond the mechanical side, I also took the time to refine my skills in KiCad, polishing advanced features that I hadn’t fully mastered before. Looking ahead to future iterations, I aim to move away from relying heavily on labels and focus on cleaner, direct wiring connections to achieve a much more polished and organized overall setup.", "repo": "https://github.com/Developer-Vini/Blare-ViniClock-", "demo": ""}]...
|
[{"post_id": 74575, "ts": "202 [{"post_id": 74575, "ts": "2026-09-27T17:36:34Z", "hours": 1.6322, "text": "Now for the best part: submitting the project! Everything is ready, and I’m happy to have finished it. It was a project that challenged me to the extreme; I had to learn a lot of new things along the way, which is why it took me quite a while to complete."}, {"post_id": 74245, "ts": "2026-09-27T01:47:35Z", "hours": 2.0747, "text": "Writing the alarm clock firmware!"}, {"post_id": 74162, "ts": "2026-09-26T20:06:39Z", "hours": 0.8383, "text": "case closed! Only the firmware finalization is missing. Real talk, I had to spend a little time studying, the worst of all is knowing that I managed to learn the basics of 3D modeling in about 2 days, but I only learned because I dedicated myself, I can create several 3D models already, my goal is to build something really bigger, and take a little time to learn hardware construction, but each one at a time, it got kind of long hahaha, thank you to you who read."}, {"post_id": 73787, "ts": "2026-09-26T00:08:48Z", "hours": 0.3344, "text": "I put all the parts together—I thought it was better that way so I wouldn’t have to figure out where to put screws, haha—but I think it’ll work; I’m almost done."}, {"post_id": 73379, "ts": "2026-09-25T01:27:20Z", "hours": 0.6872, "text": "I’m really close to finishing; I studied hard, made the most of my free time at school, and managed to design something halfway decent (I think)—but there are still a few little things left to wrap it up."}, {"post_id": 72915, "ts": "2026-09-24T00:56:09Z", "hours": 1.6894, "text": "Man, I almost couldn’t get this case study done—my computer kept freezing and I tried everything, but I only managed to finish the bottom part :(. I’m going to do the rest; anyone want to give me a hand? If so, hit me up on Slack. pls, i love u. I decided to start over from scratch; I was getting a lot of errors, so I decided to keep it simple."}, {"post_id": 72330, "ts": "2026-09-22T17:52:59Z", "hours": 1.3367, "text": "Just finishing up the case—it looks a bit rough, so I’m thinking about redoing it."}, {"post_id": 71677, "ts": "2026-09-21T09:13:56Z", "hours": 0.3975, "text": "I’m almost finished with the 3D model."}, {"post_id": 71527, "ts": "2026-09-21T00:30:00Z", "hours": 1.9103, "text": "working on the case study for my project (Blare)"}, {"post_id": 71344, "ts": "2026-09-20T17:46:14Z", "hours": 2.7281, "text": "I’ve finished the complete PCB and fixed all the bugs I found; now I’m going to send it off."}, {"post_id": 70899, "ts": "2026-09-19T23:55:57Z", "hours": 5.1286, "text": "This one took a while, but I managed to finish the complete schematic. There are still a few bugs to fix, but not many—I’ll try to get to them today—but the project itself is already taking shape."}]...
|
Title: ViniClock by @Vini_dev | Stardance
Devlogs Title: ViniClock by @Vini_dev | Stardance
Devlogs:
This one took a while, but I managed to finish the complete schematic. There are still a few bugs to fix, but not many—I’ll try to get to them today—but the project itself is already taking shape.
I’ve finished the complete PCB and fixed all the bugs I found; now I’m going to send it off.
working on the case study for my project (Blare)
I’m almost finished with the 3D model.
Just finishing up the case—it looks a bit rough, so I’m thinking about redoing it.
Man, I almost couldn’t get this case study done—my computer kept freezing and I tried everything, but I only managed to finish the bottom part :(. I’m going to do the rest; anyone want to give me a hand? If so, hit me up on Slack. pls, i love u. I decided to start over from scratch; I was getting a lot of errors, so I decided to keep it simple.
I’m really close to finishing; I studied hard, made the most of my free time at school, and managed to design something halfway decent (I think)—but there are still a few little things left to wrap it up.
I put all the parts together—I thought it was better that way so I wouldn’t have to figure out where to put screws, haha—but I think it’ll work; I’m almost done.
case closed! Only the firmware finalization is missing. Real talk, I had to spend a little time studying, the worst of all is knowing that I managed to learn the basics of 3D modeling in about 2 days, but I only learned because I dedicated myself, I can create several 3D models already, my goal is to build something really bigger, and take a little time to learn hardware construction, but each one at a time, it got kind of long hahaha, thank you to you who read.
Writing the alarm clock firmware!
Now for the best part: submitting the project! Everything is ready, and I’m happy to have finished it. It was a project that challenged me to the extreme; I had to learn a lot of new things along the way, which is why it took me quite a while to complete.
Ships:
Throughout the development of this project, I had the opportunity to dive deep into various 3D modeling concepts and practical techniques. I gained hands-on experience with Fusion 360, particularly in mastering key workflows like sketching, extrusions, and secondary modeling features. Beyond the mechanical side, I also took the time to refine my skills in KiCad, polishing advanced features that I hadn’t fully mastered before. Looking ahead to future iterations, I aim to move away from relying heavily on labels and focus on cleaner, direct wiring connections to achieve a much more polished and organized overall setup....
|
1792814067.6699007
|
1792900467.6699007
|
|
65845
|
My Portfolio by @sikcube | Stardance
|
sikcube
|
1
|
22.0
|
41
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:13:23Z", "hours": 22.0, "multiplier": 3.44, "payout": 41, "blessing": "neutral", "text": "This is My Portfolio, I love my profile picture and I wanted to have a website themed on that. And it’s a cool way to see how Stardance works. The most difficult thing was remenber to use Astro, and have a clear idea for the project. I don’t know if it’s legal to submit all the time of this project. Why? Because this was made for Mancondo. But it was closed and this is a way to try to earn something from the time spent on the project. https://macondo.hackclub.com/projects/8428", "repo": "https://github.com/SiKCube/my-portfolio", "demo": "https://sikcube.vercel.app/"}]...
|
[{"post_id": 74695, "ts": "202 [{"post_id": 74695, "ts": "2026-09-28T00:58:05Z", "hours": 0.5603, "text": "Added images for project card, yes kinda simple"}, {"post_id": 74686, "ts": "2026-09-28T00:13:53Z", "hours": 1.2728, "text": "Added More languages English and Spanish, I did a simple dropdown, that changes the URL based on the data."}, {"post_id": 73834, "ts": "2026-09-26T03:46:04Z", "hours": 20.2475, "text": "Adding English and Spanish routes, via the i18n routing in Astro, it was defining the new content but in English (before was on Spanish). Tomorrow I’ll add a component that changes the Language URL."}]...
|
Title: My Portfolio by @sikcube | Stardance
Devlo Title: My Portfolio by @sikcube | Stardance
Devlogs:
Adding English and Spanish routes, via the i18n routing in Astro, it was defining the new content but in English (before was on Spanish). Tomorrow I’ll add a component that changes the Language URL.
Added More languages English and Spanish, I did a simple dropdown, that changes the URL based on the data.
Added images for project card, yes kinda simple
Ships:
This is My Portfolio, I love my profile picture and I wanted to have a website themed on that. And it’s a cool way to see how Stardance works. The most difficult thing was remenber to use Astro, and have a clear idea for the project. I don’t know if it’s legal to submit all the time of this project. Why? Because this was made for Mancondo. But it was closed and this is a way to try to earn something from the time spent on the project. https://macondo.hackclub.com/projects/8428...
|
1792817274.8777652
|
1792903674.8777652
|
|
2879
|
productive home by @Tony1292 | Stardance
|
Tony1292
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:07:48Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a website that solves most of my family problems. The point is that you don’t forget anything and the whole family works together. This website will help your family. This was such a helpful project becasue it shows that coding and being on the computer in not a waste of time as my family says but can solve real promblems.", "repo": "https://github.com/tonymurilloambriz-bit/My-personal-webiste", "demo": "https://hom22.oneapp.dev/"}]...
|
[{"post_id": 74694, "ts": "202 [{"post_id": 74694, "ts": "2026-09-28T00:42:32Z", "hours": 0.5506, "text": "I have finished my project I have finished the chores and the shopping list section of the website. I have really enjoyed this project."}, {"post_id": 47188, "ts": "2026-08-14T22:20:39Z", "hours": 1.1003, "text": "I have made some more changes on the colors but it will be hard to make the chores list an shopping list. Since I decided to make all the apps. The reason why it took so long was that I did not save the code and will big brain me lost the code."}, {"post_id": 7218, "ts": "2026-06-12T01:33:32Z", "hours": 1.3825, "text": "I was able to make the website look more modern and overall better looking. Before I did this I accidentally deleted the tab where I had my code and I did not save the code."}, {"post_id": 5160, "ts": "2026-06-08T20:54:21Z", "hours": 2.7561, "text": "I made the chore app with Lovable.AI and put it into the html file so know when you click on the chore menu it takes you there. The next step is to add a button in the Lovable app so you can go back to the main menu."}, {"post_id": 4532, "ts": "2026-06-07T21:29:51Z", "hours": 1.1172, "text": "So I made the main home page with html but the apps inside the website where made by me using lovable.AI. So the main website is all most ready."}, {"post_id": 3751, "ts": "2026-06-06T20:00:00Z", "hours": 1.0525, "text": "I got the button to work for one of the menu icons. But now I know how to do the rest. So now when you click on the chores word, it brings you to the chores page."}, {"post_id": 3205, "ts": "2026-06-06T01:11:34Z", "hours": 1.3958, "text": "I got the the buttons to work so when you click the button it brings you to another page."}, {"post_id": 2978, "ts": "2026-06-05T22:02:21Z", "hours": 1.0089, "text": "So I am making a website where the user lists what is needed in the house like food or basic supplies. So when the user runs out of the supplies they will mark it as needed. there will also be a section for chores so you can add the family and each person has chores they have to complete before the day ends."}]...
|
Title: productive home by @Tony1292 | Stardance
D Title: productive home by @Tony1292 | Stardance
Devlogs:
So I am making a website where the user lists what is needed in the house like food or basic supplies. So when the user runs out of the supplies they will mark it as needed. there will also be a section for chores so you can add the family and each person has chores they have to complete before the day ends.
I got the the buttons to work so when you click the button it brings you to another page.
I got the button to work for one of the menu icons. But now I know how to do the rest. So now when you click on the chores word, it brings you to the chores page.
So I made the main home page with html but the apps inside the website where made by me using lovable.AI. So the main website is all most ready.
I made the chore app with Lovable.AI and put it into the html file so know when you click on the chore menu it takes you there. The next step is to add a button in the Lovable app so you can go back to the main menu.
I was able to make the website look more modern and overall better looking. Before I did this I accidentally deleted the tab where I had my code and I did not save the code.
I have made some more changes on the colors but it will be hard to make the chores list an shopping list. Since I decided to make all the apps. The reason why it took so long was that I did not save the code and will big brain me lost the code.
I have finished my project I have finished the chores and the shopping list section of the website. I have really enjoyed this project.
Ships:
I have made a website that solves most of my family problems. The point is that you don’t forget anything and the whole family works together. This website will help your family. This was such a helpful project becasue it shows that coding and being on the computer in not a waste of time as my family says but can solve real promblems....
|
1792856946.5651956
|
1792943346.5651956
|
|
61981
|
las teclas by @Vini_dev | Stardance
|
Vini_dev
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T00:58:51Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a macropad called MarcinhoPad (I couldn’t think of what to call it, so I decided to combine my name with the word ‘pad’ at the end). This project really challenged me, as it was the first ‘big’ project I’ve ever made. But the most annoying thing that gave me a huge headache was the LEDs. Man, it felt like nothing was working! I would run the ERC and it gave so many errors, so many errors, that I almost gave up on the project, but I decided to just remove them—didn’t want any more headaches, lol. Not to mention the 3D modeling: I spent two nights without sleep just thinking about it. Before going to school, I would make use of the 1 hour I had, get up, and turn on the PC right away to try to finish the model. Same thing when I got back, exhausted and only thinking about sleep, but there I was, learning 3D modeling, lol. Now, what made me think ‘I’m the man’ the most—my ego totally inflated when I finished the project and it got approved. Man, my heart raced with joy, I saw that my hard work paid off! Ah, I was almost forgetting, lol: to test the project, all you need is Arduino IDE installed. Connect the board to your computer’s USB, clone my repository, and flash my code.", "repo": "https://github.com/Developer-Vini/MarcinhoPad", "demo": ""}]...
|
[{"post_id": 74675, "ts": "202 [{"post_id": 74675, "ts": "2026-09-27T23:40:24Z", "hours": 1.0117, "text": "I went to see if it would actually work; I managed to mount the 3D parts on the board to test everything, and I made a few tweaks. I think I’ll go for a unique design—I’m thinking of making it all black; it’s going to look awesome."}, {"post_id": 70908, "ts": "2026-09-20T00:28:59Z", "hours": 0.5489, "text": "Finished!"}, {"post_id": 70294, "ts": "2026-09-18T21:46:34Z", "hours": 1.5661, "text": "Trying to model the case (it’s proving very difficult)."}, {"post_id": 69899, "ts": "2026-09-18T01:08:57Z", "hours": 0.505, "text": "What a beautiful PCB!"}, {"post_id": 69414, "ts": "2026-09-17T00:28:16Z", "hours": 0.8728, "text": "finished!!"}, {"post_id": 69376, "ts": "2026-09-16T22:36:50Z", "hours": 2.135, "text": "I decided to remove the LEDs; I’m going to do it without them. Connecting the LEDs was proving too difficult, so I preferred to leave them out. The important thing is that it works. The PCB is already complete; now I just need to adjust a few things and transfer it to the case."}, {"post_id": 69241, "ts": "2026-09-16T17:26:35Z", "hours": 2.7272, "text": "I finished the schematic and I’m going to the PCB, now I just have to decide what I want to do haha, I’m very indecisive, I have to see the layout."}, {"post_id": 68918, "ts": "2026-09-16T01:29:57Z", "hours": 1.9889, "text": "Yo guys, I was studying how I could do the hackpad scheme, man, think of a work that is giving, but it’s gonna work out, there’s no rush."}, {"post_id": 67760, "ts": "2026-09-14T00:25:31Z", "hours": 0.3833, "text": "i was preparing the work environment to begin development."}]...
|
Title: las teclas by @Vini_dev | Stardance
Devlog Title: las teclas by @Vini_dev | Stardance
Devlogs:
i was preparing the work environment to begin development.
Yo guys, I was studying how I could do the hackpad scheme, man, think of a work that is giving, but it’s gonna work out, there’s no rush.
I finished the schematic and I’m going to the PCB, now I just have to decide what I want to do haha, I’m very indecisive, I have to see the layout.
I decided to remove the LEDs; I’m going to do it without them. Connecting the LEDs was proving too difficult, so I preferred to leave them out. The important thing is that it works. The PCB is already complete; now I just need to adjust a few things and transfer it to the case.
finished!!
What a beautiful PCB!
Trying to model the case (it’s proving very difficult).
Finished!
I went to see if it would actually work; I managed to mount the 3D parts on the board to test everything, and I made a few tweaks. I think I’ll go for a unique design—I’m thinking of making it all black; it’s going to look awesome.
Ships:
I created a macropad called MarcinhoPad (I couldn’t think of what to call it, so I decided to combine my name with the word ‘pad’ at the end). This project really challenged me, as it was the first ‘big’ project I’ve ever made. But the most annoying thing that gave me a huge headache was the LEDs. Man, it felt like nothing was working! I would run the ERC and it gave so many errors, so many errors, that I almost gave up on the project, but I decided to just remove them—didn’t want any more headaches, lol. Not to mention the 3D modeling: I spent two nights without sleep just thinking about it. Before going to school, I would make use of the 1 hour I had, get up, and turn on the PC right away to try to finish the model. Same thing when I got back, exhausted and only thinking about sleep, but there I was, learning 3D modeling, lol. Now, what made me think ‘I’m the man’ the most—my ego totally inflated when I finished the project and it got approved. Man, my heart raced with joy, I saw that my hard work paid off! Ah, I was almost forgetting, lol: to test the project, all you need is Arduino IDE installed. Connect the board to your computer’s USB, clone my repository, and flash my code....
|
1792813904.2813509
|
1792900304.2813509
|
|
36694
|
Timetablr by @SunnyFlops | Stardance
|
SunnyFlops
|
1
|
17.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T00:36:40Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This app is very applike in the way that it is an app! Typically in the past I usually never used a timetable app because they were quite cumbersome to set up and use, so I decided to make a solution that felt quick and right for me personally. While my solution may not be the best fit for absolutely everyone, I think it’s certainly unique and worthwile. I found myself sideloading the app and genuinely using it on my phone, which was way more convenient than memorising off my school’s portal every morning. A video demonstration can be found on the previous devlog. Requires sideloading and trusting to work on an iPhone. The IPA file only works on iOS 26 and higher, will fix this later.", "repo": "https://github.com/SunnyFloppyDiskStudios/timetablr", "demo": "https://github.com/SunnyFloppyDiskStudios/timetablr/releases/tag/1.0"}]...
|
[{"post_id": 74690, "ts": "202 [{"post_id": 74690, "ts": "2026-09-28T00:28:14Z", "hours": 10.9881, "text": "it’s finisheddddddddddddd you can do all sorts of timetably stuff with it and um i didn’t do a very good job at documenting the development process but like it’s pretty good i think and it works so like yea it is working now so cool story but yeah feature list: timetable timetable setup process (set up a day “structure” which is the order of class/breaks and then add classes) edit mode settings multi-week timetables (i.e. week A, week B) automagically cycle between multiweek timetables (fancy) lots of overrides for stuff and generally easy to use. since my last devlog i have since added… everything that a timetable app needs! You can add classes, breaks, everything, and the setup process flows quite nicely I think."}, {"post_id": 46579, "ts": "2026-08-13T22:13:13Z", "hours": 6.1889, "text": "how have i not done a devlog yet wow that’s crazy ummm you can like. set up teh timeable and you can set dates and creat classes but you can’t actually like. set the classses into the times that you choose so like you can’t actually time your table with this app yet but it will soon time the table because I am being forced to create this app it has to be done because otherwise I will explode eyah so soon enoigh you’ll be able to actually set your timetable up but for now you can just go between views it’s kinda cool tbh I’ve set some default variables but it works nicely and soon enough it will be done so yeah. why is there no spellcheck here help."}]...
|
Title: Timetablr by @SunnyFlops | Stardance
Devlo Title: Timetablr by @SunnyFlops | Stardance
Devlogs:
how have i not done a devlog yet wow that’s crazy ummm you can like. set up teh timeable and you can set dates and creat classes but you can’t actually like. set the classses into the times that you choose so like you can’t actually time your table with this app yet but it will soon time the table because I am being forced to create this app it has to be done because otherwise I will explode eyah so soon enoigh you’ll be able to actually set your timetable up but for now you can just go between views it’s kinda cool tbh I’ve set some default variables but it works nicely and soon enough it will be done so yeah. why is there no spellcheck here help.
it’s finisheddddddddddddd you can do all sorts of timetably stuff with it and um i didn’t do a very good job at documenting the development process but like it’s pretty good i think and it works so like yea it is working now so cool story but yeah feature list: timetable timetable setup process (set up a day “structure” which is the order of class/breaks and then add classes) edit mode settings multi-week timetables (i.e. week A, week B) automagically cycle between multiweek timetables (fancy) lots of overrides for stuff and generally easy to use. since my last devlog i have since added… everything that a timetable app needs! You can add classes, breaks, everything, and the setup process flows quite nicely I think.
Ships:
This app is very applike in the way that it is an app! Typically in the past I usually never used a timetable app because they were quite cumbersome to set up and use, so I decided to make a solution that felt quick and right for me personally. While my solution may not be the best fit for absolutely everyone, I think it’s certainly unique and worthwile. I found myself sideloading the app and genuinely using it on my phone, which was way more convenient than memorising off my school’s portal every morning. A video demonstration can be found on the previous devlog. Requires sideloading and trusting to work on an iPhone. The IPA file only works on iOS 26 and higher, will fix this later....
|
1792853574.7221324
|
1792939974.7221324
|
|
25644
|
rlbuddy by @kmdw | Stardance
|
kmdw
|
3
|
185.95
|
2643
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T00:20:30Z", "hours": 40.0, "multiplier": 18.76, "payout": 740, "blessing": "neutral", "text": "I made rlbuddy, a rocket league companion app! This is the third ship so far. The big features this time are the asset swapper and Linux support, but I think that the feature I’m most proud of this time is the asset swapper! It inserts the appearance of one item into the file of another, meaning by swapping out assets for others you can make your car look however you like! (Client-side only, of course). I learned a lot about byte-level manipulation and working with raw data streams and encryption/decryption in Rust, and I can read hex (relatively) well now! It’s also great because I think this combined with the doorstop experiment from a while ago gives me a nice base to try some reverse-engineering challenges in the future. I also worked a lot on performance this time, such as tuning loop times/ui fps caps and minimizing ram usage (I achieved around an 80% reduction here!) There are a crap ton more features added than that (totaling almost 100 commits), but I’m pretty sure you’re not supposed to have massive feature-dumps on the ship text. So the full list is on the latest github release! In the image, you can see I have a white fennec. In reality, I don’t actually have a tw trim, and the equipped decal isn’t compatible with the fennec either. But, using the power of asset swapping, I can get a beautiful all-white car. Neat!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}, {"ship_num": 2, "ts": "2026-09-07T20:33:21Z", "hours": 27.0, "multiplier": 16.74, "payout": 457, "blessing": "neutral", "text": "rlbutddy is a feature-rich companion for Rocket League, and v1.2 is out. There’s been some big architectural changes meaning it’s faster and bug-free-er, as well as big new features! New!!! Avatars! Now you can see people’s profile pictures even when you’re not on their platform. Custom map loader! You can import maps from a ZIP or download them straight from Bakkesplugins! Gamepad overlay! Show your controls while playing, to show off your bindings or get some help with your speedflips. I think I’ve definitely improved at Rust since the last release. Just in terms of the amount of mistakes I make, I feel like it’s way more smooth sailing than before. For example, I was able to (mostly) write not-so-buggy code and “run the borrow checker in my head” without needing to cargo check a million times, and clippy tends to have a lot less suggestions for me. Pretty great!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}, {"ship_num": 3, "ts": "2026-08-25T22:08:36Z", "hours": 109.0, "multiplier": 17.59, "payout": 1446, "blessing": "neutral", "text": "rlbuddy is a feature-filled companion for Rocket League! It shows the skill of everyone in your lobby and has tons of toggleable widgets and features to make your life a lot easier, from Discord integration to music control. This is my first non-tiny Rust project, and I think it was really great! I’ve learned a lot such as proper state management and the ins and outs of Rust’s syntax. You can give it a try by heading to the Github releases section. If you play Rocket League, I hope you use it!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}]...
|
[{"post_id": 80191, "ts": "202 [{"post_id": 80191, "ts": "2026-10-16T17:13:05Z", "hours": 3.4819, "text": "more small improvements. i gave the session stats widget an actual service as well which speeds things up a lot since its not recalculating statistics every single frame. the swapper also uses the backup file if one is available and it no longer accepts duplicate custom maps"}, {"post_id": 77292, "ts": "2026-10-06T13:38:54Z", "hours": 0.4772, "text": "A few fixes here and there. Some refactors, caching externally loaded playlists in savedata, and fixing a deadlock when clearing the items cache. And for some reason the decal option was missing from the items list picker."}, {"post_id": 75881, "ts": "2026-10-01T13:48:20Z", "hours": 5.9928, "text": "I made a standalone web-based swapper for the people who don’t want to download an entire app. A lot of people had broken packages after the last update but didn’t want to install a dedicated program just for a few swaps. So, I used the asset swapper backend of rlbuddy to make this thingamabob which runs entirely in the browser! First, I had to find out how to actually share rlbuddy’s asset swapper with other projects. Turns out Cargo has a cool thing called workspaces where you can have multiple crates in the same repo! So I moved the dedicated UPK/AES etc. stuff into a new crate and added it as a dependency in regular rlbuddy. Then, I whipped up a small wasm-compatible eframe app with the template, and included the new crate as a dependency. I made a big state machine of the steps meaning it’s impossible to have an invalid state, which is really nice. The only problem was that Rust’s ownership system isn’t smart enough to deal with it, so the code is a bit repetitive in places but it’s definitely worth it. The WASM restrictions were super annoying, mainly do to with filesystem access and requiring async. I ended up using the egui-async crate and spilling Binds all over the place within the state machine. I couldn’t even figure out how to get the actual swap procedure to run in a different thread. I also spent like 30 minutes debugging why in the world asset swapping was just broken. Even when I verified the same binary data were going in to the Upk object in the webapp and rlbuddy, for some reason the output upk was just different. Turns out I used chosen_replacement.name instead of chosen_replacement.package.name() . Isn’t that great? Anyways, it works fine now and I’m planning on posting it on r/RocketLeagueMods and possible r/RocketLeague."}, {"post_id": 74679, "ts": "2026-09-27T23:46:54Z", "hours": 3.0297, "text": "Not much in terms of super-cool stuff this time. Highlights are: make sure dynamic playlist loading uses the latest cache file (and also fix its loading on normal people’s rocket league installs) loading the cache file on another thread so it doesnt freeze the whole app for a second on the first lazy lock access searching for items in the item swapper moved the error handling of the map loader to anyhow So no ultra-exciting things to talk about. anyhow is really cool though, it really simplifies error handling everywhere in the app, and I’m a big fan of its bail! macro. I’m also using Cow a lot more. Moo!"}, {"post_id": 73444, "ts": "2026-09-25T03:22:46Z", "hours": 4.635, "text": "I got licensee version 34 (encrypted payloads too) to swap finally! Okay, so this was awesome. Rocket League’s been having a bunch of updates lately, which breaks the packages of people trying to get free stuff. So, in a Reddit thread, I ended up dishing out a bunch of swapped asset files for people in this situation. There’s a new boost which everybody wanted really bad since it was really rare (but they decided to make it unlockable at rocket pass lv99 so it doesn’t even matter anymore), and it was UNSWAPPABLE for three reasons: it was encrypted specially i hadnt encountered specially encrypted packages meaning their handling was wrong aes keys werent out for it yet (or so I thought) I’ll start with 3. I had written a tool which looks in the games cache for AES keys, and dumped them, and it worked great. What I didn’t expect is the filename to change between versions. So, I was super confused since yesterday since the AES key for the boost was just… missing. Thankfully, the geniuses at the RLMM discord got it and helped me figure out that the file I was reading from was just outdated. Great! Anyways, not too big of a deal, just a big delay. Now it’s time for the real challenge: figuring out how the hell to handle this type of package. First, I did some research. The twelve bytes of padding in files with licensee version >=33 before the summary are actually a nonce/aes iv, not just padding. Then, the header is encrypted with AES-CTR with the twelve first bytes of the iv just being the nonce. And the compressed chunks are encrypted too here: each one is also AES-CTRed with their own nonces in FCompressedChunkInfo. Thing is, I don’t have an implementation to really go off anymore, meaning there’s a lot more trial and error. For the original implementation, there were one or two existing asset swappers (though they were vibecoded meaning more of a puzzle to figure out what they’re even doing), but this time I was mostly relying on emii’s fork of UEViewer. Anyways, after spending a while figuring out what exactly I had to masquerade (payload, key, swap nonces) I finally got it to work!"}, {"post_id": 72491, "ts": "2026-09-23T02:26:44Z", "hours": 1.8381, "text": "rlbuddy now loads additional playlists straight from the game’s cached webconfig, instead of hardcoding them all! This means that the list of playlists will basically never go out of date. There are actually quite a few services which rely on game files (eg. auto stats api setup, custom maps, asset swapper). So, the first thing I did was to refactor it so make all of these load from the same global value. Then, for playlists, I made it read from a specific file in the game’s http cache directory which contains a bunch of configuration. Then, it parses it into a JSON object, grabs all the values with Class PlaylistSettings_TA, and then extracts the title and playlist id! There are still a bunch of built-in Playlists, since those have internal things like going from a casual playlist type to its respective competitive one or having the hard-coded list of singleplayer playlists. But, all the other ones, like ltms are dynamically loaded. Yay!"}, {"post_id": 72027, "ts": "2026-09-22T00:56:20Z", "hours": 3.9097, "text": "I made a ton of improvements to the asset swapper! And fixed a bug with the music player which is cool technically, so I’ll start with that. The player uses the GSMTC api, which is async, but egui doesn’t really like async. So, I made it so that every time you wanted to run some command on the current session, it would start up a new thread. This was less than ideal for a few reasons: terrible performance race conditions could happen just… in Windows itself The main problem was 2: for example, if you skipped a replay too fast, the Play command from the end of the replay might actually reach Windows before the Pause command from the replay start, leaving your music paused. So instead, it starts one dedicated worker thread which has a channel which receives a Box<dyn FnOnce(Session)> , and executes at most one command every 50ms (only one command per loop, fixed loop time of 50ms). It’s really interesting because you actually end up sending a closure through a channel, which feels funny but when you really think about it it’s just ownership semantics. But, that’s working great now! On to swapper improvements! First, I moved most of the swapper module to anyhow handling (it’s heaven!), and I also modernized the upk api a bit since it was basically dragged directly from the proof-of-concept repo, meaning it was not really application-ready. Also, it previously looked at the game’s webcache to decode the AES keys for header decryption, but now it uses the wonderful Toga-Files repository along with a really nice caching layer for it to load items and their associated API keys. Having access to the actual item data is also way better since you don’t have to manually type in a package name which is kinda weird for any normal person. Now, you can select it from a dropdown instead! I love UX."}, {"post_id": 71420, "ts": "2026-09-20T19:51:05Z", "hours": 4.5228, "text": "rlbuddy now has item swapping! Basically, making one item appear like another to use items you don’t actually own. These hours were spent on a few different things. Firstly, I optimized the thing a bunch! There were a few places that were pretty slow since the original repo was mainly for testing. For example instead of decrypting the entire header and rechecking it to find the right key, it only loads the first 4 blocks and attempts to decrypt the first FString. If it fails, that means the AES key isn’t valid. Also, I improved the error handling with anyhow. It actually makes it so much easier to deal with things and was pretty useful when debugging the move over to the actual app. Now I’m just going to work on polishing the panel UI a bit more, since it’s still kind of ugly."}, {"post_id": 70888, "ts": "2026-09-19T23:20:36Z", "hours": 2.1058, "text": "Apparently there are a bunch of different AES keys rocket league uses, not just one. You can get a list of them from the psynet config url, and then do some weird crc stuff to change them from “content keys” to aes keys. I discovered the rocket league mapmaking discord today and I’m blown away by the amount of information on there, and also apparently my whole thing about the unknown bytes when licensee version > 32 was straight up wrong, which is funny. Anyways it works for all items now, which is great. I’m gonna work on actually putting it in rlbuddy now, hopefully that goes well"}, {"post_id": 69896, "ts": "2026-09-18T01:01:05Z", "hours": 0.9667, "text": "IT WORKS WHEN THE HEADER EXPANDS NOW YAYAYYAYAYAYYAYAYYAYAYAY I’m gonna be honest, the problem might just have been that my testing package was corrupted. I was debugging my deserialization logic, which I thought might have some parsing issue near the header extraction, and noticed that once the encrypted region deserializer’s Cursor reached the end of the region, it was actually FARTHER than the package summary’s total_header_size - by 6 bytes! That’s pretty bad, and I don’t know how something like that even happened. Anyways, I repaired the game and brought over the shiny new upk and… it worked. I’m pretty sure that I only accidentally did this while tidying up my workspace a few hours ago, but if this has genuinely been the thing holding me back for the past few days - I also finally made the poc code public, at https://github.com/kalilamodow/rl-upk-testing/"}, {"post_id": 69850, "ts": "2026-09-17T22:15:40Z", "hours": 1.67, "text": "IT SWAPPED IT SWAPPED IT SWAPPED AHAHAHHAHAHAHHAHAHAHAHHA FINALLY Okay now I gotta make it work for other pairs of boosts. If WHEN that works, I’ll actually put it in rlbuddy. I removed all the code relating to changing offsets to try to give myself a minimal workspace to tinker in, with as little side effects as possible. So, all the current code does is 1. open them 2. replace the name table entries and package guid. Surprisingly simple. Once I make it a bit more generic, I can extend it to support more swaps. If I’m really unable to get it to work for more combinations, I’ll probably end up just publishing the poc repo and not adding swapping to rlbuddy at all. This is a great motivation boost, though. I was honestly dreading coming home to work on it today because I was done with failing over and over, and considering giving up."}, {"post_id": 68661, "ts": "2026-09-15T14:25:29Z", "hours": 2.6667, "text": "I got a name swap! It doesn’t work properly, but I’m glad the game didn’t crash. These hours have been by far the most frustrating because the only way to test is against the real game since it’s really picky, but the game takes like 30 seconds to start, and if it crashes, it gives a cryptic error log, and if it freezes, it doesn’t give any log at all. I spent most of the time messing with moving different offset values forward and backwards, and ended up reverting to a simpler version with no overwriting when the header size changes just to test things. So far, I’ve mostly gleaned that name renaming is possible, but only up to a point. If the name grows too much, the game crashes, and if the name shrinks too much, the game freezes. Additionally, for some reason, total_header_size changes by the padded header size instead of the encrypted header size, which I still don’t understand. It’s seriously weird. I serialize each name properly, and yet the game reads it wrong. This game really does need a new codebase. When UE6 comes out, either the game’s gonna be so good it doesn’t need mods, or it’ll be relatively easily moddable. Or neither, which is the most probable based on Epic Games’ track record. Anyways, enjoy the beautiful screenshot."}, {"post_id": 68281, "ts": "2026-09-14T20:49:26Z", "hours": 3.1181, "text": "I figured out what comes after export tables! And it took way too long, since I DISCOVERED IT MYSELF! At least, as far as I know. I couldn’t find any information online about this portion of the header, so it was basically luck that I noticed a pattern. Before, I was just copying everything after the export table and pasting them back in afterwards, but as you can guess, that stopped working if I adjusted anything within the encrypted region. Compressed chunk info is a known part, and I figured out the AES padding pretty easily, so most of the time was spent trying to figure out what in the world those 24 bytes were. The first four bytes in the compressed chunk info are how many chunks they are. Here, in the Bubbles boost package, there are two (little endian), with 24 bytes of ???. And in Flamethrower, there are three, with 36 bytes of ???. I noticed that the ??? was always n chunks * 12 bytes (actually, it’s lucky that I didn’t test any which ended up having 0, otherwise I probably wouldn’t have figured it out). Since this probably had something to do with chunks, I made a guess that each chunk had some extra data stored in this array, 12 bytes of info per chunk. Using HxD’s highlight-bytes-and-get-the-decimal-value feature, I noticed a pattern where the first 8 bytes looked like an i64 offset and the last 4 looked like an i32 size, which the compressed chunk infos were also like for their matching counterparts. So, I deserialized it as [i64; i32] * n chunks and was able to read it better. These additional chunk infos seem to kinda sorta match up to uncompressed header offsets, but I don’t really understand what they are (and they’re marked as such in the code, lol). So, with that working (and some fiddling with broken serialization of TArrays which I’m surprised I didn’t catch earlier), I now understood the ENTIRE package header! Hooray! Let’s look at another example. body_grain_SF, the Fennec, has 4 chunks. Guess how many bytes of ??? it has. That’s right, zero! For some reason, a few packages just don’t have those things. After going through a bunch of them, I found that if licensee version was 32, there was no ???. But if it was 33, there WAS ???. I basically just added an if statement and it was fixed. I’m going to try to work on figuring out the padding in between the package summary and the start of the name table, but if I can’t, I suppose I’ll finally get to actually doing package swapping. Later!"}, {"post_id": 67059, "ts": "2026-09-13T03:19:34Z", "hours": 2.9378, "text": "I JUST DESERIALIZED AND RESERIALIZED A UPK. OMAIGOD IM SO HAPPY. my brain is so tired. Alright so the payload still doesn’t get transferred but that’s pretty simple, it’s just Vec::extend. What a challenge! Deserialization actually ended up being the easy part, which is opposite of what I expected from starting the project. It went (relatively) fast since there are a few existing implementations which I could kinda just “borrow” structure parsing from. But, mine is unique in that it almost completely reserializes the package itself. I might’ve been able to “borrow” reserialization, but the impl I’ve been looking at is STRAIGHT ai slop and it’s more annoying to read that than to just do it myself. It was useful though, so I have to respect it. The first problem: basically, the first byte of an FString determines how many parts it has, NOT how many bytes it has. Which wasn’t a problem for parsing, since I had some word-based helpers which worked so I didn’t think much about it. But, when reserializing, I made two mistakes: 1. forgot to add the null terminator (which shouldn’t even be necessary) and 2. I accidentally put the wrong offset. I have no clue why there’s a null terminator for FStrings. The format is [n chars][the char bytes], meaning it should already be known how long the string is. Pretty stupid, but whatever. Anyways, when reserializing you’re supposed to include the null terminator in the string length marker. So, my logic was that I should offset it by two since unicode characters are two bytes. Bleh! I should’ve only incremented by one, since it’s in terms of utf16 chars rather than bytes. Yay, that worked! I don’t know how to summarize the next problem, so I’ll explain the reasoning. The package header is file summary + tables + something else (we’ll get to that later). Anyways, there’s some mysterious padding in between the summary and tables. Parsing, it’s easy to skip over because the summary includes the tables start offset ( name_offset , the name table is the first one). But when reserializing, you gotta keep those offsets intact. Well, I’m not totally sure if you actually have to keep them, but just for the sake of simplicity I tried to (which ended up adding more complexity, which I’ll see if I can remove now). So, I serialize/push the summary to the big Vec. Then, I make a new Vec and serialize the name table at (name_offset - summary_size), since the new Vec has to be encrypted and then appended to the big Vec. I do the same thing for imports/exports (placing the table at import/export _table_offset - summary_size ). Oh no! Since name_table_offset isn’t equal to summary_size, there’s some padding in between, which is expected. HOWEVER! The previous logic would skip over it in the table Vec creation, meaning the table Vec would have some 0-padding at the start. This padding needs to be in the SUMMARY part instead, and the name_offset should basically be the ZERO of the tables Vec! I doubt I would’ve been able to solve this part without the beautiful tool HxD . It’s really easy to use and is always helpful when I’m figgling around with binary. So, it does some more math, calculates the spacing, adds it to the big vec, and removes it from the tables Vec. Then, it re-encrypts the tables Vec and pushes it onto the big Vec! Okay, now that’s done. NOPE! There’s a mysterious structure for some reason at the end of the real table part? Yep, it’s that something else I said we’ll get to. I actually still have no idea what it is. From some research, I gathered it must be the dependencies table, but it’s really poorly documented. So, I ended up just cutting the bytes out from after the export table to the end of the tables part, and “pasting” it back before re-encryption. I do hope this devlog was readable. Now I’ll get to including the actual package payload and hopefully simplifying reserialization offsets. See you soon!"}, {"post_id": 66867, "ts": "2026-09-12T20:09:08Z", "hours": 2.0211, "text": "I’ve been putting this off for a while, but I’ve finally decided I’m going to add asset swapping. There’re a few existing implementations, so I’m reading those as well as some pdfs about the upk format. So basically credit to this document and this implementation . All it can do for now is parse the file summary. The implementation wasn’t too bad since I had Google as well as the C# implementation I just talked about. I basically have trait Deserializable : Sized { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > ; } Then implement that for the various parts (eg. FGuid , a generic TArray ). Then, I use byteorder to read out numbers into each struct. For example, #[derive(Debug)] struct FCompressedChunkInfo { uncompressed_offset : i64 , uncompressed_size : i32 , compressed_offset : i64 , compressed_size : i32 , } impl Deserializable for FCompressedChunkInfo { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > { Ok ( Self { uncompressed_offset : reader .read_i64 :: < LittleEndian > () ? , uncompressed_size : reader .read_i32 :: < LittleEndian > () ? , compressed_offset : reader .read_i64 :: < LittleEndian > () ? , compressed_size : reader .read_i32 :: < LittleEndian > () ? , }) } } I originally prototyped it in Python and then moved to Rust once I got tired of python’s byte shenanigans."}, {"post_id": 66219, "ts": "2026-09-11T22:03:11Z", "hours": 2.5883, "text": "I did lots of performance improvements and also IT WORKS ON LINUX NOW!!! Let’s talk about performance first. Anyways, it has been using around 4% and 220MB of ram, which isn’t really what you’d expect from an overlay! So, I used things like DHAT to profile the memory, and noticed that fonts were doing some shenanigans. So I removed egui_system_fonts and loaded directly from C:\\Windows\\Fonts\\segoeui.ttf and RAM usage dropped to 30mb. That was what the previous devlog was about. I then changed the default logic update rate from 10ms (100/s) to 65ms (15/s approx). This reduced idle cpu usage to under 0.2%. But, doing anything with the UI would spike it to 4%, which is still pretty bad. So, I used a method I found in an egui issue thread where I’d count the frametime since the last render, then sleep until the target frametime was finished. For example, if the frame rendered in 2ms but I want 16ms frametime, it would sleep for 14ms. That way, I could limit how often the UI rendered! This made it stay under around 1% CPU forever! Okay, Linux time! Rust is mostly cross-platform, so support was mostly dealing with dumbass design decisions. Since Music relies on GSMTC, I had to feature-gate the entire thing (as well as the windows/windows-future crates) behind cfg(windows) :( I also had to fix Linux font loading (since like I said earlier, it’s hardcoded to segoe ui). So I install fontdb on Linux and search for some popular fonts from there to load instead. Finally, I fixed up the storage paths since it could only load from AppData. I also made it use AppData\\Local vs. AppData\\Roaming instead of putting everything in Roaming. I first got it working through WSL! ! It took some messing with my GPU drivers but I got it to render. Now was the real challenge: getting it to build on an ACTUAL Linux machine. I had an old, basically broken Surface Pro 3 that I had put Debian+GNOME on for shits and giggles a few months ago. The perfect target! The main problem was getting Rocket League to even launch. I set up Legendary (goated launcher btw, check it out ) and tried to run it. I installed Wine, got Wine Mono, and it failed with a weird cryptic error about the CreateWindow function. The obvious solution to a graphical error: disable EAC. Yay, it launched! Then to get it to build. First I had to fix some filepaths since Linux is case-sensitive (nerds) while I don’t care about case on Windows. Then, rust-lld gave some weird error about simd or something which I didn’t care about. I just ran cargo clean and rebuilt it and it worked fine. Then to run, and it actually worked first try! It’s cool because I went into it expecting to debug a million socket errors, but it actuallly connected and ran. Awesome sauce! Now Linux users can use rlbuddy. More minions to contr- I mean cool users! Cya in the next one! ;) If you check out the rl perf overlay in the screenshot, you’ll be able to guess why this is the laptop I decided to put Linux on."}, {"post_id": 65417, "ts": "2026-09-10T15:25:20Z", "hours": 0.8867, "text": "I’ve been debugging high memory for the past month or so. It was egui_system_fonts. Why would fonts take 170mb of ram????????????????????????????????? help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I hate external dependencies!!!!!!!!!!!!!!!!!!!!11 I owe my life to DHAT now. go star https://github.com/nnethercote/dhat-rs"}, {"post_id": 65067, "ts": "2026-09-09T22:28:11Z", "hours": 1.5, "text": "More gamepad overlay buttons!!! Yay!!! In not-so-awesomely-exciting news, I also added a table of contents to the readme (as well as a generator for it). The script’s in Python (I’m sorry for not using Rust) meaning the repository is now 0.5% Python. Takeover incoming? I overcomplicated the script a lot, but it’s really easy to read. There are three whole comments, aka 6% of lines in the whole file! It’s not technically interesting in the slightest. I was thinking of building a tree-like structure before outputting the string, but realized I can just use the header level (h1 vs h2 vs h3 etc) as the amount of spaces / 2. I also refactored it not to use magic PanelId s for the default panel list. I kinda rushed that part when I made it, I’ll be honest. But now each Panel can implement fn open_by_default(&self) -> bool (returns false by default) and if it does it keeps it open when savedata doesn’t exist yet. I don’t get how an entire hour n 27 minutes was spent on like 7 not-even-that-big commits. At least it was a good use of my math class. We reviewed limits for some reason (which everyone should already know for one because they took the prereqs?), and the teacher managed to extend her lecture for the ENTIRE class time. rlbuddy development saving the day, I guess (just like it will in your rocket league games btw, so you should download it)"}, {"post_id": 64822, "ts": "2026-09-09T14:32:38Z", "hours": 1.4469, "text": "I’ve mostly been working on smaller features, improvements, and bugfixes. A cool one I did is fixing weird glitchy movement with the gamepad overlay window! Basically, the window needs to persist its position across disabling it/enabling it. And egui is immediate mode. So, every time it rendered the viewport, it would both set and get its position. So, moving it would update the current position, but because of the weird interop between setting the position in a ViewportBuilder and getting it from the viewport info, it would glitch back and forth, especially when my laptop is lagging. I fixed it by only calling the ViewportBuilder ‘s “ with_position ” method when the overlay had just been enabled ( !was_enabled && currently_enabled ). That way, it only sets it once externally, and lets it move freely while it’s open. Then, while it’s moving, it continues to update the saved position. And upon closing and then reopening it, it sets it again (but only once!) Relatively simple fix but it’s kind of funny. I mainly noticed it when I added a feature that would auto-unmaximize the overlay when the user maximizes it, and it would go crazy and fly around the screen. Very fun! I also fixed a pretty old bug where it would incorrectly detect the local player. Basically, the stats api doesn’t actually tell you who the local player is. So, we have to guess based on who the camera is targeting right now. Usually, it’s on the local player, but during goal replays or spectating a bot when joining a casual game, it would be improperly set at the start and then stay like that. So, I made sure that it always updated as long as the match is 1. in progress 2. not in a replay. It also fixes a thing with inconsistent match toasts, since the toasts only fire if the scoring player is the local player (and if it thinks the wrong player is the local player, everything’s messed up). I’m planning on revamping hotkeys next, to allow you to bind to any controller button and even do custom quickchats in-game. Later!"}, {"post_id": 63368, "ts": "2026-09-07T04:36:35Z", "hours": 1.4131, "text": "Time formatting doesn’t suck anymore! I made the implementation way better so I could make it support stuff even past weeks, like months and years. The new implementation added around 60 lines, but it’s for a good cause. The previous implementation used a match statement with duplicated logic that only supported seconds, minutes, and hours, using a pluralize function and inline if-statements everywhere. If it were sent to any rational code-reviewer, they would likely have a heart attack. Now it’s a bit more complex but less complicated. You have TimeUnit s which format the unit themselves and TimePart s which format a value + a unit. Then, just use some math to build a Vec and format it into a string. Boom! Beautiful, well-formed time formatting. To soak in the new beauty, I added days n weeks. I just had to add 14 lines! The previous one would have probably needed a bunch of stupid magic numbers and weird chains everywhere to accomplish the same thing. Okay, I’m done using your time on reading a way-too-long write-up about fixing a crappy implementation that shouldn’t have been there in the first place. I’m gonna ship right after posting this. If you get it, make sure to give it 10 stars in everything 😉. Haha, jk. Well, not really. Cya later."}, {"post_id": 62559, "ts": "2026-09-06T00:29:40Z", "hours": 1.8697, "text": "Had to remove the tracker.gg widget :( unfortunately they don’t allow scraping and what I had wasn’t allowed anyways. Things that used to open the player info widget now just open tracker in a browser."}, {"post_id": 60965, "ts": "2026-09-03T17:23:52Z", "hours": 2.9253, "text": "I finished the big refactor! I pushed around 25 commits to GitHub at once. I’m really gonna enjoy adding the next feature, basking in how much easier it is ;) Apparently, I never made a service for session stats, so it currently can’t persist its one setting. Actually, writing this I realized that the setting isn’t actually used, so I can delete it. That’s great. After finally kicking out all the annoying legacy panel code, I remembered that I never re-implemented the positioning or its related persistence code for the new panel system. The persistence system was reworked too, something that I don’t think really got included in the previous devlog. Each service can implement save , and there are generic helper methods in a common module for saving/loading serde structs to a file in the app data directory. The actual app now uses this method as well instead of doing all the pathing logic itself, so the persistence module is pretty small and could honestly be moved into app.rs. For new positioning, I store a list of open panels. Weirdly enough, it’s actually a lot easier than adding a position/is_open field to every AppPanel. So, I run the name through a Hasher to make a u64 which is easier to clone/copy and stuff and made a newtype around a PanelId. That way I could reuse the code from the previous paneling system to swap/manage open PanelIds, then just use find on the AppPanel vec to find the corresponding widget. Also, I never mentioned it but I’ve been trying RustRover for the past few devlogs. It’s a lot more stable than Zed, but I sorta miss its snappiness and minimalism. If I end up finding an annoying bug in RustRover, I’ll probably switch back. However, it’s been quite a few days and I don’t think I’ve found a single one. JetBrains is truly awesome at tooling. See ya next time. Probably will do my next ship soon :)"}, {"post_id": 60552, "ts": "2026-09-02T23:31:23Z", "hours": 3.3072, "text": "I’m MASSIVELY refactoring rlbuddy! This, I think is the second (and hopefully the final) major refactor to the codebase. So, basically the current architecture is split into services and widgets. Each service has an update method, which does its stuff (draining subscribers, processing commands, etc). Since egui is immediate mode, this architecture works unlike callbacks/event-based which I actually tried to implement but couldn’t. Every widget is just implements egui::Widget, that holds some state handles (Rc) and command senders (Sender), usually just one for its respective service. Services are alive for the lifetime of the app, while widgets are the openable panels you see. Widgets display the data from service state, and talk back to it by mutating shared state or sending commands. I think music control has been the best for me to wrap my head around to decide about changes, so I’ll explain it with that. Music control had a controller, a service, and a widget file. The controller was a thread pool manager (if you can call the questionable implementation that) around Windows’ GSMTC API to give a single-thread api for it (since the app is basically single-threaded). Then, the service is always alive, syncing a state struct between the controller and its own state handle. Finally, the widget is optionally there as a panel, with next/previous/pause buttons which send commands and the ui which reads service state to display. It also has a mutable service state reference for settings (the “pause during anthems” button). The god object RlbuddyApp struct stores all of this stuff. So it has a music_control_service, music_control_widget, stats_api_service, all of those fields, which kinda sucked. On top of that, I had to maintain an enum of every panel, which was enumerated for the “open panel” popup and to render each one if it’s open. you might think “hey… isn’t that a self referential struct? how does music_control_widget store a reference to music_control_service?” Well, music_control_widget internally only has fields for the music_control_service’s state handles which are Rc/Arcs. So it only needs a reference to the service for it’s Widget::new function lifetime, all is well. Although it doesn’t look horrible, it was HELL to do anything. For example, refactoring the gilrs service out of hotkey and adding the gamepad overlay probably involved just as much fiddling around with Rcs in RlbuddyApp as adding the actual feature. So, I decided to move to a new architecture: services + features! And, after thinking about it for around 8 hours (i slept), I decided on something a bit different. Services + panels! Yeah, basically the same as services + widgets, but I was gonna implement it GOOD this time, and make design decisions that wouldn’t bite me in the ass later on. I wrote my first traits - Service, which requires update and optionally save , and Panel , which requires name() -> &'static str and ui (same as egui::Widget: :ui). Then, I’d change how components are registered: instead of keeping every service and widget as a field in RlBuddyApp, I’d make a Vec<Box<dyn Service/Panel» for each, and loop through it. I spent about an hour trying to get Panels to automatically implement ui by requiring egui::Widget as a supertrait, which doesn’t work since widgets are stateful (need &self). So, I tried to require &mut Self to implement egui::Widget, but apparently something to do with type erasure doesn’t let that work with dynamic dispatch which was needed for the Vec<Box> thing. I’ve moved a few features to the new architecture, but I’m still in the process of finishing up. Additionally, it has to work side-by-side with existing crappy monster-Panel-enum architecture, which sucks to maintain. Okay, once again, I had to strip down a ton of detail (and my terrible wording but wtv) cause I hit like 5000 characters b4 realizing. See ya! May the Stardance gods increase devlog limits :)"}, {"post_id": 59926, "ts": "2026-09-01T23:19:29Z", "hours": 2.5164, "text": "rlbuddy has a gamepad overlay now so that you can show off your awesome bindings! Don’t even bother figuring out mine. It’s kinda starting to become hellish to add new widgets/services, but I’m almost done for the next ship so I doubt I’ll refactor just yet [edit: im doing a super refactor now hehe]. I made the overlay with the raw egui::Painter rather than actual controls (since it would be pretty hard to make a controller out of Buttons or something). I also prefer to avoid embedding static assets, otherwise I might have made an actual one in MS Paint or something. I also can’t seem to find a good egui version. I’ve been on 0.34 almost the whole time, which works well but doesn’t support transparency in extra viewports. But, 0.35/0.36 broke external viewports. So, until then, we get an opaque gamepad overlay :( but the main app is still transparent, so it’s not horrible. Rolled an 8 and a 9 on the Stardance rng today! I’m so proud of myself."}, {"post_id": 59228, "ts": "2026-08-31T21:59:04Z", "hours": 0.4561, "text": "I moved the mmr server to alpine linux! Before, it was regular raspberry pi os lite on the Pi. But, it was behaving strangely, randomly rebooting and things, so I decided to try installing Alpine. The lightweight distro has been on my radar for a while now, but this was my first time ever actually trying it. I imaged it normally with the raspberry pi imager, and put it on the pi, did setup-alpine, and all was well. But, I put in the wrong wifi password at first, which broke everything else. I tried changing the wifi config and doing something with wpa_supplicant (thanks google ai overview), but nothing fixed it so I ended up doing a fresh install. This time, I put in the right password and everything went great. I set up ssh, node, pm2, etc. and moved the server files onto the pi through sftp. Then, I got it running over my local network and set up authentication. So, it was time to set up the Cloudflare tunnel again. I followed this neat guide , changing values as needed (for example, my pi is aarch64, but the guide was x64, so I spent a while figuring out why the pi kept giving elf errors). It took a really long time to set up the openrc startup script because 1. cloudflare rotates the setup token relatively frequently and 2. I accidentally put 2 –token arguments. And since I was using vi, I didn’t even notice and kept trying to figure out why cloudflared crashed on startup. But I eventually found out and removed the duplicate and it worked! Then I finished setting up pm2 and put the pi in its home next to the router, and mmr.kmdw.dev is back up exposing your lobby’s skills. See you in the next one! Yes I know part of the token is in the image but it’s used already so it doesn’t matter"}, {"post_id": 56962, "ts": "2026-08-29T00:27:50Z", "hours": 9.075, "text": "rlbuddy can load custom maps now! Either you can download them and then import from a zip, or you can download them from bakkesplugins straight from the app! Importing it from a file is relatively easy. I checked the code for Lethamyr’s custom map loader to see what exactly it did, and for Lethamyr maps it: extracted the zip into a temp dir read info.json, .udk, and preview.jpg copied those into its own saved map directory I knew Rust, being a low-level language would let me not have to extract the zip fully first. Additionally, Bakkesplugins maps don’t contain info.json or preview.jpg, they only contain a udk file, so I had to make sure it would work with that. So, the import code I wrote basically: enumerates files in the zip extracts info.json (if found) into a struct copies *.upk into the target directory copies *.jpg into the target directory/preview.jpg if it exists It worked great. I made a really cool looking widget with stupid manual layouting behind it for map selection. First, it would add the preview image (or a black background if none). Then, it would get the screen rect of the image, and draw a semitransparent black background onto it (for contrast). Finally, it drew the actual contents in that screen rect. So, I got pretty-looking tiles with preview image backgrounds! I also added a progress bar for import status. I benchmarked each main part of the import process and found that decompressing/extracting the upk file took around 2 seconds, for which the ui thread would be totally frozen (big nono)! So, I moved the work onto another thread, and also made it decompress/load in 100 total chunks, updating a progress bar each time. I then moved on to the map downloader. Bakkesplugins doesn’t have an API, so it relies on scraping the website. I didn’t actually use any external crates for gathering information, though. I wrote a parser which takes a list of rules, each with a start and end search string, and looks for each of them in sequence till it fails to find a rule. I tried to make it completely zero-copy, but something it needed was to turn an [Option; N] into a Option<[T; N]> if every element was Some , but the only way I could figure out how to do that was with an iterator. It’s still really fast though. So, it parses search results, including map titles and urls straight out of the html string without needing an HTML parser or regex library. Once it was able to load results from the search page, I went to sleep and came back today. Now I had to get it to actually download the ZIP files and preview images, and import them straight into the app. It first has to download/parse the plugin info page since the ZIP url isn’t available in the search results. Then, it requests the ZIP. I had some trouble with this, since I wanted to show a progress bar for the download status. I first tried a function from this gist , but it didn’t work. So, I made my own which used the same chunking strategy as the import status loader. Turns out, ureq blocks requests once they hit 10MB by default, which was probably why the gist version didn’t work. But, mine was faster anyways, so I kept it. It’s even cooler since I made it myself. Then, I wired up a couple more commands to let it import straight from archive bytes instead of from a file path, and it finally loaded! Once that worked, I made it pass along the map title, author, and description as well. Then, I extended it to parse out the thumbnail image url and download that, then pass that along to the importer as well. Anyways, that was super fun. I would add a lot more detail, but Stardance limits devlogs to 4000 characters and I’m approaching scarily close to that. I’m planning on just polishing the downloader interface a bit more, and then I’ll do some bugfixes for the next release. See ya!"}, {"post_id": 55430, "ts": "2026-08-27T08:04:57Z", "hours": 3.0236, "text": "rlbuddy now can show people’s avatars cross-platform! It uses a web api I put on Cloudflare Workers which uses platform-specific requests to get avatar urls (see the previous devlog), which the app just fetches and renders. The http part was pretty easy, since I already have wrappers for cached HTTP apis, so I just had to define types for that and hook it up. But, once it was time to display, I ran into a weird problem where egui said there was no image loader installed for jpegs! Even using all_loaders + default didn’t work. Turns out, I have to actually include image as a separate crate and enable all the filetype features I want in there. Once I got it to load, it was time to mess with styling again. egui is really annoying with images, so I spent a while trying to get them to size right first. The default avatar used while they’re loading or for Epic/Switch players is from Fandom, like the rank icons. However, even though the icon is 90x90 pixels, the webp is 128x128 pixels, it just has a bunch of transparent padding. So, I initially messed with egui to do some weird ui allocation and calculation to get it to render right. But, turns out I didn’t have to do all of that. All I had to do was allocate a 28x28 space (the target size), scale that up by the 128/90 ratio, then paint the image onto the new size. Worked great. Then, I got to fight with grid layouts again. For some reason, wrapping the avatar and player details in a horizontal totally exploded all the layouting. So, I ended up making avatar and details separate columns. But, since the “player” header text is a bit larger than the icon width, there was too much padding between the avatar and the player details. So, I did more messing around with egui manual layouting, and ended up allocating a 24x(body text height + 2) space for the header, which would give it the default spacing. Then, I’d copy the Rect, shift the left bound over by 12 pixels, then paint the header onto there. That way, the header is left aligned with the avatar and the avatar + details look like they’re in the same column, even though it’s actually a bunch of stupid manual layout magic behind the scenes."}, {"post_id": 55160, "ts": "2026-08-26T17:10:01Z", "hours": 2.6972, "text": "Made an avatars api for Steam, PSN, and Xbox (Epic doesn’t support profile pictures and I have no clue what goes on in Nintendo-land, even Tracker doesn’t show theirs). It’s on Cloudflare Workers instead of my pi since it’s basically just api integration. I totally overcomplicated finding out how to get Steam profile pictures. Like, it’s insane how easy it actually is. A few weeks ago, I got an old version of Steam Rocket League and decompiled it, trying to look for where it fetched avatars from. After some experimentation and debugging, I learned that when Psyonix builds Rocket League, they give it something that implements OnlineSubsystem for whatever the target platform is. So, Steam gets the Steamworks OnlineSubsystem, Epic gets the EOSOnlineSubsystem, and so forth. And the game doesn’t need to know implementation details, just that it implements OnlineSubsystem, I think the term for that is dynamic dispatch in programming languages. Anyways, once I learned that Rocket League doesn’t do any avatar handling itself, I looked at the Steamworks SDK. Basically, it routes the avatar request through the open Steam client. So after some experimentation, I got it to fetch profile pictures with C++ and the Spacewars test game. But, that obviously wouldn’t work on a server, since the Steam client can’t really run on a Worker. So, I tried to use the Steam Web API. I got an API key, but when I tried, it said I was forbidden. According to the documentation, the GetPlayerSummaries endpoint was at partner.steam-api.com, which was only for publishers. About a week later, so yesterday, I had the genius idea to use api.steampowered.com (the public API domain) instead of partner.steam-api.com. Just swapping them out. And it worked. So, I now had a way to get Steam avatar urls. Xbox and PSN were actually really easy. Xbox has an undocumented API at https://peoplehub-public.xboxlive.com/people/gt(GAMERTAG) which returns json containing the avatar uri, and I used the psn-api package with a new PlayStation account to get PSN profile pictures. Then, I just put all of them in a Worker. So, rlbuddy will be able to show avatars soon enough!"}, {"post_id": 54013, "ts": "2026-08-24T19:11:04Z", "hours": 4.6756, "text": "Recently I was going through game archives and came across the BepInEx tool, which is basically a code injection framework for Unity games. I was really curious as to how it actually launched when the game launched, and found that they use a tool called Unity Doorstop, which adds winhttp.dll to the game’s binary directory. So, when the game tries to use things from winhttp, it goes to the new winhttp.dll instead of the system32 winhttp.dll. From there, the custom dll just forwards all the function calls. However, the custom dll is modified so that on its first interaction, it launches whatever Doorstop is configured to launch, and the mods can be loaded. That’s at least as far as I understood, but it made sense, and I thought, “what if I could launch rlbuddy automatically like this?” So, first, I tried to test it with a custom executable and library. I created a basic executable and DLL in C, and got the executable to load and run some code from the DLL. Then, I created another DLL, and got it to “impersonate” the original DLL. So, I’d rename the first dll to something like “mylibrary_original.dll”, rename the faker dll to “mylibrary.dll”, and the original executable would call the original, but it goes through the faker instead. And it worked! I had successfully created an actual doorstop-like faker. Now it was time to actually try this on Rocket League. So, I did a dumpbin /import on RocketLeague.exe, and found a few good targets - IPHLPAPI.dll, a system dll for networking stuff, and xinput1_3.dll, one shipped with the game for talking to controllers. RocketLeague.exe only imported two functions from each of them, meaning my fake interface wouldn’t have to be too big. So, first I tried to spoof IPHLPAPI.dll. The code was pretty simple, just a couple of global objects to hold the function. So, when the game loaded the DLL, it loaded the fake DLL. Then, when it tried to call some function in the DLL, such as GetAdaptersAddresses, the fake DLL would be the actual receiver, it would log something to a file, and then it would call the REAL GetAdaptersAddresses by dynamically loading the system IPHLPAPI.dll and return it. And… it worked! I opened Rocket League and the log file was created and had the log “GetAdaptersAddresses called!” Then, I launched it with anticheat enabled, and EAC immediately shut it down. I guess that was to be expected, but it was pretty annoying. So, I decided to try one more time, this time with xinput1_3.dll. This was more interesting because it was lazy loaded, and functions were imported by ordinals (2 = XInputGetState, 3 = XInputSetState), so I thought something might be different. So, I modified the original faker to be xinput1_3, replacing the function names and definitions. Since Rocket League imported them by ordinal instead of just the function name, I had to create a .def file as well, and define the ordinals there. Then, I did the same surgery on the binary folder, and after a few small mistake fixes, it worked! But, I still hadn’t tried with EAC enabled. So I launched it with anticheat, and it gave me a different error this time - that it couldn’t determine xinput1_3.dll’s file version. That was a different error! I opened the original xinput1_3.dll’s file properties, and it had copyright, file version, product version, and a couple other random things that were missing in my faker DLL. So I made a .rc file and compiled it together with the faker DLL. Then, most of the properties matched up. So, I tried it, and it seemingly worked! And then EAC said that it couldn’t verify the file again. In the end, I didn’t manage to get it working. I should’ve expected EAC to block me from the beginning, but it was pretty fun, and if I ever want to do something similar with a game without anti-cheat, I can do that now! rlbuddy is pretty closed to being released though, I just want to polish a few things and make sure the docs are fleshed out."}, {"post_id": 51407, "ts": "2026-08-21T02:54:11Z", "hours": 1.5947, "text": "rlbuddy doesn’t use the default eframe persistence feature for savedata anymore, which is pretty cool. There were a few reasons for this: It was kind of unnecessary, since eframe uses ron and it was storing a bunch of extra widget data which didn’t really fit with the app model anyway It took up extra dependencies (removing the feature shaved off like 10) There’s a bug where if the app crashed, it would erase all savedata, which, as you can imagine, was quite annoying especially since I actually use the app along with developing it, meaning if the app crashed in development it would delete all my actual match data. It’s easier to externally modify, so if in development I want to mess with some values it’s a lot easier. Anyways, actually getting the data directory was pretty interesting. I’ve basically decided to only support Windows, since the music player relies on Windows APIs anyways and I don’t think the Stats API even works on Linux. Initially, I checked out the source code for the dirs and directories crates, which led me to the dirs-sys crate (which actually isn’t even on crates.io). It used unsafe raw Win32 SHGetKnownFolderPath with the Roaming folder guid. However, since I was already using the windows-rs crate, I tried to find the WinRT equivalent. I ended up enabling the Storage_Search feature to use the API which would let me get it. Of course, this also didn’t work, because of something to do with how Windows apps are supposed to be registered. So, I ended up just grabbing the APPDATA environment variable and using that, then joining rlbuddy\\data.json to it. It’s pretty underwhelming, but it more than gets the job done. Now, whenever the app panics, I won’t lose all of my settings anymore! Pretty nice. Anyways, that’s what mainly got accomplished. I also tried to set up a GitHub Action to build it and make a release, but I kept hitting errors so I gave up and decided to upload a release next time I get the urge to actually update the GitHub repository. There’s also a few fixes, like the window title which has actually had a typo since refactors from around a month ago, and adding a missing ! which broke toasts when in training. Overall, only an hour or so was tracked, but a heck of a lot got done. See you all next time!"}, {"post_id": 49990, "ts": "2026-08-19T00:44:44Z", "hours": 1.4564, "text": "I added a small toast notification that activates when you score in training, like bakkesmod used to add it to text chat. It also activates when you hit the crossbar so you can feel even more remorseful that your beautiful musty didn’t go in :) I actually got the program to segfault while making it. egui’s external viewport api is kinda funky… there are two modes, immediate and deferred, and immediate is supposed to be easier to use. However, when I tried to use immediate mode, it panicked saying that the egui backend was implemented incorrectly. So I switched to deferred, and it gave me the segfault. There were 3 things I had to do: I stored all active toasts in a Vec, and render them in the external viewport every frame. When one should disappear, it uses Vec::retain to remove old ones. However, this doesn’t do any cleanup, meaning the viewport would go bonkers and crash the application. So, I had to close the viewport first. Calling ui.ctx() from the viewport made a segfault, probably my fault but I couldn’t figure out how to resolve it so I ended up just sending Viewport::Close from the main loop. Even if I sent Viewport::Close from the main loop, it still gave the weird error. So, I resolved it by adding a small delay from after it should close, which is when it sends the Viewport::Close command, and when it’s actually removed from the Vec of toasts. Well, I did all that, and it was working, but there was a really weird bug where it would lag the whole system while opening/closing. So, I switched from immediate to deferred viewport mode, and it stopped happening! I hit my first powerful airdribble musty with it on, it was around 105kph, and a total fluke. I wish I had gotten it on recording."}, {"post_id": 49200, "ts": "2026-08-17T21:06:45Z", "hours": 9.2278, "text": "I replaced the Spotify integration with a generic one that uses the Windows GSMTC api, meaning it’s way snappier, since it’s not making network requests every time it wants new data! The only reason it needs data is to fetch playback info, and it’s easy to do that since the windows crate gives a bunch of event listeners, meaning I also don’t need to poll anymore. Unfortunately, the integration from browsers etc. is kind of buggy so thumbnail loading is relatively inconsistent, but by adding some caching and timeouts it works flawlessly :) I also redid the UI since the old one was frankly quite ugly. Since the playback listener doesn’t update that frequently for progressbar changes, I also made it fake progress when music is playing and the ui updates, that way even if the latest data is stale, it still looks like the progress bar is moving. I’m now working on better session stats, I’ll probably end up replacing the all-time stat tracker with more in-depth session-only ones"}, {"post_id": 46652, "ts": "2026-08-14T02:03:01Z", "hours": 4.1664, "text": "rlbuddy finally has an MMR graph! I’m planning on adding more stat displays soon, like W/L, goals for/against, saves, etc. but this is a really big milestone since it’s a feature that a lot of players actually use (I basically only play casual so it’s not really for me 😅). Anyways, this also required me to rearchitect how matches are stored, and now there are two representations: a session match, which contains lots of information about it like detailed player skill information, and a stripped match, which is minimal and stores very little because it actually gets saved to disk! So, match history also gets saved now! This also opens up the doorway to a Deja-Vu-like thing which tells you if you’ve played with someone before and when! It uses the egui_plot library to show the graph. Funnily enough, basically every default option for a displayed plot was the opposite for this, and so the plot builder ended up using almost every method. Also, once again, hackatime is wrong because Zed likes to uninstall extensions randomly :("}, {"post_id": 42417, "ts": "2026-08-07T03:32:05Z", "hours": 2.1161, "text": "The Stats API finally provides the actual playlist id, so rlbuddy isn’t limited to guessing between 1v1/2v2/3v3/4v4 anymore! This brings in some cool extra features like displaying the rank each player is in for the given playlist as well as even better Discord presence! I looked through BakkesMod as well as some psynet endpoints to grab the list of playlist ids to associate with each actual playlist. There isn’t really an image to go with this, so here’s the monster enum of playlists :)"}, {"post_id": 40468, "ts": "2026-08-04T00:47:59Z", "hours": 2.2011, "text": "I rewrote the API admin page with Svelte! Before, it was a quick-and-dirty raw html/css/js solution, but now it should be a lot less annoying to work on. I improved authorization a lot, now instead of adding the pw query parameter for every request you put in a password once and it actually uses the Authorization header. Unfortunately, the browser EventSource doesn’t support headers except for in cookies, meaning I had to use the custom eventsource library for bootstrapping since the bootstrap API uses SSE. There’s basically a whole Vite project in src/webadmin, with its own tsconfig.json and everything. Because of the way it’s set up, development needs Vite running in build watch mode which builds to where the main app serves it out of. It makes deployment a lot easier, though. I didn’t really add any actual features to it, except for a log filter. However, it should be way easier to add more features in the future, like a api tester!"}, {"post_id": 38450, "ts": "2026-07-31T20:22:49Z", "hours": 6.755, "text": "rlbuddy has player lookup now, so you can check for smurfs without needing to boot up a heavy browser while playing. Unfortunately, this has to get its information from TRN because it’s the only source of this information, the rocket league apis don’t provide it. There’s some cool refactors behind the scenes, though. I generalized almost all HTTP requests into its own struct, so it removed like 200 lines of boilerplate code into a single generic module. It automatically handles caching, using new threads, ignoring if there’s already an inflight request, loading states, and automatic serde_json deserialization. The Epic id, uncensorer, ranks, and new TRN apis all use it now! Also, the button to open in TRN from the player list opens the player info dialog instead (though if you need to, you can open in TRN from there)."}, {"post_id": 34762, "ts": "2026-07-25T19:02:58Z", "hours": 1.9536, "text": "Note: I’ve actually had way more hours than it says, but I reinstalled windows and forgot to set up hackatime again so all that’s gone :( mmr-api-v2 finally has an admin page, so I don’t have to ssh into my pi just to check some debug information anymore! It is kind of developer-oriented but I think it looks and works well enough for what it is for. In the actual rlbuddy app, there are some cool new features! Facilitated by lots of refactors, of course (turns out, the matches service was bigger than the actual rocket league service, so I finally separated them). Spotify integration now has a previous button as well as a skip-to-song-in-current-playlist button. Match history was a feature that I’ve kind of ignored, so I gave it a much needed touch-up so its easier to view and browse. A pretty cool thing is that that’s been added a rocket-league-playerid-to-epic-games-id translation endpoint. This means that you can see Switch players’ TRN profiles through their linked Epic account, since TRN doesn’t let you check based on Switch name alone. Finally, there are some small quality of life improvements, like less deadlocks, better anthem pausing, and the open panel list persisting."}, {"post_id": 30390, "ts": "2026-07-17T21:27:26Z", "hours": 3.8292, "text": "Turns out, for spotify integration, I can’t actually let other people use my spotify development mode app. It’s limited to 5 users which I have to invite by email. And to get a quota extension, I need 250,000 existing monthy active users, which I’m slightly short of (by about 249,999). So, I changed the login flow so that each user has to make their own Spotify app, and log in using the client ID from there. I didn’t change the current PKCE flow since that didn’t really need to be changed, but setup unfortunately takes a little more work now. Also, it has transparency now."}, {"post_id": 28659, "ts": "2026-07-15T01:29:51Z", "hours": 13.4597, "text": "It’s been a week since the last devlog, and lots has changed! 1. new architecture! The code was getting pretty messy since I had kept adding new features without really doing major refactors. So, I finally took it upon myself to actually organize everything and come up with a proper architecture. Each feature has its own module, containing services and widgets. Services have all the state, for example the Spotify service stores the current song and settings and the Rocket League module exposes a Matches service for the current match and past matches, which the match and past match widgets actually show. Services all have update functions which get called every 10ms. There are two ways for services to talk to the rest of the app: events and state. State is straightforward, it’s usually just an Rc with a custom generic struct I made to manage whether the widget can read/write to it. Events are enums which the update method returns, and can get passed to other update methods. For example, the Stats API service doesn’t have its own widget, it only connects to the stats api and returns match events which other features can use, like Spotify using replay start/end events to play/pause music. 2. new ui! The dashboard part isn’t as ugly as it was before, and has actual cards for every panel instead of just having horizontal lines in between. Even though it sounds pretty small, it’s actually huge for the prettiness of the app! Along with this, the behaviour of managing panels also changed. There’s an actual close button, and instead of having one button per panel at the bottom, there’s a small picker to open/close them. Also, you can also move them up and down now 3. Automatic stats api setup This is a pretty small feature. It lets you select the path to the rocket league executable, detects whether it’s already enabled, and turns it on if it’s disabled. It does this by just replacing a line in the stats api configuration. 4. mmr api v2 doesnt explode There were a few bugs which would make the API disconnect randomly, but they’ve been ironed out. This also made it so the app doesn’t have to deal with failure behaviour and can just keep asking until the API responds."}, {"post_id": 23975, "ts": "2026-07-07T06:51:05Z", "hours": 8.1119, "text": "rlbuddy now has a little bit of Spotify support! Although it looks like a just few elements and a button, theres a lot going on behind the scenes. I’m not embedding an entire webview to run the web playback SDK this time, so it just uses the Web API to keep resource usage nice and low. Since it’s a native app, it has to jump through some hurdles to authorize, using the PKCE extension version since the client secret can’t be stored securely. It uses the webbrowser crate to open the Spotify auth page, and starts a tiny little oneshot HTTP server on a raw TCPListener. The redirect is set to the HTTP server, and then as soon as it receives the request, it sends a simple HTML page and continues. From there, it receives the authorization code and can continue as normal :) Other than that, it’s just normal REST api interaction. I did learn a ton about thread safety (I hit so many deadlocks), because unlike the stats api, for example, which just sits in a different thread and hurls events over a channel, it actually has to work with the user. It’s also able to pause during goal replays, and that was pretty annoying to structure. Eventually, I decided to just use a channel where the stats api could send replay start/end events through the match widget. Looking back on it, the solution was extremely simple 😅 I am planning to add a bit more, like shuffle/repeat controls as well as a previous track button, but this feature turned out pretty nicely!"}, {"post_id": 22551, "ts": "2026-07-05T02:19:55Z", "hours": 3.7678, "text": "rlbuddy can now show Rich Presence in Discord, so now all your friends can see you destroying your opponents ;)"}, {"post_id": 21165, "ts": "2026-07-02T23:37:22Z", "hours": 12.7792, "text": "rlbuddy has had major ui overhauls to shift it more towards an actual overlay rather than just an app that displays ranks. there are new features like a settings menu as well as major architectural overhauls, with more coming soon!"}, {"post_id": 16053, "ts": "2026-06-26T02:45:17Z", "hours": 2.3483, "text": "Got it working as an actual overlay!! Right now it just displays ranks, though"}, {"post_id": 15855, "ts": "2026-06-25T19:39:34Z", "hours": 30.4556, "text": "I got a stable MMR/ranks api working!! https://github.com/Kalilamodow/mmr-api-v2 Basically, it’s an http server that opens a websocket to the actual rocket league game api in the background and spoofs a real client connection. The socket only stays active for 5 seconds at a time though so I don’t kill psyonix’s servers. That way, rlbuddy can get ranks without getting blocked by tracker network! I originally tried to do it on Cloudflare, but the workers outbound websocket didn’t work since you can’t send custom headers with them. I ended up having to use my old raspberry pi and set up a homeserver behind Cloudflare tunnels, and I’m actually planning on moving the rest of my stuff that used to be on a VPS onto the pi."}]...
|
Title: rlbuddy by @kmdw | Stardance
Devlogs:
I go Title: rlbuddy by @kmdw | Stardance
Devlogs:
I got a stable MMR/ranks api working!! https://github.com/Kalilamodow/mmr-api-v2 Basically, it’s an http server that opens a websocket to the actual rocket league game api in the background and spoofs a real client connection. The socket only stays active for 5 seconds at a time though so I don’t kill psyonix’s servers. That way, rlbuddy can get ranks without getting blocked by tracker network! I originally tried to do it on Cloudflare, but the workers outbound websocket didn’t work since you can’t send custom headers with them. I ended up having to use my old raspberry pi and set up a homeserver behind Cloudflare tunnels, and I’m actually planning on moving the rest of my stuff that used to be on a VPS onto the pi.
Got it working as an actual overlay!! Right now it just displays ranks, though
rlbuddy has had major ui overhauls to shift it more towards an actual overlay rather than just an app that displays ranks. there are new features like a settings menu as well as major architectural overhauls, with more coming soon!
rlbuddy can now show Rich Presence in Discord, so now all your friends can see you destroying your opponents ;)
rlbuddy now has a little bit of Spotify support! Although it looks like a just few elements and a button, theres a lot going on behind the scenes. I’m not embedding an entire webview to run the web playback SDK this time, so it just uses the Web API to keep resource usage nice and low. Since it’s a native app, it has to jump through some hurdles to authorize, using the PKCE extension version since the client secret can’t be stored securely. It uses the webbrowser crate to open the Spotify auth page, and starts a tiny little oneshot HTTP server on a raw TCPListener. The redirect is set to the HTTP server, and then as soon as it receives the request, it sends a simple HTML page and continues. From there, it receives the authorization code and can continue as normal :) Other than that, it’s just normal REST api interaction. I did learn a ton about thread safety (I hit so many deadlocks), because unlike the stats api, for example, which just sits in a different thread and hurls events over a channel, it actually has to work with the user. It’s also able to pause during goal replays, and that was pretty annoying to structure. Eventually, I decided to just use a channel where the stats api could send replay start/end events through the match widget. Looking back on it, the solution was extremely simple 😅 I am planning to add a bit more, like shuffle/repeat controls as well as a previous track button, but this feature turned out pretty nicely!
It’s been a week since the last devlog, and lots has changed! 1. new architecture! The code was getting pretty messy since I had kept adding new features without really doing major refactors. So, I finally took it upon myself to actually organize everything and come up with a proper architecture. Each feature has its own module, containing services and widgets. Services have all the state, for example the Spotify service stores the current song and settings and the Rocket League module exposes a Matches service for the current match and past matches, which the match and past match widgets actually show. Services all have update functions which get called every 10ms. There are two ways for services to talk to the rest of the app: events and state. State is straightforward, it’s usually just an Rc with a custom generic struct I made to manage whether the widget can read/write to it. Events are enums which the update method returns, and can get passed to other update methods. For example, the Stats API service doesn’t have its own widget, it only connects to the stats api and returns match events which other features can use, like Spotify using replay start/end events to play/pause music. 2. new ui! The dashboard part isn’t as ugly as it was before, and has actual cards for every panel instead of just having horizontal lines in between. Even though it sounds pretty small, it’s actually huge for the prettiness of the app! Along with this, the behaviour of managing panels also changed. There’s an actual close button, and instead of having one button per panel at the bottom, there’s a small picker to open/close them. Also, you can also move them up and down now 3. Automatic stats api setup This is a pretty small feature. It lets you select the path to the rocket league executable, detects whether it’s already enabled, and turns it on if it’s disabled. It does this by just replacing a line in the stats api configuration. 4. mmr api v2 doesnt explode There were a few bugs which would make the API disconnect randomly, but they’ve been ironed out. This also made it so the app doesn’t have to deal with failure behaviour and can just keep asking until the API responds.
Turns out, for spotify integration, I can’t actually let other people use my spotify development mode app. It’s limited to 5 users which I have to invite by email. And to get a quota extension, I need 250,000 existing monthy active users, which I’m slightly short of (by about 249,999). So, I changed the login flow so that each user has to make their own Spotify app, and log in using the client ID from there. I didn’t change the current PKCE flow since that didn’t really need to be changed, but setup unfortunately takes a little more work now. Also, it has transparency now.
Note: I’ve actually had way more hours than it says, but I reinstalled windows and forgot to set up hackatime again so all that’s gone :( mmr-api-v2 finally has an admin page, so I don’t have to ssh into my pi just to check some debug information anymore! It is kind of developer-oriented but I think it looks and works well enough for what it is for. In the actual rlbuddy app, there are some cool new features! Facilitated by lots of refactors, of course (turns out, the matches service was bigger than the actual rocket league service, so I finally separated them). Spotify integration now has a previous button as well as a skip-to-song-in-current-playlist button. Match history was a feature that I’ve kind of ignored, so I gave it a much needed touch-up so its easier to view and browse. A pretty cool thing is that that’s been added a rocket-league-playerid-to-epic-games-id translation endpoint. This means that you can see Switch players’ TRN profiles through their linked Epic account, since TRN doesn’t let you check based on Switch name alone. Finally, there are some small quality of life improvements, like less deadlocks, better anthem pausing, and the open panel list persisting.
rlbuddy has player lookup now, so you can check for smurfs without needing to boot up a heavy browser while playing. Unfortunately, this has to get its information from TRN because it’s the only source of this information, the rocket league apis don’t provide it. There’s some cool refactors behind the scenes, though. I generalized almost all HTTP requests into its own struct, so it removed like 200 lines of boilerplate code into a single generic module. It automatically handles caching, using new threads, ignoring if there’s already an inflight request, loading states, and automatic serde_json deserialization. The Epic id, uncensorer, ranks, and new TRN apis all use it now! Also, the button to open in TRN from the player list opens the player info dialog instead (though if you need to, you can open in TRN from there).
I rewrote the API admin page with Svelte! Before, it was a quick-and-dirty raw html/css/js solution, but now it should be a lot less annoying to work on. I improved authorization a lot, now instead of adding the pw query parameter for every request you put in a password once and it actually uses the Authorization header. Unfortunately, the browser EventSource doesn’t support headers except for in cookies, meaning I had to use the custom eventsource library for bootstrapping since the bootstrap API uses SSE. There’s basically a whole Vite project in src/webadmin, with its own tsconfig.json and everything. Because of the way it’s set up, development needs Vite running in build watch mode which builds to where the main app serves it out of. It makes deployment a lot easier, though. I didn’t really add any actual features to it, except for a log filter. However, it should be way easier to add more features in the future, like a api tester!
The Stats API finally provides the actual playlist id, so rlbuddy isn’t limited to guessing between 1v1/2v2/3v3/4v4 anymore! This brings in some cool extra features like displaying the rank each player is in for the given playlist as well as even better Discord presence! I looked through BakkesMod as well as some psynet endpoints to grab the list of playlist ids to associate with each actual playlist. There isn’t really an image to go with this, so here’s the monster enum of playlists :)
rlbuddy finally has an MMR graph! I’m planning on adding more stat displays soon, like W/L, goals for/against, saves, etc. but this is a really big milestone since it’s a feature that a lot of players actually use (I basically only play casual so it’s not really for me 😅). Anyways, this also required me to rearchitect how matches are stored, and now there are two representations: a session match, which contains lots of information about it like detailed player skill information, and a stripped match, which is minimal and stores very little because it actually gets saved to disk! So, match history also gets saved now! This also opens up the doorway to a Deja-Vu-like thing which tells you if you’ve played with someone before and when! It uses the egui_plot library to show the graph. Funnily enough, basically every default option for a displayed plot was the opposite for this, and so the plot builder ended up using almost every method. Also, once again, hackatime is wrong because Zed likes to uninstall extensions randomly :(
I replaced the Spotify integration with a generic one that uses the Windows GSMTC api, meaning it’s way snappier, since it’s not making network requests every time it wants new data! The only reason it needs data is to fetch playback info, and it’s easy to do that since the windows crate gives a bunch of event listeners, meaning I also don’t need to poll anymore. Unfortunately, the integration from browsers etc. is kind of buggy so thumbnail loading is relatively inconsistent, but by adding some caching and timeouts it works flawlessly :) I also redid the UI since the old one was frankly quite ugly. Since the playback listener doesn’t update that frequently for progressbar changes, I also made it fake progress when music is playing and the ui updates, that way even if the latest data is stale, it still looks like the progress bar is moving. I’m now working on better session stats, I’ll probably end up replacing the all-time stat tracker with more in-depth session-only ones
I added a small toast notification that activates when you score in training, like bakkesmod used to add it to text chat. It also activates when you hit the crossbar so you can feel even more remorseful that your beautiful musty didn’t go in :) I actually got the program to segfault while making it. egui’s external viewport api is kinda funky… there are two modes, immediate and deferred, and immediate is supposed to be easier to use. However, when I tried to use immediate mode, it panicked saying that the egui backend was implemented incorrectly. So I switched to deferred, and it gave me the segfault. There were 3 things I had to do: I stored all active toasts in a Vec, and render them in the external viewport every frame. When one should disappear, it uses Vec::retain to remove old ones. However, this doesn’t do any cleanup, meaning the viewport would go bonkers and crash the application. So, I had to close the viewport first. Calling ui.ctx() from the viewport made a segfault, probably my fault but I couldn’t figure out how to resolve it so I ended up just sending Viewport::Close from the main loop. Even if I sent Viewport::Close from the main loop, it still gave the weird error. So, I resolved it by adding a small delay from after it should close, which is when it sends the Viewport::Close command, and when it’s actually removed from the Vec of toasts. Well, I did all that, and it was working, but there was a really weird bug where it would lag the whole system while opening/closing. So, I switched from immediate to deferred viewport mode, and it stopped happening! I hit my first powerful airdribble musty with it on, it was around 105kph, and a total fluke. I wish I had gotten it on recording.
rlbuddy doesn’t use the default eframe persistence feature for savedata anymore, which is pretty cool. There were a few reasons for this: It was kind of unnecessary, since eframe uses ron and it was storing a bunch of extra widget data which didn’t really fit with the app model anyway It took up extra dependencies (removing the feature shaved off like 10) There’s a bug where if the app crashed, it would erase all savedata, which, as you can imagine, was quite annoying especially since I actually use the app along with developing it, meaning if the app crashed in development it would delete all my actual match data. It’s easier to externally modify, so if in development I want to mess with some values it’s a lot easier. Anyways, actually getting the data directory was pretty interesting. I’ve basically decided to only support Windows, since the music player relies on Windows APIs anyways and I don’t think the Stats API even works on Linux. Initially, I checked out the source code for the dirs and directories crates, which led me to the dirs-sys crate (which actually isn’t even on crates.io). It used unsafe raw Win32 SHGetKnownFolderPath with the Roaming folder guid. However, since I was already using the windows-rs crate, I tried to find the WinRT equivalent. I ended up enabling the Storage_Search feature to use the API which would let me get it. Of course, this also didn’t work, because of something to do with how Windows apps are supposed to be registered. So, I ended up just grabbing the APPDATA environment variable and using that, then joining rlbuddy\data.json to it. It’s pretty underwhelming, but it more than gets the job done. Now, whenever the app panics, I won’t lose all of my settings anymore! Pretty nice. Anyways, that’s what mainly got accomplished. I also tried to set up a GitHub Action to build it and make a release, but I kept hitting errors so I gave up and decided to upload a release next time I get the urge to actually update the GitHub repository. There’s also a few fixes, like the window title which has actually had a typo since refactors from around a month ago, and adding a missing ! which broke toasts when in training. Overall, only an hour or so was tracked, but a heck of a lot got done. See you all next time!
Recently I was going through game archives and came across the BepInEx tool, which is basically a code injection framework for Unity games. I was really curious as to how it actually launched when the game launched, and found that they use a tool called Unity Doorstop, which adds winhttp.dll to the game’s binary directory. So, when the game tries to use things from winhttp, it goes to the new winhttp.dll instead of the system32 winhttp.dll. From there, the custom dll just forwards all the function calls. However, the custom dll is modified so that on its first interaction, it launches whatever Doorstop is configured to launch, and the mods can be loaded. That’s at least as far as I understood, but it made sense, and I thought, “what if I could launch rlbuddy automatically like this?” So, first, I tried to test it with a custom executable and library. I created a basic executable and DLL in C, and got the executable to load and run some code from the DLL. Then, I created another DLL, and got it to “impersonate” the original DLL. So, I’d rename the first dll to something like “mylibrary_original.dll”, rename the faker dll to “mylibrary.dll”, and the original executable would call the original, but it goes through the faker instead. And it worked! I had successfully created an actual doorstop-like faker. Now it was time to actually try this on Rocket League. So, I did a dumpbin /import on RocketLeague.exe, and found a few good targets - IPHLPAPI.dll, a system dll for networking stuff, and xinput1_3.dll, one shipped with the game for talking to controllers. RocketLeague.exe only imported two functions from each of them, meaning my fake interface wouldn’t have to be too big. So, first I tried to spoof IPHLPAPI.dll. The code was pretty simple, just a couple of global objects to hold the function. So, when the game loaded the DLL, it loaded the fake DLL. Then, when it tried to call some function in the DLL, such as GetAdaptersAddresses, the fake DLL would be the actual receiver, it would log something to a file, and then it would call the REAL GetAdaptersAddresses by dynamically loading the system IPHLPAPI.dll and return it. And… it worked! I opened Rocket League and the log file was created and had the log “GetAdaptersAddresses called!” Then, I launched it with anticheat enabled, and EAC immediately shut it down. I guess that was to be expected, but it was pretty annoying. So, I decided to try one more time, this time with xinput1_3.dll. This was more interesting because it was lazy loaded, and functions were imported by ordinals (2 = XInputGetState, 3 = XInputSetState), so I thought something might be different. So, I modified the original faker to be xinput1_3, replacing the function names and definitions. Since Rocket League imported them by ordinal instead of just the function name, I had to create a .def file as well, and define the ordinals there. Then, I did the same surgery on the binary folder, and after a few small mistake fixes, it worked! But, I still hadn’t tried with EAC enabled. So I launched it with anticheat, and it gave me a different error this time - that it couldn’t determine xinput1_3.dll’s file version. That was a different error! I opened the original xinput1_3.dll’s file properties, and it had copyright, file version, product version, and a couple other random things that were missing in my faker DLL. So I made a .rc file and compiled it together with the faker DLL. Then, most of the properties matched up. So, I tried it, and it seemingly worked! And then EAC said that it couldn’t verify the file again. In the end, I didn’t manage to get it working. I should’ve expected EAC to block me from the beginning, but it was pretty fun, and if I ever want to do something similar with a game without anti-cheat, I can do that now! rlbuddy is pretty closed to being released though, I just want to polish a few things and make sure the docs are fleshed out.
Made an avatars api for Steam, PSN, and Xbox (Epic doesn’t support profile pictures and I have no clue what goes on in Nintendo-land, even Tracker doesn’t show theirs). It’s on Cloudflare Workers instead of my pi since it’s basically just api integration. I totally overcomplicated finding out how to get Steam profile pictures. Like, it’s insane how easy it actually is. A few weeks ago, I got an old version of Steam Rocket League and decompiled it, trying to look for where it fetched avatars from. After some experimentation and debugging, I learned that when Psyonix builds Rocket League, they give it something that implements OnlineSubsystem for whatever the target platform is. So, Steam gets the Steamworks OnlineSubsystem, Epic gets the EOSOnlineSubsystem, and so forth. And the game doesn’t need to know implementation details, just that it implements OnlineSubsystem, I think the term for that is dynamic dispatch in programming languages. Anyways, once I learned that Rocket League doesn’t do any avatar handling itself, I looked at the Steamworks SDK. Basically, it routes the avatar request through the open Steam client. So after some experimentation, I got it to fetch profile pictures with C++ and the Spacewars test game. But, that obviously wouldn’t work on a server, since the Steam client can’t really run on a Worker. So, I tried to use the Steam Web API. I got an API key, but when I tried, it said I was forbidden. According to the documentation, the GetPlayerSummaries endpoint was at partner.steam-api.com, which was only for publishers. About a week later, so yesterday, I had the genius idea to use api.steampowered.com (the public API domain) instead of partner.steam-api.com. Just swapping them out. And it worked. So, I now had a way to get Steam avatar urls. Xbox and PSN were actually really easy. Xbox has an undocumented API at https://peoplehub-public.xboxlive.com/people/gt(GAMERTAG) which returns json containing the avatar uri, and I used the psn-api package with a new PlayStation account to get PSN profile pictures. Then, I just put all of them in a Worker. So, rlbuddy will be able to show avatars soon enough!
rlbuddy now can show people’s avatars cross-platform! It uses a web api I put on Cloudflare Workers which uses platform-specific requests to get avatar urls (see the previous devlog), which the app just fetches and renders. The http part was pretty easy, since I already have wrappers for cached HTTP apis, so I just had to define types for that and hook it up. But, once it was time to display, I ran into a weird problem where egui said there was no image loader installed for jpegs! Even using all_loaders + default didn’t work. Turns out, I have to actually include image as a separate crate and enable all the filetype features I want in there. Once I got it to load, it was time to mess with styling again. egui is really annoying with images, so I spent a while trying to get them to size right first. The default avatar used while they’re loading or for Epic/Switch players is from Fandom, like the rank icons. However, even though the icon is 90x90 pixels, the webp is 128x128 pixels, it just has a bunch of transparent padding. So, I initially messed with egui to do some weird ui allocation and calculation to get it to render right. But, turns out I didn’t have to do all of that. All I had to do was allocate a 28x28 space (the target size), scale that up by the 128/90 ratio, then paint the image onto the new size. Worked great. Then, I got to fight with grid layouts again. For some reason, wrapping the avatar and player details in a horizontal totally exploded all the layouting. So, I ended up making avatar and details separate columns. But, since the “player” header text is a bit larger than the icon width, there was too much padding between the avatar and the player details. So, I did more messing around with egui manual layouting, and ended up allocating a 24x(body text height + 2) space for the header, which would give it the default spacing. Then, I’d copy the Rect, shift the left bound over by 12 pixels, then paint the header onto there. That way, the header is left aligned with the avatar and the avatar + details look like they’re in the same column, even though it’s actually a bunch of stupid manual layout magic behind the scenes.
rlbuddy can load custom maps now! Either you can download them and then import from a zip, or you can download them from bakkesplugins straight from the app! Importing it from a file is relatively easy. I checked the code for Lethamyr’s custom map loader to see what exactly it did, and for Lethamyr maps it: extracted the zip into a temp dir read info.json, .udk, and preview.jpg copied those into its own saved map directory I knew Rust, being a low-level language would let me not have to extract the zip fully first. Additionally, Bakkesplugins maps don’t contain info.json or preview.jpg, they only contain a udk file, so I had to make sure it would work with that. So, the import code I wrote basically: enumerates files in the zip extracts info.json (if found) into a struct copies *.upk into the target directory copies *.jpg into the target directory/preview.jpg if it exists It worked great. I made a really cool looking widget with stupid manual layouting behind it for map selection. First, it would add the preview image (or a black background if none). Then, it would get the screen rect of the image, and draw a semitransparent black background onto it (for contrast). Finally, it drew the actual contents in that screen rect. So, I got pretty-looking tiles with preview image backgrounds! I also added a progress bar for import status. I benchmarked each main part of the import process and found that decompressing/extracting the upk file took around 2 seconds, for which the ui thread would be totally frozen (big nono)! So, I moved the work onto another thread, and also made it decompress/load in 100 total chunks, updating a progress bar each time. I then moved on to the map downloader. Bakkesplugins doesn’t have an API, so it relies on scraping the website. I didn’t actually use any external crates for gathering information, though. I wrote a parser which takes a list of rules, each with a start and end search string, and looks for each of them in sequence till it fails to find a rule. I tried to make it completely zero-copy, but something it needed was to turn an [Option; N] into a Option<[T; N]> if every element was Some , but the only way I could figure out how to do that was with an iterator. It’s still really fast though. So, it parses search results, including map titles and urls straight out of the html string without needing an HTML parser or regex library. Once it was able to load results from the search page, I went to sleep and came back today. Now I had to get it to actually download the ZIP files and preview images, and import them straight into the app. It first has to download/parse the plugin info page since the ZIP url isn’t available in the search results. Then, it requests the ZIP. I had some trouble with this, since I wanted to show a progress bar for the download status. I first tried a function from this gist , but it didn’t work. So, I made my own which used the same chunking strategy as the import status loader. Turns out, ureq blocks requests once they hit 10MB by default, which was probably why the gist version didn’t work. But, mine was faster anyways, so I kept it. It’s even cooler since I made it myself. Then, I wired up a couple more commands to let it import straight from archive bytes instead of from a file path, and it finally loaded! Once that worked, I made it pass along the map title, author, and description as well. Then, I extended it to parse out the thumbnail image url and download that, then pass that along to the importer as well. Anyways, that was super fun. I would add a lot more detail, but Stardance limits devlogs to 4000 characters and I’m approaching scarily close to that. I’m planning on just polishing the downloader interface a bit more, and then I’ll do some bugfixes for the next release. See ya!
I moved the mmr server to alpine linux! Before, it was regular raspberry pi os lite on the Pi. But, it was behaving strangely, randomly rebooting and things, so I decided to try installing Alpine. The lightweight distro has been on my radar for a while now, but this was my first time ever actually trying it. I imaged it normally with the raspberry pi imager, and put it on the pi, did setup-alpine, and all was well. But, I put in the wrong wifi password at first, which broke everything else. I tried changing the wifi config and doing something with wpa_supplicant (thanks google ai overview), but nothing fixed it so I ended up doing a fresh install. This time, I put in the right password and everything went great. I set up ssh, node, pm2, etc. and moved the server files onto the pi through sftp. Then, I got it running over my local network and set up authentication. So, it was time to set up the Cloudflare tunnel again. I followed this neat guide , changing values as needed (for example, my pi is aarch64, but the guide was x64, so I spent a while figuring out why the pi kept giving elf errors). It took a really long time to set up the openrc startup script because 1. cloudflare rotates the setup token relatively frequently and 2. I accidentally put 2 –token arguments. And since I was using vi, I didn’t even notice and kept trying to figure out why cloudflared crashed on startup. But I eventually found out and removed the duplicate and it worked! Then I finished setting up pm2 and put the pi in its home next to the router, and mmr.kmdw.dev is back up exposing your lobby’s skills. See you in the next one! Yes I know part of the token is in the image but it’s used already so it doesn’t matter
rlbuddy has a gamepad overlay now so that you can show off your awesome bindings! Don’t even bother figuring out mine. It’s kinda starting to become hellish to add new widgets/services, but I’m almost done for the next ship so I doubt I’ll refactor just yet [edit: im doing a super refactor now hehe]. I made the overlay with the raw egui::Painter rather than actual controls (since it would be pretty hard to make a controller out of Buttons or something). I also prefer to avoid embedding static assets, otherwise I might have made an actual one in MS Paint or something. I also can’t seem to find a good egui version. I’ve been on 0.34 almost the whole time, which works well but doesn’t support transparency in extra viewports. But, 0.35/0.36 broke external viewports. So, until then, we get an opaque gamepad overlay :( but the main app is still transparent, so it’s not horrible. Rolled an 8 and a 9 on the Stardance rng today! I’m so proud of myself.
I’m MASSIVELY refactoring rlbuddy! This, I think is the second (and hopefully the final) major refactor to the codebase. So, basically the current architecture is split into services and widgets. Each service has an update method, which does its stuff (draining subscribers, processing commands, etc). Since egui is immediate mode, this architecture works unlike callbacks/event-based which I actually tried to implement but couldn’t. Every widget is just implements egui::Widget, that holds some state handles (Rc) and command senders (Sender), usually just one for its respective service. Services are alive for the lifetime of the app, while widgets are the openable panels you see. Widgets display the data from service state, and talk back to it by mutating shared state or sending commands. I think music control has been the best for me to wrap my head around to decide about changes, so I’ll explain it with that. Music control had a controller, a service, and a widget file. The controller was a thread pool manager (if you can call the questionable implementation that) around Windows’ GSMTC API to give a single-thread api for it (since the app is basically single-threaded). Then, the service is always alive, syncing a state struct between the controller and its own state handle. Finally, the widget is optionally there as a panel, with next/previous/pause buttons which send commands and the ui which reads service state to display. It also has a mutable service state reference for settings (the “pause during anthems” button). The god object RlbuddyApp struct stores all of this stuff. So it has a music_control_service, music_control_widget, stats_api_service, all of those fields, which kinda sucked. On top of that, I had to maintain an enum of every panel, which was enumerated for the “open panel” popup and to render each one if it’s open. you might think “hey… isn’t that a self referential struct? how does music_control_widget store a reference to music_control_service?” Well, music_control_widget internally only has fields for the music_control_service’s state handles which are Rc/Arcs. So it only needs a reference to the service for it’s Widget::new function lifetime, all is well. Although it doesn’t look horrible, it was HELL to do anything. For example, refactoring the gilrs service out of hotkey and adding the gamepad overlay probably involved just as much fiddling around with Rcs in RlbuddyApp as adding the actual feature. So, I decided to move to a new architecture: services + features! And, after thinking about it for around 8 hours (i slept), I decided on something a bit different. Services + panels! Yeah, basically the same as services + widgets, but I was gonna implement it GOOD this time, and make design decisions that wouldn’t bite me in the ass later on. I wrote my first traits - Service, which requires update and optionally save , and Panel , which requires name() -> &'static str and ui (same as egui::Widget: :ui). Then, I’d change how components are registered: instead of keeping every service and widget as a field in RlBuddyApp, I’d make a Vec<Box<dyn Service/Panel» for each, and loop through it. I spent about an hour trying to get Panels to automatically implement ui by requiring egui::Widget as a supertrait, which doesn’t work since widgets are stateful (need &self). So, I tried to require &mut Self to implement egui::Widget, but apparently something to do with type erasure doesn’t let that work with dynamic dispatch which was needed for the Vec<Box> thing. I’ve moved a few features to the new architecture, but I’m still in the process of finishing up. Additionally, it has to work side-by-side with existing crappy monster-Panel-enum architecture, which sucks to maintain. Okay, once again, I had to strip down a ton of detail (and my terrible wording but wtv) cause I hit like 5000 characters b4 realizing. See ya! May the Stardance gods increase devlog limits :)
I finished the big refactor! I pushed around 25 commits to GitHub at once. I’m really gonna enjoy adding the next feature, basking in how much easier it is ;) Apparently, I never made a service for session stats, so it currently can’t persist its one setting. Actually, writing this I realized that the setting isn’t actually used, so I can delete it. That’s great. After finally kicking out all the annoying legacy panel code, I remembered that I never re-implemented the positioning or its related persistence code for the new panel system. The persistence system was reworked too, something that I don’t think really got included in the previous devlog. Each service can implement save , and there are generic helper methods in a common module for saving/loading serde structs to a file in the app data directory. The actual app now uses this method as well instead of doing all the pathing logic itself, so the persistence module is pretty small and could honestly be moved into app.rs. For new positioning, I store a list of open panels. Weirdly enough, it’s actually a lot easier than adding a position/is_open field to every AppPanel. So, I run the name through a Hasher to make a u64 which is easier to clone/copy and stuff and made a newtype around a PanelId. That way I could reuse the code from the previous paneling system to swap/manage open PanelIds, then just use find on the AppPanel vec to find the corresponding widget. Also, I never mentioned it but I’ve been trying RustRover for the past few devlogs. It’s a lot more stable than Zed, but I sorta miss its snappiness and minimalism. If I end up finding an annoying bug in RustRover, I’ll probably switch back. However, it’s been quite a few days and I don’t think I’ve found a single one. JetBrains is truly awesome at tooling. See ya next time. Probably will do my next ship soon :)
Had to remove the tracker.gg widget :( unfortunately they don’t allow scraping and what I had wasn’t allowed anyways. Things that used to open the player info widget now just open tracker in a browser.
Time formatting doesn’t suck anymore! I made the implementation way better so I could make it support stuff even past weeks, like months and years. The new implementation added around 60 lines, but it’s for a good cause. The previous implementation used a match statement with duplicated logic that only supported seconds, minutes, and hours, using a pluralize function and inline if-statements everywhere. If it were sent to any rational code-reviewer, they would likely have a heart attack. Now it’s a bit more complex but less complicated. You have TimeUnit s which format the unit themselves and TimePart s which format a value + a unit. Then, just use some math to build a Vec and format it into a string. Boom! Beautiful, well-formed time formatting. To soak in the new beauty, I added days n weeks. I just had to add 14 lines! The previous one would have probably needed a bunch of stupid magic numbers and weird chains everywhere to accomplish the same thing. Okay, I’m done using your time on reading a way-too-long write-up about fixing a crappy implementation that shouldn’t have been there in the first place. I’m gonna ship right after posting this. If you get it, make sure to give it 10 stars in everything 😉. Haha, jk. Well, not really. Cya later.
I’ve mostly been working on smaller features, improvements, and bugfixes. A cool one I did is fixing weird glitchy movement with the gamepad overlay window! Basically, the window needs to persist its position across disabling it/enabling it. And egui is immediate mode. So, every time it rendered the viewport, it would both set and get its position. So, moving it would update the current position, but because of the weird interop between setting the position in a ViewportBuilder and getting it from the viewport info, it would glitch back and forth, especially when my laptop is lagging. I fixed it by only calling the ViewportBuilder ‘s “ with_position ” method when the overlay had just been enabled ( !was_enabled && currently_enabled ). That way, it only sets it once externally, and lets it move freely while it’s open. Then, while it’s moving, it continues to update the saved position. And upon closing and then reopening it, it sets it again (but only once!) Relatively simple fix but it’s kind of funny. I mainly noticed it when I added a feature that would auto-unmaximize the overlay when the user maximizes it, and it would go crazy and fly around the screen. Very fun! I also fixed a pretty old bug where it would incorrectly detect the local player. Basically, the stats api doesn’t actually tell you who the local player is. So, we have to guess based on who the camera is targeting right now. Usually, it’s on the local player, but during goal replays or spectating a bot when joining a casual game, it would be improperly set at the start and then stay like that. So, I made sure that it always updated as long as the match is 1. in progress 2. not in a replay. It also fixes a thing with inconsistent match toasts, since the toasts only fire if the scoring player is the local player (and if it thinks the wrong player is the local player, everything’s messed up). I’m planning on revamping hotkeys next, to allow you to bind to any controller button and even do custom quickchats in-game. Later!
More gamepad overlay buttons!!! Yay!!! In not-so-awesomely-exciting news, I also added a table of contents to the readme (as well as a generator for it). The script’s in Python (I’m sorry for not using Rust) meaning the repository is now 0.5% Python. Takeover incoming? I overcomplicated the script a lot, but it’s really easy to read. There are three whole comments, aka 6% of lines in the whole file! It’s not technically interesting in the slightest. I was thinking of building a tree-like structure before outputting the string, but realized I can just use the header level (h1 vs h2 vs h3 etc) as the amount of spaces / 2. I also refactored it not to use magic PanelId s for the default panel list. I kinda rushed that part when I made it, I’ll be honest. But now each Panel can implement fn open_by_default(&self) -> bool (returns false by default) and if it does it keeps it open when savedata doesn’t exist yet. I don’t get how an entire hour n 27 minutes was spent on like 7 not-even-that-big commits. At least it was a good use of my math class. We reviewed limits for some reason (which everyone should already know for one because they took the prereqs?), and the teacher managed to extend her lecture for the ENTIRE class time. rlbuddy development saving the day, I guess (just like it will in your rocket league games btw, so you should download it)
I’ve been debugging high memory for the past month or so. It was egui_system_fonts. Why would fonts take 170mb of ram????????????????????????????????? help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I hate external dependencies!!!!!!!!!!!!!!!!!!!!11 I owe my life to DHAT now. go star https://github.com/nnethercote/dhat-rs
I did lots of performance improvements and also IT WORKS ON LINUX NOW!!! Let’s talk about performance first. Anyways, it has been using around 4% and 220MB of ram, which isn’t really what you’d expect from an overlay! So, I used things like DHAT to profile the memory, and noticed that fonts were doing some shenanigans. So I removed egui_system_fonts and loaded directly from C:\Windows\Fonts\segoeui.ttf and RAM usage dropped to 30mb. That was what the previous devlog was about. I then changed the default logic update rate from 10ms (100/s) to 65ms (15/s approx). This reduced idle cpu usage to under 0.2%. But, doing anything with the UI would spike it to 4%, which is still pretty bad. So, I used a method I found in an egui issue thread where I’d count the frametime since the last render, then sleep until the target frametime was finished. For example, if the frame rendered in 2ms but I want 16ms frametime, it would sleep for 14ms. That way, I could limit how often the UI rendered! This made it stay under around 1% CPU forever! Okay, Linux time! Rust is mostly cross-platform, so support was mostly dealing with dumbass design decisions. Since Music relies on GSMTC, I had to feature-gate the entire thing (as well as the windows/windows-future crates) behind cfg(windows) :( I also had to fix Linux font loading (since like I said earlier, it’s hardcoded to segoe ui). So I install fontdb on Linux and search for some popular fonts from there to load instead. Finally, I fixed up the storage paths since it could only load from AppData. I also made it use AppData\Local vs. AppData\Roaming instead of putting everything in Roaming. I first got it working through WSL! ! It took some messing with my GPU drivers but I got it to render. Now was the real challenge: getting it to build on an ACTUAL Linux machine. I had an old, basically broken Surface Pro 3 that I had put Debian+GNOME on for shits and giggles a few months ago. The perfect target! The main problem was getting Rocket League to even launch. I set up Legendary (goated launcher btw, check it out ) and tried to run it. I installed Wine, got Wine Mono, and it failed with a weird cryptic error about the CreateWindow function. The obvious solution to a graphical error: disable EAC. Yay, it launched! Then to get it to build. First I had to fix some filepaths since Linux is case-sensitive (nerds) while I don’t care about case on Windows. Then, rust-lld gave some weird error about simd or something which I didn’t care about. I just ran cargo clean and rebuilt it and it worked fine. Then to run, and it actually worked first try! It’s cool because I went into it expecting to debug a million socket errors, but it actuallly connected and ran. Awesome sauce! Now Linux users can use rlbuddy. More minions to contr- I mean cool users! Cya in the next one! ;) If you check out the rl perf overlay in the screenshot, you’ll be able to guess why this is the laptop I decided to put Linux on.
I’ve been putting this off for a while, but I’ve finally decided I’m going to add asset swapping. There’re a few existing implementations, so I’m reading those as well as some pdfs about the upk format. So basically credit to this document and this implementation . All it can do for now is parse the file summary. The implementation wasn’t too bad since I had Google as well as the C# implementation I just talked about. I basically have trait Deserializable : Sized { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > ; } Then implement that for the various parts (eg. FGuid , a generic TArray ). Then, I use byteorder to read out numbers into each struct. For example, #[derive(Debug)] struct FCompressedChunkInfo { uncompressed_offset : i64 , uncompressed_size : i32 , compressed_offset : i64 , compressed_size : i32 , } impl Deserializable for FCompressedChunkInfo { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > { Ok ( Self { uncompressed_offset : reader .read_i64 :: < LittleEndian > () ? , uncompressed_size : reader .read_i32 :: < LittleEndian > () ? , compressed_offset : reader .read_i64 :: < LittleEndian > () ? , compressed_size : reader .read_i32 :: < LittleEndian > () ? , }) } } I originally prototyped it in Python and then moved to Rust once I got tired of python’s byte shenanigans.
I JUST DESERIALIZED AND RESERIALIZED A UPK. OMAIGOD IM SO HAPPY. my brain is so tired. Alright so the payload still doesn’t get transferred but that’s pretty simple, it’s just Vec::extend. What a challenge! Deserialization actually ended up being the easy part, which is opposite of what I expected from starting the project. It went (relatively) fast since there are a few existing implementations which I could kinda just “borrow” structure parsing from. But, mine is unique in that it almost completely reserializes the package itself. I might’ve been able to “borrow” reserialization, but the impl I’ve been looking at is STRAIGHT ai slop and it’s more annoying to read that than to just do it myself. It was useful though, so I have to respect it. The first problem: basically, the first byte of an FString determines how many parts it has, NOT how many bytes it has. Which wasn’t a problem for parsing, since I had some word-based helpers which worked so I didn’t think much about it. But, when reserializing, I made two mistakes: 1. forgot to add the null terminator (which shouldn’t even be necessary) and 2. I accidentally put the wrong offset. I have no clue why there’s a null terminator for FStrings. The format is [n chars][the char bytes], meaning it should already be known how long the string is. Pretty stupid, but whatever. Anyways, when reserializing you’re supposed to include the null terminator in the string length marker. So, my logic was that I should offset it by two since unicode characters are two bytes. Bleh! I should’ve only incremented by one, since it’s in terms of utf16 chars rather than bytes. Yay, that worked! I don’t know how to summarize the next problem, so I’ll explain the reasoning. The package header is file summary + tables + something else (we’ll get to that later). Anyways, there’s some mysterious padding in between the summary and tables. Parsing, it’s easy to skip over because the summary includes the tables start offset ( name_offset , the name table is the first one). But when reserializing, you gotta keep those offsets intact. Well, I’m not totally sure if you actually have to keep them, but just for the sake of simplicity I tried to (which ended up adding more complexity, which I’ll see if I can remove now). So, I serialize/push the summary to the big Vec. Then, I make a new Vec and serialize the name table at (name_offset - summary_size), since the new Vec has to be encrypted and then appended to the big Vec. I do the same thing for imports/exports (placing the table at import/export _table_offset - summary_size ). Oh no! Since name_table_offset isn’t equal to summary_size, there’s some padding in between, which is expected. HOWEVER! The previous logic would skip over it in the table Vec creation, meaning the table Vec would have some 0-padding at the start. This padding needs to be in the SUMMARY part instead, and the name_offset should basically be the ZERO of the tables Vec! I doubt I would’ve been able to solve this part without the beautiful tool HxD . It’s really easy to use and is always helpful when I’m figgling around with binary. So, it does some more math, calculates the spacing, adds it to the big vec, and removes it from the tables Vec. Then, it re-encrypts the tables Vec and pushes it onto the big Vec! Okay, now that’s done. NOPE! There’s a mysterious structure for some reason at the end of the real table part? Yep, it’s that something else I said we’ll get to. I actually still have no idea what it is. From some research, I gathered it must be the dependencies table, but it’s really poorly documented. So, I ended up just cutting the bytes out from after the export table to the end of the tables part, and “pasting” it back before re-encryption. I do hope this devlog was readable. Now I’ll get to including the actual package payload and hopefully simplifying reserialization offsets. See you soon!
I figured out what comes after export tables! And it took way too long, since I DISCOVERED IT MYSELF! At least, as far as I know. I couldn’t find any information online about this portion of the header, so it was basically luck that I noticed a pattern. Before, I was just copying everything after the export table and pasting them back in afterwards, but as you can guess, that stopped working if I adjusted anything within the encrypted region. Compressed chunk info is a known part, and I figured out the AES padding pretty easily, so most of the time was spent trying to figure out what in the world those 24 bytes were. The first four bytes in the compressed chunk info are how many chunks they are. Here, in the Bubbles boost package, there are two (little endian), with 24 bytes of ???. And in Flamethrower, there are three, with 36 bytes of ???. I noticed that the ??? was always n chunks * 12 bytes (actually, it’s lucky that I didn’t test any which ended up having 0, otherwise I probably wouldn’t have figured it out). Since this probably had something to do with chunks, I made a guess that each chunk had some extra data stored in this array, 12 bytes of info per chunk. Using HxD’s highlight-bytes-and-get-the-decimal-value feature, I noticed a pattern where the first 8 bytes looked like an i64 offset and the last 4 looked like an i32 size, which the compressed chunk infos were also like for their matching counterparts. So, I deserialized it as [i64; i32] * n chunks and was able to read it better. These additional chunk infos seem to kinda sorta match up to uncompressed header offsets, but I don’t really understand what they are (and they’re marked as such in the code, lol). So, with that working (and some fiddling with broken serialization of TArrays which I’m surprised I didn’t catch earlier), I now understood the ENTIRE package header! Hooray! Let’s look at another example. body_grain_SF, the Fennec, has 4 chunks. Guess how many bytes of ??? it has. That’s right, zero! For some reason, a few packages just don’t have those things. After going through a bunch of them, I found that if licensee version was 32, there was no ???. But if it was 33, there WAS ???. I basically just added an if statement and it was fixed. I’m going to try to work on figuring out the padding in between the package summary and the start of the name table, but if I can’t, I suppose I’ll finally get to actually doing package swapping. Later!
I got a name swap! It doesn’t work properly, but I’m glad the game didn’t crash. These hours have been by far the most frustrating because the only way to test is against the real game since it’s really picky, but the game takes like 30 seconds to start, and if it crashes, it gives a cryptic error log, and if it freezes, it doesn’t give any log at all. I spent most of the time messing with moving different offset values forward and backwards, and ended up reverting to a simpler version with no overwriting when the header size changes just to test things. So far, I’ve mostly gleaned that name renaming is possible, but only up to a point. If the name grows too much, the game crashes, and if the name shrinks too much, the game freezes. Additionally, for some reason, total_header_size changes by the padded header size instead of the encrypted header size, which I still don’t understand. It’s seriously weird. I serialize each name properly, and yet the game reads it wrong. This game really does need a new codebase. When UE6 comes out, either the game’s gonna be so good it doesn’t need mods, or it’ll be relatively easily moddable. Or neither, which is the most probable based on Epic Games’ track record. Anyways, enjoy the beautiful screenshot.
IT SWAPPED IT SWAPPED IT SWAPPED AHAHAHHAHAHAHHAHAHAHAHHA FINALLY Okay now I gotta make it work for other pairs of boosts. If WHEN that works, I’ll actually put it in rlbuddy. I removed all the code relating to changing offsets to try to give myself a minimal workspace to tinker in, with as little side effects as possible. So, all the current code does is 1. open them 2. replace the name table entries and package guid. Surprisingly simple. Once I make it a bit more generic, I can extend it to support more swaps. If I’m really unable to get it to work for more combinations, I’ll probably end up just publishing the poc repo and not adding swapping to rlbuddy at all. This is a great motivation boost, though. I was honestly dreading coming home to work on it today because I was done with failing over and over, and considering giving up.
IT WORKS WHEN THE HEADER EXPANDS NOW YAYAYYAYAYAYYAYAYYAYAYAY I’m gonna be honest, the problem might just have been that my testing package was corrupted. I was debugging my deserialization logic, which I thought might have some parsing issue near the header extraction, and noticed that once the encrypted region deserializer’s Cursor reached the end of the region, it was actually FARTHER than the package summary’s total_header_size - by 6 bytes! That’s pretty bad, and I don’t know how something like that even happened. Anyways, I repaired the game and brought over the shiny new upk and… it worked. I’m pretty sure that I only accidentally did this while tidying up my workspace a few hours ago, but if this has genuinely been the thing holding me back for the past few days - I also finally made the poc code public, at https://github.com/kalilamodow/rl-upk-testing/
Apparently there are a bunch of different AES keys rocket league uses, not just one. You can get a list of them from the psynet config url, and then do some weird crc stuff to change them from “content keys” to aes keys. I discovered the rocket league mapmaking discord today and I’m blown away by the amount of information on there, and also apparently my whole thing about the unknown bytes when licensee version > 32 was straight up wrong, which is funny. Anyways it works for all items now, which is great. I’m gonna work on actually putting it in rlbuddy now, hopefully that goes well
rlbuddy now has item swapping! Basically, making one item appear like another to use items you don’t actually own. These hours were spent on a few different things. Firstly, I optimized the thing a bunch! There were a few places that were pretty slow since the original repo was mainly for testing. For example instead of decrypting the entire header and rechecking it to find the right key, it only loads the first 4 blocks and attempts to decrypt the first FString. If it fails, that means the AES key isn’t valid. Also, I improved the error handling with anyhow. It actually makes it so much easier to deal with things and was pretty useful when debugging the move over to the actual app. Now I’m just going to work on polishing the panel UI a bit more, since it’s still kind of ugly.
I made a ton of improvements to the asset swapper! And fixed a bug with the music player which is cool technically, so I’ll start with that. The player uses the GSMTC api, which is async, but egui doesn’t really like async. So, I made it so that every time you wanted to run some command on the current session, it would start up a new thread. This was less than ideal for a few reasons: terrible performance race conditions could happen just… in Windows itself The main problem was 2: for example, if you skipped a replay too fast, the Play command from the end of the replay might actually reach Windows before the Pause command from the replay start, leaving your music paused. So instead, it starts one dedicated worker thread which has a channel which receives a Box<dyn FnOnce(Session)> , and executes at most one command every 50ms (only one command per loop, fixed loop time of 50ms). It’s really interesting because you actually end up sending a closure through a channel, which feels funny but when you really think about it it’s just ownership semantics. But, that’s working great now! On to swapper improvements! First, I moved most of the swapper module to anyhow handling (it’s heaven!), and I also modernized the upk api a bit since it was basically dragged directly from the proof-of-concept repo, meaning it was not really application-ready. Also, it previously looked at the game’s webcache to decode the AES keys for header decryption, but now it uses the wonderful Toga-Files repository along with a really nice caching layer for it to load items and their associated API keys. Having access to the actual item data is also way better since you don’t have to manually type in a package name which is kinda weird for any normal person. Now, you can select it from a dropdown instead! I love UX.
rlbuddy now loads additional playlists straight from the game’s cached webconfig, instead of hardcoding them all! This means that the list of playlists will basically never go out of date. There are actually quite a few services which rely on game files (eg. auto stats api setup, custom maps, asset swapper). So, the first thing I did was to refactor it so make all of these load from the same global value. Then, for playlists, I made it read from a specific file in the game’s http cache directory which contains a bunch of configuration. Then, it parses it into a JSON object, grabs all the values with Class PlaylistSettings_TA, and then extracts the title and playlist id! There are still a bunch of built-in Playlists, since those have internal things like going from a casual playlist type to its respective competitive one or having the hard-coded list of singleplayer playlists. But, all the other ones, like ltms are dynamically loaded. Yay!
I got licensee version 34 (encrypted payloads too) to swap finally! Okay, so this was awesome. Rocket League’s been having a bunch of updates lately, which breaks the packages of people trying to get free stuff. So, in a Reddit thread, I ended up dishing out a bunch of swapped asset files for people in this situation. There’s a new boost which everybody wanted really bad since it was really rare (but they decided to make it unlockable at rocket pass lv99 so it doesn’t even matter anymore), and it was UNSWAPPABLE for three reasons: it was encrypted specially i hadnt encountered specially encrypted packages meaning their handling was wrong aes keys werent out for it yet (or so I thought) I’ll start with 3. I had written a tool which looks in the games cache for AES keys, and dumped them, and it worked great. What I didn’t expect is the filename to change between versions. So, I was super confused since yesterday since the AES key for the boost was just… missing. Thankfully, the geniuses at the RLMM discord got it and helped me figure out that the file I was reading from was just outdated. Great! Anyways, not too big of a deal, just a big delay. Now it’s time for the real challenge: figuring out how the hell to handle this type of package. First, I did some research. The twelve bytes of padding in files with licensee version >=33 before the summary are actually a nonce/aes iv, not just padding. Then, the header is encrypted with AES-CTR with the twelve first bytes of the iv just being the nonce. And the compressed chunks are encrypted too here: each one is also AES-CTRed with their own nonces in FCompressedChunkInfo. Thing is, I don’t have an implementation to really go off anymore, meaning there’s a lot more trial and error. For the original implementation, there were one or two existing asset swappers (though they were vibecoded meaning more of a puzzle to figure out what they’re even doing), but this time I was mostly relying on emii’s fork of UEViewer. Anyways, after spending a while figuring out what exactly I had to masquerade (payload, key, swap nonces) I finally got it to work!
Not much in terms of super-cool stuff this time. Highlights are: make sure dynamic playlist loading uses the latest cache file (and also fix its loading on normal people’s rocket league installs) loading the cache file on another thread so it doesnt freeze the whole app for a second on the first lazy lock access searching for items in the item swapper moved the error handling of the map loader to anyhow So no ultra-exciting things to talk about. anyhow is really cool though, it really simplifies error handling everywhere in the app, and I’m a big fan of its bail! macro. I’m also using Cow a lot more. Moo!
I made a standalone web-based swapper for the people who don’t want to download an entire app. A lot of people had broken packages after the last update but didn’t want to install a dedicated program just for a few swaps. So, I used the asset swapper backend of rlbuddy to make this thingamabob which runs entirely in the browser! First, I had to find out how to actually share rlbuddy’s asset swapper with other projects. Turns out Cargo has a cool thing called workspaces where you can have multiple crates in the same repo! So I moved the dedicated UPK/AES etc. stuff into a new crate and added it as a dependency in regular rlbuddy. Then, I whipped up a small wasm-compatible eframe app with the template, and included the new crate as a dependency. I made a big state machine of the steps meaning it’s impossible to have an invalid state, which is really nice. The only problem was that Rust’s ownership system isn’t smart enough to deal with it, so the code is a bit repetitive in places but it’s definitely worth it. The WASM restrictions were super annoying, mainly do to with filesystem access and requiring async. I ended up using the egui-async crate and spilling Binds all over the place within the state machine. I couldn’t even figure out how to get the actual swap procedure to run in a different thread. I also spent like 30 minutes debugging why in the world asset swapping was just broken. Even when I verified the same binary data were going in to the Upk object in the webapp and rlbuddy, for some reason the output upk was just different. Turns out I used chosen_replacement.name instead of chosen_replacement.package.name() . Isn’t that great? Anyways, it works fine now and I’m planning on posting it on r/RocketLeagueMods and possible r/RocketLeague.
A few fixes here and there. Some refactors, caching externally loaded playlists in savedata, and fixing a deadlock when clearing the items cache. And for some reason the decal option was missing from the items list picker.
more small improvements. i gave the session stats widget an actual service as well which speeds things up a lot since its not recalculating statistics every single frame. the swapper also uses the backup file if one is available and it no longer accepts duplicate custom maps
Ships:
rlbuddy is a feature-filled companion for Rocket League! It shows the skill of everyone in your lobby and has tons of toggleable widgets and features to make your life a lot easier, from Discord integration to music control. This is my first non-tiny Rust project, and I think it was really great! I’ve learned a lot such as proper state management and the ins and outs of Rust’s syntax. You can give it a try by heading to the Github releases section. If you play Rocket League, I hope you use it!
rlbutddy is a feature-rich companion for Rocket League, and v1.2 is out. There’s been some big architectural changes meaning it’s faster and bug-free-er, as well as big new features! New!!! Avatars! Now you can see people’s profile pictures even when you’re not on their platform. Custom map loader! You can import maps from a ZIP or download them straight from Bakkesplugins! Gamepad overlay! Show your controls while playing, to show off your bindings or get some help with your speedflips. I think I’ve definitely improved at Rust since the last release. Just in terms of the amount of mistakes I make, I feel like it’s way more smooth sailing than before. For example, I was able to (mostly) write not-so-buggy code and “run the borrow checker in my head” without needing to cargo check a million times, and clippy tends to have a lot less suggestions for me. Pretty great!
I made rlbuddy, a rocket league companion app! This is the third ship so far. The big features this time are the asset swapper and Linux support, but I think that the feature I’m most proud of this time is the asset swapper! It inserts the appearance of one item into the file of another, meaning by swapping out assets for others you can make your car look however you like! (Client-side only, of course). I learned a lot about byte-level manipulation and working with raw data streams and encryption/decryption in Rust, and I can read hex (relatively) well now! It’s also great because I think this combined with the doorstop experiment from a while ago gives me a nice base to try some reverse-engineering challenges in the future. I also worked a lot on performance this time, such as tuning loop times/ui fps caps and minimizing ram usage (I achieved around an 80% reduction here!) There are a crap ton more features added than that (totaling almost 100 commits), but I’m pretty sure you’re not supposed to have massive feature-dumps on the ship text. So the full list is on the latest github release! In the image, you can see I have a white fennec. In reality, I don’t actually have a tw trim, and the equipped decal isn’t compatible with the fennec either. But, using the power of asset swapping, I can get a beautiful all-white car. Neat!...
|
1792824716.4688025
|
1792911116.4688025
|
|
57404
|
Tiger OS by @Rayan123-4 | Stardance
|
Rayan123-4
|
2
|
74.3
|
115
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T23:41:52Z", "hours": 50.0, "multiplier": 2.32, "payout": 115, "blessing": "neutral", "text": "I made TigerOS, a tiger themed WebOS made for the WebOS Stardance mission. I made it using HTML, CSS, and Javascript. It has many features such as, a real time weather app, a working calculator app, a snake game app, a paint canvas app, sounds, special effects, and the list goes on. The most challenging part of making this, was getting everything to work smoothly how I want it with no errors. Probably the hardest thing that I made was the weather API app, since I had never worked with an API before it was very challenging, but I learnt a lot. I am very proud of how it came out, and that all my apps and features work to how I want it. I didn’t think I would make it this far to have so many cool stuff, but I am very happy with my final product. I suggest that anyone wanting to try out my site, they should test out all of the apps and the features. I also encourage you to find the hidden secret feature. However, it should be pretty obvious to find. Test out all of the weather apps, and even try to beat my high score of 25 on the tiger snake game. Please take some time to explore TigerOS and leave a thoughtful review, as any feedback would really help me to improve. Thanks Stardance, for setting up this oportunity for me and everyone else.", "repo": "https://github.com/rayan123-4/My-WebOS-Stardance", "demo": "https://stardancetigeros.site/"}, {"ship_num": 2, "ts": "2026-09-04T21:53:15Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first WebOS. It was very difficult and challenging to make, but the jams guide made it much more easier to get started with and finish. The site currently has 2 apps, but there will be more to come in the future.", "repo": "https://github.com/rayan123-4/My-WebOS-Stardance", "demo": "https://stardancetigeros.site/"}]...
|
[{"post_id": 82137, "ts": "202 [{"post_id": 82137, "ts": "2026-10-24T02:07:18Z", "hours": 0.8194, "text": "Devlog 51: Adding stars, realistic tilt, and better quality textures to the 3D earth. I added 2000 stars to the earth window and even made a realistic tilt for the earth, like how it is in real life. I think that the stars made a big impact on the overall feel of the window, and makes it look much better. I also added a 8k quality texture onto the earth model instead of a 2k quality texture, so that the earth would be more clearer to see."}, {"post_id": 81962, "ts": "2026-10-23T06:09:26Z", "hours": 2.1297, "text": "Devlog 50: Adding new 3D Tiger Earth window. I added a new window made with three.js, that is a 3D globe of the world that is, movable, rotatable, and zoom in able. I also added a feature where you can stop the rotation, so that its easier to view (And find the hidden Tiger). First I made the 3D circle and of the globe and then added the texture and animations. What did I learn and what was difficult. This is my first time making a project like a 3D thing, so I was a bit new to this. Now I have learnt much more about how to make 3D projects like this and I hope I can make many more simulation projects like this in the future."}, {"post_id": 81186, "ts": "2026-10-20T07:19:14Z", "hours": 2.155, "text": "Devlog 49: Adding tiger population chart window and UI polishing. I added a new window that shows the tiger population in the countries Russia, Nepal, and India. The data points are the milestones of there tiger conservation across 2010 to 2016 to 2022. The chart is a line graph and the 3 line variables are the countries. The chart looks very good and I am happy with how it turned out. I also polished more of my webOS using nice fonts such as “Fira Sans”, “Bold”, and “Italic”. I styled it and made sure across my webOS there was a orange, black, and white theme, like the tigers colors. What did I learn and what was difficult The most difficult part of it was debugging everything when I found errors. I learnt the functions for making a graph in JavaScript and how to get data and put it into a graph using code, while still making it look nice. This helps me a lot especially for more projects I might do in the future using data and statistics."}, {"post_id": 79494, "ts": "2026-10-14T09:29:47Z", "hours": 1.8556, "text": "Devlog 48: Updating the CSS styling and improving the interface visibility. I edited the CSS stying adding more things such as box-shadow and different color border. I made sure the web os looked good and wasn’t too heavily colored, that might make the text less easy to read. I also fixed the minimize button in the link window since it was off centered, because of the small size of it compared to the normal window sized ones. Difficulty: For me to be honest, this was difficult not because of like syntax and stuff, but because I’m not very good at styling. I tried to like make it pop and look extra good, and I think I have done well."}, {"post_id": 77180, "ts": "2026-10-05T23:23:31Z", "hours": 1.5567, "text": "Devlog 47: Add text on icon hover, that displays window name. I made it so that when you hover over the icons in the icon bar, it will show the name of the window that the icon is connected to. This makes it easier for users to know what icon goes to which window, without guesses based on the icon image. What did I learn and what was difficult. At first I thought that making this would only need a bit of HTML and CSS, and normally it would. However I came upon a problem and CSS wasn’t fixing it, nor was the HTML, so I had to adapt and use Javascript to fix my error. Eventually it worked out in the end, and not much Javascipt was actually needed. This helped me to learn how to fix errors outside of the box, and too try different ways to fix them. This helped me learn more about problem solving and debugging, which will help me in future projects."}, {"post_id": 76578, "ts": "2026-10-04T01:22:56Z", "hours": 0.6781, "text": "Devlog 46: Edited some of the CSS styling on the windows and top bar. I edited the CSS styling on things like the, text, the windows, and the top bar. I used functions such as, text-shadow and box-shadow, to make text and windows stand out and look much nicer. I also edited the border color and size of many things to make them either pop or, look better in between colors. Things like animations scale and filter, also helped make it look much more appealing. What did I learn and how difficult was it I learnt more about CSS styling and how to make project look extra nice. I was playing around with the CSS learning new mechanics and functions, to help make different things and parts of project look more nicer and clean. This was fairly easy and I didn’t have any trouble with doing so."}, {"post_id": 76381, "ts": "2026-10-03T11:06:48Z", "hours": 1.8306, "text": "Devlog 45: Added a lot of in depth comments to my Javascript file. And adding a download button to the paint window. I went through my Javascript code and worked on improving my comments and adding more, where they were needed. I focused on being very descriptive with my comments, explaining what things do and how. I also added some hover animations to the paint board buttons. Download button added I added a download button to my paint window. I made it so when the user clicks the button, the browser download trigger is activated and the image is downloaded. I did this in Javascript using toDataURL(). Diffuculty Making the comments was fairly easy, as I just went to important parts with no comments and added explanations about them. Also the Javascript for the download button wasn’t too hard, and I think I am learning more and more about Javascript, which is helping make it easier and easier."}, {"post_id": 75997, "ts": "2026-10-01T23:50:08Z", "hours": 0.9978, "text": "Devlog 44: Fixed a z-index error, adjusted the colors and styling I found a z-index error in the Javascript file, where the images when opened, wouldn’t go to the highest z-index, so I just added z-index 99 when window open. I also mainly adjusted the colors, experimenting in CSS, to get the best design and the best text to background ratio in CSS. Difficulty Not too bad, because I didn’t have to go through hidden Javascript syntax errors and stuff, so it was mostly stuff I could just look around for a bit until I find the missing parenthesis or something."}, {"post_id": 75845, "ts": "2026-10-01T10:11:49Z", "hours": 0.7925, "text": "Devlog 43: Fix camera animation Fixing the camera animation, making it so the user cannot spam open the window, making the animation run for however many times the user tapped the icon. Difficulty It wasn’t too hard to do, just needed to make some simple if statement to check if the window had been opened. Edited Also adjusted some styling in the map window making the text hover change in css."}, {"post_id": 75429, "ts": "2026-09-30T02:17:24Z", "hours": 0.7275, "text": "Devlog 42: Minimizer button Added a minimizer button to all of the windows. I made it so that when users press the button, the hover filter glow will show on the corrisponding icon, to let users know the window is open. Difficulty This was fairly simple to do, and I just had to make some code for it in the same place near the close button in the Javascript."}, {"post_id": 75148, "ts": "2026-09-29T09:16:19Z", "hours": 1.8561, "text": "Devlog 41: Styling the windows, making it look nice Fixed some of the styling on the windows, specifically on the manual window and the welcome window, since my rating said they looked like a power point. Trying to make my website look much cleaner and have a better design."}, {"post_id": 75046, "ts": "2026-09-29T00:06:01Z", "hours": 1.8983, "text": "Devlog 40: Camera Animation Added Added a camera flash animation when you open the gallery app. It was quiet hard to make flash show after the camera image, but it works well."}, {"post_id": 74671, "ts": "2026-09-27T23:27:05Z", "hours": 0.6822, "text": "Devlog 39: May be Last Devlog This is going to probably be my final devlog until I ship. I have enjoyed making this project and I hope that I can maybe make it better in the future. This video shows all of my windows and stuff."}, {"post_id": 74374, "ts": "2026-09-27T08:22:51Z", "hours": 0.7228, "text": "Devlog 38: Finishing touches Adding finishing touches to my WebOS such as fixing code to work better. Making it so if you tap a window that is behind another window, it gets moved to the front. And some other fixes."}, {"post_id": 74260, "ts": "2026-09-27T02:46:44Z", "hours": 1.2206, "text": "Devlog 37: Icon hover response Finsished making the icons hover display to stay on the icon image, if the corrisponding window is still open. Once the window is closed the style goes back to normal, but still if you hover it will have the style."}, {"post_id": 73487, "ts": "2026-09-25T07:05:36Z", "hours": 0.6139, "text": "Devlog 36: Adding a link window Creating a link window that has multiple links. The window is closable and it uses the same functions as the other windows except that you cannot drag it."}, {"post_id": 73053, "ts": "2026-09-24T08:54:47Z", "hours": 1.0725, "text": "Devlog 35: Fixed many usability errors that I had such as Making boundaries for dragging the window. Making the scroll app bar optimize for different window sizes. Fixing a bug where you can play all roar sounds at once and they overlap. And a few random glitched that I found while trying to fix these."}, {"post_id": 72578, "ts": "2026-09-23T08:39:47Z", "hours": 0.3111, "text": "Devlog 34: Adding information to manual window Just adding some more information to my Manual, for the new things that I have made. This is where users can find information about different features in my website. I wrote it all myself."}, {"post_id": 72139, "ts": "2026-09-22T09:13:19Z", "hours": 1.8511, "text": "Devlog 33: Adding undo button to paint window Added the undo button and made it so that it will undo lines, fill, and clear. This means that if you accidently fill your work or clear it you can press undo and it will bring it back :). Works for multiple times, because it saves it in a array. I am very happy with how it came out, because it was quite challenging to make."}, {"post_id": 72113, "ts": "2026-09-22T06:08:49Z", "hours": 1.085, "text": "Devlog 32: Adding the paint window My Tiger Masterpiece! Finally finished making the paint board window. I also fixed a few bugs that I had with the drag header, and it not working. Im going to add the title to this soon and also I will add an undo button incase you accedently delete your Tiger mona lisa."}, {"post_id": 71686, "ts": "2026-09-21T09:48:24Z", "hours": 2.8558, "text": "Devlog 31: Making the drawing window function Making drawing window. Don’t mind why it looks weird right now, I will fix it later. Also I spent a lot of time trying to fix some hidden error I didn’t know where it was and I was totally confused, so I went back a commit and put my working code back and it fixed. I think I am going to wrap up my project soon, so that I don’t create more project breaking errors."}, {"post_id": 71121, "ts": "2026-09-20T10:10:32Z", "hours": 0.9147, "text": "Devlog 30: Finally made the calculator window Idk how I managed to make it, but maybe the tutorial I was watching before was just not it. However, this one is: ( https://youtu.be/KM8PIiqq97c?si=RgpvGnOKA7ZbfZoQ ). Anyone wanting to make a good calculator, check out that tutorial because he saved me! Thanks KennyYipCoding on youtube. Also surprisingly simple."}, {"post_id": 71089, "ts": "2026-09-20T08:57:41Z", "hours": 4.3286, "text": "Devlog 29: Struggling on the calculator window 4 hours down the drain. I worked for 4 hours trying to get a simple thing like a calculator to work. Some how it kept not working even when I followed a tutorial correctly. I will try again tomorrow maybe with a different tutorial, but honestly idk what happend. Also part of it was me trying to code in python and that turned out a disaster, but then I went to JavaScript and still didn’t work??. I know it might seem weird and also stardance if your reading this you can like delete the 4 hours or whatever from my thing Incase idk if this is fraud or something."}, {"post_id": 70477, "ts": "2026-09-19T08:14:43Z", "hours": 1.3042, "text": "Devlog 28: Added achievement alert Added some nice animations to stuff and added a achievement/alert for the snake game, when you hit a specific score."}, {"post_id": 70364, "ts": "2026-09-19T01:39:36Z", "hours": 2.1081, "text": "Devlog 27: Designing the snake game window Design on the Tiger Snake Game app is finished. I added the instructions in the manual app, but the game is pretty simple to play. I added a skin feature in case the stripes moving are a bit hard on some peoples eyes. I added the high score tracker which saves your high score even if you close the tab. And just fixed the lay out made it look nice."}, {"post_id": 70309, "ts": "2026-09-18T22:15:48Z", "hours": 3.1364, "text": "Devlog 26: Finished adding the tiger snake game Finished making my Tiger snake game. I watched a very good and easy tutorial, link: ( https://youtu.be/Je0B3nHhKmM?si=DQiSr36gDDSM3Psj ) I still need to design it more to make it look more like a real Tiger snake, like the logo if you can see all the way down there. I think also I could make some Instructions and a highscore button, so that will be for next time."}, {"post_id": 69938, "ts": "2026-09-18T03:03:26Z", "hours": 0.63, "text": "Devlog 25: Secret button editing Just added the hover glow to the secret button so you can be more sure your on something special. So far I think my project is close to the end and I just need to do now fixing up to make perfect . And maybe even an extra feature. This is what the front of my page looks like (there more apps and features, the app side bar is scrollable, as you can see from my other devlogs)."}, {"post_id": 69069, "ts": "2026-09-16T10:01:51Z", "hours": 1.5325, "text": "Devlog 24: Added the secret button Finished Adding the Secret feature! I cannot show you yet because it’s secret, but you could try and find it on my site (It’s not that hard its pretty obvious to find the secret). Also I added a ding when you find the secret and as you can see the alert in the image at the bottom, so you will know if you found it."}, {"post_id": 68559, "ts": "2026-09-15T10:07:36Z", "hours": 2.4817, "text": "Devlog 23: Making the weather window look nice Made the weather app have a default weather image now, but when the user inputs city it will change to the correct one. Also as you can see I made the handle a starling, and also in the bottom right corner there is 3 of them. The handle starling is for all of the windows and is how you drag, by holding it. That is for something I am making right now, however I am not finsihed yet. Just trying to make my website look as good as possible right now, while keeping the simple theme. (edit: I actually just realized that this devlog is exactly 1 second longer than the previous one)."}, {"post_id": 67978, "ts": "2026-09-14T09:38:41Z", "hours": 2.4814, "text": "Devlog 22: Designing the manual window, welcome window, and other windows Finished designing the manual app. It looks not too bad. Also I edit the welcome window bit, but I still have some work to do, to make it stand out. This took a while as I was playing around with the CSS also fixing other windows and stuff."}, {"post_id": 67070, "ts": "2026-09-13T03:43:12Z", "hours": 0.9197, "text": "Devlog 21: Adding content to manual window Just added some information into the Manual app. Im not finished yet, I still need to make it look nicer. I will add some images and stuff to it next."}, {"post_id": 66369, "ts": "2026-09-12T05:10:30Z", "hours": 2.5203, "text": "Devlog 20: Added icon side bar, making new window, and fixing roar sound errors Finished making the side bar with the icons. The side bar is scrollable, because I had too many icons and so that keeps them stored there better. I also started making the manual window, but I haven’t added any content yet. I also fixed some errors such as, the roar sound button would keep playing, even when the window was closed, so I thought it might be better if it stopped the sound when the sound window is closed. I also fixed some other errors and stuff, but everything looks good now."}, {"post_id": 65841, "ts": "2026-09-11T07:50:12Z", "hours": 0.9428, "text": "Devlog 19: Real working weather window added Finally finished the weather window. It was very hard to do for me. I’m not done yet I still need to edit it to make the design look more good. The api works, and it runs smoothly. Need to change a few things also like the app icon side bar. Used a bit of AI to learn how to set up the api, since I was using a different one than the tutorial, it was much harder, but still uses same main core code. Overall I am happy with how It turned out. There’s still a lot to improve on, however I learn a lot from this."}, {"post_id": 65744, "ts": "2026-09-11T03:05:00Z", "hours": 0.3494, "text": "Devlog 18: Adding fun fact window app icon Adding fun fact window app icon, and fixing some other stuff finished up the window. This is for the old weather window that I gave up on, that is now gonna be a weather fun fact window. I will still have both windows, its just one will be for a fun fact and one for a working API weather app."}, {"post_id": 65297, "ts": "2026-09-10T10:38:52Z", "hours": 0.8128, "text": "Devlog 17: Trying to make Working Weather window again Trying again to make a real working weather window. Im still gonna keep the other one as like a cool fact, but this one is gonna work. I have found a good tutorial and I am really trying to make this work."}, {"post_id": 65212, "ts": "2026-09-10T05:52:50Z", "hours": 1.5169, "text": "Devlog 16: Scratch the weather API idea Slight change in idea. No more weather api. Its a static window that shows the hottest day in Madhya Pradesh, home to the highest population of tigers in an Indian state. Looks pretty nice though."}, {"post_id": 65078, "ts": "2026-09-09T23:01:26Z", "hours": 1.1167, "text": "Devlog 15: Started trying to make weather window Just started making a new weather window. I’m 15 minutes through the tutorial and now I need to add the api. I have never used an API before so this might be hard."}, {"post_id": 64670, "ts": "2026-09-09T08:08:11Z", "hours": 2.3972, "text": "Devlog 14: Adding comments to js and making new window Finally finished sorting out my code so its easier to move and navigate around, using comments and stuff. I also made this Tiger information window, that shows some interesting information and facts about tigers. The window is scrollable and there is more information below this. Took me a while to do all of this and find information and stuff, but it looks like it turned out not too bad."}, {"post_id": 64472, "ts": "2026-09-08T21:55:55Z", "hours": 0.9753, "text": "Devlog 13: Adding comments to my CSS Just sorting out my CSS so its easier to read. Adding comments and making specific parts for different windows and features so that they are easy to find."}, {"post_id": 64030, "ts": "2026-09-08T04:39:41Z", "hours": 1.3342, "text": "Devlog 12: Added start up animation Made an animation on site startup. The text comes in from the left and then the tiger drops down. It wasn’t too hard, but I did find some struggle. I used Canva to make the design for the banner here and in my README are the credits to all of the photos and resources I have used from other people."}, {"post_id": 63439, "ts": "2026-09-07T09:04:16Z", "hours": 2.1725, "text": "Devlog 11: Added dark/light mode switcher feature Just made a dark/light mode switcher in the settings window. Also if you close the tab it will stay the way you left it (This is the same for the background switcher as well). I also fixed many of the errors that I had, such as it not saving."}, {"post_id": 62754, "ts": "2026-09-06T08:40:59Z", "hours": 0.5739, "text": "Devlog 10: Making an images and audio file, and fixing a few errors Just fixing an few errors and tidying things up. I had a few errors in my code so I just fixed that and then made my images and audio files more neater."}, {"post_id": 62556, "ts": "2026-09-06T00:26:52Z", "hours": 2.5967, "text": "Devlog 9: Added a settings window with a background changer Finally finished the settings window. Its a background changer and it took so long to make and even longer to layout. The background changer works perfectly and looks good in both backgrounds. Was a bit hard though."}, {"post_id": 62022, "ts": "2026-09-05T07:17:22Z", "hours": 1.5619, "text": "Devlog 8: Added a new tiger map window Added Tiger species habitat map. It shows where different Tiger species live and a bit more info. (Image from Wildlife foundation in Thailand (WFFT))."}, {"post_id": 61964, "ts": "2026-09-05T04:49:42Z", "hours": 0.9481, "text": "Devlog 7: Added multiple sound effects Added some different Tiger species sounds to the window, so you can see the slight differences and similarities. First Devlog after first ship."}, {"post_id": 61803, "ts": "2026-09-04T21:49:12Z", "hours": 0.4042, "text": "Devlog 6: Readme added Readme Added now ready to ship (There is more to the Readme than the image shows). The README includes information about my website and how I made it."}, {"post_id": 61420, "ts": "2026-09-04T10:10:11Z", "hours": 1.6531, "text": "Devlog 5: New window added - roar sound effect Added a working Tiger roar sound effect button to a new window. When you press the button is makes a roar sound effect."}, {"post_id": 61318, "ts": "2026-09-04T05:17:55Z", "hours": 2.0894, "text": "Devlog 4: Adding tiger gallery window Added a new photo gallery window to my site. There is also now a close button that closes the window, and I finished the tutorial this is just what I made instead of the tutorials other window, but it uses the same properties."}, {"post_id": 60735, "ts": "2026-09-03T09:19:54Z", "hours": 2.0831, "text": "Devlog 3: Adding drag and open buttons Added the drag buttons to the window, also added the open button as you can see in the top left corner. I made this In JavaScript using event listeners .On part 4 of the guide."}, {"post_id": 60545, "ts": "2026-09-02T23:07:05Z", "hours": 0.3536, "text": "Devlog 2: Adding the working date/time Adding a working date/time at the top right corner. It updates live according to where you live. Still on the tutorial."}, {"post_id": 60127, "ts": "2026-09-02T09:31:06Z", "hours": 0.4903, "text": "Devlog 1: The start of my WebOS Making my first WebOS. Finished part one of the tutorial. here’s what it looks like right now."}]...
|
Title: Tiger OS by @Rayan123-4 | Stardance
Devlog Title: Tiger OS by @Rayan123-4 | Stardance
Devlogs:
Devlog 1: The start of my WebOS Making my first WebOS. Finished part one of the tutorial. here’s what it looks like right now.
Devlog 2: Adding the working date/time Adding a working date/time at the top right corner. It updates live according to where you live. Still on the tutorial.
Devlog 3: Adding drag and open buttons Added the drag buttons to the window, also added the open button as you can see in the top left corner. I made this In JavaScript using event listeners .On part 4 of the guide.
Devlog 4: Adding tiger gallery window Added a new photo gallery window to my site. There is also now a close button that closes the window, and I finished the tutorial this is just what I made instead of the tutorials other window, but it uses the same properties.
Devlog 5: New window added - roar sound effect Added a working Tiger roar sound effect button to a new window. When you press the button is makes a roar sound effect.
Devlog 6: Readme added Readme Added now ready to ship (There is more to the Readme than the image shows). The README includes information about my website and how I made it.
Devlog 7: Added multiple sound effects Added some different Tiger species sounds to the window, so you can see the slight differences and similarities. First Devlog after first ship.
Devlog 8: Added a new tiger map window Added Tiger species habitat map. It shows where different Tiger species live and a bit more info. (Image from Wildlife foundation in Thailand (WFFT)).
Devlog 9: Added a settings window with a background changer Finally finished the settings window. Its a background changer and it took so long to make and even longer to layout. The background changer works perfectly and looks good in both backgrounds. Was a bit hard though.
Devlog 10: Making an images and audio file, and fixing a few errors Just fixing an few errors and tidying things up. I had a few errors in my code so I just fixed that and then made my images and audio files more neater.
Devlog 11: Added dark/light mode switcher feature Just made a dark/light mode switcher in the settings window. Also if you close the tab it will stay the way you left it (This is the same for the background switcher as well). I also fixed many of the errors that I had, such as it not saving.
Devlog 12: Added start up animation Made an animation on site startup. The text comes in from the left and then the tiger drops down. It wasn’t too hard, but I did find some struggle. I used Canva to make the design for the banner here and in my README are the credits to all of the photos and resources I have used from other people.
Devlog 13: Adding comments to my CSS Just sorting out my CSS so its easier to read. Adding comments and making specific parts for different windows and features so that they are easy to find.
Devlog 14: Adding comments to js and making new window Finally finished sorting out my code so its easier to move and navigate around, using comments and stuff. I also made this Tiger information window, that shows some interesting information and facts about tigers. The window is scrollable and there is more information below this. Took me a while to do all of this and find information and stuff, but it looks like it turned out not too bad.
Devlog 15: Started trying to make weather window Just started making a new weather window. I’m 15 minutes through the tutorial and now I need to add the api. I have never used an API before so this might be hard.
Devlog 16: Scratch the weather API idea Slight change in idea. No more weather api. Its a static window that shows the hottest day in Madhya Pradesh, home to the highest population of tigers in an Indian state. Looks pretty nice though.
Devlog 17: Trying to make Working Weather window again Trying again to make a real working weather window. Im still gonna keep the other one as like a cool fact, but this one is gonna work. I have found a good tutorial and I am really trying to make this work.
Devlog 18: Adding fun fact window app icon Adding fun fact window app icon, and fixing some other stuff finished up the window. This is for the old weather window that I gave up on, that is now gonna be a weather fun fact window. I will still have both windows, its just one will be for a fun fact and one for a working API weather app.
Devlog 19: Real working weather window added Finally finished the weather window. It was very hard to do for me. I’m not done yet I still need to edit it to make the design look more good. The api works, and it runs smoothly. Need to change a few things also like the app icon side bar. Used a bit of AI to learn how to set up the api, since I was using a different one than the tutorial, it was much harder, but still uses same main core code. Overall I am happy with how It turned out. There’s still a lot to improve on, however I learn a lot from this.
Devlog 20: Added icon side bar, making new window, and fixing roar sound errors Finished making the side bar with the icons. The side bar is scrollable, because I had too many icons and so that keeps them stored there better. I also started making the manual window, but I haven’t added any content yet. I also fixed some errors such as, the roar sound button would keep playing, even when the window was closed, so I thought it might be better if it stopped the sound when the sound window is closed. I also fixed some other errors and stuff, but everything looks good now.
Devlog 21: Adding content to manual window Just added some information into the Manual app. Im not finished yet, I still need to make it look nicer. I will add some images and stuff to it next.
Devlog 22: Designing the manual window, welcome window, and other windows Finished designing the manual app. It looks not too bad. Also I edit the welcome window bit, but I still have some work to do, to make it stand out. This took a while as I was playing around with the CSS also fixing other windows and stuff.
Devlog 23: Making the weather window look nice Made the weather app have a default weather image now, but when the user inputs city it will change to the correct one. Also as you can see I made the handle a starling, and also in the bottom right corner there is 3 of them. The handle starling is for all of the windows and is how you drag, by holding it. That is for something I am making right now, however I am not finsihed yet. Just trying to make my website look as good as possible right now, while keeping the simple theme. (edit: I actually just realized that this devlog is exactly 1 second longer than the previous one).
Devlog 24: Added the secret button Finished Adding the Secret feature! I cannot show you yet because it’s secret, but you could try and find it on my site (It’s not that hard its pretty obvious to find the secret). Also I added a ding when you find the secret and as you can see the alert in the image at the bottom, so you will know if you found it.
Devlog 25: Secret button editing Just added the hover glow to the secret button so you can be more sure your on something special. So far I think my project is close to the end and I just need to do now fixing up to make perfect . And maybe even an extra feature. This is what the front of my page looks like (there more apps and features, the app side bar is scrollable, as you can see from my other devlogs).
Devlog 26: Finished adding the tiger snake game Finished making my Tiger snake game. I watched a very good and easy tutorial, link: ( https://youtu.be/Je0B3nHhKmM?si=DQiSr36gDDSM3Psj ) I still need to design it more to make it look more like a real Tiger snake, like the logo if you can see all the way down there. I think also I could make some Instructions and a highscore button, so that will be for next time.
Devlog 27: Designing the snake game window Design on the Tiger Snake Game app is finished. I added the instructions in the manual app, but the game is pretty simple to play. I added a skin feature in case the stripes moving are a bit hard on some peoples eyes. I added the high score tracker which saves your high score even if you close the tab. And just fixed the lay out made it look nice.
Devlog 28: Added achievement alert Added some nice animations to stuff and added a achievement/alert for the snake game, when you hit a specific score.
Devlog 29: Struggling on the calculator window 4 hours down the drain. I worked for 4 hours trying to get a simple thing like a calculator to work. Some how it kept not working even when I followed a tutorial correctly. I will try again tomorrow maybe with a different tutorial, but honestly idk what happend. Also part of it was me trying to code in python and that turned out a disaster, but then I went to JavaScript and still didn’t work??. I know it might seem weird and also stardance if your reading this you can like delete the 4 hours or whatever from my thing Incase idk if this is fraud or something.
Devlog 30: Finally made the calculator window Idk how I managed to make it, but maybe the tutorial I was watching before was just not it. However, this one is: ( https://youtu.be/KM8PIiqq97c?si=RgpvGnOKA7ZbfZoQ ). Anyone wanting to make a good calculator, check out that tutorial because he saved me! Thanks KennyYipCoding on youtube. Also surprisingly simple.
Devlog 31: Making the drawing window function Making drawing window. Don’t mind why it looks weird right now, I will fix it later. Also I spent a lot of time trying to fix some hidden error I didn’t know where it was and I was totally confused, so I went back a commit and put my working code back and it fixed. I think I am going to wrap up my project soon, so that I don’t create more project breaking errors.
Devlog 32: Adding the paint window My Tiger Masterpiece! Finally finished making the paint board window. I also fixed a few bugs that I had with the drag header, and it not working. Im going to add the title to this soon and also I will add an undo button incase you accedently delete your Tiger mona lisa.
Devlog 33: Adding undo button to paint window Added the undo button and made it so that it will undo lines, fill, and clear. This means that if you accidently fill your work or clear it you can press undo and it will bring it back :). Works for multiple times, because it saves it in a array. I am very happy with how it came out, because it was quite challenging to make.
Devlog 34: Adding information to manual window Just adding some more information to my Manual, for the new things that I have made. This is where users can find information about different features in my website. I wrote it all myself.
Devlog 35: Fixed many usability errors that I had such as Making boundaries for dragging the window. Making the scroll app bar optimize for different window sizes. Fixing a bug where you can play all roar sounds at once and they overlap. And a few random glitched that I found while trying to fix these.
Devlog 36: Adding a link window Creating a link window that has multiple links. The window is closable and it uses the same functions as the other windows except that you cannot drag it.
Devlog 37: Icon hover response Finsished making the icons hover display to stay on the icon image, if the corrisponding window is still open. Once the window is closed the style goes back to normal, but still if you hover it will have the style.
Devlog 38: Finishing touches Adding finishing touches to my WebOS such as fixing code to work better. Making it so if you tap a window that is behind another window, it gets moved to the front. And some other fixes.
Devlog 39: May be Last Devlog This is going to probably be my final devlog until I ship. I have enjoyed making this project and I hope that I can maybe make it better in the future. This video shows all of my windows and stuff.
Devlog 40: Camera Animation Added Added a camera flash animation when you open the gallery app. It was quiet hard to make flash show after the camera image, but it works well.
Devlog 41: Styling the windows, making it look nice Fixed some of the styling on the windows, specifically on the manual window and the welcome window, since my rating said they looked like a power point. Trying to make my website look much cleaner and have a better design.
Devlog 42: Minimizer button Added a minimizer button to all of the windows. I made it so that when users press the button, the hover filter glow will show on the corrisponding icon, to let users know the window is open. Difficulty This was fairly simple to do, and I just had to make some code for it in the same place near the close button in the Javascript.
Devlog 43: Fix camera animation Fixing the camera animation, making it so the user cannot spam open the window, making the animation run for however many times the user tapped the icon. Difficulty It wasn’t too hard to do, just needed to make some simple if statement to check if the window had been opened. Edited Also adjusted some styling in the map window making the text hover change in css.
Devlog 44: Fixed a z-index error, adjusted the colors and styling I found a z-index error in the Javascript file, where the images when opened, wouldn’t go to the highest z-index, so I just added z-index 99 when window open. I also mainly adjusted the colors, experimenting in CSS, to get the best design and the best text to background ratio in CSS. Difficulty Not too bad, because I didn’t have to go through hidden Javascript syntax errors and stuff, so it was mostly stuff I could just look around for a bit until I find the missing parenthesis or something.
Devlog 45: Added a lot of in depth comments to my Javascript file. And adding a download button to the paint window. I went through my Javascript code and worked on improving my comments and adding more, where they were needed. I focused on being very descriptive with my comments, explaining what things do and how. I also added some hover animations to the paint board buttons. Download button added I added a download button to my paint window. I made it so when the user clicks the button, the browser download trigger is activated and the image is downloaded. I did this in Javascript using toDataURL(). Diffuculty Making the comments was fairly easy, as I just went to important parts with no comments and added explanations about them. Also the Javascript for the download button wasn’t too hard, and I think I am learning more and more about Javascript, which is helping make it easier and easier.
Devlog 46: Edited some of the CSS styling on the windows and top bar. I edited the CSS styling on things like the, text, the windows, and the top bar. I used functions such as, text-shadow and box-shadow, to make text and windows stand out and look much nicer. I also edited the border color and size of many things to make them either pop or, look better in between colors. Things like animations scale and filter, also helped make it look much more appealing. What did I learn and how difficult was it I learnt more about CSS styling and how to make project look extra nice. I was playing around with the CSS learning new mechanics and functions, to help make different things and parts of project look more nicer and clean. This was fairly easy and I didn’t have any trouble with doing so.
Devlog 47: Add text on icon hover, that displays window name. I made it so that when you hover over the icons in the icon bar, it will show the name of the window that the icon is connected to. This makes it easier for users to know what icon goes to which window, without guesses based on the icon image. What did I learn and what was difficult. At first I thought that making this would only need a bit of HTML and CSS, and normally it would. However I came upon a problem and CSS wasn’t fixing it, nor was the HTML, so I had to adapt and use Javascript to fix my error. Eventually it worked out in the end, and not much Javascipt was actually needed. This helped me to learn how to fix errors outside of the box, and too try different ways to fix them. This helped me learn more about problem solving and debugging, which will help me in future projects.
Devlog 48: Updating the CSS styling and improving the interface visibility. I edited the CSS stying adding more things such as box-shadow and different color border. I made sure the web os looked good and wasn’t too heavily colored, that might make the text less easy to read. I also fixed the minimize button in the link window since it was off centered, because of the small size of it compared to the normal window sized ones. Difficulty: For me to be honest, this was difficult not because of like syntax and stuff, but because I’m not very good at styling. I tried to like make it pop and look extra good, and I think I have done well.
Devlog 49: Adding tiger population chart window and UI polishing. I added a new window that shows the tiger population in the countries Russia, Nepal, and India. The data points are the milestones of there tiger conservation across 2010 to 2016 to 2022. The chart is a line graph and the 3 line variables are the countries. The chart looks very good and I am happy with how it turned out. I also polished more of my webOS using nice fonts such as “Fira Sans”, “Bold”, and “Italic”. I styled it and made sure across my webOS there was a orange, black, and white theme, like the tigers colors. What did I learn and what was difficult The most difficult part of it was debugging everything when I found errors. I learnt the functions for making a graph in JavaScript and how to get data and put it into a graph using code, while still making it look nice. This helps me a lot especially for more projects I might do in the future using data and statistics.
Devlog 50: Adding new 3D Tiger Earth window. I added a new window made with three.js, that is a 3D globe of the world that is, movable, rotatable, and zoom in able. I also added a feature where you can stop the rotation, so that its easier to view (And find the hidden Tiger). First I made the 3D circle and of the globe and then added the texture and animations. What did I learn and what was difficult. This is my first time making a project like a 3D thing, so I was a bit new to this. Now I have learnt much more about how to make 3D projects like this and I hope I can make many more simulation projects like this in the future.
Devlog 51: Adding stars, realistic tilt, and better quality textures to the 3D earth. I added 2000 stars to the earth window and even made a realistic tilt for the earth, like how it is in real life. I think that the stars made a big impact on the overall feel of the window, and makes it look much better. I also added a 8k quality texture onto the earth model instead of a 2k quality texture, so that the earth would be more clearer to see.
Ships:
I made my first WebOS. It was very difficult and challenging to make, but the jams guide made it much more easier to get started with and finish. The site currently has 2 apps, but there will be more to come in the future.
I made TigerOS, a tiger themed WebOS made for the WebOS Stardance mission. I made it using HTML, CSS, and Javascript. It has many features such as, a real time weather app, a working calculator app, a snake game app, a paint canvas app, sounds, special effects, and the list goes on. The most challenging part of making this, was getting everything to work smoothly how I want it with no errors. Probably the hardest thing that I made was the weather API app, since I had never worked with an API before it was very challenging, but I learnt a lot. I am very proud of how it came out, and that all my apps and features work to how I want it. I didn’t think I would make it this far to have so many cool stuff, but I am very happy with my final product. I suggest that anyone wanting to try out my site, they should test out all of the apps and the features. I also encourage you to find the hidden secret feature. However, it should be pretty obvious to find. Test out all of the weather apps, and even try to beat my high score of 25 on the tiger snake game. Please take some time to explore TigerOS and leave a thoughtful review, as any feedback would really help me to improve. Thanks Stardance, for setting up this oportunity for me and everyone else....
|
1792832075.1565046
|
1792918475.1565046
|
|
56718
|
emma's site by @emma | Stardance
|
emma
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T23:37:08Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finished everything up and figured out GitHub Pages again! This is my favorite iteration of the emma personal website so far, let’s see if I’ll make another next year :D", "repo": "https://github.com/prplwtf/prpl.wtf", "demo": "https://prpl.wtf"}]...
|
[{"post_id": 74672, "ts": "202 [{"post_id": 74672, "ts": "2026-09-27T23:34:40Z", "hours": 3.9367, "text": "i may or may not have done a lot of stuff and kinda forgot to devlog - anyhow, it’s publicly available now and i finished making markdown components"}, {"post_id": 60788, "ts": "2026-09-03T11:48:26Z", "hours": 1.7458, "text": "I took some time to make this nice micro-interaction. This copies the link to the heading you have hovered to your clipboard, in the context of a blog post."}, {"post_id": 60141, "ts": "2026-09-02T10:07:04Z", "hours": 0.535, "text": "Working on the blog post view and styling markdown components so everything looks nice and tidy!"}, {"post_id": 59884, "ts": "2026-09-01T21:30:27Z", "hours": 1.72, "text": "I did some work on the blog page. The blog side of things should be fairly minimal, as effects shouldn’t be distracting people from reading a post, but also not too minimal for it not to fit the design language I’m going for. I settled for something simple with nice, snappy, hover animations. Oh right, I also worked on a fancy animation that followed your mouse on the homepage but I ended up throwing it away as it was a bit too much."}, {"post_id": 59612, "ts": "2026-09-01T15:05:26Z", "hours": 2.6161, "text": "Finally, I finished the works page. I wanted to create some project-specific pages but I convinced myself not to. Next up, I might add a blog."}, {"post_id": 58862, "ts": "2026-08-31T13:16:53Z", "hours": 0.5347, "text": "Been working on the works page! I’m considering either linking everything to their GitHub repositories or creating dedicated pages for them 🤷♀️"}, {"post_id": 58820, "ts": "2026-08-31T12:25:59Z", "hours": 5.1419, "text": "I’ve been working on my personal website for the past few days and I think the homepage is pretty much done, take a peek :)"}]...
|
Title: emma's site by @emma | Stardance
Devlo Title: emma's site by @emma | Stardance
Devlogs:
I’ve been working on my personal website for the past few days and I think the homepage is pretty much done, take a peek :)
Been working on the works page! I’m considering either linking everything to their GitHub repositories or creating dedicated pages for them 🤷♀️
Finally, I finished the works page. I wanted to create some project-specific pages but I convinced myself not to. Next up, I might add a blog.
I did some work on the blog page. The blog side of things should be fairly minimal, as effects shouldn’t be distracting people from reading a post, but also not too minimal for it not to fit the design language I’m going for. I settled for something simple with nice, snappy, hover animations. Oh right, I also worked on a fancy animation that followed your mouse on the homepage but I ended up throwing it away as it was a bit too much.
Working on the blog post view and styling markdown components so everything looks nice and tidy!
I took some time to make this nice micro-interaction. This copies the link to the heading you have hovered to your clipboard, in the context of a blog post.
i may or may not have done a lot of stuff and kinda forgot to devlog - anyhow, it’s publicly available now and i finished making markdown components
Ships:
I finished everything up and figured out GitHub Pages again! This is my favorite iteration of the emma personal website so far, let’s see if I’ll make another next year :D...
|
1792853739.8414683
|
1792940139.8414683
|
|
44313
|
Cube Matcher by @LCdev1234 | Stardance
|
LCdev1234
|
1
|
60.0
|
1031
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T23:19:21Z", "hours": 60.0, "multiplier": 17.28, "payout": 1031, "blessing": "neutral", "text": "This is Cube Matcher, a strategy puzzle game in wich you need to move a 3x3 cube to match a shown pattern, but the problem is that there are zombies climbing the walls that move toward you each time you take an action!! So you need to be careful about how many actions you take before having to knock them. The most challenging part of my project was making the 3D cube and the player interactions. This was becouse I decided to make the 3D system in my game from scratch, so I had to add projections, and deal with the cube coordinates of each point (that were a lot), and for the player interactions the most difficult part was knowing when the player and the cube needed to perform an interaction becouse I needed to add a fake movement (the animation) for the action not to see so quickly, so i needed to sync the animation with the real position. In the end the project turned out like I imagined from the beggining just changing some small concepts for the game to be fun and fair.", "repo": "https://github.com/LCdev1234/Cube-Matcher", "demo": "https://lcdev1234.itch.io/cube-matcher"}]...
|
[{"post_id": 74659, "ts": "202 [{"post_id": 74659, "ts": "2026-09-27T21:44:20Z", "hours": 4.0744, "text": "Devlog #12: Final devlog Added a in-game tutorial and music and sounds. I finally finished making the game!! For the last modifications I added the tutorial of the game with the instructions and example videos to show how everything works. I also added background music and sound effects, it was difficult finding the ones that fit best my game, but I was able to find some really good ones."}, {"post_id": 74159, "ts": "2026-09-26T19:58:35Z", "hours": 2.6803, "text": "Devlog #11 Finished adding the menus to the game!!"}, {"post_id": 73837, "ts": "2026-09-26T03:59:13Z", "hours": 2.8544, "text": "Devlog #10 I added the zombies actual movement to the game, each times the player makes an action the zombies take a few steps. I also added the death screen and the “Play Again” button alredy works. While adding this, I changed a name of a git commit and it merged with the one i was currently working on - I tried to undo what I had done, but I coudnt fix it, I even through I was going to have to code the last parts of the game again, but I was able to fix it using the integrate Copilot AI integrated in VS code."}, {"post_id": 73753, "ts": "2026-09-25T21:11:48Z", "hours": 8.365, "text": "Devlog #9 Added the zombies to the game. The zombies werent so difficult to code. The only problems I had were some interactions with the player or cube. One of the things that took me the most time was making the zombies follow the player when they were on the top, it turned out that one of my lines of code to keep the zombies in their column when climbing, was the problem."}, {"post_id": 72434, "ts": "2026-09-22T22:58:16Z", "hours": 4.725, "text": "Devlog #8 I added the code to check if the upper face pattern of the cube matches the one shown, and I was finally able to tried solving it myself. When doing so I notice that it is a little hard (at least for me) to solve the cube, and adding zombies as I originally planned would not make a lot of sense, so i decided it to change the idea a little bit, instead of the zombies climbing the wall and stopping them and be able to fitgh them once they were on top (the original idea), I will add the zombies so they slowly move when the player slides or rotates the cube and once the zombie is on top the player is basicly dead."}, {"post_id": 70940, "ts": "2026-09-20T02:34:15Z", "hours": 3.9314, "text": "Devlog #7 Added the sliding stickers cube mechanic. The dificult part wasn’t making the stickers change place, it was the sticker movement animation, witch took took the most hours to code. This was becouse i needed to be show a false player and sticker movement while still having the real position variables and once the animation ended record the new position."}, {"post_id": 68940, "ts": "2026-09-16T02:39:43Z", "hours": 6.1658, "text": "Devlog #6 This time, I mostly just added some small changes and fixes, some of the more important changes are: I changed the player textures to a simple white square with eyes, this was just becouse I am not good drawing and making the animations was too dificult, to make the square a little more alive, I added some squishing to its animation using code I added some invisible walls around the player so it dont fall off the cube, but I made so when the rubik cube is rotating the player could fall if not careful I also made some small fixes to some problems I find along the way while making all of this changes"}, {"post_id": 63633, "ts": "2026-09-07T15:41:05Z", "hours": 9.5733, "text": "Devlog #5 I couldn’t advance as fast with the project because of school but now I was able to make the player be able to interact with the cube (rotating it), it was a little hard specially the parts before actually making the interactions that were upgrading the collision system, because before the collision system was only “not fall down past certain y level” which means it didn’t have to see anything with the cube, with the upgraded collisions now it depends on the cube and even when its rotated it can collide normally, also I changed a little bit the jumping so now it has a little cooldown so it can’t be spammed and for rotating the cube I made it so the player needs to jump twice in less than a certain time for it to rotate. I think that the rotation interaction already works well I will next add a solving system and maybe add a new interaction mechanic with the cube."}, {"post_id": 47221, "ts": "2026-08-15T00:12:05Z", "hours": 5.6078, "text": "Devlog #4 Hi there! I took a little more time on this part of the code mainly because I added something that broke the code, and i coudnt find the evil piece of code, but I finally got it working. I just added the player on top of the cube, added some pretty much basic physics that include jumping and walking. For the walking i made it so the controls always move where the camera is viewing not the actual game coordinates, it just means that the player walks forward, backward, and to the sides no matter how the cube is rotated. I also added basic collision system which I am in the process of upgrading, once I get the collisions working better I will desing the other player animations because right now is just a idle animation replaying no matter what. Those are the main features i added aside from fixing some bugs that my code had, next I will be adding some of the main mechanics of the game (rotating the cube) so that the player can start making some actions. Thanks for reading"}, {"post_id": 44366, "ts": "2026-08-10T02:28:58Z", "hours": 4.1247, "text": "Devlog #3 I alredy added the cube textures, and divided the cube into a 3x3 grid, I also added rubiks cube-style rotations and the different color textures. I decided to give the textures that hand painted style becouse I think it seems cool!!. This ended up being more time consuming than I expected, and still needs some work. For now the code just defines the starting colors and lets me rotate the different parts of the cube freely. However I still need to make the rotation permanent and to stored in the cube colors. With this I finally finished the basics of the cube, so I can alredy start working on the player next. The player will be able to interact with the cube so I can finally start working with the real game mechanics."}, {"post_id": 43476, "ts": "2026-08-08T19:23:15Z", "hours": 4.7336, "text": "Devlog #2 I was alredy able to add textures to the 3d cube!! It was more difficult that i expected, i needed to add texture layering so the faces dont overlap each other, and I had to learn how to use mesh2d to render the image texture in the cube. There is still a little visual problem, but its not ver noticible, so I’ll leave it as is for now. My next steps will be to add the Rubik cube rotations and the real and final textures for the cube."}, {"post_id": 42246, "ts": "2026-08-06T21:18:45Z", "hours": 2.7878, "text": "Devlog #1 Hello there! i finally managed to render a 3d cube for the game i just starting working on. I know its simple for now, but next i’ll add textures and the rubik’s cube movement. The game is basically about completing a cube face with a random generated pattern while some little monsters try to stop you… Its still work in progress, and i’ll show more as the idea becomes clearer and the game takes shape."}]...
|
Title: Cube Matcher by @LCdev1234 | Stardance
Dev Title: Cube Matcher by @LCdev1234 | Stardance
Devlogs:
Devlog #1 Hello there! i finally managed to render a 3d cube for the game i just starting working on. I know its simple for now, but next i’ll add textures and the rubik’s cube movement. The game is basically about completing a cube face with a random generated pattern while some little monsters try to stop you… Its still work in progress, and i’ll show more as the idea becomes clearer and the game takes shape.
Devlog #2 I was alredy able to add textures to the 3d cube!! It was more difficult that i expected, i needed to add texture layering so the faces dont overlap each other, and I had to learn how to use mesh2d to render the image texture in the cube. There is still a little visual problem, but its not ver noticible, so I’ll leave it as is for now. My next steps will be to add the Rubik cube rotations and the real and final textures for the cube.
Devlog #3 I alredy added the cube textures, and divided the cube into a 3x3 grid, I also added rubiks cube-style rotations and the different color textures. I decided to give the textures that hand painted style becouse I think it seems cool!!. This ended up being more time consuming than I expected, and still needs some work. For now the code just defines the starting colors and lets me rotate the different parts of the cube freely. However I still need to make the rotation permanent and to stored in the cube colors. With this I finally finished the basics of the cube, so I can alredy start working on the player next. The player will be able to interact with the cube so I can finally start working with the real game mechanics.
Devlog #4 Hi there! I took a little more time on this part of the code mainly because I added something that broke the code, and i coudnt find the evil piece of code, but I finally got it working. I just added the player on top of the cube, added some pretty much basic physics that include jumping and walking. For the walking i made it so the controls always move where the camera is viewing not the actual game coordinates, it just means that the player walks forward, backward, and to the sides no matter how the cube is rotated. I also added basic collision system which I am in the process of upgrading, once I get the collisions working better I will desing the other player animations because right now is just a idle animation replaying no matter what. Those are the main features i added aside from fixing some bugs that my code had, next I will be adding some of the main mechanics of the game (rotating the cube) so that the player can start making some actions. Thanks for reading
Devlog #5 I couldn’t advance as fast with the project because of school but now I was able to make the player be able to interact with the cube (rotating it), it was a little hard specially the parts before actually making the interactions that were upgrading the collision system, because before the collision system was only “not fall down past certain y level” which means it didn’t have to see anything with the cube, with the upgraded collisions now it depends on the cube and even when its rotated it can collide normally, also I changed a little bit the jumping so now it has a little cooldown so it can’t be spammed and for rotating the cube I made it so the player needs to jump twice in less than a certain time for it to rotate. I think that the rotation interaction already works well I will next add a solving system and maybe add a new interaction mechanic with the cube.
Devlog #6 This time, I mostly just added some small changes and fixes, some of the more important changes are: I changed the player textures to a simple white square with eyes, this was just becouse I am not good drawing and making the animations was too dificult, to make the square a little more alive, I added some squishing to its animation using code I added some invisible walls around the player so it dont fall off the cube, but I made so when the rubik cube is rotating the player could fall if not careful I also made some small fixes to some problems I find along the way while making all of this changes
Devlog #7 Added the sliding stickers cube mechanic. The dificult part wasn’t making the stickers change place, it was the sticker movement animation, witch took took the most hours to code. This was becouse i needed to be show a false player and sticker movement while still having the real position variables and once the animation ended record the new position.
Devlog #8 I added the code to check if the upper face pattern of the cube matches the one shown, and I was finally able to tried solving it myself. When doing so I notice that it is a little hard (at least for me) to solve the cube, and adding zombies as I originally planned would not make a lot of sense, so i decided it to change the idea a little bit, instead of the zombies climbing the wall and stopping them and be able to fitgh them once they were on top (the original idea), I will add the zombies so they slowly move when the player slides or rotates the cube and once the zombie is on top the player is basicly dead.
Devlog #9 Added the zombies to the game. The zombies werent so difficult to code. The only problems I had were some interactions with the player or cube. One of the things that took me the most time was making the zombies follow the player when they were on the top, it turned out that one of my lines of code to keep the zombies in their column when climbing, was the problem.
Devlog #10 I added the zombies actual movement to the game, each times the player makes an action the zombies take a few steps. I also added the death screen and the “Play Again” button alredy works. While adding this, I changed a name of a git commit and it merged with the one i was currently working on - I tried to undo what I had done, but I coudnt fix it, I even through I was going to have to code the last parts of the game again, but I was able to fix it using the integrate Copilot AI integrated in VS code.
Devlog #11 Finished adding the menus to the game!!
Devlog #12: Final devlog Added a in-game tutorial and music and sounds. I finally finished making the game!! For the last modifications I added the tutorial of the game with the instructions and example videos to show how everything works. I also added background music and sound effects, it was difficult finding the ones that fit best my game, but I was able to find some really good ones.
Ships:
This is Cube Matcher, a strategy puzzle game in wich you need to move a 3x3 cube to match a shown pattern, but the problem is that there are zombies climbing the walls that move toward you each time you take an action!! So you need to be careful about how many actions you take before having to knock them. The most challenging part of my project was making the 3D cube and the player interactions. This was becouse I decided to make the 3D system in my game from scratch, so I had to add projections, and deal with the cube coordinates of each point (that were a lot), and for the player interactions the most difficult part was knowing when the player and the cube needed to perform an interaction becouse I needed to add a fake movement (the animation) for the action not to see so quickly, so i needed to sync the animation with the real position. In the end the project turned out like I imagined from the beggining just changing some small concepts for the game to be fun and fair....
|
1792853515.6246896
|
1792939915.6246896
|
|
59861
|
Cirkuit by @spectra | Stardance
|
spectra
|
1
|
114.58
|
1802
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T22:09:45Z", "hours": 95.0, "multiplier": 18.99, "payout": 1802, "blessing": "neutral", "text": "Hi! I’m really happy to introduce you to my biggest project so far. It’s called Cirkuit, and it’s a logic circuit sandbox simulator… but with pixel art! That means you can basically build anything using just pixels. Why pixels? You may ask. Well, many logic simulators already exist, but the issue is that most of them aren’t very accessible to the average user. That’s why I wanted Cirkuit to be as easy to use as possible. I’m already quite familiar with TypeScript and React, which I used for this project. So the most difficult part was actually figuring out how to implement features without having 100 nested loops :D I had a hard time figuring out how to build the core engine (obviously), as well as the annotation system. I’m quite proud of how it looks and how well it works. This project was a perfect opportunity for me to improve my design skills. I worked hard to reduce friction between the interface and the user (aka you, dear shipwriters). One piece of advice: try it on a computer with a mouse. Phones and trackpads are supported, but it’s not the best experience. Hope you’ll like this project!", "repo": "https://github.com/NaFo44/Cirkuit", "demo": "https://nafo44.github.io/Cirkuit/"}]...
|
[{"post_id": 81890, "ts": "202 [{"post_id": 81890, "ts": "2026-10-22T21:14:45Z", "hours": 1.7631, "text": "Devlog #38 : Integrated circuits Some of you have requested this, so I’m working on it! It’s not out yet, as it’s a pretty big feature. Integrated circuits will basically be custom components (most likely rectangles) with multiple inputs and outputs, all defined by the user. It’s literally a footprint, kinda like what you’d find in KiCad. I’ve started modifying the engine’s internals so it can handle these new types of connections (alongside the classic 1-pixel components). The real challenge here is keeping everything simple on the UX side, even though this feature targets more advanced users. The image below only shows what it might look like, this will probably change over time. As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: keep working on this feature, polish the UI/UX, ship it, and sadly… the end of stardance :("}, {"post_id": 80656, "ts": "2026-10-18T12:34:55Z", "hours": 0.6414, "text": "Devlog #37 : Probe tool is out! You can now inspect your circuits with this new tool. It highlights equipotential wires. I also added small circles to every connected ports. Next steps: UI polish, and maybe a “challenge” or “community circuits” tab."}, {"post_id": 80469, "ts": "2026-10-17T19:03:13Z", "hours": 1.3664, "text": "Devlog #36 : Probe tool and 4-bit calculator. While I was working on improving my 7-segment display, I had quite a hard time simplifying the circuit. Then I thought it could be really useful to have a tool that shows all the equipotential wires. So I’m currently working on it! It’s working, but I still have to improve its style before publishing it. Aside from that, I actually spent way too many hours improving the 4-bit calculator. And it’s now finished! It’s available in the demo circuit if you want to try it. I’ll see if I can build a keyboard later so users don’t have to enter numbers in binary. As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: finish the Probe tool, polish the UI, add a “challenge” tab."}, {"post_id": 79615, "ts": "2026-10-14T18:37:38Z", "hours": 1.4939, "text": "Devlog #35 : UI cleanup and (another) demo circuit The sidebar was getting a bit too crowded, so I added a small button to show/hide the more advanced components. The idea is to make things a little less overwhelming for new users, instead of throwing everything at them right away. I also worked on a 4-bit adder and wired it up to my 7-segment decoder! I’m going to try making it a 4-bit decoder instead of a 3-bit one, but things are going to get a lot more complicated (more numbers = more logic gates). One small issue with the adder for now: the most significant bit is on the right, so the input is basically reversed. I’ll fix that soon. In the meantime, you can already try it out in the live demo project! As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: more UI/UX improvements, adding challenges, and continuing to waste way too much of my time messing around with circuits xd"}, {"post_id": 79427, "ts": "2026-10-13T22:49:03Z", "hours": 0.4678, "text": "Devlog #34 : New component: Memory! This is one step up in difficulty! It has two inputs: a clock input (at the top) and a signal input (on the left). The output signal is provided on the right. This component can store a 1-bit value, which is updated on every rising edge of the clock signal. You can basically build anything with the component available: calculator, more advanced display (e.g. a 7-segment decoder that can go from 0 to 9). I added a 3-bit binary counter that I wired up to my 7-segment decoder! (demo bellow). It’s also included in the demo project file. Next steps: cleanup UI and improve UX (the sidebar is really really crowded right now)"}, {"post_id": 79113, "ts": "2026-10-12T18:33:18Z", "hours": 1.6869, "text": "Devlog #33 : Docs update and 1-bit memory! I added the clock to the docs page, along with some new tests for it. I’m also almost done with the 1-bit memory (basically a simplified D flip-flop). I’ll share it in the next devlog! Also, if you like this project, you can leave a star on the project’s GitHub page if you wish! Next steps: finish the 1-bit memory and clean up the UI/UX"}, {"post_id": 77284, "ts": "2026-10-06T12:57:02Z", "hours": 1.4464, "text": "Devlog #32 : New component: CLOCK (finally) This one was relatively easy to implement! The tick system was already there, but it was only triggered by user interactions. Now, your circuits run at 10 ticks/s, and the clock has a constant 1 Hz square signal (the recording below is choppy, but yes it is indeed a 1 Hz periodic signal) This component only has one output. I thought it would make building complex circuits easier if the other sides were isolated. Next steps: 1-bit memory, and then a lot of UX/UI improvements!"}, {"post_id": 76710, "ts": "2026-10-04T11:58:04Z", "hours": 1.9281, "text": "Devlog #31 : UI improvement! I replaced the old “main shortcuts” section in the sidebar with simple links. It frees up some space, makes the interface feel cleaner, and should make it much easier to add a proper “Challenge” tab later. Next steps: add a clock and a 1-bit memory."}, {"post_id": 76242, "ts": "2026-10-02T20:30:28Z", "hours": 2.1839, "text": "Devlog #30 : Component documentation! I’ve added a new page in the sidebar that shows a description and preview image for every component. A few people asked for this in the reviews of my first ship, so it felt like a good addition. Also, if you have any idea of how I could integrate the new more advanced features without overwhelming new users, I’m all ears! The sidebar is starting to get pretty crowded, so I need to find a cleaner way to organize everything and keep navigation smooth. Also, huge thanks to the Stardance staff for awarding this project Superstar ❤️ Next steps: code cleanup, UX improvements, 1-bit memory support, and FINALLY the clock."}, {"post_id": 75958, "ts": "2026-10-01T18:50:05Z", "hours": 4.13, "text": "Devlog #29 : New feature: Multi-layer! You can now build circuits across two layers! I added vias, so you can connect the two layers together (obviously). When you place a via, it’s added on both layers, it basically works like a wire. I also finished the 7-segment decoder: 3bit input, supporting only 0-4 for now. The other values are just don’t-cares. Next steps: polish the code and UI, then add some documentation."}, {"post_id": 75590, "ts": "2026-09-30T14:38:26Z", "hours": 2.4681, "text": "Devlog #28 : Multi-layer (and thank you!!) First of all, thank you so much for all the support on this project! The Stardancers who reviewed my first ship got some really great advices. I’ll be following up on a lot of it. So, I’m planning to add: a simple component documentation some challenges (e.g. 7-segment decoder, XOR gate) more advanced features (clock, 1-bit memory) and what I’m working on right now: a second layer! (currently, wires can’t cross each other, which becomes a real issue with more complex circuits) and, if I have enough time, a place where people can share circuit snippets and showcase their projects! The real challenge will be integrating all of this while keeping the UI clean and the UX intuitive. The screenshot below shows what the circuit viewport could look like with the second layer."}, {"post_id": 74661, "ts": "2026-09-27T21:50:30Z", "hours": 1.2256, "text": "Devlog #27 : Some optimization, code cleanup, and brand new readme! That’s the last devlog for this project before I ship!"}, {"post_id": 74620, "ts": "2026-09-27T19:48:58Z", "hours": 2.7119, "text": "Devlog #26 : I’ve done many small improvements, such as: ability to move annotations undo/redo buttons custom favicon Next step: SHIP!"}, {"post_id": 74207, "ts": "2026-09-26T22:21:43Z", "hours": 2.4531, "text": "Devlog #25 : UI/UX improvements! I improved the component selection outline. Now the outline is around the whole selected group of pixels, instead of around each individual pixel. You can also now delete selected components by pressing Del on your keyboard. And I added a little preview showing the pixel currently targeted by the cursor. Next steps: keep working on the UI/UX, and ship!"}, {"post_id": 74006, "ts": "2026-09-26T14:48:02Z", "hours": 2.2353, "text": "Devlog #24 : New feature (kinda): the camera position and zoom are now stored in the project file, and loaded when you open the project. That means you can setup any point of view in your project, and the viewport will be right where you left it when you open it again! I also fixed a bunch of UI inconsistencies: the hover label position is now responsive to the workspace sidebar (before, it was getting hidden behind it) unified border colors fixed the phone workspace responsiveness made the sidebar on the right a little bit smaller I also continued working on the 7-segment display, but ran into some issues since wires can’t cross each other. So I thought about having circuits on two different layers. What do you think about this? Next steps: I’ll probably polish the UX a little bit more, and then ship the project. But I’m planning to keep working on it!"}, {"post_id": 73755, "ts": "2026-09-25T21:20:35Z", "hours": 5.3378, "text": "Devlog #23 : New feature: Undo/Redo! You can now undo and redo things you’ve done in the editor. This works with both components and annotations. I had to implement a project history system. Basically, every time an action modifies the project, the previous project state is added to the past history stack. When you undo, the latest state from past becomes the current state, while the previous current state is moved to the future stack. When you redo, the next state from future becomes the current state and the previous current state is moved back to past. Yeah it’s messy 😂 I’m also still working on the 7-segment decoder. I switched to a 3-bit one, I’ll probably include it in the demo. Next steps: mostly UI and code improvements, and then I’ll probably ship it. I’ll keep working on it!"}, {"post_id": 73252, "ts": "2026-09-24T17:56:14Z", "hours": 4.5872, "text": "Devlog #22 : New feature: selection and copy/paste! You just have to press “S” and drag your mouse/pad while holding the left click. You can then copy, paste, or move the selected pixels around. Probably the most difficult feature I’ve worked on so far. I had to get some help from ChatGPT :’) I think this will be my last devlog before shipping, since one of my other projects has been pending for 18 days now, so yeah… I’ll still keep working on this project though!"}, {"post_id": 72869, "ts": "2026-09-23T21:59:41Z", "hours": 4.2722, "text": "Devlog #21 : Some UI/UX improvements and started working on selection! I’m currently working on the selection system. It works like this: Press S, then while holding it, drag the selection area with the left click. Once selected, you can copy, paste or move the selected block of pixels. It’s not committed yet! It still requires some work. Next steps: finish the selection feature, then add the clock. I also want to improve the UX as much as possible."}, {"post_id": 72417, "ts": "2026-09-22T21:44:45Z", "hours": 3.6344, "text": "Devlog #20 : demo project and UI/UX update! I added a demo project with a basic light/switch circuit, an OR and XOR gate, and a few annotations. I also (and mostly) removed the old “Quick start” section. It was becoming kinda useless since pretty much everything was already covered by the demo project. So I replaced it with a little intro to the project, along with a table of the shortcuts. I also added a little decoration to the bottom-left corner of the sidebar. I think it looks pretty dope! Next steps: copy/paste and selection, THEN add a clock."}, {"post_id": 71977, "ts": "2026-09-21T21:47:46Z", "hours": 2.3336, "text": "Devlog #19 : A little code cleanup! I refactored the App.tsx file because it was handling too many different things. Now each hook has its own dedicated file. Small refactor, but definitely a needed one! Next steps: add a demo project, improve the UI/UX and laptop pad support, add copy/paste and selection, and finally add a clock (eventually, at this point 😂)"}, {"post_id": 71454, "ts": "2026-09-20T21:12:46Z", "hours": 7.6194, "text": "Devlog #18 : You can save your work now! There are now two buttons in the bottom-left corner: Open and Save. Your projects are downloaded as .cirkuit files. This part was actually quite challenging, mostly because of the file format validation and all the tests around it. Next steps: clean up the code, cleanup the UI (it feels a bit messy right now), add a demo project, add copy/paste and selection, and add a clock"}, {"post_id": 70868, "ts": "2026-09-19T21:55:45Z", "hours": 4.9169, "text": "Devlog #17 : New feature: Annotations! You can now add labels, lines and rectangles to your circuits! I developed this feature so I can better explain what’s going on in the demo project when I’ll ship this project. But you can also use it to explain your craziest circuits! Next step: upload/download projects."}, {"post_id": 70240, "ts": "2026-09-18T19:31:51Z", "hours": 4.5228, "text": "Devlog #16 : Annotation feature (WIP) It’s not finished yet, but I’m currently working on a new annotation feature. Why? Because I’ll need it to explain the circuits in the demo! I’m adding this before the project download/upload system, because otherwise I’d have to refactor quite a bit of the system later. Also, I’m starting to build a 4-bit 7-segment decoder in Cirkuit! (I started with the two easier segments lmao) Next steps: continue working on the annotation system, then implement project download/upload."}, {"post_id": 69732, "ts": "2026-09-17T17:45:12Z", "hours": 4.5497, "text": "Devlog #15 : I added a little guide! The goal of this small guide is to explain a few things that might not be obvious to new users. You can close and reopen it whenever you want, so it doesn’t get in the way while you’re playing. It’s still available on the GitHub page if you want to give it a try! Next step: add a minimal circuit loading system (so I can add a default demo circuit), and THEN I’ll add the clock 😂😭"}, {"post_id": 69345, "ts": "2026-09-16T21:00:55Z", "hours": 4.0622, "text": "Devlog #14 : New component: AND gate! Now the two main gates are available (NOT & AND), so you can basically build anything with them! In the screenshot below, I built a working XOR logic gate, both in a large and a condensed version. A few changes since last time, apart from the new component: The old NOT gate wasn’t working properly because the circuit actually handles 3 states (low, floating, high), while the NOT component only supported low and high. So now, “floating” is considered as “low”. Also, there’s no longer real-time simulation, sadly. I had some issues with the logic gates: if you built them the wrong way, it could crash the entire webpage. So now you have to click on “Run simulation” to see the magic happen. It’s a bit less cool than real-time simulation, but at least it doesn’t nuke the whole page anymore lol. Next steps: UI/UX improvements, clock, and 1-bit memory later on"}, {"post_id": 68867, "ts": "2026-09-15T22:24:51Z", "hours": 5.5678, "text": "Devlog #13 : New component: NOT gate! This component returns the opposite signal you give it: low becomes high, high becomes low. I also improved the UI/UX. There’s now a new label in the bottom-left corner of the page that shows which component you’re hovering over with your mouse, and what its current state is. For example: “Wire | Low”, “Switch | Open”. I also fixed the pixel rendering, because before there were some really thin lines between them. And now the sidebar is responsive! Next steps: code cleanup, AND gate, clock"}, {"post_id": 68303, "ts": "2026-09-14T21:50:03Z", "hours": 2.3831, "text": "Devlog #12 : Wire states are now visually apparent! In the example below, on the first circuit, the first segment is high because it is powered by the source, while the second segment (connected to the lamp) is floating because the switch is open. I’ve also fixed a whole bunch of UI issues. You can try out this project on my GitHub page! Next step (for real this time): adding a NOT gate (the clock will come later)"}, {"post_id": 67690, "ts": "2026-09-13T21:26:19Z", "hours": 0.8703, "text": "Devlog #11 : I did some UI improvements, but before I commit, I’d like to have your opinion for the light component; which glow do you prefere?"}, {"post_id": 67626, "ts": "2026-09-13T19:32:41Z", "hours": 0.7378, "text": "Devlog #10: I added some tooltips so it’s easier to understand for you guys! Next steps: Start writting an actual documentation, add new components"}, {"post_id": 67547, "ts": "2026-09-13T17:58:10Z", "hours": 4.0528, "text": "Devlog #9 : New component: Switch This new component come with a new “simulation” mode, where you can interact with the components. Next step: add small tooltips to the sidebar elements, add new components (clock, memory…) It’s deployed so you can try it (see the project page)! I’d love to get some feedbacks."}, {"post_id": 67325, "ts": "2026-09-13T12:07:15Z", "hours": 0.7281, "text": "Devlog #8 : UI update! Changes: checkerboard background texture instead of the old grid custom selector on the component palette pixel art icons Next step: new components (switch, clock, memory…)"}, {"post_id": 67277, "ts": "2026-09-13T10:52:18Z", "hours": 2.2756, "text": "Devlog #7 : Now power and light can be connected from all sides! Also, since the old arrows are no longer necessary (at least for these components), I improved the UX by displaying the actual component icon instead. The icons on the circuit are also hidden by default now, and only appear when you hover over them. Oh and there’s an eraser now. I also deployed the website: nafo44.github.io/Cirkuit/ Next step: add new components (switch, clock, logic gates, memory)"}, {"post_id": 66878, "ts": "2026-09-12T20:32:38Z", "hours": 3.0808, "text": "Devlog #6: I wired up the simulation engine to the UI! It’s working really well, even tho there’s only 3 components right now (source, wire, light). I added arrows so you can easily rotate the components. I want this project to be really intuitive, so if you guys have some ideas to simplify this, I’m all ears! Next step: let a source and light to power/be powered through all sides, add new components (switch, clock, memory)"}, {"post_id": 66549, "ts": "2026-09-12T12:01:35Z", "hours": 4.5847, "text": "Devlog #5 : Now the component placement UI side is wired to our circuit layout! It probably don’t make much sens for you right now. Next step: modify visually the component grid according to the simulation."}, {"post_id": 65649, "ts": "2026-09-10T22:37:33Z", "hours": 5.8197, "text": "Devlog #4: The other half of the engine is done! It can now compute components state (low, high, floating, conflict) based on the connections between each other. Next step: wiring the engine to the UI."}, {"post_id": 65057, "ts": "2026-09-09T21:57:21Z", "hours": 6.5794, "text": "Devlog #3: I’ve finished half of the engine of my website, made to let you create circuits using pixel art. It wasn’t easy! I came up with a simplified netlist algorithm, to represent how a component (pixel) is oriented, how many are wired, to what, and through which side of the pixel. Components states aren’t handled yet, but that’s what I’m going to work on next."}, {"post_id": 64452, "ts": "2026-09-08T20:55:25Z", "hours": 2.1144, "text": "Devlog #2: I improved the UI, added mouse wheel support (to zoom and move the map). Now it’s time to work on the actual engine."}, {"post_id": 64381, "ts": "2026-09-08T18:22:49Z", "hours": 1.6267, "text": "Devlog #1: Hi! I just started making a website where you will be able to create circuits… with pixel art! The idea is to add different pixels: wire (gray), power (green), light (yellow), logic gates (AND, OR, …), memory (simple true/false state storage). I want to keep this as simple as possible to use."}]...
|
Title: Cirkuit by @spectra | Stardance
Devlogs:
D Title: Cirkuit by @spectra | Stardance
Devlogs:
Devlog #1: Hi! I just started making a website where you will be able to create circuits… with pixel art! The idea is to add different pixels: wire (gray), power (green), light (yellow), logic gates (AND, OR, …), memory (simple true/false state storage). I want to keep this as simple as possible to use.
Devlog #2: I improved the UI, added mouse wheel support (to zoom and move the map). Now it’s time to work on the actual engine.
Devlog #3: I’ve finished half of the engine of my website, made to let you create circuits using pixel art. It wasn’t easy! I came up with a simplified netlist algorithm, to represent how a component (pixel) is oriented, how many are wired, to what, and through which side of the pixel. Components states aren’t handled yet, but that’s what I’m going to work on next.
Devlog #4: The other half of the engine is done! It can now compute components state (low, high, floating, conflict) based on the connections between each other. Next step: wiring the engine to the UI.
Devlog #5 : Now the component placement UI side is wired to our circuit layout! It probably don’t make much sens for you right now. Next step: modify visually the component grid according to the simulation.
Devlog #6: I wired up the simulation engine to the UI! It’s working really well, even tho there’s only 3 components right now (source, wire, light). I added arrows so you can easily rotate the components. I want this project to be really intuitive, so if you guys have some ideas to simplify this, I’m all ears! Next step: let a source and light to power/be powered through all sides, add new components (switch, clock, memory)
Devlog #7 : Now power and light can be connected from all sides! Also, since the old arrows are no longer necessary (at least for these components), I improved the UX by displaying the actual component icon instead. The icons on the circuit are also hidden by default now, and only appear when you hover over them. Oh and there’s an eraser now. I also deployed the website: nafo44.github.io/Cirkuit/ Next step: add new components (switch, clock, logic gates, memory)
Devlog #8 : UI update! Changes: checkerboard background texture instead of the old grid custom selector on the component palette pixel art icons Next step: new components (switch, clock, memory…)
Devlog #9 : New component: Switch This new component come with a new “simulation” mode, where you can interact with the components. Next step: add small tooltips to the sidebar elements, add new components (clock, memory…) It’s deployed so you can try it (see the project page)! I’d love to get some feedbacks.
Devlog #10: I added some tooltips so it’s easier to understand for you guys! Next steps: Start writting an actual documentation, add new components
Devlog #11 : I did some UI improvements, but before I commit, I’d like to have your opinion for the light component; which glow do you prefere?
Devlog #12 : Wire states are now visually apparent! In the example below, on the first circuit, the first segment is high because it is powered by the source, while the second segment (connected to the lamp) is floating because the switch is open. I’ve also fixed a whole bunch of UI issues. You can try out this project on my GitHub page! Next step (for real this time): adding a NOT gate (the clock will come later)
Devlog #13 : New component: NOT gate! This component returns the opposite signal you give it: low becomes high, high becomes low. I also improved the UI/UX. There’s now a new label in the bottom-left corner of the page that shows which component you’re hovering over with your mouse, and what its current state is. For example: “Wire | Low”, “Switch | Open”. I also fixed the pixel rendering, because before there were some really thin lines between them. And now the sidebar is responsive! Next steps: code cleanup, AND gate, clock
Devlog #14 : New component: AND gate! Now the two main gates are available (NOT & AND), so you can basically build anything with them! In the screenshot below, I built a working XOR logic gate, both in a large and a condensed version. A few changes since last time, apart from the new component: The old NOT gate wasn’t working properly because the circuit actually handles 3 states (low, floating, high), while the NOT component only supported low and high. So now, “floating” is considered as “low”. Also, there’s no longer real-time simulation, sadly. I had some issues with the logic gates: if you built them the wrong way, it could crash the entire webpage. So now you have to click on “Run simulation” to see the magic happen. It’s a bit less cool than real-time simulation, but at least it doesn’t nuke the whole page anymore lol. Next steps: UI/UX improvements, clock, and 1-bit memory later on
Devlog #15 : I added a little guide! The goal of this small guide is to explain a few things that might not be obvious to new users. You can close and reopen it whenever you want, so it doesn’t get in the way while you’re playing. It’s still available on the GitHub page if you want to give it a try! Next step: add a minimal circuit loading system (so I can add a default demo circuit), and THEN I’ll add the clock 😂😭
Devlog #16 : Annotation feature (WIP) It’s not finished yet, but I’m currently working on a new annotation feature. Why? Because I’ll need it to explain the circuits in the demo! I’m adding this before the project download/upload system, because otherwise I’d have to refactor quite a bit of the system later. Also, I’m starting to build a 4-bit 7-segment decoder in Cirkuit! (I started with the two easier segments lmao) Next steps: continue working on the annotation system, then implement project download/upload.
Devlog #17 : New feature: Annotations! You can now add labels, lines and rectangles to your circuits! I developed this feature so I can better explain what’s going on in the demo project when I’ll ship this project. But you can also use it to explain your craziest circuits! Next step: upload/download projects.
Devlog #18 : You can save your work now! There are now two buttons in the bottom-left corner: Open and Save. Your projects are downloaded as .cirkuit files. This part was actually quite challenging, mostly because of the file format validation and all the tests around it. Next steps: clean up the code, cleanup the UI (it feels a bit messy right now), add a demo project, add copy/paste and selection, and add a clock
Devlog #19 : A little code cleanup! I refactored the App.tsx file because it was handling too many different things. Now each hook has its own dedicated file. Small refactor, but definitely a needed one! Next steps: add a demo project, improve the UI/UX and laptop pad support, add copy/paste and selection, and finally add a clock (eventually, at this point 😂)
Devlog #20 : demo project and UI/UX update! I added a demo project with a basic light/switch circuit, an OR and XOR gate, and a few annotations. I also (and mostly) removed the old “Quick start” section. It was becoming kinda useless since pretty much everything was already covered by the demo project. So I replaced it with a little intro to the project, along with a table of the shortcuts. I also added a little decoration to the bottom-left corner of the sidebar. I think it looks pretty dope! Next steps: copy/paste and selection, THEN add a clock.
Devlog #21 : Some UI/UX improvements and started working on selection! I’m currently working on the selection system. It works like this: Press S, then while holding it, drag the selection area with the left click. Once selected, you can copy, paste or move the selected block of pixels. It’s not committed yet! It still requires some work. Next steps: finish the selection feature, then add the clock. I also want to improve the UX as much as possible.
Devlog #22 : New feature: selection and copy/paste! You just have to press “S” and drag your mouse/pad while holding the left click. You can then copy, paste, or move the selected pixels around. Probably the most difficult feature I’ve worked on so far. I had to get some help from ChatGPT :’) I think this will be my last devlog before shipping, since one of my other projects has been pending for 18 days now, so yeah… I’ll still keep working on this project though!
Devlog #23 : New feature: Undo/Redo! You can now undo and redo things you’ve done in the editor. This works with both components and annotations. I had to implement a project history system. Basically, every time an action modifies the project, the previous project state is added to the past history stack. When you undo, the latest state from past becomes the current state, while the previous current state is moved to the future stack. When you redo, the next state from future becomes the current state and the previous current state is moved back to past. Yeah it’s messy 😂 I’m also still working on the 7-segment decoder. I switched to a 3-bit one, I’ll probably include it in the demo. Next steps: mostly UI and code improvements, and then I’ll probably ship it. I’ll keep working on it!
Devlog #24 : New feature (kinda): the camera position and zoom are now stored in the project file, and loaded when you open the project. That means you can setup any point of view in your project, and the viewport will be right where you left it when you open it again! I also fixed a bunch of UI inconsistencies: the hover label position is now responsive to the workspace sidebar (before, it was getting hidden behind it) unified border colors fixed the phone workspace responsiveness made the sidebar on the right a little bit smaller I also continued working on the 7-segment display, but ran into some issues since wires can’t cross each other. So I thought about having circuits on two different layers. What do you think about this? Next steps: I’ll probably polish the UX a little bit more, and then ship the project. But I’m planning to keep working on it!
Devlog #25 : UI/UX improvements! I improved the component selection outline. Now the outline is around the whole selected group of pixels, instead of around each individual pixel. You can also now delete selected components by pressing Del on your keyboard. And I added a little preview showing the pixel currently targeted by the cursor. Next steps: keep working on the UI/UX, and ship!
Devlog #26 : I’ve done many small improvements, such as: ability to move annotations undo/redo buttons custom favicon Next step: SHIP!
Devlog #27 : Some optimization, code cleanup, and brand new readme! That’s the last devlog for this project before I ship!
Devlog #28 : Multi-layer (and thank you!!) First of all, thank you so much for all the support on this project! The Stardancers who reviewed my first ship got some really great advices. I’ll be following up on a lot of it. So, I’m planning to add: a simple component documentation some challenges (e.g. 7-segment decoder, XOR gate) more advanced features (clock, 1-bit memory) and what I’m working on right now: a second layer! (currently, wires can’t cross each other, which becomes a real issue with more complex circuits) and, if I have enough time, a place where people can share circuit snippets and showcase their projects! The real challenge will be integrating all of this while keeping the UI clean and the UX intuitive. The screenshot below shows what the circuit viewport could look like with the second layer.
Devlog #29 : New feature: Multi-layer! You can now build circuits across two layers! I added vias, so you can connect the two layers together (obviously). When you place a via, it’s added on both layers, it basically works like a wire. I also finished the 7-segment decoder: 3bit input, supporting only 0-4 for now. The other values are just don’t-cares. Next steps: polish the code and UI, then add some documentation.
Devlog #30 : Component documentation! I’ve added a new page in the sidebar that shows a description and preview image for every component. A few people asked for this in the reviews of my first ship, so it felt like a good addition. Also, if you have any idea of how I could integrate the new more advanced features without overwhelming new users, I’m all ears! The sidebar is starting to get pretty crowded, so I need to find a cleaner way to organize everything and keep navigation smooth. Also, huge thanks to the Stardance staff for awarding this project Superstar ❤️ Next steps: code cleanup, UX improvements, 1-bit memory support, and FINALLY the clock.
Devlog #31 : UI improvement! I replaced the old “main shortcuts” section in the sidebar with simple links. It frees up some space, makes the interface feel cleaner, and should make it much easier to add a proper “Challenge” tab later. Next steps: add a clock and a 1-bit memory.
Devlog #32 : New component: CLOCK (finally) This one was relatively easy to implement! The tick system was already there, but it was only triggered by user interactions. Now, your circuits run at 10 ticks/s, and the clock has a constant 1 Hz square signal (the recording below is choppy, but yes it is indeed a 1 Hz periodic signal) This component only has one output. I thought it would make building complex circuits easier if the other sides were isolated. Next steps: 1-bit memory, and then a lot of UX/UI improvements!
Devlog #33 : Docs update and 1-bit memory! I added the clock to the docs page, along with some new tests for it. I’m also almost done with the 1-bit memory (basically a simplified D flip-flop). I’ll share it in the next devlog! Also, if you like this project, you can leave a star on the project’s GitHub page if you wish! Next steps: finish the 1-bit memory and clean up the UI/UX
Devlog #34 : New component: Memory! This is one step up in difficulty! It has two inputs: a clock input (at the top) and a signal input (on the left). The output signal is provided on the right. This component can store a 1-bit value, which is updated on every rising edge of the clock signal. You can basically build anything with the component available: calculator, more advanced display (e.g. a 7-segment decoder that can go from 0 to 9). I added a 3-bit binary counter that I wired up to my 7-segment decoder! (demo bellow). It’s also included in the demo project file. Next steps: cleanup UI and improve UX (the sidebar is really really crowded right now)
Devlog #35 : UI cleanup and (another) demo circuit The sidebar was getting a bit too crowded, so I added a small button to show/hide the more advanced components. The idea is to make things a little less overwhelming for new users, instead of throwing everything at them right away. I also worked on a 4-bit adder and wired it up to my 7-segment decoder! I’m going to try making it a 4-bit decoder instead of a 3-bit one, but things are going to get a lot more complicated (more numbers = more logic gates). One small issue with the adder for now: the most significant bit is on the right, so the input is basically reversed. I’ll fix that soon. In the meantime, you can already try it out in the live demo project! As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: more UI/UX improvements, adding challenges, and continuing to waste way too much of my time messing around with circuits xd
Devlog #36 : Probe tool and 4-bit calculator. While I was working on improving my 7-segment display, I had quite a hard time simplifying the circuit. Then I thought it could be really useful to have a tool that shows all the equipotential wires. So I’m currently working on it! It’s working, but I still have to improve its style before publishing it. Aside from that, I actually spent way too many hours improving the 4-bit calculator. And it’s now finished! It’s available in the demo circuit if you want to try it. I’ll see if I can build a keyboard later so users don’t have to enter numbers in binary. As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: finish the Probe tool, polish the UI, add a “challenge” tab.
Devlog #37 : Probe tool is out! You can now inspect your circuits with this new tool. It highlights equipotential wires. I also added small circles to every connected ports. Next steps: UI polish, and maybe a “challenge” or “community circuits” tab.
Devlog #38 : Integrated circuits Some of you have requested this, so I’m working on it! It’s not out yet, as it’s a pretty big feature. Integrated circuits will basically be custom components (most likely rectangles) with multiple inputs and outputs, all defined by the user. It’s literally a footprint, kinda like what you’d find in KiCad. I’ve started modifying the engine’s internals so it can handle these new types of connections (alongside the classic 1-pixel components). The real challenge here is keeping everything simple on the UX side, even though this feature targets more advanced users. The image below only shows what it might look like, this will probably change over time. As always, if you enjoy the project, feel free to leave a star on GitHub! Repo: https://github.com/NaFo44/Cirkuit Next steps: keep working on this feature, polish the UI/UX, ship it, and sadly… the end of stardance :(
Ships:
Hi! I’m really happy to introduce you to my biggest project so far. It’s called Cirkuit, and it’s a logic circuit sandbox simulator… but with pixel art! That means you can basically build anything using just pixels. Why pixels? You may ask. Well, many logic simulators already exist, but the issue is that most of them aren’t very accessible to the average user. That’s why I wanted Cirkuit to be as easy to use as possible. I’m already quite familiar with TypeScript and React, which I used for this project. So the most difficult part was actually figuring out how to implement features without having 100 nested loops :D I had a hard time figuring out how to build the core engine (obviously), as well as the annotation system. I’m quite proud of how it looks and how well it works. This project was a perfect opportunity for me to improve my design skills. I worked hard to reduce friction between the interface and the user (aka you, dear shipwriters). One piece of advice: try it on a computer with a mouse. Phones and trackpads are supported, but it’s not the best experience. Hope you’ll like this project!...
|
1792813681.9722872
|
1792900081.9722872
|
|
29083
|
The Infinite Book by @domst13 | Stardance
|
domst13
|
1
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T21:13:16Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made the infinite book, an e-reader that’s housed inside of an old hollowed out fake book. It has basic e-reader functions, such as loading books from a micro SD card and being able to scroll through them. I had a lot of challenges throughout this project, seeing as it was my first C++ project and maybe biting off a little more than I could chew. I was able to overcome them, however, and now it’s complete. In actuality, I think my total time spent was probably 21-22 hours, because I didn’t lapse a lot of the physical build/assembly process. This was a really fun project, and I learned so many things about hardware as well as C++.", "repo": "https://github.com/dominicstange13/The-Infinite-Book", "demo": ""}]...
|
[{"post_id": 74635, "ts": "202 [{"post_id": 74635, "ts": "2026-09-27T20:28:29Z", "hours": 2.0444, "text": "It’s finished! I’m back guys, I know it’s been like 2 months and I apologize, I really procrastinated on finishing this project. So… where do I begin? I finished wiring the components. For the buttons I designed and printed a panel to house them all. The voltage divider circuit that outputs the battery voltage also got moved inside of the button panel, before the whole thing was sealed off with hot glue. Using a dremel, I hollowed out little pockets of the fake book to make the screen fit and to add a hole to charge. Everything fits snugly inside of the case. The battery is behind the screen, the microcontroller is propped up on a custom 3d printed piece so the FPC cable of the screen isn’t getting bent violently. The microcontroller, buttons, and battery are all held in by velcro, while the screen is held in simply by a tight fit and the micro SD card reader is attached by mere wires so it can move freely and be easily accessed. All this together means that the entire electronic system can be ripped out, which is super helpful in case of future changes. On the software side of things, I didn’t have much to add. The screen now hibernates after five minutes of inactivity to preserve battery life. The book storage system isn’t exactly where I want it to be, but I can’t really work on it because my micro SD card reader died :(. This also means I can’t load books onto it yet, but once I can it will be 100% operational! That’s really all there is to say, see you guys at the ship!"}, {"post_id": 24139, "ts": "2026-07-07T14:43:22Z", "hours": 5.9025, "text": "Guys I have some unfortunate news. I worked for a super long time yesterday but it just isn’t going to be done in time. It’s so close to completion but I’m leaving today the infinite book simply won’t be ready in time. Sorry guys. I’ll be back in three n a half weeks and ill finish the project then. this is some bad news but its okay. the project will eventually get finished."}, {"post_id": 23333, "ts": "2026-07-06T06:59:30Z", "hours": 3.7914, "text": "Hey guys sorry for it being a couple days since the last devlog, I kinda forgot yesterday so this one is a combination of yesterday and today. So yesterday I didn’t do much except I wired the SD card reader with a breadboard and got that started. I had to battle with it a lot for it to work as intended and that battle is far from over as I am still working on the file loading system. Today I worked on fixing up my code for a while and finally got the SD card reader to what I would call a reasonable point, then I fixed an issue I was having with the opening of files off of the card. I’m still not completely sure what the fix was that made it start working all of a sudden, but my two main theories are that A) I was opening the file too early before the card reader could fully initialize or B) The breadboard wiring was just too unreliable to give a steady connection. Either way I started opening the file when it was actually needed instead of on startup and replaced the chunky breadboard wiring with soldered wires. One of the two things fixed the issue for what seems like permanently. I just hope I won’t have to revisit that part of the project later because I’m on a serious time crunch right now (this thing has to be done by Tuesday or else I am absolutely fried because I’m going on a 3 and a half week trip and my parents won’t let me bring my phone for some reason meaning if I don’t get my infinite book working in time it’s over for me). Finally I also got both navigation buttons working as well as the reading light and light switch. All of those things are currently breadboard wired instead of soldered but that’ll get fixed when the code is looking a bit more solid. In terms of inputs I’ll still need a main power switch to keep the battery from draining as well as a home/select button. Theoretically after all that is working I can assemble and decorate this thing and the project will be done but unfortunately that’s easier said than done especially if I only have tomorrow to work but let’s all just pray for the best. See you guys tomorrow, hopefully for the last devlog of this project!"}, {"post_id": 21948, "ts": "2026-07-04T04:39:54Z", "hours": 2.4461, "text": "Today I’m gonna be honest I wasn’t able to get much done since the whole time I was basically just fixing stuff I was able to actually figure out a way to do partial resets which is friggin aura I’m starting work on the SD card reader so yeah see you tomorrow"}, {"post_id": 21336, "ts": "2026-07-03T06:59:22Z", "hours": 1.8586, "text": "Today I fixed the LiPo battery readings by using a LiPo flow chart to match the curved depletion of LiPo batteries. When I finished I checked with a multimeter and the predicted voltages were basically spot-on, matching the multimeter exactly once I added a calibration step to the math to account for the difference. I also found out some bad news, which is that my e-paper display is incompatible with partial refreshes (updating the pixels of the display in the part you are changing specifically rather than the entire display) in the library I am using, and I have not been able to find a replacement library so I am assuming it is just entirely not possible. This does suck but I think the project will be okay and I will still be able to make a good final product. That’s about all for today, I was gonna work more but unfortunately I was busy, my goals for tomorrow are going to be working on making more UI besides the battery, dealing with the no partial refresh issue, and (hopefully) acquiring an SD card and starting to figure out how I’m gonna load text onto the screen. See you guys tomorrow!"}, {"post_id": 20571, "ts": "2026-07-02T05:57:18Z", "hours": 1.0972, "text": "Today I created a system that can detect the battery percentage of the battery, then found out LiPo batteries deplete on a curve so I’m gonna have to rework it so it is actually accurate 😭 On a better note I learned more about the Arduino IDE and was extremely happy when my voltage divider circuit actually worked (I know it’s simple but still I was proud) Tomorrow I aim to fix the battery issue and hopefully find an SD card so I can start making the text display system work See you guys tomorrow! P.S. I didn’t have time to get a picture of the current contraption so here’s a picture of me soldering on pin header from my Lapse recording"}, {"post_id": 19734, "ts": "2026-07-01T03:55:14Z", "hours": 0.5772, "text": "I began coding but I couldn’t progress any further without soldering which my parents won’t let me do until tomorrow (for some reason?) so yeah that’s all for today"}]...
|
Title: The Infinite Book by @domst13 | Stardance
Title: The Infinite Book by @domst13 | Stardance
Devlogs:
I began coding but I couldn’t progress any further without soldering which my parents won’t let me do until tomorrow (for some reason?) so yeah that’s all for today
Today I created a system that can detect the battery percentage of the battery, then found out LiPo batteries deplete on a curve so I’m gonna have to rework it so it is actually accurate 😭 On a better note I learned more about the Arduino IDE and was extremely happy when my voltage divider circuit actually worked (I know it’s simple but still I was proud) Tomorrow I aim to fix the battery issue and hopefully find an SD card so I can start making the text display system work See you guys tomorrow! P.S. I didn’t have time to get a picture of the current contraption so here’s a picture of me soldering on pin header from my Lapse recording
Today I fixed the LiPo battery readings by using a LiPo flow chart to match the curved depletion of LiPo batteries. When I finished I checked with a multimeter and the predicted voltages were basically spot-on, matching the multimeter exactly once I added a calibration step to the math to account for the difference. I also found out some bad news, which is that my e-paper display is incompatible with partial refreshes (updating the pixels of the display in the part you are changing specifically rather than the entire display) in the library I am using, and I have not been able to find a replacement library so I am assuming it is just entirely not possible. This does suck but I think the project will be okay and I will still be able to make a good final product. That’s about all for today, I was gonna work more but unfortunately I was busy, my goals for tomorrow are going to be working on making more UI besides the battery, dealing with the no partial refresh issue, and (hopefully) acquiring an SD card and starting to figure out how I’m gonna load text onto the screen. See you guys tomorrow!
Today I’m gonna be honest I wasn’t able to get much done since the whole time I was basically just fixing stuff I was able to actually figure out a way to do partial resets which is friggin aura I’m starting work on the SD card reader so yeah see you tomorrow
Hey guys sorry for it being a couple days since the last devlog, I kinda forgot yesterday so this one is a combination of yesterday and today. So yesterday I didn’t do much except I wired the SD card reader with a breadboard and got that started. I had to battle with it a lot for it to work as intended and that battle is far from over as I am still working on the file loading system. Today I worked on fixing up my code for a while and finally got the SD card reader to what I would call a reasonable point, then I fixed an issue I was having with the opening of files off of the card. I’m still not completely sure what the fix was that made it start working all of a sudden, but my two main theories are that A) I was opening the file too early before the card reader could fully initialize or B) The breadboard wiring was just too unreliable to give a steady connection. Either way I started opening the file when it was actually needed instead of on startup and replaced the chunky breadboard wiring with soldered wires. One of the two things fixed the issue for what seems like permanently. I just hope I won’t have to revisit that part of the project later because I’m on a serious time crunch right now (this thing has to be done by Tuesday or else I am absolutely fried because I’m going on a 3 and a half week trip and my parents won’t let me bring my phone for some reason meaning if I don’t get my infinite book working in time it’s over for me). Finally I also got both navigation buttons working as well as the reading light and light switch. All of those things are currently breadboard wired instead of soldered but that’ll get fixed when the code is looking a bit more solid. In terms of inputs I’ll still need a main power switch to keep the battery from draining as well as a home/select button. Theoretically after all that is working I can assemble and decorate this thing and the project will be done but unfortunately that’s easier said than done especially if I only have tomorrow to work but let’s all just pray for the best. See you guys tomorrow, hopefully for the last devlog of this project!
Guys I have some unfortunate news. I worked for a super long time yesterday but it just isn’t going to be done in time. It’s so close to completion but I’m leaving today the infinite book simply won’t be ready in time. Sorry guys. I’ll be back in three n a half weeks and ill finish the project then. this is some bad news but its okay. the project will eventually get finished.
It’s finished! I’m back guys, I know it’s been like 2 months and I apologize, I really procrastinated on finishing this project. So… where do I begin? I finished wiring the components. For the buttons I designed and printed a panel to house them all. The voltage divider circuit that outputs the battery voltage also got moved inside of the button panel, before the whole thing was sealed off with hot glue. Using a dremel, I hollowed out little pockets of the fake book to make the screen fit and to add a hole to charge. Everything fits snugly inside of the case. The battery is behind the screen, the microcontroller is propped up on a custom 3d printed piece so the FPC cable of the screen isn’t getting bent violently. The microcontroller, buttons, and battery are all held in by velcro, while the screen is held in simply by a tight fit and the micro SD card reader is attached by mere wires so it can move freely and be easily accessed. All this together means that the entire electronic system can be ripped out, which is super helpful in case of future changes. On the software side of things, I didn’t have much to add. The screen now hibernates after five minutes of inactivity to preserve battery life. The book storage system isn’t exactly where I want it to be, but I can’t really work on it because my micro SD card reader died :(. This also means I can’t load books onto it yet, but once I can it will be 100% operational! That’s really all there is to say, see you guys at the ship!
Ships:
I made the infinite book, an e-reader that’s housed inside of an old hollowed out fake book. It has basic e-reader functions, such as loading books from a micro SD card and being able to scroll through them. I had a lot of challenges throughout this project, seeing as it was my first C++ project and maybe biting off a little more than I could chew. I was able to overcome them, however, and now it’s complete. In actuality, I think my total time spent was probably 21-22 hours, because I didn’t lapse a lot of the physical build/assembly process. This was a really fun project, and I learned so many things about hardware as well as C++....
|
1792856842.0689728
|
1792943242.0689728
|
|
65218
|
mywebsite by @geeky | Stardance
|
geeky
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T20:54:20Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ita a tracker that makes keep your streak easier", "repo": "https://github.com/filippoplesca3-wq/habit-tracker", "demo": "https://filippoplesca3-wq.github.io/habit-tracker/"}]...
|
[{"post_id": 73298, "ts": "202 [{"post_id": 73298, "ts": "2026-09-24T19:54:07Z", "hours": 10.0153, "text": "im working on an habit tracker for streaks"}]...
|
Title: mywebsite by @geeky | Stardance
Devlogs:
i Title: mywebsite by @geeky | Stardance
Devlogs:
im working on an habit tracker for streaks
Ships:
ita a tracker that makes keep your streak easier...
|
1792814214.0890195
|
1793678214.0890195
|
|
66382
|
Why Do Leaves Fall (Game Jam) by @Guragam | Starda Why Do Leaves Fall (Game Jam) by @Guragam | Stardance...
|
Guragam
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T20:53:14Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is a game Made for a GAme Jam hosted in the Jam Game in Slack and it was a really fun 3 days and really stressful.. The game Shows the Journey of a leaf and how a tree nourishes it and how the leaf hold on to the tree even in the harshest condition but at the end it has to let go, it cant hold onto it forever. it symbolizes how in life also sometimes we have to let our precious things go. The wind and rain mechanic and other were difficult to implement also The Constant Bug fixes and stuff was really tough but i am glad i pulled thorugh All you need to know is where are arrow keys", "repo": "https://github.com/guragam-singh/Why-Do-Leaves-Fall-Game-Jam-", "demo": "https://arhaanarora.itch.io/why-do-leaves-fall"}]...
|
[{"post_id": 74642, "ts": "202 [{"post_id": 74642, "ts": "2026-09-27T20:43:44Z", "hours": 5.4886, "text": "Working On Adding Rain and Wind assets"}]...
|
Title: Why Do Leaves Fall (Game Jam) by @Guragam | Title: Why Do Leaves Fall (Game Jam) by @Guragam | Stardance
Devlogs:
Working On Adding Rain and Wind assets
Ships:
It is a game Made for a GAme Jam hosted in the Jam Game in Slack and it was a really fun 3 days and really stressful.. The game Shows the Journey of a leaf and how a tree nourishes it and how the leaf hold on to the tree even in the harshest condition but at the end it has to let go, it cant hold onto it forever. it symbolizes how in life also sometimes we have to let our precious things go. The wind and rain mechanic and other were difficult to implement also The Constant Bug fixes and stuff was really tough but i am glad i pulled thorugh All you need to know is where are arrow keys...
|
1792817331.533223
|
1792903731.533223
|
|
66131
|
Web Cube by @Lorenzoczk | Stardance
|
Lorenzoczk
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T20:44:18Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a site—or rather, a web page, something that runs directly in the browser and has some functionality. I’m proud to have committed to this and finished it; I hope it gets approved, as this is one of my first challenges. Just a quick note: I’m from Brazil and use Google Translate to write better English. I’m not entirely sure, but I think the way it alters my text might look like AI-generated content, so I ask you to take that into consideration.", "repo": "https://github.com/lczk9999/Web-Cube", "demo": "https://lczk9999.github.io/Web-Cube/"}]...
|
[{"post_id": 74638, "ts": "202 [{"post_id": 74638, "ts": "2026-09-27T20:40:23Z", "hours": 3.4469, "text": "I’ve finally finished; I hope it gets approved."}]...
|
Title: Web Cube by @Lorenzoczk | Stardance
Devlog Title: Web Cube by @Lorenzoczk | Stardance
Devlogs:
I’ve finally finished; I hope it gets approved.
Ships:
I created a site—or rather, a web page, something that runs directly in the browser and has some functionality. I’m proud to have committed to this and finished it; I hope it gets approved, as this is one of my first challenges. Just a quick note: I’m from Brazil and use Google Translate to write better English. I’m not entirely sure, but I think the way it alters my text might look like AI-generated content, so I ask you to take that into consideration....
|
1792817311.2696297
|
1792903711.2696297
|
|
33322
|
My own keyboard! by @J1NX3D | Stardance
|
J1NX3D
|
1
|
23.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T20:37:50Z", "hours": 23.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a keyboard to learn pcb making skills. The most challenging part was the firmware which I ended up using an open source program for the keyboard. This was fun to learn since I refinded my onshape skills and made my first pcb!!", "repo": "https://github.com/robogirl11/Custom-keyboard-", "demo": ""}]...
|
[{"post_id": 73112, "ts": "202 [{"post_id": 73112, "ts": "2026-09-24T12:38:42Z", "hours": 3.6833, "text": "I tried learning the firmware but it was confusing so I took a break for a while thats why this is so late"}, {"post_id": 40229, "ts": "2026-08-03T17:06:57Z", "hours": 6.6775, "text": "Finished the case for the keyboard and now have to figure out how to do the cutouts for stabilizers and how to make the keyboard unique."}, {"post_id": 38441, "ts": "2026-07-31T20:11:47Z", "hours": 5.7008, "text": "I started and finished working on the final draft of the pcb. Since this is part of my first project on Kicad I wanted everything perfect which lead me to start over a lot. But after this I feel that this will be my final attempt since it has everything I want. Next I will be uploading to onshape so I can build the case. I also have to update my progress on github and upload everything."}, {"post_id": 29840, "ts": "2026-07-16T23:59:10Z", "hours": 0.5833, "text": "Started the onshape!!"}, {"post_id": 28465, "ts": "2026-07-14T18:33:57Z", "hours": 1.5167, "text": "I worked on and finished the pcb board. Since I was new to the program it took a while for me to finish and I hade a lot of problems like wiring wrong but in the end IT WORKED!!!"}, {"post_id": 28111, "ts": "2026-07-14T05:30:48Z", "hours": 8.7675, "text": "For my keyboard I started going over what I wanted in a keyboard. I decided against extra number buttons and started designing the pcb. Using kicad I went over the wiring and connections and since this was my first time working on kicad I did have to use the guide and look up some things. Also did have to restart a lot but so far it is worth it."}]...
|
Title: My own keyboard! by @J1NX3D | Stardance
De Title: My own keyboard! by @J1NX3D | Stardance
Devlogs:
For my keyboard I started going over what I wanted in a keyboard. I decided against extra number buttons and started designing the pcb. Using kicad I went over the wiring and connections and since this was my first time working on kicad I did have to use the guide and look up some things. Also did have to restart a lot but so far it is worth it.
I worked on and finished the pcb board. Since I was new to the program it took a while for me to finish and I hade a lot of problems like wiring wrong but in the end IT WORKED!!!
Started the onshape!!
I started and finished working on the final draft of the pcb. Since this is part of my first project on Kicad I wanted everything perfect which lead me to start over a lot. But after this I feel that this will be my final attempt since it has everything I want. Next I will be uploading to onshape so I can build the case. I also have to update my progress on github and upload everything.
Finished the case for the keyboard and now have to figure out how to do the cutouts for stabilizers and how to make the keyboard unique.
I tried learning the firmware but it was confusing so I took a break for a while thats why this is so late
Ships:
I made a keyboard to learn pcb making skills. The most challenging part was the firmware which I ended up using an open source program for the keyboard. This was fun to learn since I refinded my onshape skills and made my first pcb!!...
|
1792853852.6228237
|
1792940252.6228237
|
|
60054
|
KSYK Maps by @juusojuusto | Stardance
|
juusojuusto
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T20:08:21Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made KSYK Maps, a navigation app designed for Kulosaaren Yhteiskoulu in Helsinki, Finland. The idea is simple: ever get lost at school or not know where your next lesson is? KSYK Maps helps students and guests find their classrooms and navigate around the school using an interactive map. The project includes: Interactive school maps Classroom and room information Schedule integration Navigation between rooms Android app Admin tools Analytics and error logging Finnish and English support.", "repo": "https://github.com/JuusoJuusto/ksyk-maps", "demo": "https://ksykmaps.fi"}]...
|
[{"post_id": 74624, "ts": "202 [{"post_id": 74624, "ts": "2026-09-27T19:54:07Z", "hours": 15.0444, "text": "Ever get lost at school? KSYK Maps is built to solve exactly that. Developped for Kulosaaren Yhteiskoulu, KSYK Maps is a modern school navigation app designed to help students and guests find classrooms, navigate the school and stay on track with their schedules."}]...
|
Title: KSYK Maps by @juusojuusto | Stardance
Devl Title: KSYK Maps by @juusojuusto | Stardance
Devlogs:
Ever get lost at school? KSYK Maps is built to solve exactly that. Developped for Kulosaaren Yhteiskoulu, KSYK Maps is a modern school navigation app designed to help students and guests find classrooms, navigate the school and stay on track with their schedules.
Ships:
I made KSYK Maps, a navigation app designed for Kulosaaren Yhteiskoulu in Helsinki, Finland. The idea is simple: ever get lost at school or not know where your next lesson is? KSYK Maps helps students and guests find their classrooms and navigate around the school using an interactive map. The project includes: Interactive school maps Classroom and room information Schedule integration Navigation between rooms Android app Admin tools Analytics and error logging Finnish and English support....
|
1792813698.9925303
|
1792900098.9925303
|
|
36890
|
Mine and Dine - 26.2 Minecraft Mod by @RevComInter Mine and Dine - 26.2 Minecraft Mod by @RevComInteractives | Stardance...
|
RevComInteractives
|
2
|
86.0
|
1463
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T19:49:16Z", "hours": 29.0, "multiplier": 14.54, "payout": 420, "blessing": "neutral", "text": "Mine & Dine is a Minecraft mod that aims to overhaul the minecraft cooking system, because I always thought that it was a little bit shallow and lacked depth. Therefore I have set the goal for myself to transform the cooking system into something I always wanted. My mod adds six new blockentities and over 70 new items that do exactly that. (You can find a deeper explanation of the contents in my ReadMe) This mod is by far not finished but I think it’s gotten to a point where I would say it is playable and enjoyable, that’s why I decided to ship it now. Especially now that I’ve successfully ported it to version 26.2. What I’m especially proud of is how far my skills as a mod developer have come since I started this project. I have made a couple of smaller mods before the stardance challenge but never something quite like this. I was even able to upload it to Modrinth where the whole world can see it. (Modrinth is also the easiest way to play my mod btw) This step of shipping my final project for this challenge really feels like I’ve achieved something. Thanks in advance to everyone who plays my mod, I hope you’ll enjoy it. If you encounter any bugs (And its not unlikely you do) please report them on my github page. Anyways that’s everything I have to say for now, see you around!", "repo": "https://github.com/JhStudi0/MineAndDine-26.2", "demo": "https://modrinth.com/mod/mine-and-dine"}, {"ship_num": 2, "ts": "2026-09-01T19:51:42Z", "hours": 57.0, "multiplier": 18.17, "payout": 1043, "blessing": "neutral", "text": "Mine & Dine is a Minecraft mod that aims to overhaul the minecraft cooking system, because I always thought that it was a little bit shallow and lacked depth. Therefore I have set the goal for myself to transform the cooking system into something I always wanted. My mod adds five new blockentities and over 60 new items that do exactly that. (You can find a deeper explanation of the contents in my ReadMe) This mod is by far not finished but I think it’s gotten to a point where I would say it is playable and enjoyable, that’s why I decided to ship it now. What I’m especially proud of is how far my skills as a mod developer have come since I started this project. I have made a couple of smaller mods before the stardance challenge but never something quite like this. I was even able to upload it to Modrinth where the whole world can see it. (Modrinth is also the easiest way to play my mod) This step of shipping my first project really feels like I’ve achieved something. Thanks in advance to everyone who plays my mod, I hope you’ll enjoy it. If you encounter any bugs (And its not unlikely you do) please report them on my github page. Anyways that’s everything I have to say for now, see you around!", "repo": "https://github.com/JhStudi0/MineAndDine-26.2", "demo": "https://modrinth.com/mod/mine-and-dine"}]...
|
[{"post_id": 74612, "ts": "202 [{"post_id": 74612, "ts": "2026-09-27T19:38:37Z", "hours": 1.8344, "text": "Hi people! This will probably be my last update in this challenge as I have now finally fixed the bugs that were bothering me. The item renderers work now and have their actual colors. Also the progress arrow is now only one arrow and not 100. I’ll be shipping my project now in the hopes that it will get accepted and rated as well as the last time I shipped. By the way this doesn’t mean I’m done with the mod at all, I still think it could use more updates and improvements so my development is by no means finished. It’ll just happen outside of this challenge and maybe not as frequent as it did now. Anyways that’s all from me for now, I’ll hope to see you around!"}, {"post_id": 70876, "ts": "2026-09-19T22:15:59Z", "hours": 4.2711, "text": "Hi people! I’ve been busy the last couple of days and I can now announce that I can finally run my game again in Minecraft 26.2. So the majority of the update is finished! That being said there are some to be fair kind of funny bugs that I still need to fix (and honestly right now I don’t really have a clue how but oh well I guess we’ll have to see) One example is that somehow my progress arrow in my menu does this really weird thing where it just duplicates a couple times and stretches weirdly across my screen. I mean I don’t know what I did but I’m sure there’s a way to fix that. And the other thing is that for some to me unknown reason, my display items are just red. For example on my cutting board. They’re not at all supposed to look like that and the issue is consistent across all my item renders… Yeah honestly no clue why. Also the display doesnt dissapear when you craft and item but I already had that issue with the last version and I managed to fix that so I’m sure that won’t be a big problem. There are some minor bugs that I still have to resolve, like the item models of my blocks not loading in correctly or my item displays in the cooking pot not working but I’m sure that won’t be too difficult. Anyways that’s all from me for today, I’ll see you around!"}, {"post_id": 69362, "ts": "2026-09-16T21:54:54Z", "hours": 1.3753, "text": "Hi people! It’s looking a lot less red now, doesnt it? I’ve been able to update both the pan and the mixer to the newest version, and that leaves only the cutting board and the scraper before I’ll be able to finally run the game again (hopefully) So yeah I feel like I’m close to finally being finished with the update and then I can finally start working on actual new features. I want to add at least a little bit of actually new content before I ship again. Anyways that’s all from me for today, hope to see you around!"}, {"post_id": 68266, "ts": "2026-09-14T20:21:22Z", "hours": 2.2772, "text": "Hi people! My cooking pot is now working! (Hopefully) It took me longer than I expected because I had a lot of “fun” with the codec of the recipes. But thankfully now that that’s working I can recycle a lot of code for my pan and mixer which will hopefully make that part a lot easier. The cutting board and scraper will probably be another story though. But I’m positive that I’ll be able to finish everything by the ned of the week. That’s all from me for today see you around!"}, {"post_id": 67663, "ts": "2026-09-13T20:21:37Z", "hours": 2.4153, "text": "Hi people! My CornGrinderRecipeBuilder works again! That also means that I managed to get my corn grinder as a whole at least to a state where I would assume that it runs again. So yes, I have reworked both the custom block, teh block entity and the recipe handling. And let’s just say I wouldnt exactly say that I had fun… It’s just really annoying trying to find out why i cant refer to a method in another class only to then find out that I forgot that I forgot to rename one type. To apply that to what cost me the most time, I tried to call my tick() method from my block entity in the custom block (so the crafting actually progresses) but I forgot to change the type of my blockEntityType and it referred to the wrong blockentity. It took me forever to catch that problem. Anyways only five more crafting blockentities I have to port over frustrated scream . I just hope it will be easier since i now roughly know what I’m supposed to do. I can only hope now that school starts again for me… Anyways that’s everything from me today, see you around!"}, {"post_id": 66973, "ts": "2026-09-12T23:35:17Z", "hours": 6.5831, "text": "Hi people! I have been quiet for a few days now but trust me I’ve been busy. The port to the newest Minecraft version is almost complete so be on the lookout for that. Since I last posted a devlog I updated all the items, tags and the loottable modifiers. Also I updated the playerJoinEvent that gives you a cookbook when you first join into a world. Now to the places that still need updating: The ModBlocks, but just those with a blockentity with crafting functions. Therefore ModEntites and the custom recipe types and generators are obviously still missing too. And probably the least amount of work will be updating the missing recipes in my ModRecipeProvider class (It auto generates all my recipes) I have already updated the vanilla style recipes so the ones in a crafting table or oven but my custom recipes are still missing. And of course I gotta debug all my code when all that is done. Anyways I hope I’ll finish this update at some time next week so I can finally start adding some new stuff. That being said I don’t think I’ll be able to code as much starting from Monday, because where I live school is starting again so yeah… Anyways that’s all from me today, hope to see you around!"}, {"post_id": 64432, "ts": "2026-09-08T20:09:14Z", "hours": 2.0831, "text": "Hey people! So I decided to start porting my mod to 26.2 because I hate myself or something. This creenshot really captures my current state of mind quite well, and I’m really contemplating why I decided to do this. Well, it’s the next logical step that’s why I did it but it’s till so annoying. But seriously, why does Mojang have to change their code in every update? Anyways, by the time I uploaded this devlog, I was able to port most of the items plus the model generator which roughly leaves the blocks + their entities and screens and everything, the tag datagen, the cookbook pages (I dont want to) and all the recipes. Damn that’s a lot of work why did I sign up for this. Anyways that’s all from me today, see you around!"}, {"post_id": 64233, "ts": "2026-09-08T14:19:01Z", "hours": 8.0308, "text": "Hello people! I’ve been busy again. But before we dive into what I added I want to say thank you to everyone who rated my project so incredibly high. I couldn’t be happier with all the feedback you gave me. I want to address a few things though that I found which I think caused problems for some of the playtesters. I was under the assumption that the Modrinth version detection would work and therefor my mod was playable on all 1.21.X The problem is that the mod is only compatible with 1.21.1. As much as I would like to blame all of that on Modrinth I do have to admit that I could have just playtested it on the other versions. So to everyone who had problems with playing my mod I want to say a sorry and I hope that this fixes your issues. But now to what I’ve been doing the last couple of days: I’m from southern Germany and therefor I wanted to implement the most iconic dish from my region: Käsespätzle. Käsespätzle (something like cheese spaetzle in english) are like the german kind of noodles just baked with cheese. It may sound a but lame but trust me they are delicious. Now implementing them proved to be a bit more challenging than I had thought because I had no cheese whatsoever so I implemented that together with it’s aging mechanic. And furthermore spätzle are made on a special type of scraper which I also had to implement. It inserts the raw spätzle directly into the cooking pot. I’m currently also contemplating where I want to go with this mod. I’m not going to abandon it, that’s for sure but I just don’t know if i want to keep adding stuff in 1.21 or if I should migrate to the newest version of the game (that’s something that a lot of raters wanted) I’ll have to think about that a bit more but until then see you around!"}, {"post_id": 59779, "ts": "2026-09-01T18:30:25Z", "hours": 0.2781, "text": "Hello People! Today I just wanted to share a quick video with you. It shows how you make an apple pie in my mod. I thought it would be a good showcase for some of the mechanics my mod has to offer. And if the video quality isnt so good, I’m sorry but its the only way I could upload the video on this platform :( Anyways see you around!"}, {"post_id": 59078, "ts": "2026-08-31T18:05:33Z", "hours": 6.0342, "text": "Hi people! I’ve been busy the last couple of days and let me tell you I’m so close to shipping my first iteration of the mod. I’m so close to being done I just have a add a last few things and maybe film a few short showcases and then I’ll be ready to ship this thing. Anyways the most interesting additions that I added are a few new item (textures) and finally after weeks of them being untextured, my mixer and grinder have gotten their models. Anyways that’s all from me for today. The next time you’ll hear from me is probably with a ship so stay tuned. See you!"}, {"post_id": 54808, "ts": "2026-08-25T22:58:00Z", "hours": 2.2117, "text": "Hello people! As promised I have finished the cookbook (at least to a point where I’d say it’s complete enough) and I can now give you some sneakpeeks. Sadly I cant show you everything ‘cause I can only attach four pictures but I think I got a good selection. So the first picture you can see is the opening page of the cookbook, so just some general stuff. The second picture shows a segment of the contents list. All the pink things are links to the corresponding pages you can click on to quickly navigate through the book. And lastly you can see an extract from one of the recipes (in this case for an apple pie). I’m somewhat happy with the design but I’m especially happy with the display of the item on the corresponding page. It is defintely a pain to set up (at least the way I did it) but I think it’s well worth it. But I think that’s all from me for today. I’ll be adding the last textures and little things over the next few days so I can finally push out my first ship :) See you around!"}, {"post_id": 54153, "ts": "2026-08-24T23:55:27Z", "hours": 8.1442, "text": "Hello people! I havent posted anything in quite some time but trust me I’ve been busy. The reason why I’ve shown you so little is because there isn’t much that I could show you. I’ve added a lot of background stuff that I just had to add because I’m planning on shipping soon. One sneakpeak I can give you is this (see picture). Any idea what it is? Well I’ll tell you: It’s a cookbook. I think it’s nice for the immersion if you have a cookbook where you can find all the cooking recipes for my mod. I’ll show you more about it in the future once I’m done with it. Until then that’s all from me. Hope to see you around!"}, {"post_id": 50679, "ts": "2026-08-19T23:55:47Z", "hours": 1.1469, "text": "Hello people! You can now enjoy a nice apple pie at your farm because I have been busy. I added eight new items today to aid you on your cooking journey. First I added cinnamon sticks and powder. Right now you get cinnamon sticks from stripping jungle logs on a cutting board. I’m planning on adding actual cinnamon trees in the future but for now I figured jungle wood would be the most fitting since cinnamon is also a tropical plant. With the addtition of cinnamon I finally made it possible to craft pumpkin pie with the mechanics of my mod. That’s also why I added the middle row of items. On the left we have the pumkin slice which you can bake into the grilled pumpkin slice (middle). I’ll probably have to rework this texture in the future cause you can’t really tell the difference :P. And with that item you can then craft the unbaked pumpkin pie which, as the name suggests, can be baked into the minecraft pumpkin pie. The last three items I added are for my apple pie. First up we have apple chunks which you can then use to make the unbaked apple pie which of course can be baked into the finished apple pie. I hope you like my new additions and that’s also everything from me for today. See you around :)"}, {"post_id": 49899, "ts": "2026-08-18T21:16:14Z", "hours": 1.3992, "text": "Hi people! I’ve been doing a lot of background work today for future stuff so sadly I don’t have too much to show you today. I still coded some more things that I can already hsow you that are worth taking the look at. On the left is the new powdered sugar that you get by grinding sugar in the grinder. It is also used to craft the next item, the pie dough in the mixer. On the cutting board oyu can then transform the dough into the pie base. This item will be used later when making different kinds of pies. What I immediately have in mind is of course the oumpkin pie that is already in vanilla minecraft but also the apple pie and the sweet berry pie. Both of these fruits are of course already in the base game so I think the addition of a pie would make sense. I’m also planning on adding more fruit so I can add more pies. Anyways that’s all from me for today, see you around :)"}, {"post_id": 49262, "ts": "2026-08-17T23:15:11Z", "hours": 1.035, "text": "Hello People! I’ve worked a bit more on expanding the cutting board functionality. I’ve added another tool that can be used in the recipes and that’s the rolling pin (first pic, top left) It does exactly what it sounds like it flattens the ingredients, like for example with my tortilla dough (top right). You can see the process in the second picture. And because it would have felt weird to stop the production chain there, I added the function to put the raw torilla into my frying pan where it gets fired into a finished tortilla. I’m really looking forward on adding more recipes with my tortilla but for now I’m kind of missing some more ingredients, like red beans that I want to put in there. Anyways, that’s all I have time for today :( I’ll see you around :)"}, {"post_id": 48545, "ts": "2026-08-16T23:47:04Z", "hours": 1.04, "text": "Hi people! I’ve been putting my new block entities to some good use today. (From left to right) First of all I added the bun dough. You get it by cutting bread dough on the cutting board. Then there is the bun which you obviously get by smelting bun dough in a furnance. Next up is the cookie dough. You get it by mixing the needed ingredients for a cookie in a mixer. And last is the heavy cream. I’ve added the item a little while back but only now found the time and motivation (especially the latter XD) to make the texture and give it a proper crafting recipe. You get it by mixing milk and butter in the mixer. I believe that that is roughly how heavy cream is made in real life, at least after my five minute google research. I’ve also added crafting recipes for some other things but those aren’t anything special really just in a crafting table. Anyways that’s all from me today, see you around :)"}, {"post_id": 47737, "ts": "2026-08-15T21:06:10Z", "hours": 3.92, "text": "Okay damn I didn’t think that this would take me this long But hi people! I finally added a cutting board to my mod! It came up a while back as a suggestion for how to get my chicken legs and let me say I think it was a good suggestion. The cutting board just fits right in. It works pretty much as you may know it from farmer’s delight, where you put an item on it and then click on it with a tool in this case a knife (which I also added today but that was pretty simple) and it drops the outcome. I’m planning on adding onto that mechanic with more tools like a roling pin for example and definitely more recipes. I have to say now that it is in the game I really like it but damn was it annoying to implement. I mean it was my fault (I forgot one function so it didn’t work) but it nontheless send me down an existentiell crisis ‘cause there was no error message whatsoever. Don’t we love that XD Anyways that’s all from me for today, I’ll see you around :)"}, {"post_id": 47170, "ts": "2026-08-14T21:14:02Z", "hours": 0.7811, "text": "Hello people! I didn’t have a lot of time today since I’m currently renovating my new room :) and it takes a lot of time. Anyways I still managed to get something done today and that is working on the immersion of my mod. The cooking pot and pan now emit smoke when they are cooking. That’s all from me today and I’ll hopefully get back to you with more things :) See ya!"}, {"post_id": 46592, "ts": "2026-08-13T22:46:26Z", "hours": 1.5181, "text": "Hi People! Today I added another Block Entity: The mixer. It works similarly to the cooking pot and pan so I was able to copy a lot of that code. I just had to add the rest of the slots and remove the container slot. I’ll use the mixer as a way to make different kinds of doughs later but for now it can just make bread dough, you can bake into bread in a furnance. I’m really looking forward on making pasta dough and then expanding on that. I was kind of thinking of making a noodle press so you can make different kinds of pasta (I’m speaking spagetti, tortelini, etc.) I kind of want it to work like a stone cutter, where you put in the dough and then select one shape of noodle. But those are still thoughts for the future. Anyways that’s all from me today, see you next time :)"}, {"post_id": 46033, "ts": "2026-08-12T23:12:08Z", "hours": 1.6828, "text": "Hello people! I’ve been somewhat productive today: So first of all I added a provisional model for my pan. Its that orange thing next to the cooking pot. Then I’ve also reworked the crafting logic of my pan so it supports recipes that don’t need a bowl or similar, like you can see in the second picture. I feel like for the vanilla meat items that apporach makes the most sense. And I’ve added sunflower seeds, ground sunflower seeds and sunflower oil into my game. For now you just have to believe me, because I dont have any textures made for them just yet XD. In the third screenshot you can see how sunflower seeds are ground into ground sunflower seeds. In the last picture you can see the crafting recipe for sunflower oil fron ground sunflower seeds. It’s very simplified from the way one would actually make sunflower oil but it’s still just minecraft so I think it fits. Anyways that’s everything I have for you today, see you tomorrow!"}, {"post_id": 45458, "ts": "2026-08-11T22:46:37Z", "hours": 2.2208, "text": "Hi people! I’m back from my holidays in London so I can finally continue the project. It’s been a while so I felt motivated and decided to start adding a new block entity: the pan! So far the block entity already has a screen but there are still a few things missing, like the model/texture and a proper crafting system. So far I can only implement recipes with a container like a bowl or plate (since I recycled a lot of code from my cooking pot) but that wouldnt make a lot of sense if I just wanted to get e.g. the standard minecraft cooked beef since it has no container, so yeah, I’ll have to find a way to make that work. I also added a new decoravtive block: the counter. It’s the brick with a layer of polished deepslate at the top. And I’ve found out that it not only works well as a counter but also as the top of a brisk wall. Anyways that’s all I had time for today, see you tomorrow!"}, {"post_id": 40198, "ts": "2026-08-03T16:29:35Z", "hours": 1.3703, "text": "Hi people! This is probably the last devlog I’ll post before I leave for a week to go on vacation to London, unless I get a sudden sweep of motivation or somthing XD. Anyways I got some new stuff for you. So first you see the work of my boredom, my farm that I build. Then I finally added the stove with texture and everything so that’s done now. And to celebrate that I added the carrot soup that can be crafted in the cooking pot. And I’ve added the new garlic crop with seeds and the garlic itself of course. Not really sure yet what I’m going to do with that but better have it than not have it. Besides garlic bread is always an answer, am I right. Anyways that’s all from me for today, see you guys in a week or so :)"}, {"post_id": 39687, "ts": "2026-08-02T20:29:38Z", "hours": 2.6472, "text": "New Crop Alert! Meet the newest crop addition to Mine and Dine: The onion can now be grown. On my way to making my mod survival friendly this really helps quite a lot. The onion can, like the other seeds, be obtained through breaking grass. But to be honest texturing the growth stages of a crop will forever be the most annoying part of the process. I’ve also done some more tweaking, like adding sounds and map colors to my blocks. Plus a I added a German language pack to my mod. Here are some of my favourite (with that I mean wildest) translations: Vanilla Bean Seeds = Vanilleschotensamen Dark Chocolate covered Apple = Apfel mit Zartbitterschokoladenüberzug And the other ones sound kind of weird too, even though German is my mother tongue. Guess it really does’nt make a difference if you read the english version all the time without thinking of the translation XD Anyways have a good day and see you next time."}, {"post_id": 39187, "ts": "2026-08-01T23:47:08Z", "hours": 0.3183, "text": "Didn’t have time for much toady so all i did was finally create a loot table for my block entities and implemented their strength so they wouldn’t be instamine anymore. (I know the dropped cooking pot is a bit big but I’ll change that in the future.) See you next time :)"}, {"post_id": 38495, "ts": "2026-07-31T22:06:56Z", "hours": 0.8517, "text": "Here’s my devlog for toady :) So I played around a bit with my cooking pot and added the function that they only work, when they have a warm block underneath them, like the ones you can see below. What I’m working on next is probably something like a stove so you can have a nice looking block that gives off heat because all the warm blocks look a bit weird and I don’t think it would make sense to count a furnance that isn’t on as a warm block. I also made three new item models to complete them one after another. From left to right we now have the oinigiri, the salmon sushi, the cod sushi and an item model for my plate because i thought it would look better to have a 2d texture instead of the 3d model. Hope to see you in my next devlog :) and feel free to leave suggestions on what I could add to my mod."}, {"post_id": 37633, "ts": "2026-07-30T14:49:09Z", "hours": 3.5092, "text": "Now that the summer holidays have finally begun where I live I can finally show you the working cooking pot. While the model (the thing on the burning furnance) defintely needs a rework I’m pretty happy with the function. The most annoying part defintely was getting the screen (the menu) to run and look correctly. I currently have the crafting recipe for cooking rice and tomato sauce implemented and I’m working on adding the vanilla soup/stews but there are still a few textures missing until I want to show you those. Anyways feel free to leave some ideas on recipes to add in the comments, see you next time :)"}, {"post_id": 36571, "ts": "2026-07-28T19:40:24Z", "hours": 1.5392, "text": "Currently working on giving this little thing a proper function. For now it was just my earliest Block Entity experiement, but now I want to give my cooking pot an actual fuction. I want it to function similarly to Farmer’s Delight’s pot. So the crafting doesnt follow a shape, but is shapeless. I already have rewritten a lot like the custom block and block entity and I’ve written the cooking pot recipe (input). Thankfully I was able to recycle a lot of code from my grinder. The big task now is to rewrite the screen and screen handler and to make the whole thing work as a whole so I can finally craft everything I want :) Can’t wait to finish this! I’d love some suggestions on where to go on from the finished cooking pot. I’ve already thought about adding a frying pan, which would make sense in my head since you don’t cook everything in a pot."}, {"post_id": 35944, "ts": "2026-07-27T18:35:20Z", "hours": 0.7631, "text": "On my road to making my mod survival friendly, I have now added all my seeds to the loot table of short and tall grass.It took longer than I had hoped for because I may or may not have forgotten that silk touch has no effect on grass and I may or may not have tried to implement the silk touch exception regardless.Wasn’t exactly my brightest moments once i figured it out after like 20 minutes of wasting my time."}, {"post_id": 35214, "ts": "2026-07-26T14:30:57Z", "hours": 1.3289, "text": "It’s me again! My grinder now has a custom recipe type. It can now grind sugarcane into sugar as well as wheat into flour. That’s also the reason why I decided to rename it just into grinder. I think it fits the purpose a bit better. I even managed to add a way to get my recipes to get easily generated with the fabric data gen. And I added a grilled corn cib because I wanted to. Now my focus will probably shift towards making what I have survival friendly because for now the mod only work in creative. For the different kinds of seeds I think I’ll just add them to the loot table to grass, like wheat seeds. But I’m always open for better suggestions!"}, {"post_id": 34580, "ts": "2026-07-25T13:03:48Z", "hours": 1.4089, "text": "My Corn Grinder is now a Block Entity! It has an inventory now where you can input your wheat to get flour. Next I will add a custom recipe type so I can add more types of things to grind down. I was thinking about grinding corn seeds into corn flour for example so in the future I could add nachos or taco shells. I’d be open for more suggestions on what grinding recipes to add."}, {"post_id": 34344, "ts": "2026-07-24T23:15:12Z", "hours": 1.5892, "text": "So I didnt code a lot today that I can show you because it’s all still unfinished and doesnt work but I have other exciting news: My mod got approved on Modrinth so you can download it through the Modrinth Website now! Please keep in mind that I have a version from a few days back on there so it’s not perfectly up to date but it’s still a playable version (in creative, though I’m working on making it survival friendly) Here’s a screenshot of my mod’s page:"}, {"post_id": 33640, "ts": "2026-07-23T18:31:51Z", "hours": 0.6331, "text": "Hi people! Didn’t have time for much today, so all I did was restucture my Item Groups a bit to have them in a logical order. So now there are Seeds, Ingredients, finished Dishes and Utensils."}, {"post_id": 33102, "ts": "2026-07-22T18:31:45Z", "hours": 1.7647, "text": "I mentioned it in an earlier devlog and now here they are: the plates! They can be placed down to display you’re crafted dishes (and other items). The texture is still to be made properly."}, {"post_id": 32577, "ts": "2026-07-21T20:56:34Z", "hours": 0.3733, "text": "Didn’t have time for much so I just added two new items: chicken legs and onigiris. The latter already has a crafting recipe. For the chicken leg I still have to figure out how I want it to be obtainable."}, {"post_id": 31950, "ts": "2026-07-20T19:25:31Z", "hours": 2.7164, "text": "Hi guys, here’s my devlog for today. So down below you can see a few new items, some of which I havent textured yet (shame on me). (from left to right) A bowl of rice, yeast, fermented yeast, dough (which you can bake into bread) and sushi with cod and salmon. On the left you can also see that I experimented a bit with block entities and I think i will turn this conept into some sort of display plate that would also be used for crafting dishes in the future. Anyways hope you liked my little devlog for today, see you for the next one :)"}, {"post_id": 31441, "ts": "2026-07-19T20:12:44Z", "hours": 1.1936, "text": "Alright fixed it. Thankfully the mods running again and I even got the alpha-1.1 version up on modrinth for approval. I’ll keep you updated once its live."}, {"post_id": 31364, "ts": "2026-07-19T18:07:29Z", "hours": 2.9633, "text": "Currently fixing my modpack :( I tried to make it into a git repo and it broke and now I have to do it all again. Thankfully I can just copy over the code but it’s still really annoying. I’ll keep you updated. In the meantime enjoy a picture of an older 3d model of mine."}, {"post_id": 30779, "ts": "2026-07-18T17:32:00Z", "hours": 0.6333, "text": "It might not look like it but this is a custom block I programmed. It’s a grinder used for grinding down things like wheat into flour. The model’s obviously not made yet but I’m definitely going to do it at some point."}, {"post_id": 30726, "ts": "2026-07-18T15:28:41Z", "hours": 0.3822, "text": "Hi people this is the first devlog on my Minecraft cooking mod in which I aim to overhaul the cooking system in minecraft. attached are some screenshots on what I’ve been working on so far. I’ve added a couple new food items and there will be many more to come."}]...
|
Title: Mine and Dine - 26.2 Minecraft Mod by @RevC Title: Mine and Dine - 26.2 Minecraft Mod by @RevComInteractives | Stardance
Devlogs:
Hi people this is the first devlog on my Minecraft cooking mod in which I aim to overhaul the cooking system in minecraft. attached are some screenshots on what I’ve been working on so far. I’ve added a couple new food items and there will be many more to come.
It might not look like it but this is a custom block I programmed. It’s a grinder used for grinding down things like wheat into flour. The model’s obviously not made yet but I’m definitely going to do it at some point.
Currently fixing my modpack :( I tried to make it into a git repo and it broke and now I have to do it all again. Thankfully I can just copy over the code but it’s still really annoying. I’ll keep you updated. In the meantime enjoy a picture of an older 3d model of mine.
Alright fixed it. Thankfully the mods running again and I even got the alpha-1.1 version up on modrinth for approval. I’ll keep you updated once its live.
Hi guys, here’s my devlog for today. So down below you can see a few new items, some of which I havent textured yet (shame on me). (from left to right) A bowl of rice, yeast, fermented yeast, dough (which you can bake into bread) and sushi with cod and salmon. On the left you can also see that I experimented a bit with block entities and I think i will turn this conept into some sort of display plate that would also be used for crafting dishes in the future. Anyways hope you liked my little devlog for today, see you for the next one :)
Didn’t have time for much so I just added two new items: chicken legs and onigiris. The latter already has a crafting recipe. For the chicken leg I still have to figure out how I want it to be obtainable.
I mentioned it in an earlier devlog and now here they are: the plates! They can be placed down to display you’re crafted dishes (and other items). The texture is still to be made properly.
Hi people! Didn’t have time for much today, so all I did was restucture my Item Groups a bit to have them in a logical order. So now there are Seeds, Ingredients, finished Dishes and Utensils.
So I didnt code a lot today that I can show you because it’s all still unfinished and doesnt work but I have other exciting news: My mod got approved on Modrinth so you can download it through the Modrinth Website now! Please keep in mind that I have a version from a few days back on there so it’s not perfectly up to date but it’s still a playable version (in creative, though I’m working on making it survival friendly) Here’s a screenshot of my mod’s page:
My Corn Grinder is now a Block Entity! It has an inventory now where you can input your wheat to get flour. Next I will add a custom recipe type so I can add more types of things to grind down. I was thinking about grinding corn seeds into corn flour for example so in the future I could add nachos or taco shells. I’d be open for more suggestions on what grinding recipes to add.
It’s me again! My grinder now has a custom recipe type. It can now grind sugarcane into sugar as well as wheat into flour. That’s also the reason why I decided to rename it just into grinder. I think it fits the purpose a bit better. I even managed to add a way to get my recipes to get easily generated with the fabric data gen. And I added a grilled corn cib because I wanted to. Now my focus will probably shift towards making what I have survival friendly because for now the mod only work in creative. For the different kinds of seeds I think I’ll just add them to the loot table to grass, like wheat seeds. But I’m always open for better suggestions!
On my road to making my mod survival friendly, I have now added all my seeds to the loot table of short and tall grass.It took longer than I had hoped for because I may or may not have forgotten that silk touch has no effect on grass and I may or may not have tried to implement the silk touch exception regardless.Wasn’t exactly my brightest moments once i figured it out after like 20 minutes of wasting my time.
Currently working on giving this little thing a proper function. For now it was just my earliest Block Entity experiement, but now I want to give my cooking pot an actual fuction. I want it to function similarly to Farmer’s Delight’s pot. So the crafting doesnt follow a shape, but is shapeless. I already have rewritten a lot like the custom block and block entity and I’ve written the cooking pot recipe (input). Thankfully I was able to recycle a lot of code from my grinder. The big task now is to rewrite the screen and screen handler and to make the whole thing work as a whole so I can finally craft everything I want :) Can’t wait to finish this! I’d love some suggestions on where to go on from the finished cooking pot. I’ve already thought about adding a frying pan, which would make sense in my head since you don’t cook everything in a pot.
Now that the summer holidays have finally begun where I live I can finally show you the working cooking pot. While the model (the thing on the burning furnance) defintely needs a rework I’m pretty happy with the function. The most annoying part defintely was getting the screen (the menu) to run and look correctly. I currently have the crafting recipe for cooking rice and tomato sauce implemented and I’m working on adding the vanilla soup/stews but there are still a few textures missing until I want to show you those. Anyways feel free to leave some ideas on recipes to add in the comments, see you next time :)
Here’s my devlog for toady :) So I played around a bit with my cooking pot and added the function that they only work, when they have a warm block underneath them, like the ones you can see below. What I’m working on next is probably something like a stove so you can have a nice looking block that gives off heat because all the warm blocks look a bit weird and I don’t think it would make sense to count a furnance that isn’t on as a warm block. I also made three new item models to complete them one after another. From left to right we now have the oinigiri, the salmon sushi, the cod sushi and an item model for my plate because i thought it would look better to have a 2d texture instead of the 3d model. Hope to see you in my next devlog :) and feel free to leave suggestions on what I could add to my mod.
Didn’t have time for much toady so all i did was finally create a loot table for my block entities and implemented their strength so they wouldn’t be instamine anymore. (I know the dropped cooking pot is a bit big but I’ll change that in the future.) See you next time :)
New Crop Alert! Meet the newest crop addition to Mine and Dine: The onion can now be grown. On my way to making my mod survival friendly this really helps quite a lot. The onion can, like the other seeds, be obtained through breaking grass. But to be honest texturing the growth stages of a crop will forever be the most annoying part of the process. I’ve also done some more tweaking, like adding sounds and map colors to my blocks. Plus a I added a German language pack to my mod. Here are some of my favourite (with that I mean wildest) translations: Vanilla Bean Seeds = Vanilleschotensamen Dark Chocolate covered Apple = Apfel mit Zartbitterschokoladenüberzug And the other ones sound kind of weird too, even though German is my mother tongue. Guess it really does’nt make a difference if you read the english version all the time without thinking of the translation XD Anyways have a good day and see you next time.
Hi people! This is probably the last devlog I’ll post before I leave for a week to go on vacation to London, unless I get a sudden sweep of motivation or somthing XD. Anyways I got some new stuff for you. So first you see the work of my boredom, my farm that I build. Then I finally added the stove with texture and everything so that’s done now. And to celebrate that I added the carrot soup that can be crafted in the cooking pot. And I’ve added the new garlic crop with seeds and the garlic itself of course. Not really sure yet what I’m going to do with that but better have it than not have it. Besides garlic bread is always an answer, am I right. Anyways that’s all from me for today, see you guys in a week or so :)
Hi people! I’m back from my holidays in London so I can finally continue the project. It’s been a while so I felt motivated and decided to start adding a new block entity: the pan! So far the block entity already has a screen but there are still a few things missing, like the model/texture and a proper crafting system. So far I can only implement recipes with a container like a bowl or plate (since I recycled a lot of code from my cooking pot) but that wouldnt make a lot of sense if I just wanted to get e.g. the standard minecraft cooked beef since it has no container, so yeah, I’ll have to find a way to make that work. I also added a new decoravtive block: the counter. It’s the brick with a layer of polished deepslate at the top. And I’ve found out that it not only works well as a counter but also as the top of a brisk wall. Anyways that’s all I had time for today, see you tomorrow!
Hello people! I’ve been somewhat productive today: So first of all I added a provisional model for my pan. Its that orange thing next to the cooking pot. Then I’ve also reworked the crafting logic of my pan so it supports recipes that don’t need a bowl or similar, like you can see in the second picture. I feel like for the vanilla meat items that apporach makes the most sense. And I’ve added sunflower seeds, ground sunflower seeds and sunflower oil into my game. For now you just have to believe me, because I dont have any textures made for them just yet XD. In the third screenshot you can see how sunflower seeds are ground into ground sunflower seeds. In the last picture you can see the crafting recipe for sunflower oil fron ground sunflower seeds. It’s very simplified from the way one would actually make sunflower oil but it’s still just minecraft so I think it fits. Anyways that’s everything I have for you today, see you tomorrow!
Hi People! Today I added another Block Entity: The mixer. It works similarly to the cooking pot and pan so I was able to copy a lot of that code. I just had to add the rest of the slots and remove the container slot. I’ll use the mixer as a way to make different kinds of doughs later but for now it can just make bread dough, you can bake into bread in a furnance. I’m really looking forward on making pasta dough and then expanding on that. I was kind of thinking of making a noodle press so you can make different kinds of pasta (I’m speaking spagetti, tortelini, etc.) I kind of want it to work like a stone cutter, where you put in the dough and then select one shape of noodle. But those are still thoughts for the future. Anyways that’s all from me today, see you next time :)
Hello people! I didn’t have a lot of time today since I’m currently renovating my new room :) and it takes a lot of time. Anyways I still managed to get something done today and that is working on the immersion of my mod. The cooking pot and pan now emit smoke when they are cooking. That’s all from me today and I’ll hopefully get back to you with more things :) See ya!
Okay damn I didn’t think that this would take me this long But hi people! I finally added a cutting board to my mod! It came up a while back as a suggestion for how to get my chicken legs and let me say I think it was a good suggestion. The cutting board just fits right in. It works pretty much as you may know it from farmer’s delight, where you put an item on it and then click on it with a tool in this case a knife (which I also added today but that was pretty simple) and it drops the outcome. I’m planning on adding onto that mechanic with more tools like a roling pin for example and definitely more recipes. I have to say now that it is in the game I really like it but damn was it annoying to implement. I mean it was my fault (I forgot one function so it didn’t work) but it nontheless send me down an existentiell crisis ‘cause there was no error message whatsoever. Don’t we love that XD Anyways that’s all from me for today, I’ll see you around :)
Hi people! I’ve been putting my new block entities to some good use today. (From left to right) First of all I added the bun dough. You get it by cutting bread dough on the cutting board. Then there is the bun which you obviously get by smelting bun dough in a furnance. Next up is the cookie dough. You get it by mixing the needed ingredients for a cookie in a mixer. And last is the heavy cream. I’ve added the item a little while back but only now found the time and motivation (especially the latter XD) to make the texture and give it a proper crafting recipe. You get it by mixing milk and butter in the mixer. I believe that that is roughly how heavy cream is made in real life, at least after my five minute google research. I’ve also added crafting recipes for some other things but those aren’t anything special really just in a crafting table. Anyways that’s all from me today, see you around :)
Hello People! I’ve worked a bit more on expanding the cutting board functionality. I’ve added another tool that can be used in the recipes and that’s the rolling pin (first pic, top left) It does exactly what it sounds like it flattens the ingredients, like for example with my tortilla dough (top right). You can see the process in the second picture. And because it would have felt weird to stop the production chain there, I added the function to put the raw torilla into my frying pan where it gets fired into a finished tortilla. I’m really looking forward on adding more recipes with my tortilla but for now I’m kind of missing some more ingredients, like red beans that I want to put in there. Anyways, that’s all I have time for today :( I’ll see you around :)
Hi people! I’ve been doing a lot of background work today for future stuff so sadly I don’t have too much to show you today. I still coded some more things that I can already hsow you that are worth taking the look at. On the left is the new powdered sugar that you get by grinding sugar in the grinder. It is also used to craft the next item, the pie dough in the mixer. On the cutting board oyu can then transform the dough into the pie base. This item will be used later when making different kinds of pies. What I immediately have in mind is of course the oumpkin pie that is already in vanilla minecraft but also the apple pie and the sweet berry pie. Both of these fruits are of course already in the base game so I think the addition of a pie would make sense. I’m also planning on adding more fruit so I can add more pies. Anyways that’s all from me for today, see you around :)
Hello people! You can now enjoy a nice apple pie at your farm because I have been busy. I added eight new items today to aid you on your cooking journey. First I added cinnamon sticks and powder. Right now you get cinnamon sticks from stripping jungle logs on a cutting board. I’m planning on adding actual cinnamon trees in the future but for now I figured jungle wood would be the most fitting since cinnamon is also a tropical plant. With the addtition of cinnamon I finally made it possible to craft pumpkin pie with the mechanics of my mod. That’s also why I added the middle row of items. On the left we have the pumkin slice which you can bake into the grilled pumpkin slice (middle). I’ll probably have to rework this texture in the future cause you can’t really tell the difference :P. And with that item you can then craft the unbaked pumpkin pie which, as the name suggests, can be baked into the minecraft pumpkin pie. The last three items I added are for my apple pie. First up we have apple chunks which you can then use to make the unbaked apple pie which of course can be baked into the finished apple pie. I hope you like my new additions and that’s also everything from me for today. See you around :)
Hello people! I havent posted anything in quite some time but trust me I’ve been busy. The reason why I’ve shown you so little is because there isn’t much that I could show you. I’ve added a lot of background stuff that I just had to add because I’m planning on shipping soon. One sneakpeak I can give you is this (see picture). Any idea what it is? Well I’ll tell you: It’s a cookbook. I think it’s nice for the immersion if you have a cookbook where you can find all the cooking recipes for my mod. I’ll show you more about it in the future once I’m done with it. Until then that’s all from me. Hope to see you around!
Hello people! As promised I have finished the cookbook (at least to a point where I’d say it’s complete enough) and I can now give you some sneakpeeks. Sadly I cant show you everything ‘cause I can only attach four pictures but I think I got a good selection. So the first picture you can see is the opening page of the cookbook, so just some general stuff. The second picture shows a segment of the contents list. All the pink things are links to the corresponding pages you can click on to quickly navigate through the book. And lastly you can see an extract from one of the recipes (in this case for an apple pie). I’m somewhat happy with the design but I’m especially happy with the display of the item on the corresponding page. It is defintely a pain to set up (at least the way I did it) but I think it’s well worth it. But I think that’s all from me for today. I’ll be adding the last textures and little things over the next few days so I can finally push out my first ship :) See you around!
Hi people! I’ve been busy the last couple of days and let me tell you I’m so close to shipping my first iteration of the mod. I’m so close to being done I just have a add a last few things and maybe film a few short showcases and then I’ll be ready to ship this thing. Anyways the most interesting additions that I added are a few new item (textures) and finally after weeks of them being untextured, my mixer and grinder have gotten their models. Anyways that’s all from me for today. The next time you’ll hear from me is probably with a ship so stay tuned. See you!
Hello People! Today I just wanted to share a quick video with you. It shows how you make an apple pie in my mod. I thought it would be a good showcase for some of the mechanics my mod has to offer. And if the video quality isnt so good, I’m sorry but its the only way I could upload the video on this platform :( Anyways see you around!
Hello people! I’ve been busy again. But before we dive into what I added I want to say thank you to everyone who rated my project so incredibly high. I couldn’t be happier with all the feedback you gave me. I want to address a few things though that I found which I think caused problems for some of the playtesters. I was under the assumption that the Modrinth version detection would work and therefor my mod was playable on all 1.21.X The problem is that the mod is only compatible with 1.21.1. As much as I would like to blame all of that on Modrinth I do have to admit that I could have just playtested it on the other versions. So to everyone who had problems with playing my mod I want to say a sorry and I hope that this fixes your issues. But now to what I’ve been doing the last couple of days: I’m from southern Germany and therefor I wanted to implement the most iconic dish from my region: Käsespätzle. Käsespätzle (something like cheese spaetzle in english) are like the german kind of noodles just baked with cheese. It may sound a but lame but trust me they are delicious. Now implementing them proved to be a bit more challenging than I had thought because I had no cheese whatsoever so I implemented that together with it’s aging mechanic. And furthermore spätzle are made on a special type of scraper which I also had to implement. It inserts the raw spätzle directly into the cooking pot. I’m currently also contemplating where I want to go with this mod. I’m not going to abandon it, that’s for sure but I just don’t know if i want to keep adding stuff in 1.21 or if I should migrate to the newest version of the game (that’s something that a lot of raters wanted) I’ll have to think about that a bit more but until then see you around!
Hey people! So I decided to start porting my mod to 26.2 because I hate myself or something. This creenshot really captures my current state of mind quite well, and I’m really contemplating why I decided to do this. Well, it’s the next logical step that’s why I did it but it’s till so annoying. But seriously, why does Mojang have to change their code in every update? Anyways, by the time I uploaded this devlog, I was able to port most of the items plus the model generator which roughly leaves the blocks + their entities and screens and everything, the tag datagen, the cookbook pages (I dont want to) and all the recipes. Damn that’s a lot of work why did I sign up for this. Anyways that’s all from me today, see you around!
Hi people! I have been quiet for a few days now but trust me I’ve been busy. The port to the newest Minecraft version is almost complete so be on the lookout for that. Since I last posted a devlog I updated all the items, tags and the loottable modifiers. Also I updated the playerJoinEvent that gives you a cookbook when you first join into a world. Now to the places that still need updating: The ModBlocks, but just those with a blockentity with crafting functions. Therefore ModEntites and the custom recipe types and generators are obviously still missing too. And probably the least amount of work will be updating the missing recipes in my ModRecipeProvider class (It auto generates all my recipes) I have already updated the vanilla style recipes so the ones in a crafting table or oven but my custom recipes are still missing. And of course I gotta debug all my code when all that is done. Anyways I hope I’ll finish this update at some time next week so I can finally start adding some new stuff. That being said I don’t think I’ll be able to code as much starting from Monday, because where I live school is starting again so yeah… Anyways that’s all from me today, hope to see you around!
Hi people! My CornGrinderRecipeBuilder works again! That also means that I managed to get my corn grinder as a whole at least to a state where I would assume that it runs again. So yes, I have reworked both the custom block, teh block entity and the recipe handling. And let’s just say I wouldnt exactly say that I had fun… It’s just really annoying trying to find out why i cant refer to a method in another class only to then find out that I forgot that I forgot to rename one type. To apply that to what cost me the most time, I tried to call my tick() method from my block entity in the custom block (so the crafting actually progresses) but I forgot to change the type of my blockEntityType and it referred to the wrong blockentity. It took me forever to catch that problem. Anyways only five more crafting blockentities I have to port over frustrated scream . I just hope it will be easier since i now roughly know what I’m supposed to do. I can only hope now that school starts again for me… Anyways that’s everything from me today, see you around!
Hi people! My cooking pot is now working! (Hopefully) It took me longer than I expected because I had a lot of “fun” with the codec of the recipes. But thankfully now that that’s working I can recycle a lot of code for my pan and mixer which will hopefully make that part a lot easier. The cutting board and scraper will probably be another story though. But I’m positive that I’ll be able to finish everything by the ned of the week. That’s all from me for today see you around!
Hi people! It’s looking a lot less red now, doesnt it? I’ve been able to update both the pan and the mixer to the newest version, and that leaves only the cutting board and the scraper before I’ll be able to finally run the game again (hopefully) So yeah I feel like I’m close to finally being finished with the update and then I can finally start working on actual new features. I want to add at least a little bit of actually new content before I ship again. Anyways that’s all from me for today, hope to see you around!
Hi people! I’ve been busy the last couple of days and I can now announce that I can finally run my game again in Minecraft 26.2. So the majority of the update is finished! That being said there are some to be fair kind of funny bugs that I still need to fix (and honestly right now I don’t really have a clue how but oh well I guess we’ll have to see) One example is that somehow my progress arrow in my menu does this really weird thing where it just duplicates a couple times and stretches weirdly across my screen. I mean I don’t know what I did but I’m sure there’s a way to fix that. And the other thing is that for some to me unknown reason, my display items are just red. For example on my cutting board. They’re not at all supposed to look like that and the issue is consistent across all my item renders… Yeah honestly no clue why. Also the display doesnt dissapear when you craft and item but I already had that issue with the last version and I managed to fix that so I’m sure that won’t be a big problem. There are some minor bugs that I still have to resolve, like the item models of my blocks not loading in correctly or my item displays in the cooking pot not working but I’m sure that won’t be too difficult. Anyways that’s all from me for today, I’ll see you around!
Hi people! This will probably be my last update in this challenge as I have now finally fixed the bugs that were bothering me. The item renderers work now and have their actual colors. Also the progress arrow is now only one arrow and not 100. I’ll be shipping my project now in the hopes that it will get accepted and rated as well as the last time I shipped. By the way this doesn’t mean I’m done with the mod at all, I still think it could use more updates and improvements so my development is by no means finished. It’ll just happen outside of this challenge and maybe not as frequent as it did now. Anyways that’s all from me for now, I’ll hope to see you around!
Ships:
Mine & Dine is a Minecraft mod that aims to overhaul the minecraft cooking system, because I always thought that it was a little bit shallow and lacked depth. Therefore I have set the goal for myself to transform the cooking system into something I always wanted. My mod adds five new blockentities and over 60 new items that do exactly that. (You can find a deeper explanation of the contents in my ReadMe) This mod is by far not finished but I think it’s gotten to a point where I would say it is playable and enjoyable, that’s why I decided to ship it now. What I’m especially proud of is how far my skills as a mod developer have come since I started this project. I have made a couple of smaller mods before the stardance challenge but never something quite like this. I was even able to upload it to Modrinth where the whole world can see it. (Modrinth is also the easiest way to play my mod) This step of shipping my first project really feels like I’ve achieved something. Thanks in advance to everyone who plays my mod, I hope you’ll enjoy it. If you encounter any bugs (And its not unlikely you do) please report them on my github page. Anyways that’s everything I have to say for now, see you around!
Mine & Dine is a Minecraft mod that aims to overhaul the minecraft cooking system, because I always thought that it was a little bit shallow and lacked depth. Therefore I have set the goal for myself to transform the cooking system into something I always wanted. My mod adds six new blockentities and over 70 new items that do exactly that. (You can find a deeper explanation of the contents in my ReadMe) This mod is by far not finished but I think it’s gotten to a point where I would say it is playable and enjoyable, that’s why I decided to ship it now. Especially now that I’ve successfully ported it to version 26.2. What I’m especially proud of is how far my skills as a mod developer have come since I started this project. I have made a couple of smaller mods before the stardance challenge but never something quite like this. I was even able to upload it to Modrinth where the whole world can see it. (Modrinth is also the easiest way to play my mod btw) This step of shipping my final project for this challenge really feels like I’ve achieved something. Thanks in advance to everyone who plays my mod, I hope you’ll enjoy it. If you encounter any bugs (And its not unlikely you do) please report them on my github page. Anyways that’s everything I have to say for now, see you around!...
|
1792842841.6314957
|
1792929241.6314957
|
|
65123
|
fine by @vyn | Stardance
|
vyn
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T19:43:08Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made my first os for fun i like mac os so i tired to get that smooth look", "repo": "https://github.com/luismcshrimp-design/os", "demo": "https://luismcshrimp-design.github.io/os"}]...
|
[{"post_id": 74613, "ts": "202 [{"post_id": 74613, "ts": "2026-09-27T19:40:57Z", "hours": 0.6994, "text": "goofy os my first ship"}]...
|
Title: fine by @vyn | Stardance
Devlogs:
goofy os Title: fine by @vyn | Stardance
Devlogs:
goofy os my first ship
Ships:
i made my first os for fun i like mac os so i tired to get that smooth look...
|
1792814201.2968297
|
1792900601.2968297
|
|
28680
|
Copy-Paste-Pad by @kallioderso | Stardance
|
kallioderso
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T19:25:51Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey there i created the Copy-Paste-Pad, a macropad able provide up to six clipboards at the same time. So 6x more than normaly possible under windows. For this you have a so called copy mode (left down button) and a paste mofe (right down button) after activating the specific mode each click at the remaining keys triggers an specific copy or paste event for the pressed key slot. This happenes in a laptop sided software, reacting on hid signals from the device to trigger strg + c or strg + p to copy something and than store it in one of the 6 Storage variables. Creating this laptop sided software was really challanging in comparison to the firmware for the macropad itself due to how hid events work and to copy something without loosing the original clipboard context. I really hope you all like this project as much as i do. I am really proud of the geberal design and look of everything", "repo": "https://github.com/kallioderso/Copy-Paste-Pad", "demo": ""}]...
|
[{"post_id": 74608, "ts": "202 [{"post_id": 74608, "ts": "2026-09-27T19:20:08Z", "hours": 0.5119, "text": "Finally finished everything and now ready for ship (had to fix the CAD files another time xD)"}, {"post_id": 74516, "ts": "2026-09-27T15:27:13Z", "hours": 2.7533, "text": "In this Build-devlog did i assembly everything (while destroying 2 of the 5 platines) and compiling everything. As well did i fix my CAD files, so that everything is now fine"}, {"post_id": 48075, "ts": "2026-08-16T11:18:09Z", "hours": 2.0358, "text": "Long time since i uploaded the last devlog. one thing i forgot to upload was these changes which includes a lot of code reworking and commenting everthing to make it more understandable. in the future i will create custom applications with UI using .net Maui. at least if i got enough time remaining :)"}, {"post_id": 22912, "ts": "2026-07-05T15:32:29Z", "hours": 0.4372, "text": "i finally fixed everything. because inside the last devlog did i commpletly forgot to update the Readme file and therefore every important piece of information towards the firmware xD. but i fixed it :) and as well added the .dxf files needed for CNC machining, in case someone would like to CNC machine his copy of my creation. (i did it as well)"}, {"post_id": 22893, "ts": "2026-07-05T15:05:29Z", "hours": 1.7742, "text": "with this devlog, i finally finished the entire firmware for the first ship of the Copy-Paste-Pad and all of its functions. unfortunatly is it so, that it took very long to compile the qmk, which is the reason why i as well included it inside github. so that others dont have to life trough the same struggle xD. apart from that, did i comment every single file and as well understood the things i wrote with the help of ai, so that i could rewritte and improve it inside the next ship or better sayed until the next ship. i tried as well to documentate everything as good as possible, so that it would be easy to understand and use. up to this point i as well made some little but nice improvements towards the casing and the pcb, as i accidently put the oled towards the 5V and a bunch of other small mistakes as well :P"}, {"post_id": 22822, "ts": "2026-07-05T12:47:21Z", "hours": 1.4356, "text": "I created the whole firmware, but sadly did i had to use ai for most of the .exe firmware part, there to solve the copying and pasting inside the computere, as it had to do with complicated librarys. But dont worry, before shipping will i fix the code and rewritte it, so that the ai aspect almost gets missing, just wanted a prove of concept. As well did i create a wood casing inside my stephfathers cnc mashine as i loved the idea of letting the Copy-Paste-Pad appear premium with wood, glas and so on."}, {"post_id": 22033, "ts": "2026-07-04T09:03:11Z", "hours": 2.4039, "text": "I Tryed my best to create the firmware, but i struggle so much : P"}, {"post_id": 20691, "ts": "2026-07-02T11:02:40Z", "hours": 0.8958, "text": "Creating the Github Repo (forgot to record all of it, like 45min) and polished the casing"}, {"post_id": 19275, "ts": "2026-06-30T15:27:02Z", "hours": 0.65, "text": "Created the entire Casing for the Copy-Paste-Board"}, {"post_id": 19238, "ts": "2026-06-30T14:32:57Z", "hours": 1.2906, "text": "Finalized the PCB and Schematic"}]...
|
Title: Copy-Paste-Pad by @kallioderso | Stardance
Title: Copy-Paste-Pad by @kallioderso | Stardance
Devlogs:
Finalized the PCB and Schematic
Created the entire Casing for the Copy-Paste-Board
Creating the Github Repo (forgot to record all of it, like 45min) and polished the casing
I Tryed my best to create the firmware, but i struggle so much : P
I created the whole firmware, but sadly did i had to use ai for most of the .exe firmware part, there to solve the copying and pasting inside the computere, as it had to do with complicated librarys. But dont worry, before shipping will i fix the code and rewritte it, so that the ai aspect almost gets missing, just wanted a prove of concept. As well did i create a wood casing inside my stephfathers cnc mashine as i loved the idea of letting the Copy-Paste-Pad appear premium with wood, glas and so on.
with this devlog, i finally finished the entire firmware for the first ship of the Copy-Paste-Pad and all of its functions. unfortunatly is it so, that it took very long to compile the qmk, which is the reason why i as well included it inside github. so that others dont have to life trough the same struggle xD. apart from that, did i comment every single file and as well understood the things i wrote with the help of ai, so that i could rewritte and improve it inside the next ship or better sayed until the next ship. i tried as well to documentate everything as good as possible, so that it would be easy to understand and use. up to this point i as well made some little but nice improvements towards the casing and the pcb, as i accidently put the oled towards the 5V and a bunch of other small mistakes as well :P
i finally fixed everything. because inside the last devlog did i commpletly forgot to update the Readme file and therefore every important piece of information towards the firmware xD. but i fixed it :) and as well added the .dxf files needed for CNC machining, in case someone would like to CNC machine his copy of my creation. (i did it as well)
Long time since i uploaded the last devlog. one thing i forgot to upload was these changes which includes a lot of code reworking and commenting everthing to make it more understandable. in the future i will create custom applications with UI using .net Maui. at least if i got enough time remaining :)
In this Build-devlog did i assembly everything (while destroying 2 of the 5 platines) and compiling everything. As well did i fix my CAD files, so that everything is now fine
Finally finished everything and now ready for ship (had to fix the CAD files another time xD)
Ships:
Hey there i created the Copy-Paste-Pad, a macropad able provide up to six clipboards at the same time. So 6x more than normaly possible under windows. For this you have a so called copy mode (left down button) and a paste mofe (right down button) after activating the specific mode each click at the remaining keys triggers an specific copy or paste event for the pressed key slot. This happenes in a laptop sided software, reacting on hid signals from the device to trigger strg + c or strg + p to copy something and than store it in one of the 6 Storage variables. Creating this laptop sided software was really challanging in comparison to the firmware for the macropad itself due to how hid events work and to copy something without loosing the original clipboard context. I really hope you all like this project as much as i do. I am really proud of the geberal design and look of everything...
|
1792853585.3080091
|
1792939985.3080091
|
|
62145
|
Slacky by @Mando328 | Stardance
|
Mando328
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T19:16:39Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finished the project. Had some problems with nest but managed to figure it all out. It was a nice experience", "repo": "https://github.com/Mando328/slackier", "demo": "https://hackclub.enterprise.slack.com/archives/C0C4Y02V5GA"}]...
|
[{"post_id": 74605, "ts": "202 [{"post_id": 74605, "ts": "2026-09-27T19:14:47Z", "hours": 0.3528, "text": "added a rejection code"}, {"post_id": 70553, "ts": "2026-09-19T11:12:23Z", "hours": 1.3203, "text": "added roulette and help and bal and ping commands, now making it run on nest and shiping it"}]...
|
Title: Slacky by @Mando328 | Stardance
Devlogs:
a Title: Slacky by @Mando328 | Stardance
Devlogs:
added roulette and help and bal and ping commands, now making it run on nest and shiping it
added a rejection code
Ships:
Finished the project. Had some problems with nest but managed to figure it all out. It was a nice experience...
|
1792813920.8467984
|
1792900320.8467984
|
|
5119
|
Sigma macropad by @Nimoseq | Stardance
|
Nimoseq
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T17:49:41Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom macropad for the Hackpad Challenge! The hardest part for me was writing the firmware and getting it all to work properly.", "repo": "https://github.com/N1mos3q/sigma-pad", "demo": ""}]...
|
[{"post_id": 74579, "ts": "202 [{"post_id": 74579, "ts": "2026-09-27T17:45:35Z", "hours": 0.2697, "text": "today i made little changes to the case"}, {"post_id": 26049, "ts": "2026-07-10T17:11:02Z", "hours": 4.6997, "text": "Hackpad name: Sigmapad GitHub Repo: https://github.com/N1mos3q/sigma-pad Description:custom-built 3x3 macropad powered by the Seeed Studio XIAO RP2040. Designed for productivity and gaming, it features a rotary encoder for precise volume control, a 0.91” OLED display for real-time status updates, and 8 addressable RGB LEDs for dynamic underglow lighting. Fully customizable via QMK firmware."}, {"post_id": 4385, "ts": "2026-06-07T18:18:46Z", "hours": 3.2008, "text": "I am making a macropad for a Hackpad mission. And i am currently working on the pcb."}]...
|
Title: Sigma macropad by @Nimoseq | Stardance
Dev Title: Sigma macropad by @Nimoseq | Stardance
Devlogs:
I am making a macropad for a Hackpad mission. And i am currently working on the pcb.
Hackpad name: Sigmapad GitHub Repo: https://github.com/N1mos3q/sigma-pad Description:custom-built 3x3 macropad powered by the Seeed Studio XIAO RP2040. Designed for productivity and gaming, it features a rotary encoder for precise volume control, a 0.91” OLED display for real-time status updates, and 8 addressable RGB LEDs for dynamic underglow lighting. Fully customizable via QMK firmware.
today i made little changes to the case
Ships:
I made a custom macropad for the Hackpad Challenge! The hardest part for me was writing the firmware and getting it all to work properly....
|
1792853550.5371273
|
1792939950.5371273
|
|
65790
|
A website to host sports tournaments by @EpikCaise A website to host sports tournaments by @EpikCaiser | Stardance...
|
EpikCaiser
|
1
|
4.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T17:25:06Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my first project which is made basically to host sports events and i will update it to support other events as well i am aware this is not the most polished project but its my first project and i will be making plenty more which will be way better i promise .", "repo": "https://github.com/khannadivyansh70-blip/sporthub", "demo": "https://eventmade.netlify.app/"}]...
|
[{"post_id": 77665, "ts": "202 [{"post_id": 77665, "ts": "2026-10-07T19:26:51Z", "hours": 1.18, "text": "edited the website and made several changes like rewriting the code and fixing bugs related to the fuctioning of the website made it more smoother and also added a sign up sign out feature"}, {"post_id": 75144, "ts": "2026-09-29T09:05:07Z", "hours": 1.3175, "text": "i made some more changes which were mainly cosmetic i remade a lot of the part of the code and changed the theme a little bit and iproved the explore tab added better images and overall polished and redesigned the website"}, {"post_id": 74969, "ts": "2026-09-28T18:44:41Z", "hours": 1.3931, "text": "I polished the website and made it look a lot better and improved the functionality a lot now its more smoother , the ui has been improved and also added more features like joining events search filters and headers / naviagion bars which make the website a lot easier to use i will be making more changes soon"}, {"post_id": 74534, "ts": "2026-09-27T16:05:24Z", "hours": 0.9422, "text": "I started SportHub because I wanted to make finding local sports and esports events a bit easier. I have struggeled for queite a while for finding esports tournaments and its actually my first project so i dont expeect anything crazy and ofcourse i took lot of help from ai but i will change evrything once its done ."}]...
|
Title: A website to host sports tournaments by @Ep Title: A website to host sports tournaments by @EpikCaiser | Stardance
Devlogs:
I started SportHub because I wanted to make finding local sports and esports events a bit easier. I have struggeled for queite a while for finding esports tournaments and its actually my first project so i dont expeect anything crazy and ofcourse i took lot of help from ai but i will change evrything once its done .
I polished the website and made it look a lot better and improved the functionality a lot now its more smoother , the ui has been improved and also added more features like joining events search filters and headers / naviagion bars which make the website a lot easier to use i will be making more changes soon
i made some more changes which were mainly cosmetic i remade a lot of the part of the code and changed the theme a little bit and iproved the explore tab added better images and overall polished and redesigned the website
edited the website and made several changes like rewriting the code and fixing bugs related to the fuctioning of the website made it more smoother and also added a sign up sign out feature
Ships:
This is my first project which is made basically to host sports events and i will update it to support other events as well i am aware this is not the most polished project but its my first project and i will be making plenty more which will be way better i promise ....
|
1792817268.8430896
|
1792903668.8430896
|
|
65889
|
The Juice by @BombJuice | Stardance
|
BombJuice
|
1
|
2.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T17:24:22Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own personal website. Aligning the images was a little challenging, but I was super proud with the final product. Check out each section!", "repo": "https://github.com/bomb-juice/personal-site", "demo": "https://bomb-juice.github.io/personal-site/"}]...
|
[{"post_id": 74660, "ts": "202 [{"post_id": 74660, "ts": "2026-09-27T21:46:36Z", "hours": 0.8942, "text": "Added more information text variety glow effect on headers background gifs with link embed"}, {"post_id": 74237, "ts": "2026-09-27T00:52:54Z", "hours": 1.9025, "text": "Just finished my first HTML/CSS personal site!"}]...
|
Title: The Juice by @BombJuice | Stardance
Devlog Title: The Juice by @BombJuice | Stardance
Devlogs:
Just finished my first HTML/CSS personal site!
Added more information text variety glow effect on headers background gifs with link embed
Ships:
I made my own personal website. Aligning the images was a little challenging, but I was super proud with the final product. Check out each section!...
|
1792817279.9192166
|
1792903679.9192166
|
|
24750
|
Drive and Lift by @aayushg | Stardance
|
aayushg
|
1
|
41.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T17:06:06Z", "hours": 41.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This project of mine is a basic drivetrain and lift mechanism. This taught me how to use motors, code in C++ and build basic robots. I am a slow build which is why it took longer.", "repo": "https://github.com/aayushg12/vex", "demo": ""}]...
|
[{"post_id": 74553, "ts": "202 [{"post_id": 74553, "ts": "2026-09-27T16:51:57Z", "hours": 5.9172, "text": "Finished the drive and lift mechanism. And fully coded and tested the drive!"}, {"post_id": 56975, "ts": "2026-08-29T00:52:35Z", "hours": 9.9981, "text": "Finally completed drivetrain and constructed lift. Just need to finish adding pulleys then will start working on the intake."}, {"post_id": 52036, "ts": "2026-08-22T02:18:14Z", "hours": 0.815, "text": "Coded basic 4 omni wheel drive train with 4 11w motors and imu"}, {"post_id": 50015, "ts": "2026-08-19T01:20:27Z", "hours": 4.7833, "text": "I have to rebuild the drivetrain because it was too long and wide. this is the difference. After fixing things up I am halfway done and I am saving 1 inch in vertical and 2 inches in horizontal space."}, {"post_id": 46070, "ts": "2026-08-13T00:46:52Z", "hours": 1.1, "text": "Began building intake so that it can be geared up and used pieces of polycarb for ramp"}, {"post_id": 44256, "ts": "2026-08-09T21:43:32Z", "hours": 3.8836, "text": "Found parts for my cascade lift and fixed the drive train spacing."}, {"post_id": 40399, "ts": "2026-08-03T21:19:06Z", "hours": 1.3669, "text": "Added intake roller and fixed/tested drivetrain"}, {"post_id": 16519, "ts": "2026-06-26T21:29:50Z", "hours": 1.2836, "text": "Almost finished the drivetrain just need to add a few more standoffs then code!"}, {"post_id": 16392, "ts": "2026-06-26T17:50:12Z", "hours": 1.9836, "text": "Removed old connections because they didn’t work and added new ones (really hard to add the new ones that’s why it took so long)"}, {"post_id": 15736, "ts": "2026-06-25T16:33:36Z", "hours": 2.2592, "text": "Attached both sides of the drivetrain. Added more connections to make it more stable. Next Steps: continue making it more secure and stable then start coding."}, {"post_id": 15376, "ts": "2026-06-25T00:23:31Z", "hours": 2.0503, "text": "Added gears and wheels to the drive train. Next step is to connect both pieces, add bracing, and code!"}, {"post_id": 15127, "ts": "2026-06-24T16:08:20Z", "hours": 1.9503, "text": "Tested all driving motors. Attached motors and completed frame of the drive base."}, {"post_id": 14781, "ts": "2026-06-24T00:40:34Z", "hours": 0.8669, "text": "Began the assembly and sorted all parts!"}, {"post_id": 14546, "ts": "2026-06-23T18:14:30Z", "hours": 2.7364, "text": "Building the drivetrain for the robot"}]...
|
Title: Drive and Lift by @aayushg | Stardance
Dev Title: Drive and Lift by @aayushg | Stardance
Devlogs:
Building the drivetrain for the robot
Began the assembly and sorted all parts!
Tested all driving motors. Attached motors and completed frame of the drive base.
Added gears and wheels to the drive train. Next step is to connect both pieces, add bracing, and code!
Attached both sides of the drivetrain. Added more connections to make it more stable. Next Steps: continue making it more secure and stable then start coding.
Removed old connections because they didn’t work and added new ones (really hard to add the new ones that’s why it took so long)
Almost finished the drivetrain just need to add a few more standoffs then code!
Added intake roller and fixed/tested drivetrain
Found parts for my cascade lift and fixed the drive train spacing.
Began building intake so that it can be geared up and used pieces of polycarb for ramp
I have to rebuild the drivetrain because it was too long and wide. this is the difference. After fixing things up I am halfway done and I am saving 1 inch in vertical and 2 inches in horizontal space.
Coded basic 4 omni wheel drive train with 4 11w motors and imu
Finally completed drivetrain and constructed lift. Just need to finish adding pulleys then will start working on the intake.
Finished the drive and lift mechanism. And fully coded and tested the drive!
Ships:
This project of mine is a basic drivetrain and lift mechanism. This taught me how to use motors, code in C++ and build basic robots. I am a slow build which is why it took longer....
|
1792857020.6087608
|
1792943420.6087608
|
|
50495
|
LME Luna Machine Executable by @redsimit | Stardan LME Luna Machine Executable by @redsimit | Stardance...
|
redsimit
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T16:47:45Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Made my own compiler from scratch, called Luna Machine Executable (LME). Written in C++, compiles a tiny language with Turkish keywords into real x86-64 assembly, then assembles + links it with nasm/ld into an actual Linux binary. Right now it handles one statement: cik ; compiles to a binary that exits with that code. Full pipeline: tokenizer -> parser -> generator -> asm -> nasm -> ld -> binary. Hardest part was understanding how a parser turns tokens into a tree, and how the generator walks it. Never written a compiler before, so most time went into learning that. Proudest of getting it to run end to end with zero hand-patching, “cik 42;” in, real binary that exits 42 out. To test: download luna + test.lme, sudo apt install nasm binutils, chmod +x luna, ./luna test.lme && ./out && echo $?", "repo": "https://github.com/Simit6155/LME", "demo": "https://github.com/Simit6155/LME/releases/tag/v0.1.0"}]...
|
[{"post_id": 74544, "ts": "202 [{"post_id": 74544, "ts": "2026-09-27T16:31:42Z", "hours": 2.9511, "text": "LME My own Compiler Devlog #5 Finished the first real end-to-end version of Luna today. Wrote generation.h - takes the parse tree from the parser and walks it to spit out x86-64 NASM assembly. Right now it just handles the one node type I have (NodeExit) and generates the mov/syscall pair for exiting with a given code. Rewired main.cpp so it actually uses the tokenizer -> parser -> generator pipeline properly instead of skipping straight from tokens to asm like before. Cleaner flow now: source -> tokens -> parse tree -> asm -> nasm -> ld -> binary Tested it with: cik 42; Compiled clean, ran the output binary, echo $? gave 42. First time the whole pipeline worked end to end without me hand-patching anything. Also wrote a proper README and a .gitignore so I can actually put this on GitHub without dumping build folders and .idea junk into the repo. Still only supports one statement (cik ;), no variables or math yet. Next up: probably adding a second statement type so the parser/generator actually have to branch on something."}, {"post_id": 51674, "ts": "2026-08-21T14:07:47Z", "hours": 2.0042, "text": "DEVLOG #4 Took me allot to understand how a parse tree/Syntax tree works and how to programm it. So I will be using the recursive descent technique and making nodes for each production."}, {"post_id": 50468, "ts": "2026-08-19T17:07:49Z", "hours": 1.2317, "text": "Cleaned up code, made another file for the tokenization(lexer) almost at parsing tree ( [ SOURCE CODE ] │ ▼ LEXICAL ANALYSIS (Tokenizer) ◄─── finished here [ TOKEN STREAM ] │ ▼ SYNTAX ANALYSIS (Parser) [ ABSTRACT SYNTAX TREE (AST) ] │ ▼ SEMANTIC ANALYSIS (Type Checker) [ DECORATED AST ] │ ▼ INTERMEDIATE CODE GENERATION (IR) [ IR CODE ] (e.g., Three-Address Code, Bytecode) │ ▼ CODE OPTIMIZATION [ OPTIMIZED IR ] │ ▼ TARGET CODE GENERATION [ MACHINE CODE / ASSEMBLY ] (Final Executable) “there are two types of programmers - those who have written a compiler and those who haven’t” -Terry Davis"}, {"post_id": 49577, "ts": "2026-08-18T13:44:26Z", "hours": 0.5333, "text": "LME My own Compiler Devlog #2 I got the basic compiler pipeline working for Luna.I implemented a tokenizer that converts Luna source code into tokens, including:cik → exit token integers → integer literals; → semicolon token then added code generation that converts the tokens into x86-64 NASM assembly using the Linux exit syscall.For example: cik 42; gets compiled into assembly that exits the program with status code 42.I also fixed a bounds-checking bug in the token parser and verified that the generated executable runs correctly under Linux/WSL.The basic pipeline is now:Luna source → tokenizer → tokens → x86-64 assembly → executable Next step is the Parse Tree"}, {"post_id": 49538, "ts": "2026-08-18T12:42:59Z", "hours": 0.4053, "text": "Building my own compiler (vexa compiler) devlog #1 Semicolon based, whitespace does not matter. File ending will be .tr so main.tr. Syntax language will be turkish. Now writing the tokenization stuff "}]...
|
Title: LME Luna Machine Executable by @redsimit | Title: LME Luna Machine Executable by @redsimit | Stardance
Devlogs:
Building my own compiler (vexa compiler) devlog #1 Semicolon based, whitespace does not matter. File ending will be .tr so main.tr. Syntax language will be turkish. Now writing the tokenization stuff
LME My own Compiler Devlog #2 I got the basic compiler pipeline working for Luna.I implemented a tokenizer that converts Luna source code into tokens, including:cik → exit token integers → integer literals; → semicolon token then added code generation that converts the tokens into x86-64 NASM assembly using the Linux exit syscall.For example: cik 42; gets compiled into assembly that exits the program with status code 42.I also fixed a bounds-checking bug in the token parser and verified that the generated executable runs correctly under Linux/WSL.The basic pipeline is now:Luna source → tokenizer → tokens → x86-64 assembly → executable Next step is the Parse Tree
Cleaned up code, made another file for the tokenization(lexer) almost at parsing tree ( [ SOURCE CODE ] │ ▼ LEXICAL ANALYSIS (Tokenizer) ◄─── finished here [ TOKEN STREAM ] │ ▼ SYNTAX ANALYSIS (Parser) [ ABSTRACT SYNTAX TREE (AST) ] │ ▼ SEMANTIC ANALYSIS (Type Checker) [ DECORATED AST ] │ ▼ INTERMEDIATE CODE GENERATION (IR) [ IR CODE ] (e.g., Three-Address Code, Bytecode) │ ▼ CODE OPTIMIZATION [ OPTIMIZED IR ] │ ▼ TARGET CODE GENERATION [ MACHINE CODE / ASSEMBLY ] (Final Executable) “there are two types of programmers - those who have written a compiler and those who haven’t” -Terry Davis
DEVLOG #4 Took me allot to understand how a parse tree/Syntax tree works and how to programm it. So I will be using the recursive descent technique and making nodes for each production.
LME My own Compiler Devlog #5 Finished the first real end-to-end version of Luna today. Wrote generation.h - takes the parse tree from the parser and walks it to spit out x86-64 NASM assembly. Right now it just handles the one node type I have (NodeExit) and generates the mov/syscall pair for exiting with a given code. Rewired main.cpp so it actually uses the tokenizer -> parser -> generator pipeline properly instead of skipping straight from tokens to asm like before. Cleaner flow now: source -> tokens -> parse tree -> asm -> nasm -> ld -> binary Tested it with: cik 42; Compiled clean, ran the output binary, echo $? gave 42. First time the whole pipeline worked end to end without me hand-patching anything. Also wrote a proper README and a .gitignore so I can actually put this on GitHub without dumping build folders and .idea junk into the repo. Still only supports one statement (cik ;), no variables or math yet. Next up: probably adding a second statement type so the parser/generator actually have to branch on something.
Ships:
Made my own compiler from scratch, called Luna Machine Executable (LME). Written in C++, compiles a tiny language with Turkish keywords into real x86-64 assembly, then assembles + links it with nasm/ld into an actual Linux binary. Right now it handles one statement: cik ; compiles to a binary that exits with that code. Full pipeline: tokenizer -> parser -> generator -> asm -> nasm -> ld -> binary. Hardest part was understanding how a parser turns tokens into a tree, and how the generator walks it. Never written a compiler before, so most time went into learning that. Proudest of getting it to run end to end with zero hand-patching, “cik 42;” in, real binary that exits 42 out. To test: download luna + test.lme, sudo apt install nasm binutils, chmod +x luna, ./luna test.lme && ./out && echo $?...
|
1792853615.2389538
|
1792940015.2389538
|
|
57600
|
Microfreelance Hub by @hazypak | Stardance
|
hazypak
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T16:44:31Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a platform for students to post about their achivements , its like linkledin but focuses on students and helps them build their portfolio , this is ship one , I know there are errors but since my school started i cant fix them i am tooo busy , i hope it can ship and then i can work on it even after stardance hopefully", "repo": "https://github.com/hazypak/micro-freelance-hub", "demo": "https://micro-freelance-hub.vercel.app/"}]...
|
[{"post_id": 74546, "ts": "202 [{"post_id": 74546, "ts": "2026-09-27T16:39:59Z", "hours": 0.4222, "text": "Finalizied everything fixed google auth issue (hopefully)"}, {"post_id": 60601, "ts": "2026-09-03T01:52:06Z", "hours": 0.6581, "text": "updated the read me and fixed google login issues"}, {"post_id": 60488, "ts": "2026-09-02T21:06:42Z", "hours": 1.0914, "text": "just had to run clear on claude code to stop autocompact thrashing and save some tokens by only scanning the essential auth files for microfreelance hub completely revamped the ui to be super playful and widget based with soft rounded borders and cute micro interactions fixed the signup ux so it actually tells you to check your gmail for the activation link added google oauth through supabase so you can just one click sign in and threw cloudflare turnstile captcha on the forms to block bots also used the graphify skill to map it all out and squashed some typescript errors while i was at it finally coming together nicely cheerios (for some reason my claude was having a thinking crisis (if that exists lol))"}, {"post_id": 60367, "ts": "2026-09-02T17:36:13Z", "hours": 18.9314, "text": "Before I could even start building Microfreelance Hub, I had to configure my setup from scratch. I connected Claude Code using Omni Router and literally logged into 44 free providers just to stack enough tokens. Sorting out all the skills, plugins, and CLI configurations was easily the hardest part—first time for everything, lol!Once the environment was set up, I spent a full hour crafting and perfecting my prompt before hitting enter. Then I was actually ready.What followed was a 6-day saga of hitting rate limits, battling random API failures, and counting 27 separate 503 errors. But after grinding through all of that, the website is finally built and alive!Right now, I’m working through a quick deployment bug to get the live site running smoothly. School just started back up, so I’m juggling classes while sorting this out. I’ve built a bunch of projects before—like my game Pixel Planet Healers and my personal portfolio—but I’m pushing Claude Code to its absolute limits on this build.Here’s my first official devlog. Cheers to anyone reading this! :D"}]...
|
Title: Microfreelance Hub by @hazypak | Stardance
Title: Microfreelance Hub by @hazypak | Stardance
Devlogs:
Before I could even start building Microfreelance Hub, I had to configure my setup from scratch. I connected Claude Code using Omni Router and literally logged into 44 free providers just to stack enough tokens. Sorting out all the skills, plugins, and CLI configurations was easily the hardest part—first time for everything, lol!Once the environment was set up, I spent a full hour crafting and perfecting my prompt before hitting enter. Then I was actually ready.What followed was a 6-day saga of hitting rate limits, battling random API failures, and counting 27 separate 503 errors. But after grinding through all of that, the website is finally built and alive!Right now, I’m working through a quick deployment bug to get the live site running smoothly. School just started back up, so I’m juggling classes while sorting this out. I’ve built a bunch of projects before—like my game Pixel Planet Healers and my personal portfolio—but I’m pushing Claude Code to its absolute limits on this build.Here’s my first official devlog. Cheers to anyone reading this! :D
just had to run clear on claude code to stop autocompact thrashing and save some tokens by only scanning the essential auth files for microfreelance hub completely revamped the ui to be super playful and widget based with soft rounded borders and cute micro interactions fixed the signup ux so it actually tells you to check your gmail for the activation link added google oauth through supabase so you can just one click sign in and threw cloudflare turnstile captcha on the forms to block bots also used the graphify skill to map it all out and squashed some typescript errors while i was at it finally coming together nicely cheerios (for some reason my claude was having a thinking crisis (if that exists lol))
updated the read me and fixed google login issues
Finalizied everything fixed google auth issue (hopefully)
Ships:
I have made a platform for students to post about their achivements , its like linkledin but focuses on students and helps them build their portfolio , this is ship one , I know there are errors but since my school started i cant fix them i am tooo busy , i hope it can ship and then i can work on it even after stardance hopefully...
|
1792853839.9520245
|
1792940239.9520245
|
|
33733
|
Soulsyche by @andwoo | Stardance
|
andwoo
|
1
|
53.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T16:24:47Z", "hours": 53.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Soulsyche About A dungeon crawler bullet hell, where you have to clear all rooms of the dungeon in order to beat the game. ( Also, when the second bar appears when level 3 is reached, that is your ability bar. Pressing RMB while temporarily grant you your ability [ invincibility ], then the cooldown begins again. Features Procedurally generated dungeon rooms Multiple enemy types ( sniper, pistol, shotgun, assault rifle ) Different weapons with unique stats Soul ability system Enemy spawning and room clearing Chests with random loot Random loot drops Door and door connection system Controls WASD - Movement Mouse - Aiming Left Mouse Button - Shoot Right Mouse Button - Ability R - Reload Dash - Space Interact ( Open Chest ) - E Overview This game is heavily reliant on composition over inheritance, where several components and modules work together to make certain behaviours. Examples of these systems are: Player movement and combat Weapon management UI Room Generation Enemy spawning Health and damage Soul system Loot and item spawning Credits Developed by andwoo ( Andrew ) for Stardance 2026. Used ChatGPT for helping to plan out and design systems Future improvements Art and SFX More souls A boss fight", "repo": "https://github.com/xPuv/Soulsyche", "demo": "https://xpuv.itch.io/soulsyche"}]...
|
[{"post_id": 74537, "ts": "202 [{"post_id": 74537, "ts": "2026-09-27T16:21:27Z", "hours": 5.8858, "text": "Final commit added more enemies cleaned stuff up, making it playable"}, {"post_id": 63170, "ts": "2026-09-06T20:26:06Z", "hours": 5.4714, "text": "devlog 4 custom room generation algorithm random rooms"}, {"post_id": 52213, "ts": "2026-08-22T09:45:21Z", "hours": 12.0461, "text": "devlog 3 added souls ( buffs, u can ffind in runs) added ui began working on randomly generated rooms added doors that lock and unlock after beating the room"}, {"post_id": 46341, "ts": "2026-08-13T14:25:57Z", "hours": 10.1642, "text": "devlog 2 added enemies that can shoot chests with rng hit shader keys to unlock chests"}, {"post_id": 35708, "ts": "2026-07-27T09:50:33Z", "hours": 10.1531, "text": "devlog 1 added a shotgun ( the dawg ) added weapon switching added UI began working on enemy AI with patrol, chase and investigate behaviour being implemented added damaging enemies"}, {"post_id": 33996, "ts": "2026-07-24T12:00:14Z", "hours": 9.6122, "text": "DEVLOG 0 hello! recently i’ve been working on the my own roguelike, Soulsyche, which is going to be a top down shooter. In the time on the devlog, I’ve spent time implementing a modular gun system and basic player movement. Below is a list stating all the changes alongside a video of what I’ve done. ( also, if anyone has any advivce/can help with the bugfix of the weird jittering, would really be grateful! feel free to comment below ) added shooting added reloading added movement sprite polishes ( gun faces direction of mouse cursor ) adding dashing added vfx to dash"}]...
|
Title: Soulsyche by @andwoo | Stardance
Devlogs:
Title: Soulsyche by @andwoo | Stardance
Devlogs:
DEVLOG 0 hello! recently i’ve been working on the my own roguelike, Soulsyche, which is going to be a top down shooter. In the time on the devlog, I’ve spent time implementing a modular gun system and basic player movement. Below is a list stating all the changes alongside a video of what I’ve done. ( also, if anyone has any advivce/can help with the bugfix of the weird jittering, would really be grateful! feel free to comment below ) added shooting added reloading added movement sprite polishes ( gun faces direction of mouse cursor ) adding dashing added vfx to dash
devlog 1 added a shotgun ( the dawg ) added weapon switching added UI began working on enemy AI with patrol, chase and investigate behaviour being implemented added damaging enemies
devlog 2 added enemies that can shoot chests with rng hit shader keys to unlock chests
devlog 3 added souls ( buffs, u can ffind in runs) added ui began working on randomly generated rooms added doors that lock and unlock after beating the room
devlog 4 custom room generation algorithm random rooms
Final commit added more enemies cleaned stuff up, making it playable
Ships:
Soulsyche About A dungeon crawler bullet hell, where you have to clear all rooms of the dungeon in order to beat the game. ( Also, when the second bar appears when level 3 is reached, that is your ability bar. Pressing RMB while temporarily grant you your ability [ invincibility ], then the cooldown begins again. Features Procedurally generated dungeon rooms Multiple enemy types ( sniper, pistol, shotgun, assault rifle ) Different weapons with unique stats Soul ability system Enemy spawning and room clearing Chests with random loot Random loot drops Door and door connection system Controls WASD - Movement Mouse - Aiming Left Mouse Button - Shoot Right Mouse Button - Ability R - Reload Dash - Space Interact ( Open Chest ) - E Overview This game is heavily reliant on composition over inheritance, where several components and modules work together to make certain behaviours. Examples of these systems are: Player movement and combat Weapon management UI Room Generation Enemy spawning Health and damage Soul system Loot and item spawning Credits Developed by andwoo ( Andrew ) for Stardance 2026. Used ChatGPT for helping to plan out and design systems Future improvements Art and SFX More souls A boss fight...
|
1792856884.9488797
|
1792943284.9488797
|
|
37551
|
Roguelike by @Alexander_Wolf | Stardance
|
Alexander_Wolf
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T16:00:30Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So somehow I’ve finished this first level. Of course any things are missing and there are still issues, but please view this as a version 0.1 and not a finished v1.0. Interactions with the enemies and the goal coin work, but the visuals are buggy. The project is still in process, but I’m proud of what already exists", "repo": "https://github.com/Wolf-Alexander/Roguelike", "demo": "https://ciferwolf.itch.io/roguelike"}]...
|
[{"post_id": 74528, "ts": "202 [{"post_id": 74528, "ts": "2026-09-27T15:58:43Z", "hours": 6.045, "text": "Devlog #2 I’ve added enemys and a goal (a coin) to the game. You attack with X and it actually does knockback. I’m still improving on the game and adding some details"}, {"post_id": 31684, "ts": "2026-07-20T09:21:14Z", "hours": 5.5831, "text": "Devlog #1 I am working on a Roguelike game (Name will be decided later). The game will include a few dungeon levels, as well as a boss at the end. Currently I’m working on a prefab for the levels, as seen in the screenshot. I’ve also already created the character and wrote a PlayerMovement script. The Player also has animations. The Assets are from itch.io (I’ll drop the links to them in my README, once I’ve created it) My next task will be creating the mobs and in additon to that a sort of combat system"}]...
|
Title: Roguelike by @Alexander_Wolf | Stardance
D Title: Roguelike by @Alexander_Wolf | Stardance
Devlogs:
Devlog #1 I am working on a Roguelike game (Name will be decided later). The game will include a few dungeon levels, as well as a boss at the end. Currently I’m working on a prefab for the levels, as seen in the screenshot. I’ve also already created the character and wrote a PlayerMovement script. The Player also has animations. The Assets are from itch.io (I’ll drop the links to them in my README, once I’ve created it) My next task will be creating the mobs and in additon to that a sort of combat system
Devlog #2 I’ve added enemys and a goal (a coin) to the game. You attack with X and it actually does knockback. I’m still improving on the game and adding some details
Ships:
So somehow I’ve finished this first level. Of course any things are missing and there are still issues, but please view this as a version 0.1 and not a finished v1.0. Interactions with the enemies and the goal coin work, but the visuals are buggy. The project is still in process, but I’m proud of what already exists...
|
1792853753.1931858
|
1792940153.1931858
|
|
64742
|
N-bodies by @safwanxd | Stardance
|
safwanxd
|
1
|
3.0
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T15:20:51Z", "hours": 3.0, "multiplier": 2.31, "payout": 7, "blessing": "neutral", "text": "I made an interactive N-body gravity simulator in pygame. You can choose masses and add them. The challenging part was getting the UI to work in sync with the rest of the program since pygame does not have a native UI system like the web. As such, I had to engineer my own input fields and buttons. Definitely was a fun one! :)", "repo": "https://github.com/sawfan1/n-bodies", "demo": "https://sawfan1.github.io/n-bodies/"}]...
|
[{"post_id": 74500, "ts": "202 [{"post_id": 74500, "ts": "2026-09-27T14:57:14Z", "hours": 0.2667, "text": "Finalized the project, looking to ship, but first I have to figure out how to run pygame on the web"}, {"post_id": 74478, "ts": "2026-09-27T13:59:24Z", "hours": 0.2667, "text": "The mass addition now works, refined the engine a bit more and added position limits to be inside the window."}, {"post_id": 74466, "ts": "2026-09-27T13:14:20Z", "hours": 0.5506, "text": "Switched to the zed editor, cause thats just better. Got the physics engine somewhat working, but it will need a bit more polish."}, {"post_id": 72224, "ts": "2026-09-22T14:15:02Z", "hours": 0.3522, "text": "Added colour and varying sizes to the masses"}, {"post_id": 72206, "ts": "2026-09-22T13:32:07Z", "hours": 0.6403, "text": "Got some point masses going, the UI is working and functional."}, {"post_id": 72183, "ts": "2026-09-22T12:34:51Z", "hours": 0.5325, "text": "Got some buttons and a panel up and running!"}, {"post_id": 72154, "ts": "2026-09-22T10:26:56Z", "hours": 0.2572, "text": "Got the text to render!"}, {"post_id": 72149, "ts": "2026-09-22T10:10:34Z", "hours": 0.3747, "text": "The screen and UI panel is slowly starting to come together"}]...
|
Title: N-bodies by @safwanxd | Stardance
Devlogs: Title: N-bodies by @safwanxd | Stardance
Devlogs:
The screen and UI panel is slowly starting to come together
Got the text to render!
Got some buttons and a panel up and running!
Got some point masses going, the UI is working and functional.
Added colour and varying sizes to the masses
Switched to the zed editor, cause thats just better. Got the physics engine somewhat working, but it will need a bit more polish.
The mass addition now works, refined the engine a bit more and added position limits to be inside the window.
Finalized the project, looking to ship, but first I have to figure out how to run pygame on the web
Ships:
I made an interactive N-body gravity simulator in pygame. You can choose masses and add them. The challenging part was getting the UI to work in sync with the rest of the program since pygame does not have a native UI system like the web. As such, I had to engineer my own input fields and buttons. Definitely was a fun one! :)...
|
1792814175.0048857
|
1792900575.0048857
|
|
66120
|
Bank by @syedakhter | Stardance
|
syedakhter
|
1
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T15:17:44Z", "hours": 2.0, "multiplier": 1.0, "payout": 2, "blessing": "neutral", "text": "I made a bank system that does deposits and withdrawal for you when you add the amount you want to withdraw and deposit and I used GitHub ai for the subtraction and the addition because I am new to html everything else is real.", "repo": "https://github.com/8051987-eng/My-Bank", "demo": "https://8051987-eng.github.io/My-Bank/"}]...
|
[{"post_id": 74483, "ts": "202 [{"post_id": 74483, "ts": "2026-09-27T14:14:32Z", "hours": 1.665, "text": "I built a bank system but im still not done this is html and CSS so please give me some advice"}]...
|
Title: Bank by @syedakhter | Stardance
Devlogs:
I Title: Bank by @syedakhter | Stardance
Devlogs:
I built a bank system but im still not done this is html and CSS so please give me some advice
Ships:
I made a bank system that does deposits and withdrawal for you when you add the amount you want to withdraw and deposit and I used GitHub ai for the subtraction and the addition because I am new to html everything else is real....
|
1792817309.5087433
|
1792903709.5087433
|
|
48648
|
Pokemon Search Lib by @heitordecarvalhopessoa | St Pokemon Search Lib by @heitordecarvalhopessoa | Stardance...
|
heitordecarvalhopessoa
|
5
|
57.0
|
693
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T15:08:30Z", "hours": 15.0, "multiplier": 17.96, "payout": 271, "blessing": "neutral", "text": "More card collections have been added, and the filtering and comparison systems have been improved; additionally, the HUDs have been updated to enhance site performance.", "repo": "https://github.com/heitordecarvalhopessoa-debug/Pokemon-Search", "demo": "https://heitordecarvalhopessoa-debug.github.io/Pokemon-Search/"}, {"ship_num": 2, "ts": "2026-09-15T23:42:18Z", "hours": 13.0, "multiplier": 13.63, "payout": 178, "blessing": "neutral", "text": "More collections and cards have been added, and many HUDs have been swapped out and updated to improve site performance; various systems have been modified to make them easier for any user to understand.", "repo": "https://github.com/heitordecarvalhopessoa-debug/Pokemon-Search", "demo": "https://heitordecarvalhopessoa-debug.github.io/Pokemon-Search/"}, {"ship_num": 3, "ts": "2026-09-07T14:25:09Z", "hours": 10.0, "multiplier": 6.62, "payout": 69, "blessing": "neutral", "text": "More systems have been added, such as a card price comparison tool, and the search system has been updated; additionally, more collections have been completed, and new collections have been introduced.", "repo": "https://github.com/heitordecarvalhopessoa-debug/Pokemon-Search", "demo": "https://heitordecarvalhopessoa-debug.github.io/Pokemon-Search/"}, {"ship_num": 4, "ts": "2026-08-26T22:55:37Z", "hours": 10.0, "multiplier": 10.26, "payout": 103, "blessing": "neutral", "text": "Pokemon Search is a library for looking up Pokémon card prices; it includes only Pokémon cards—no Energy or Trainer cards. Some sets are currently incomplete but will be added soon.", "repo": "https://github.com/heitordecarvalhopessoa-debug/Pokemon-Search", "demo": "https://heitordecarvalhopessoa-debug.github.io/Pokemon-Search/"}, {"ship_num": 5, "ts": "2026-08-17T23:24:42Z", "hours": 9.0, "multiplier": 8.12, "payout": 72, "blessing": "neutral", "text": "POKÉMON SEARCH LIB A fan-made library featuring “beautiful” and “rare” Pokémon TCG cards; new cards will be added regularly as the site develops. Any feedback, as well as ideas for cards and collections to add, would be valuable for the site.", "repo": "https://github.com/heitordecarvalhopessoa-debug/Pokemon-Search", "demo": "https://heitordecarvalhopessoa-debug.github.io/Pokemon-Search/"}]...
|
[{"post_id": 74502, "ts": "202 [{"post_id": 74502, "ts": "2026-09-27T15:05:45Z", "hours": 3.6589, "text": "Version 1.18.0 Two Pokémon collection have already been add: 1. Mega Evolution: Phantasmal Fire 2. Mega Evolution: Ascended Heroes New 126 cards Filters Ui Changes Filter menu Card Template Update Data.js ReadMe.md Prices"}, {"post_id": 73351, "ts": "2026-09-24T23:32:40Z", "hours": 4.2108, "text": "Version 1.17.0 Twelve Pokémon collection have already been add: Ex: Emerald Ex: Unseen Forces Ex: Delta Species Ex: Legend Maker Ex: Holon Phantoms Ex: Crystal Guardians Ex: Dragon Frontiers Ex: Power Keepers XY: Primal Clash XY: Roaring Skies XY: Ancient Origins Celebrations 30th New 292 cards Regions Filter Filters: Type: RGB Type: Shiny Category: Star Region: Paldean Region: Hisuian Region: Galarian Region: Alolan Ui Changes Filter menu Compare.html hud Update Prices Some cards names Filters places"}, {"post_id": 71991, "ts": "2026-09-21T22:46:20Z", "hours": 2.1872, "text": "Version 1.16.0 I had to create a new folder, imgs2 , because GitHub only accepts 1,000 files per folder . Eight Pokémon collection have already been add: Ex: Ruby & Sapphire Ex: Sandstorm Ex: Dragon Ex: Team Magma vs Team Aqua Ex: Hidden Legends Ex: FireRed & LeafGreen Ex: Team Rocket Returns Ex: Deoxys New 79 cards Filters: Name Z-A Price Above 50 Price Between 21-200 Price Between 201-500 Price Between 501-1500 Price Above 1501 Ex Series Star Cards Category More credits Ui Changes Filter menu Search collections menu Collections menu Update Prices Some collections Names"}, {"post_id": 70867, "ts": "2026-09-19T21:54:41Z", "hours": 5.0539, "text": "Version 1.15.0 – Six Pokémon collection have already been completed: Rebel Clash Evolutions Unbroken Bonds Break Point Stellar Crown Ultra Prism New 109 cards Search Colection Ui Changes Colections menu Search menu Update Search system Prices All colections Names"}, {"post_id": 68890, "ts": "2026-09-15T23:36:43Z", "hours": 1.2878, "text": "Some bug fixes and more cards Sorry, I don’t have any free time these days :( More coins from different countries have also been added :)"}, {"post_id": 68336, "ts": "2026-09-14T23:24:27Z", "hours": 2.4978, "text": "Version 1.14.0 – Two Pokémon collection have already been completed: Flashfire Lost Origin New ?? cards I forgot to count them. Cards Menu Prices System Home pages Ui Changes Prices Options Menu Credits Menu Holographic Efect Update Search system Prices changes"}, {"post_id": 67585, "ts": "2026-09-13T18:48:34Z", "hours": 4.7533, "text": "Version 1.13.0 HUD UPDATE Two Pokémon collection have already been completed: Fusion Strike Sun & Moon (Base set) New 63 cards Card thumbnails next to their names in the search tab Ui Changes Buttons Home Page Pokemons Page Prices Menu Filter Menu Credits Menu Search Bar Update Prices of some cards Search system Prices changes"}, {"post_id": 65646, "ts": "2026-09-10T22:34:57Z", "hours": 4.5106, "text": "Version 1.12.0 Four Pokémon collection have already been completed: Darkness Ablaze Guardians Rising Burning Shadows Brilliant Stars News 138 cards Cards Menu Swapped Zoom system Swapped Update Prices of some cards Hud modals.css Collections system"}, {"post_id": 63570, "ts": "2026-09-07T14:20:05Z", "hours": 2.6225, "text": "Version 1.11.0 One Pokémon collection have already been completed: Twilight Masquerade News 58 cards Compare Cards system compare.html compare.js compare.css Update Ienes prices update Index carrosel Links Hud Search system Cards system"}, {"post_id": 63119, "ts": "2026-09-06T19:00:18Z", "hours": 2.8378, "text": "Version 1.10.0 Two Pokémon collections have already been completed: Caos Rising Pitch Black News 249 cards Prices Converter: Libras (UK) Iene (JPN) Dolar Australiano (AUS) Franco Suíço (CHF) Update Search system holographic.js Collections Table"}, {"post_id": 58228, "ts": "2026-08-30T16:11:28Z", "hours": 2.7058, "text": "Version 1.9.0 Two Pokémon collections have already been completed: Celebrations Evolving Skies News 181 cards Min. and Max. Prices filter 3D Holographic Efect Update Search system Pokemons page Pin colection data.js"}, {"post_id": 56226, "ts": "2026-08-27T21:59:26Z", "hours": 2.2678, "text": "Version 1.8.0 Three Pokémon collections have already been completed: Celestial Storm Team Up Champions Path News 98 cards Update Search system Pokemons page Pin colection data.js"}, {"post_id": 54030, "ts": "2026-08-24T19:39:40Z", "hours": 2.4872, "text": "Version 1.7.0 Three Pokémon collections have already been completed: Pokémon GO Shining Legends Scarlet & Violet: 151 The project will include only Full Art / EX / GX / V / VMAX / VSTAR / BREAK / V-UNION cards; Trainer and Energy cards will not be added, as the primary focus is exclusively on Pokémon (although previously added Trainer cards will not be removed). News 71 cards Update Search system Home page Pokemons page"}, {"post_id": 53408, "ts": "2026-08-23T23:00:11Z", "hours": 2.34, "text": "Version 1.6.0 News 51 cards Coins Carrosel Pin collection Update Collections system Search system Coins system Home page Collections Other Optimize data system Cards in their correct collections Correction of incorrect card art Currency conversion system (BRL, Dollar, Euro) correctly updated. Improvements to CSS code Small changes to the filtering system"}, {"post_id": 52695, "ts": "2026-08-22T23:45:19Z", "hours": 2.1908, "text": "Version 1.5.0 News 33 cards Collections Option Show the card collection New collections New CSS Update Pokemons Menu Other Optimize codes Change a little the UI"}, {"post_id": 51976, "ts": "2026-08-21T23:40:05Z", "hours": 3.0014, "text": "Version 1.4.0 BUGS FIXED News Coins See more cards option Optimize Show the card collection More cards Home page Cards page Coins page Update Hud Pokemons Menu Favorite System"}, {"post_id": 49250, "ts": "2026-08-17T22:50:40Z", "hours": 1.6881, "text": "Version 1.3.0 Please read all News 15 new pokemons Convert Money System BREAK Pokemons + Filter Web Icon Zoom pokemon card Update Hud Filter system Favorite Pokemons system Pokemons Menu Data Storage System Info The site is currently under development, and new Pokémon cards of various types will be added, such as: Tag Team V-UNION The conversion system may occasionally be inaccurate regarding EUR (Euro) and USD (US Dollar) values; therefore, comments and feedback are important to help ensure the cards reflect their actual market prices. Feel free to suggest cards to be added to the site."}, {"post_id": 48486, "ts": "2026-08-16T21:10:16Z", "hours": 2.2561, "text": "Version 1.2.0 News 23 new pokemons Favorite System Update Hud- Search system Filter system"}, {"post_id": 48306, "ts": "2026-08-16T16:46:40Z", "hours": 1.7733, "text": "** Version 1.1.0** News 31 new pokemons Filter System Vstar pokemons GX pokemons Vmax pokemons V pokemons Update Hud- Search system Pokemon values"}, {"post_id": 47822, "ts": "2026-08-16T01:10:41Z", "hours": 3.1025, "text": "Version 1.0.0 A Brazilian project focused on the Pokémon TCG, where you can check prices for Full Art, GX, and EX cards. The project is still under development, and we are adding more cards. Coming soon: Filter by card type Filter by set More cards Any feedback or ideas regarding the project will help us improve the site."}]...
|
Title: Pokemon Search Lib by @heitordecarvalhopess Title: Pokemon Search Lib by @heitordecarvalhopessoa | Stardance
Devlogs:
Version 1.0.0 A Brazilian project focused on the Pokémon TCG, where you can check prices for Full Art, GX, and EX cards. The project is still under development, and we are adding more cards. Coming soon: Filter by card type Filter by set More cards Any feedback or ideas regarding the project will help us improve the site.
** Version 1.1.0** News 31 new pokemons Filter System Vstar pokemons GX pokemons Vmax pokemons V pokemons Update Hud- Search system Pokemon values
Version 1.2.0 News 23 new pokemons Favorite System Update Hud- Search system Filter system
Version 1.3.0 Please read all News 15 new pokemons Convert Money System BREAK Pokemons + Filter Web Icon Zoom pokemon card Update Hud Filter system Favorite Pokemons system Pokemons Menu Data Storage System Info The site is currently under development, and new Pokémon cards of various types will be added, such as: Tag Team V-UNION The conversion system may occasionally be inaccurate regarding EUR (Euro) and USD (US Dollar) values; therefore, comments and feedback are important to help ensure the cards reflect their actual market prices. Feel free to suggest cards to be added to the site.
Version 1.4.0 BUGS FIXED News Coins See more cards option Optimize Show the card collection More cards Home page Cards page Coins page Update Hud Pokemons Menu Favorite System
Version 1.5.0 News 33 cards Collections Option Show the card collection New collections New CSS Update Pokemons Menu Other Optimize codes Change a little the UI
Version 1.6.0 News 51 cards Coins Carrosel Pin collection Update Collections system Search system Coins system Home page Collections Other Optimize data system Cards in their correct collections Correction of incorrect card art Currency conversion system (BRL, Dollar, Euro) correctly updated. Improvements to CSS code Small changes to the filtering system
Version 1.7.0 Three Pokémon collections have already been completed: Pokémon GO Shining Legends Scarlet & Violet: 151 The project will include only Full Art / EX / GX / V / VMAX / VSTAR / BREAK / V-UNION cards; Trainer and Energy cards will not be added, as the primary focus is exclusively on Pokémon (although previously added Trainer cards will not be removed). News 71 cards Update Search system Home page Pokemons page
Version 1.8.0 Three Pokémon collections have already been completed: Celestial Storm Team Up Champions Path News 98 cards Update Search system Pokemons page Pin colection data.js
Version 1.9.0 Two Pokémon collections have already been completed: Celebrations Evolving Skies News 181 cards Min. and Max. Prices filter 3D Holographic Efect Update Search system Pokemons page Pin colection data.js
Version 1.10.0 Two Pokémon collections have already been completed: Caos Rising Pitch Black News 249 cards Prices Converter: Libras (UK) Iene (JPN) Dolar Australiano (AUS) Franco Suíço (CHF) Update Search system holographic.js Collections Table
Version 1.11.0 One Pokémon collection have already been completed: Twilight Masquerade News 58 cards Compare Cards system compare.html compare.js compare.css Update Ienes prices update Index carrosel Links Hud Search system Cards system
Version 1.12.0 Four Pokémon collection have already been completed: Darkness Ablaze Guardians Rising Burning Shadows Brilliant Stars News 138 cards Cards Menu Swapped Zoom system Swapped Update Prices of some cards Hud modals.css Collections system
Version 1.13.0 HUD UPDATE Two Pokémon collection have already been completed: Fusion Strike Sun & Moon (Base set) New 63 cards Card thumbnails next to their names in the search tab Ui Changes Buttons Home Page Pokemons Page Prices Menu Filter Menu Credits Menu Search Bar Update Prices of some cards Search system Prices changes
Version 1.14.0 – Two Pokémon collection have already been completed: Flashfire Lost Origin New ?? cards I forgot to count them. Cards Menu Prices System Home pages Ui Changes Prices Options Menu Credits Menu Holographic Efect Update Search system Prices changes
Some bug fixes and more cards Sorry, I don’t have any free time these days :( More coins from different countries have also been added :)
Version 1.15.0 – Six Pokémon collection have already been completed: Rebel Clash Evolutions Unbroken Bonds Break Point Stellar Crown Ultra Prism New 109 cards Search Colection Ui Changes Colections menu Search menu Update Search system Prices All colections Names
Version 1.16.0 I had to create a new folder, imgs2 , because GitHub only accepts 1,000 files per folder . Eight Pokémon collection have already been add: Ex: Ruby & Sapphire Ex: Sandstorm Ex: Dragon Ex: Team Magma vs Team Aqua Ex: Hidden Legends Ex: FireRed & LeafGreen Ex: Team Rocket Returns Ex: Deoxys New 79 cards Filters: Name Z-A Price Above 50 Price Between 21-200 Price Between 201-500 Price Between 501-1500 Price Above 1501 Ex Series Star Cards Category More credits Ui Changes Filter menu Search collections menu Collections menu Update Prices Some collections Names
Version 1.17.0 Twelve Pokémon collection have already been add: Ex: Emerald Ex: Unseen Forces Ex: Delta Species Ex: Legend Maker Ex: Holon Phantoms Ex: Crystal Guardians Ex: Dragon Frontiers Ex: Power Keepers XY: Primal Clash XY: Roaring Skies XY: Ancient Origins Celebrations 30th New 292 cards Regions Filter Filters: Type: RGB Type: Shiny Category: Star Region: Paldean Region: Hisuian Region: Galarian Region: Alolan Ui Changes Filter menu Compare.html hud Update Prices Some cards names Filters places
Version 1.18.0 Two Pokémon collection have already been add: 1. Mega Evolution: Phantasmal Fire 2. Mega Evolution: Ascended Heroes New 126 cards Filters Ui Changes Filter menu Card Template Update Data.js ReadMe.md Prices
Ships:
POKÉMON SEARCH LIB A fan-made library featuring “beautiful” and “rare” Pokémon TCG cards; new cards will be added regularly as the site develops. Any feedback, as well as ideas for cards and collections to add, would be valuable for the site.
Pokemon Search is a library for looking up Pokémon card prices; it includes only Pokémon cards—no Energy or Trainer cards. Some sets are currently incomplete but will be added soon.
More systems have been added, such as a card price comparison tool, and the search system has been updated; additionally, more collections have been completed, and new collections have been introduced.
More collections and cards have been added, and many HUDs have been swapped out and updated to improve site performance; various systems have been modified to make them easier for any user to understand.
More card collections have been added, and the filtering and comparison systems have been improved; additionally, the HUDs have been updated to enhance site performance....
|
1792824730.0281916
|
1792911130.0281916
|
|
65912
|
How much do I know? by @PahalDesai | Stardance
|
PahalDesai
|
1
|
4.0
|
25
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T14:36:48Z", "hours": 4.0, "multiplier": 11.07, "payout": 25, "blessing": "neutral", "text": "This is a quiz I made using html css and js. through this, I learnt some basic js and latex to render math. I also learnt that html has a tag which should be used instead of wasting time in latex. Anyways, this quiz consists of 3 subjects - maths, science and CS. science further has 3 parts - physics, chemistry and biology.", "repo": "https://github.com/pahal-desai/quiz", "demo": "https://pahal-desai.github.io/quiz/"}]...
|
[{"post_id": 74492, "ts": "202 [{"post_id": 74492, "ts": "2026-09-27T14:31:38Z", "hours": 1.4256, "text": "finished CS questions, added readme, wrote the evaluation logic (i did that side by side with the questions which i finished rn) and the result page. and added some funny and motivating gifs in the extreme one. and some memes in the result page. It’s ready to be shipped"}, {"post_id": 74416, "ts": "2026-09-27T10:47:40Z", "hours": 1.0603, "text": "just finished adding chemistry and biology questions for all levels. It took a long time to find chem questions and i had no choice other than to use ai for biology as i don’t study biology in 11th grade"}, {"post_id": 73935, "ts": "2026-09-26T11:06:06Z", "hours": 0.8269, "text": "Just finised adding all the levels for the physics part of science. and that latex thing was a pain in the ass. I did need to take help from ai for the extreme levels of maths and physics as the latex was too complicated."}, {"post_id": 73881, "ts": "2026-09-26T07:42:39Z", "hours": 1.1678, "text": "I started working on a simple html and js based quiz. It has 4 subjects, and 4 levels of each subject. today i made the home screen and added questions for all levels of maths. also i used mathjax for displying the fancy math way."}]...
|
Title: How much do I know? by @PahalDesai | Starda Title: How much do I know? by @PahalDesai | Stardance
Devlogs:
I started working on a simple html and js based quiz. It has 4 subjects, and 4 levels of each subject. today i made the home screen and added questions for all levels of maths. also i used mathjax for displying the fancy math way.
Just finised adding all the levels for the physics part of science. and that latex thing was a pain in the ass. I did need to take help from ai for the extreme levels of maths and physics as the latex was too complicated.
just finished adding chemistry and biology questions for all levels. It took a long time to find chem questions and i had no choice other than to use ai for biology as i don’t study biology in 11th grade
finished CS questions, added readme, wrote the evaluation logic (i did that side by side with the questions which i finished rn) and the result page. and added some funny and motivating gifs in the extreme one. and some memes in the result page. It’s ready to be shipped
Ships:
This is a quiz I made using html css and js. through this, I learnt some basic js and latex to render math. I also learnt that html has a tag which should be used instead of wasting time in latex. Anyways, this quiz consists of 3 subjects - maths, science and CS. science further has 3 parts - physics, chemistry and biology....
|
1792817282.5457332
|
1792903682.5457332
|
|
58792
|
rememberance by @Tyo | Stardance
|
Tyo
|
1
|
25.0
|
331
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T14:28:52Z", "hours": 25.0, "multiplier": 13.41, "payout": 331, "blessing": "neutral", "text": "Remember me~ Oh shoot! Rememberance!~ Is a game I had in a dream!~ Imagine you had the biggest amnesia that you don’t even remember your name! Well then, 24 hours, find it, find other information about you and confront God!! Maybe?", "repo": "https://github.com/SteelyxEpic/Rememberance", "demo": "https://tyoepic.itch.io/rememberance"}]...
|
[{"post_id": 74487, "ts": "202 [{"post_id": 74487, "ts": "2026-09-27T14:23:34Z", "hours": 1.5094, "text": "It’s finally done! The ending, the VA, the everything! YESS, I can finally slep _"}, {"post_id": 73622, "ts": "2026-09-25T14:44:04Z", "hours": 8.2239, "text": "ARGHHHH, it’s been a week!~ and I’ve been busy adding all the voicelines and LOREEE into the gamee!~~~ All I need more is to do some more polishing and package it up into a sweet deal! p.s stardance is continuing until october! which means more time to finish this project!!! (I’m genuinely so burned out :p)"}, {"post_id": 69044, "ts": "2026-09-16T08:34:45Z", "hours": 2.3375, "text": "Quick break to add a lil bit of Sound effect!~~~ Okie that’s all, back to making the LOREEEE. Hehe~"}, {"post_id": 68951, "ts": "2026-09-16T03:12:18Z", "hours": 2.2036, "text": "The last room!!!! The last room has been added and therefore it’s now finally time to add contenttttt! Yey!~~~ <3 The plan is simple, you find notes, cassettes and other items to piece together who you are. Then when the day ends, God will ask for who you are, answer right and you wake from this nightmare. Answer wrong and you will dwell in eternity…. OMG I can’t wait to add all the LORE (if you can’t tell, I love game theory hehe~ :3) okie bai!"}, {"post_id": 67080, "ts": "2026-09-13T04:04:09Z", "hours": 1.5656, "text": "Hi Hi!~~~ Kinda small today but I just really wanna show you guys what I did!!!! I finally made the mirrors workinggggg!!!!! AND I LOVE IT <3 it’s exactly how I imagined the mirrors to act!!! Anyways, that’s all!~ I’m gonna go actually make the puzzles now. Bai~~"}, {"post_id": 66563, "ts": "2026-09-12T12:17:25Z", "hours": 3.0983, "text": "Woah! More kewl stuff!~ The lights are still out but I have reached an agreement, this game is like a rougelite, however the only thing carried over is information on yourself, and within 7 days, you have to have all the information about yourself. Yea! Keys are universal in this so it can unlock any type of door or other containers. That’s all, cya!~"}, {"post_id": 66002, "ts": "2026-09-11T14:56:46Z", "hours": 2.3408, "text": "Another day, another something I wanted to add! This time it’s the really cool Interaction circle. I thought it would be fun to add it and also allows me to be able to help in a lot of things like, using items in the future wink wink anyways that’s all! I think I wanna try my hands on something more extraterrestrial next, hehe~ cya! <3"}, {"post_id": 64612, "ts": "2026-09-09T04:08:46Z", "hours": 3.4489, "text": "Time for something new! I had this idea since I started godot while making the best minigame game ever (true to title :3) so I’m doing it now!~ I started off with this ominous little safe that took me much longer than I expected to make and also a bunch of artwork!~ (like 30 different drawings :p) hopefully the rest of the parts would be smooth sailing and I can finally make the game of my dreams (literally! Hehe~)"}]...
|
Title: rememberance by @Tyo | Stardance
Devlogs:
Title: rememberance by @Tyo | Stardance
Devlogs:
Time for something new! I had this idea since I started godot while making the best minigame game ever (true to title :3) so I’m doing it now!~ I started off with this ominous little safe that took me much longer than I expected to make and also a bunch of artwork!~ (like 30 different drawings :p) hopefully the rest of the parts would be smooth sailing and I can finally make the game of my dreams (literally! Hehe~)
Another day, another something I wanted to add! This time it’s the really cool Interaction circle. I thought it would be fun to add it and also allows me to be able to help in a lot of things like, using items in the future wink wink anyways that’s all! I think I wanna try my hands on something more extraterrestrial next, hehe~ cya! <3
Woah! More kewl stuff!~ The lights are still out but I have reached an agreement, this game is like a rougelite, however the only thing carried over is information on yourself, and within 7 days, you have to have all the information about yourself. Yea! Keys are universal in this so it can unlock any type of door or other containers. That’s all, cya!~
Hi Hi!~~~ Kinda small today but I just really wanna show you guys what I did!!!! I finally made the mirrors workinggggg!!!!! AND I LOVE IT <3 it’s exactly how I imagined the mirrors to act!!! Anyways, that’s all!~ I’m gonna go actually make the puzzles now. Bai~~
The last room!!!! The last room has been added and therefore it’s now finally time to add contenttttt! Yey!~~~ <3 The plan is simple, you find notes, cassettes and other items to piece together who you are. Then when the day ends, God will ask for who you are, answer right and you wake from this nightmare. Answer wrong and you will dwell in eternity…. OMG I can’t wait to add all the LORE (if you can’t tell, I love game theory hehe~ :3) okie bai!
Quick break to add a lil bit of Sound effect!~~~ Okie that’s all, back to making the LOREEEE. Hehe~
ARGHHHH, it’s been a week!~ and I’ve been busy adding all the voicelines and LOREEE into the gamee!~~~ All I need more is to do some more polishing and package it up into a sweet deal! p.s stardance is continuing until october! which means more time to finish this project!!! (I’m genuinely so burned out :p)
It’s finally done! The ending, the VA, the everything! YESS, I can finally slep _
Ships:
Remember me~ Oh shoot! Rememberance!~ Is a game I had in a dream!~ Imagine you had the biggest amnesia that you don’t even remember your name! Well then, 24 hours, find it, find other information about you and confront God!! Maybe?...
|
1792856924.3947606
|
1792943324.3947606
|
|
7142
|
Spacer by @Systemic_speed | Stardance
|
Systemic_speed
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T14:12:56Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Spacer — Stardance ship Name: Spacer One-liner: I kept missing launches and solar storms, so I built one page that tracks all of it and lets me poke at it from Slack, Discord, my terminal, a desktop window, or the web. Field Value Demo https://spacer.systemic-speed.hackclub.app/ Code https://github.com/Gautham-rgb/Spacer README https://github.com/Gautham-rgb/Spacer/blob/main/README.md Stack Python · NiceGUI · discord.py · slack_sdk · Skyfield · Groq What it is: every front-end (web, Slack, Discord, CLI, desktop) just calls one get_events() . All the fetching and filtering live in one place, and everything else is basically a renderer. Live demo is deployed, so just click. Try it: https://spacer.systemic-speed.hackclub.app/ In the bot’s chat: !space weather , !space list probe_launch --limit 5 --name falcon , !space groq what is a coronal mass ejection? What it does pulls solar flare / K-index, launches, and flybys into one timeline same --limit / --name / --after / --before flags in chat, CLI, and the URL Groq assistant that remembers the conversation (in Slack, Discord, and web) desktop ping when something big is within the hour, optional webhook TTL cache so refreshes don’t hammer NOAA, plus a 63-test pytest suite Nerdy bits: dedup on (title, time) ; bots share one platform-neutral response so Slack/Discord never re-implement logic; pages render instantly and fetch in a side thread; long Groq answers get clamped so a big reply can’t fail to send. Data: NOAA SWPC, thespacedevs, JPL (DE421), Groq. Built for Stardance. Well, Happy Launching!!", "repo": "https://github.com/Gautham-rgb/Spacer", "demo": "https://app.slack.com/client/T0B9WS0J88P/C0BAFUQQCQ4"}]...
|
[{"post_id": 74477, "ts": "202 [{"post_id": 74477, "ts": "2026-09-27T13:57:13Z", "hours": 2.7111, "text": "Devlog 3: Spacer hey there, kinda caught up with exams, but I did get some hours in with this thing, and this is going to be the last devlog until ship (YAAYYYY), so here a few design decisions and some cool stuff WE GOT A LINK After trying to configure my nest container for like, 5 years, i finally got a link to use here it is , and the website is kinda AI generated (had to fit it in the schedule, thought the thing was gonna end on Sept 30 but now it is ending on Oct 31), but all in all, it was a good thing experimenting and learning about how people actually host websites We finally got slack and discord working so, after some tinkering (and some help form opencode) we finally got discord and slack channels for the bot to work in, just use !space in the slack and the discord channel, the links are on the website. we are removing the slack bot mission form this project since i want people to actually see this and say if it is good or not, i am removing the slack bot mission from my project, but at least you can see the website and the discord bot well, see ya at ship"}, {"post_id": 57900, "ts": "2026-08-30T07:16:24Z", "hours": 3.9772, "text": "Devlog 2: Spacer hey there, didn’t post for a long time, since i was focused on making Kerbal Gravity Program ( check it out ) so I didn’t have time for this, but now that it is shipped, i can have a little bit of rest and continue on my other projects for anyone new here, Spacer is a Slack/discord bot (yes i am getting it to discord) that can give you notifications like Rocket launches or CMEs that can destroy stuff, I will also get it into a cli, but that will wait for ship 2 What I did: Now, I got 3 main things up: the APIs and the way i am going to make the CLI/Bots A Nest container An understanding of Docker (I guess??) So, what I want is a docker container perpetually running with something like tmux stopping nest from stopping the processes in the container while i exit the nest container (TOOO many containers), but now i am currently fixing stuff with the code and the docker container, well, hope it can be fixed fast Next steps Now, I gotta: 1, figure out how to use tmux 2. how to prevent a certificate error that I keep getting no matter what well, see ya next time fellas ( going to be sometime until you guys can see an actual image )"}, {"post_id": 26513, "ts": "2026-07-11T11:13:57Z", "hours": 0.4983, "text": "Devlog 1: Spacer So, I’m working on Spacer—basically a CLI tool that doubles as a Slack/Discord bot for tracking space-related events. I didn’t post a devlog sooner because I was stuck in that “why is this not working” phase for way too long. But I finally got it to a point where I can see real results. I can now push data to webhooks via the CLI, though it was basically just a giant wall of text at first. Next up: fixing the layout so it actually looks like a professional app and not a terminal dump."}]...
|
Title: Spacer by @Systemic_speed | Stardance
Devl Title: Spacer by @Systemic_speed | Stardance
Devlogs:
Devlog 1: Spacer So, I’m working on Spacer—basically a CLI tool that doubles as a Slack/Discord bot for tracking space-related events. I didn’t post a devlog sooner because I was stuck in that “why is this not working” phase for way too long. But I finally got it to a point where I can see real results. I can now push data to webhooks via the CLI, though it was basically just a giant wall of text at first. Next up: fixing the layout so it actually looks like a professional app and not a terminal dump.
Devlog 2: Spacer hey there, didn’t post for a long time, since i was focused on making Kerbal Gravity Program ( check it out ) so I didn’t have time for this, but now that it is shipped, i can have a little bit of rest and continue on my other projects for anyone new here, Spacer is a Slack/discord bot (yes i am getting it to discord) that can give you notifications like Rocket launches or CMEs that can destroy stuff, I will also get it into a cli, but that will wait for ship 2 What I did: Now, I got 3 main things up: the APIs and the way i am going to make the CLI/Bots A Nest container An understanding of Docker (I guess??) So, what I want is a docker container perpetually running with something like tmux stopping nest from stopping the processes in the container while i exit the nest container (TOOO many containers), but now i am currently fixing stuff with the code and the docker container, well, hope it can be fixed fast Next steps Now, I gotta: 1, figure out how to use tmux 2. how to prevent a certificate error that I keep getting no matter what well, see ya next time fellas ( going to be sometime until you guys can see an actual image )
Devlog 3: Spacer hey there, kinda caught up with exams, but I did get some hours in with this thing, and this is going to be the last devlog until ship (YAAYYYY), so here a few design decisions and some cool stuff WE GOT A LINK After trying to configure my nest container for like, 5 years, i finally got a link to use here it is , and the website is kinda AI generated (had to fit it in the schedule, thought the thing was gonna end on Sept 30 but now it is ending on Oct 31), but all in all, it was a good thing experimenting and learning about how people actually host websites We finally got slack and discord working so, after some tinkering (and some help form opencode) we finally got discord and slack channels for the bot to work in, just use !space in the slack and the discord channel, the links are on the website. we are removing the slack bot mission form this project since i want people to actually see this and say if it is good or not, i am removing the slack bot mission from my project, but at least you can see the website and the discord bot well, see ya at ship
Ships:
Spacer — Stardance ship Name: Spacer One-liner: I kept missing launches and solar storms, so I built one page that tracks all of it and lets me poke at it from Slack, Discord, my terminal, a desktop window, or the web. Field Value Demo https://spacer.systemic-speed.hackclub.app/ Code https://github.com/Gautham-rgb/Spacer README https://github.com/Gautham-rgb/Spacer/blob/main/README.md Stack Python · NiceGUI · discord.py · slack_sdk · Skyfield · Groq What it is: every front-end (web, Slack, Discord, CLI, desktop) just calls one get_events() . All the fetching and filtering live in one place, and everything else is basically a renderer. Live demo is deployed, so just click. Try it: https://spacer.systemic-speed.hackclub.app/ In the bot’s chat: !space weather , !space list probe_launch --limit 5 --name falcon , !space groq what is a coronal mass ejection? What it does pulls solar flare / K-index, launches, and flybys into one timeline same --limit / --name / --after / --before flags in chat, CLI, and the URL Groq assistant that remembers the conversation (in Slack, Discord, and web) desktop ping when something big is within the hour, optional webhook TTL cache so refreshes don’t hammer NOAA, plus a 63-test pytest suite Nerdy bits: dedup on (title, time) ; bots share one platform-neutral response so Slack/Discord never re-implement logic; pages render instantly and fetch in a side thread; long Groq answers get clamped so a big reply can’t fail to send. Data: NOAA SWPC, thespacedevs, JPL (DE421), Groq. Built for Stardance. Well, Happy Launching!!...
|
1792853520.2525823
|
1792939920.2525823
|