|
39865
|
my APOD site by @kevinamir | Stardance
|
kevinamir
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T21:47:48Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this website takes the APOD from NASA and shows it to you with the date", "repo": "https://github.com/kevinamirr1/nasa-is-cooked", "demo": "https://kevinamirr1.github.io/nasa-is-cooked/"}]...
|
[{"post_id": 37897, "ts": "202 [{"post_id": 37897, "ts": "2026-07-30T21:46:14Z", "hours": 0.4508, "text": "My APOD website"}]...
|
Title: my APOD site by @kevinamir | Stardance
Dev Title: my APOD site by @kevinamir | Stardance
Devlogs:
My APOD website
Ships:
this website takes the APOD from NASA and shows it to you with the date...
|
1793566600.9250588
|
1793653000.9250588
|
|
48185
|
~/SLAIR by @domos000 | Stardance
|
domos000
|
1
|
4.55
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T17:39:33Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "~/SLAIR is now LIVE! What is ~/SLAIR ? ~/SLAIR is a free-to-use Slack Bot packed with mini-games and a few things you probably didn’t know you needed! Where does the name ~/SLAIR come from? The name ~/SLAIR comes from my other project ~/KLAIR which was a Discord Bot. As this bot is similar to ~/KLAIR in features but for Slack instead of Discord, I’ve decided to name it ~/SLAIR . Features: ~/SLAIR is designed to be a small, fun, free-to-use bot that aims to add a bunch of entertaining features. Mini Games: /slair-coinflip Flip a coin /slair-guessthenumber Try to guess the number /slair-rps Challenge the bot /slair-unscramble Unscramble the word Other Commands: /slair-8ball Ask the magic 8-ball /slair-cat Get a random cat /slair-dog Get a random dog /slair-cryptoprice Check cryptocurrency prices /slair-uselessfact Receive a completely useless fact AI Usage: Used Gemini 3.1 Pro (High) in Antigravity to fix errors and bugs in the code which I couldn't figure out how to solve. AI was primarily used to debug /slair-unscramble and /slair-guessthenumber commands as I couldn't figure out how to open modals upon clicking a button.", "repo": "https://github.com/adeebur-x64/SLAIR", "demo": "https://hackclub.enterprise.slack.com/archives/C0BR0071C14"}]...
|
[{"post_id": 59693, "ts": "202 [{"post_id": 59693, "ts": "2026-09-01T16:48:52Z", "hours": 0.5453, "text": "Devlog - 5 I don’t remember what exactly I did but these 32 mins weren’t logged. What I do remember: I had worked on troubleshooting the bot and fixing errors / bugs in the code as well as writing the README.md file where most of this 32 minutes went."}, {"post_id": 48848, "ts": "2026-08-17T12:17:30Z", "hours": 1.3106, "text": "Devlog - 4 Aw man, I forgot to post a devlog againnnnnn! Anyways, I’ve now ported the /unscramble and /guessthenumber commands to ~/SLAIR now! Creating both of these commands was a challenge and I had to utilize Gemini 3.1 Pro (High) in Antigravity to get it working. The main challenge I faced was to make the modals open upon a button click and work exactly how modals do in Discord. Also, ignore the stuff I covered with red, those responses were just for testing what works and what bugs there are which I need to fix. => This is the last Devlog! I’ll NOT be adding the nim Mini Game to ~/SLAIR for now."}, {"post_id": 47961, "ts": "2026-08-16T07:31:16Z", "hours": 0.7831, "text": "Devlog - 3 Didn’t even realize it took me 46 minutes to make this lol. Anyways, I’ve now ported the /coinflip and /rockpaperscissors command to ~/SLAIR now! Creating this was somehow a challenge and I almost lost my mind trying to figure out how to get these buttons working! I’ll take a break for now and will be back with another Devlog very soon! This will most probably be one of the last few Devlogs before the first Ship!"}, {"post_id": 47942, "ts": "2026-08-16T06:35:54Z", "hours": 0.6028, "text": "Devlog - 2 Made some more progress in porting the features of ~/KLAIR to the Slack Bot ~/SLAIR . I’ve added the /cryptoprice and /8ball commands now which utilize the Slack Modal to ask the person for their input. I’ll try to port the mini games to ~/SLAIR too and that will be the V1 of the Slack Bot!"}, {"post_id": 47487, "ts": "2026-08-15T12:51:49Z", "hours": 0.8081, "text": "Devlog - 1 I started working on my Slack Bot and completely forgot I also need to post my progress here. Well, till now, I’ve been able to port the /cat , /dog and /uselessfact commands from my Discord Bot ~/KLAIR to this Slack Bot ~/SLAIR . => I will NOT be adding the AI features in this Slack Bot. (At least for now, I won’t). Where does the name ~/SLAIR come from? The name ~/SLAIR comes from the Discord Bot I made earlier /KLAIR but, instead of it being a Discord Bot, it’s a Slack Bot."}]...
|
Title: ~/SLAIR by @domos000 | Stardance
Devlogs:
Title: ~/SLAIR by @domos000 | Stardance
Devlogs:
Devlog - 1 I started working on my Slack Bot and completely forgot I also need to post my progress here. Well, till now, I’ve been able to port the /cat , /dog and /uselessfact commands from my Discord Bot ~/KLAIR to this Slack Bot ~/SLAIR . => I will NOT be adding the AI features in this Slack Bot. (At least for now, I won’t). Where does the name ~/SLAIR come from? The name ~/SLAIR comes from the Discord Bot I made earlier /KLAIR but, instead of it being a Discord Bot, it’s a Slack Bot.
Devlog - 2 Made some more progress in porting the features of ~/KLAIR to the Slack Bot ~/SLAIR . I’ve added the /cryptoprice and /8ball commands now which utilize the Slack Modal to ask the person for their input. I’ll try to port the mini games to ~/SLAIR too and that will be the V1 of the Slack Bot!
Devlog - 3 Didn’t even realize it took me 46 minutes to make this lol. Anyways, I’ve now ported the /coinflip and /rockpaperscissors command to ~/SLAIR now! Creating this was somehow a challenge and I almost lost my mind trying to figure out how to get these buttons working! I’ll take a break for now and will be back with another Devlog very soon! This will most probably be one of the last few Devlogs before the first Ship!
Devlog - 4 Aw man, I forgot to post a devlog againnnnnn! Anyways, I’ve now ported the /unscramble and /guessthenumber commands to ~/SLAIR now! Creating both of these commands was a challenge and I had to utilize Gemini 3.1 Pro (High) in Antigravity to get it working. The main challenge I faced was to make the modals open upon a button click and work exactly how modals do in Discord. Also, ignore the stuff I covered with red, those responses were just for testing what works and what bugs there are which I need to fix. => This is the last Devlog! I’ll NOT be adding the nim Mini Game to ~/SLAIR for now.
Devlog - 5 I don’t remember what exactly I did but these 32 mins weren’t logged. What I do remember: I had worked on troubleshooting the bot and fixing errors / bugs in the code as well as writing the README.md file where most of this 32 minutes went.
Ships:
~/SLAIR is now LIVE! What is ~/SLAIR ? ~/SLAIR is a free-to-use Slack Bot packed with mini-games and a few things you probably didn’t know you needed! Where does the name ~/SLAIR come from? The name ~/SLAIR comes from my other project ~/KLAIR which was a Discord Bot. As this bot is similar to ~/KLAIR in features but for Slack instead of Discord, I’ve decided to name it ~/SLAIR . Features: ~/SLAIR is designed to be a small, fun, free-to-use bot that aims to add a bunch of entertaining features. Mini Games: /slair-coinflip Flip a coin /slair-guessthenumber Try to guess the number /slair-rps Challenge the bot /slair-unscramble Unscramble the word Other Commands: /slair-8ball Ask the magic 8-ball /slair-cat Get a random cat /slair-dog Get a random dog /slair-cryptoprice Check cryptocurrency prices /slair-uselessfact Receive a completely useless fact AI Usage: Used Gemini 3.1 Pro (High) in Antigravity to fix errors and bugs in the code which I couldn't figure out how to solve. AI was primarily used to debug /slair-unscramble and /slair-guessthenumber commands as I couldn't figure out how to open modals upon clicking a button....
|
1793566592.4238958
|
1793652992.4238958
|
|
59533
|
slakie by @IcedThrower_95 | Stardance
|
IcedThrower_95
|
1
|
10.71
|
48
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T10:32:16Z", "hours": 8.0, "multiplier": 6.23, "payout": 48, "blessing": "neutral", "text": "What did you make? I built Slackie—a multi-purpose Slack bot packed with 10 fully functional slash commands! I wanted to make something that wasn’t just a simple text responder, so I integrated multiple APIs to make it genuinely useful and fun. It features a Gemini 3.8 Flash AI assistant that can browse the web, a currency converter, a math expression evaluator, a QR code generator, and even a command that fetches the exact countdown and details for the next Formula 1 race. What was challenging? Trying to get the currency converter to accept flexible inputs (like “1299 USD to INR” vs just “USD to INR”) without completely breaking the code took a lot of trial and error. What am I proud of? The F1 Command: As a massive Formula 1 fan, building a custom /my-slakie-f1 command that tracks the next Grand Prix weekend using the Jolpica API was super satisfying. I am really proud that I figured out the Linux service file stuff. Slackie is now running flawlessly 24/7 on my own hardware. What should you know before testing? To talk to the AI, use /my-slakie-gemini [your question]. It has Google Search grounding enabled, so you can ask it about current events or tech news! Try /my-slakie-currency 100 USD to INR to test the live exchange rates. Type /my-slakie-help to see the full list of all 10 commands you can play with. Make sure you use the exact /my-slakie-… prefix so it doesn’t collide with other bots in the workspace! Example Here in the image attached shows the working of the /my-slakie-gemini [Question] command the model intellingently uses web search to get the latest information if its system instrutction is outdated", "repo": "https://github.com/IcedThrower95/slakie_bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0C16D3SXCK"}]...
|
[{"post_id": 72632, "ts": "202 [{"post_id": 72632, "ts": "2026-09-23T12:01:07Z", "hours": 1.6297, "text": "wrote the code my self from scratch again, as the reviewers were flagging it as “more than 30% usage of AI”"}, {"post_id": 66636, "ts": "2026-09-12T14:20:36Z", "hours": 1.0817, "text": "final devlog after review. Today I edited some of my codebase to make it more cleaner rather than having it clustered.I added a few comments as well along the way"}, {"post_id": 65887, "ts": "2026-09-11T10:18:56Z", "hours": 0.2964, "text": "at last i finished the README document and also edited some code(tiny changes to make it better)"}, {"post_id": 65832, "ts": "2026-09-11T07:29:41Z", "hours": 1.0794, "text": "#final - devlog3 I have finally fixed the gemini ai integration and i have 10 fully working commands, here i have attached. It took me a lot of time to debug the Gemini AI errors. i even used AI to debug but failed unfortunately. Anyways it is now fixed and everything works. Signing off on this project"}, {"post_id": 65318, "ts": "2026-09-10T12:10:30Z", "hours": 3.1189, "text": "#devlog2 , today i completed all the commands which i wanted to integrate in my slackbot.Moreover I am trying to fix the gemini ai which i have intergrated in my slakie it keeps giving me outdated information it is unable to do a web search. I hope to fix it by the end of today"}, {"post_id": 64343, "ts": "2026-09-08T17:24:03Z", "hours": 3.2531, "text": "#devlog1, today I started working on my project Slack bot—my-slakie. At first I followed the guide and went along with the flow. After a while, I had some ideas pop up into my head, and I tried to integrate Gemini AI in the slash command, but unfortunately I was unable to get the desired result—the bot is giving outdated data; the rest of the functions are fine. I will work on debugging the problem with Gemini tomorrow. Also, I am hosting my Slack bot on my Raspberry Pi instead of using the Hack Club Nest. So yeah, that’s it for today!!"}]...
|
Title: slakie by @IcedThrower_95 | Stardance
Devl Title: slakie by @IcedThrower_95 | Stardance
Devlogs:
#devlog1, today I started working on my project Slack bot—my-slakie. At first I followed the guide and went along with the flow. After a while, I had some ideas pop up into my head, and I tried to integrate Gemini AI in the slash command, but unfortunately I was unable to get the desired result—the bot is giving outdated data; the rest of the functions are fine. I will work on debugging the problem with Gemini tomorrow. Also, I am hosting my Slack bot on my Raspberry Pi instead of using the Hack Club Nest. So yeah, that’s it for today!!
#devlog2 , today i completed all the commands which i wanted to integrate in my slackbot.Moreover I am trying to fix the gemini ai which i have intergrated in my slakie it keeps giving me outdated information it is unable to do a web search. I hope to fix it by the end of today
#final - devlog3 I have finally fixed the gemini ai integration and i have 10 fully working commands, here i have attached. It took me a lot of time to debug the Gemini AI errors. i even used AI to debug but failed unfortunately. Anyways it is now fixed and everything works. Signing off on this project
at last i finished the README document and also edited some code(tiny changes to make it better)
final devlog after review. Today I edited some of my codebase to make it more cleaner rather than having it clustered.I added a few comments as well along the way
wrote the code my self from scratch again, as the reviewers were flagging it as “more than 30% usage of AI”
Ships:
What did you make? I built Slackie—a multi-purpose Slack bot packed with 10 fully functional slash commands! I wanted to make something that wasn’t just a simple text responder, so I integrated multiple APIs to make it genuinely useful and fun. It features a Gemini 3.8 Flash AI assistant that can browse the web, a currency converter, a math expression evaluator, a QR code generator, and even a command that fetches the exact countdown and details for the next Formula 1 race. What was challenging? Trying to get the currency converter to accept flexible inputs (like “1299 USD to INR” vs just “USD to INR”) without completely breaking the code took a lot of trial and error. What am I proud of? The F1 Command: As a massive Formula 1 fan, building a custom /my-slakie-f1 command that tracks the next Grand Prix weekend using the Jolpica API was super satisfying. I am really proud that I figured out the Linux service file stuff. Slackie is now running flawlessly 24/7 on my own hardware. What should you know before testing? To talk to the AI, use /my-slakie-gemini [your question]. It has Google Search grounding enabled, so you can ask it about current events or tech news! Try /my-slakie-currency 100 USD to INR to test the live exchange rates. Type /my-slakie-help to see the full list of all 10 commands you can play with. Make sure you use the exact /my-slakie-… prefix so it doesn’t collide with other bots in the workspace! Example Here in the image attached shows the working of the /my-slakie-gemini [Question] command the model intellingently uses web search to get the latest information if its system instrutction is outdated...
|
1793566590.2726507
|
1793652990.2726507
|
|
48183
|
NovaTab by @Noben_Nobi | Stardance
|
Noben_Nobi
|
2
|
14.0
|
37
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-25T12:22:58Z", "hours": 4.0, "multiplier": 10.31, "payout": 37, "blessing": "neutral", "text": "This is my second ship for NovaTab so I can enter the hourly rating pool. I changed the design to look like a hand-drawn cardboard scrapbook with slight page tilts. I also added new features: you can now click the background to stamp stars on the screen, and you can use the dropdown menus on the notes to change their colors to Chocolate, Mint, or Strawberry. Setting up the NASA API key on Netlify was tough, but I got it working.", "repo": "https://github.com/Niraj2013/NovaTab", "demo": "https://nnovatab.netlify.app/"}, {"ship_num": 2, "ts": "2026-08-22T11:41:29Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made NovaTab, a highly customizable browser New Tab dashboard built for the “Give Your Website a Pulse” mission. It features toggleable, editable, and draggable widgets that allow users to design their own workspace layout. It integrates with the NASA APOD API to fetch a beautiful dynamic astronomy picture as a background backdrop every single day.As a beginner who started learning web development recently, the absolute most challenging part was handling absolute drag-and-drop layers in vanilla JavaScript and setting up a stable localStorage system so that widget positions and custom text titles actually stay saved across browser refreshes. I am incredibly proud of getting the in-line double-click text editing feature to work seamlessly, and I am glad I pushed through the bugs to build a functional dashboard foundation! I used some AI for help in coding hard parts in Javascript and CSS but rest everything was done by me.", "repo": "https://github.com/Niraj2013/NovaTab", "demo": "https://nnovatab.netlify.app/"}]...
|
[{"post_id": 54400, "ts": "202 [{"post_id": 54400, "ts": "2026-08-25T12:18:58Z", "hours": 0.6986, "text": "Added more 2 small features, Now it creates a crunchy sound on button click of Add widgets and reset button, and a motivational quote which changes every time randomly, this quote is visible at right top corner. Preview link: https://nnovatab.netlify.app/"}, {"post_id": 53726, "ts": "2026-08-24T12:10:46Z", "hours": 0.5703, "text": "Changed README and fixed an error in Javascript"}, {"post_id": 53123, "ts": "2026-08-23T15:31:58Z", "hours": 1.1058, "text": "made bold borders and shadows in it (UI) and completed both new features: wherever you will click, a Star will come there, and we can change the colour theme of notes widget."}, {"post_id": 52565, "ts": "2026-08-22T19:01:09Z", "hours": 0.8111, "text": "Added one more function"}, {"post_id": 52362, "ts": "2026-08-22T14:01:08Z", "hours": 0.3692, "text": "I have removed all the features added using AI and restored my self written version"}, {"post_id": 52221, "ts": "2026-08-22T10:01:59Z", "hours": 1.4125, "text": "Added more features and made everything customizable and editable, just double-click on the widget and then edit it! Used Ai for help in coding. (some)"}, {"post_id": 51726, "ts": "2026-08-21T15:40:23Z", "hours": 0.9206, "text": "Added many more features like made it look more like our personal real pin board with some inperfections, tape etc. also made sticky note peel off system and a page for it where it is saved and etc. Took a little AI help in some coding."}, {"post_id": 50917, "ts": "2026-08-20T11:58:16Z", "hours": 0.7464, "text": "Started adding more features and fixed NASA APOD Widget"}, {"post_id": 50296, "ts": "2026-08-19T13:34:36Z", "hours": 1.4292, "text": "Made the NovaTab look more beautiful"}, {"post_id": 50227, "ts": "2026-08-19T11:31:48Z", "hours": 0.7214, "text": "Added more css, now the website widgets are draggable and overlapable"}, {"post_id": 49742, "ts": "2026-08-18T17:43:00Z", "hours": 0.7417, "text": "fixed some Javascript and started with CSS (yet no visible designs but soon it will be very good UI)"}, {"post_id": 49501, "ts": "2026-08-18T11:25:52Z", "hours": 1.0314, "text": "Added NASA APOD API and widget"}, {"post_id": 48895, "ts": "2026-08-17T13:41:19Z", "hours": 0.2908, "text": "Wrote more Javascript and made Widgets draggable and dropable, overlapable, etc."}, {"post_id": 48836, "ts": "2026-08-17T11:55:31Z", "hours": 0.4961, "text": "Added some widget Javascript and more"}, {"post_id": 48198, "ts": "2026-08-16T14:23:26Z", "hours": 0.4333, "text": "Added API’s for location and weather and wrote some more Javascript"}, {"post_id": 48029, "ts": "2026-08-16T10:00:45Z", "hours": 0.5639, "text": "Wrote more Javascript for my NovaTab"}, {"post_id": 47974, "ts": "2026-08-16T07:50:03Z", "hours": 1.2272, "text": "I am making a project name NovaTab which is a customizable workspace. I have completed with the first 4 steps: Introduction, Project Setup, Github connection and html. Css is remaining, Now I am writing the Javascript."}]...
|
Title: NovaTab by @Noben_Nobi | Stardance
Devlogs Title: NovaTab by @Noben_Nobi | Stardance
Devlogs:
I am making a project name NovaTab which is a customizable workspace. I have completed with the first 4 steps: Introduction, Project Setup, Github connection and html. Css is remaining, Now I am writing the Javascript.
Wrote more Javascript for my NovaTab
Added API’s for location and weather and wrote some more Javascript
Added some widget Javascript and more
Wrote more Javascript and made Widgets draggable and dropable, overlapable, etc.
Added NASA APOD API and widget
fixed some Javascript and started with CSS (yet no visible designs but soon it will be very good UI)
Added more css, now the website widgets are draggable and overlapable
Made the NovaTab look more beautiful
Started adding more features and fixed NASA APOD Widget
Added many more features like made it look more like our personal real pin board with some inperfections, tape etc. also made sticky note peel off system and a page for it where it is saved and etc. Took a little AI help in some coding.
Added more features and made everything customizable and editable, just double-click on the widget and then edit it! Used Ai for help in coding. (some)
I have removed all the features added using AI and restored my self written version
Added one more function
made bold borders and shadows in it (UI) and completed both new features: wherever you will click, a Star will come there, and we can change the colour theme of notes widget.
Changed README and fixed an error in Javascript
Added more 2 small features, Now it creates a crunchy sound on button click of Add widgets and reset button, and a motivational quote which changes every time randomly, this quote is visible at right top corner. Preview link: https://nnovatab.netlify.app/
Ships:
I made NovaTab, a highly customizable browser New Tab dashboard built for the “Give Your Website a Pulse” mission. It features toggleable, editable, and draggable widgets that allow users to design their own workspace layout. It integrates with the NASA APOD API to fetch a beautiful dynamic astronomy picture as a background backdrop every single day.As a beginner who started learning web development recently, the absolute most challenging part was handling absolute drag-and-drop layers in vanilla JavaScript and setting up a stable localStorage system so that widget positions and custom text titles actually stay saved across browser refreshes. I am incredibly proud of getting the in-line double-click text editing feature to work seamlessly, and I am glad I pushed through the bugs to build a functional dashboard foundation! I used some AI for help in coding hard parts in Javascript and CSS but rest everything was done by me.
This is my second ship for NovaTab so I can enter the hourly rating pool. I changed the design to look like a hand-drawn cardboard scrapbook with slight page tilts. I also added new features: you can now click the background to stamp stars on the screen, and you can use the dropdown menus on the notes to change their colors to Chocolate, Mint, or Strawberry. Setting up the NASA API key on Netlify was tough, but I got it working....
|
1793566581.1023622
|
1793652981.1023622
|
|
45298
|
City Defenders TD by @nautrw | Stardance
|
nautrw
|
1
|
133.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T22:43:13Z", "hours": 133.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made City Defenders TD (ironically named since there aren’t any cities). This is a medieval and fantasy-inspired tower defense game built entirely with Pygame-CE. I drew every single sprite manually using Aseprite and implemented my very own custom GUI system from scratch. There are several maps and several towers to unlock by progressing through the game. I hope you enjoy this project as much as I enjoyed making it.", "repo": "https://github.com/nautrw/city-defenders", "demo": "https://nautrw.itch.io/city-defenders"}]...
|
[{"post_id": 83941, "ts": "202 [{"post_id": 83941, "ts": "2026-10-28T22:40:28Z", "hours": 0.9178, "text": "As requested by some playtesters I quickly added an instructions page with the basic controls of the game. It’s not great but hopefully it works. I’ve also been fiddling a lot trying to get the installation commands working and trying the executables on several virtual machines. The game is done and I’m going to ship!"}, {"post_id": 83522, "ts": "2026-10-28T03:11:20Z", "hours": 4.3492, "text": "I added a credit scene, and now the project has got to be most definitely ready to ship I need them stardust 😭"}, {"post_id": 81918, "ts": "2026-10-23T01:55:23Z", "hours": 7.1764, "text": "Ok, so I actually lied when I said the game was done. I still have a lot of balancing to do, and with this have come some other major changes. Particle System : I added a particle system (unfortunately they go very fast and I wasn’t able to capture it). This was originally because the effect overlay colors looked really bad. Now, particles with rise up from the enemy with an effect and then fade out over time. I then figured out that I could actually make the overlay color draw correctly by using the RGBA multiplication blending method. It still looks way cooler now. Balancing : Many towers have been nerfed, especially the cannon. I am fortunate to have people that can playtest my game. It’s definitely gotten much harder. I’m still working on it, though. The point now is that the balancing of the towers and when the player unlocks them has lead me to the mechanic of unlocking one tower per map. Thus, I have created 3 more maps because there are 7 towers in total. I might have to make a final one for the flamethrower to be used. I’ve spent A LOT of time balancing since last devlog, and I think it shows lol."}, {"post_id": 81498, "ts": "2026-10-21T14:31:28Z", "hours": 6.4322, "text": "There’s been a lot of progress, I think. The game is pretty much done at this point. What’s left is just to balance the game. Renamed Ground Zero to Magic Forest : Magic Forest sounds like a much cooler name that fits the theme of the game, so I just renamed it. Data Saving : I finally got around to saving the data when closing. I just made a function that closed the game and then saved the data, and then any pathway that exits the game just calls that function. Save and quit : I added a save and quit feature to the pause menu. I am now tracking a state inside the pause menu GUI manager. There is first a save and quit option, and then that leads to a second menu that warns the player and asks them to confirm their choice. There is also an X button in the main menu that straight up quotes the game, too. Archipelago : I made a new map, the Archipelago. This follows a thin strip of land on which the enemies walk. I actually had to rework how the map system worked, adding an option to draw the ground on top or below the blocked layer. I also had to add an extra check on the logic for determining if a player can place a tower. Flamethrower : I added a new flamethrower tower. As of right now, it has the same stats as the cannon. I am going to be balancing the whole thing soon. This is going to be the final tower I think."}, {"post_id": 80831, "ts": "2026-10-18T22:49:30Z", "hours": 6.415, "text": "I’ve been kind of behind again, but I think I’ve made some cool stuff. Tower shop is now an official mechanic. I just remembered I need to set the default shards back to 0, but it’s fully working now. Main menu : I ended up setting the background of it to a stone wall, which to be honest is just taken from the tower shop background. I was wasting too much time on drawing. Map selector music : I finally got some music for the map selector. It’s some public domain guitar music like the tower shop, but different. I think it sounds pretty nice. Victory & defeat scene revamp : I revamped the victory and defeat scenes. Now, they show a banner in the center of the screen and the amount of shards the player receives. A defeat will get 1/2 of the shards reward, to allow them to actually improve. 3x speed setting : While waiting for the enemies to get to the end so I could test the defeated scene, I got tired and decided to add a new 3x speed button. I ended up refactoring the whole thing but now the code is much cleaner."}, {"post_id": 78524, "ts": "2026-10-11T03:01:21Z", "hours": 7.6825, "text": "I’ve been working on 2 major things that look small but are actually pretty big: Currency buttons : I’ve had to do some major revamps to several parts of the GUI system, but now I have buttons that show the currency. I am now using these for the upgrades, buy towers, and the new tower shop with the shards. I am now allowing for icon elements to be passed into the Button class. This allows for custom positioning, and thus this new way of buttons. Then I had to change the way that elements refreshed in the GUI managers. It took a while to figure out, but now they will be red if there isn’t enough currency. Main menu background : Art is incredibly time-consuming for me, and I keep scrapping designs but I think this one is the one and the one I’ll stick with for the finished thing."}, {"post_id": 77585, "ts": "2026-10-07T15:31:34Z", "hours": 6.0606, "text": "I’ve started work on a tower shop. I spent several hours drawing the background, but I think it came out looking really good. It only took so much time, which is why I’m making the log now. I also used a template human model for the merchant. I am going to show the different upgrades on the menu. I haven’t added the buy functionality yet, but that will probably be pretty easy. I got some chill guitar music from opengameart."}, {"post_id": 77288, "ts": "2026-10-06T13:27:04Z", "hours": 6.6089, "text": "A little bit faster progress now. Tower Shop : I have started work on a tower shop. I want it to be from the POV of the player looking into a medieval stall. As of right now, I’m still working on drawing it, and also it’s still hidden and non-functional. I edited all the towers to have a requirement of another tower, so as to make it a progression later on, Data Saving : I am going to start implementing a save system. For this, I just put some values into a data class and then implemented a way to save it to and load it from JSON. Molten Lands : There is a new map now, the molten lands. I also made a lava slime which is a bit stronger than the other enemies except for the bosses. It took a while to draw the sandy tiles for it, but I feel as though I’ve gotten much better at drawing than before. Logging : I added logging. This probably should’ve been added earlier, but this will help tremendously to fix any bugs in the code. For now, I am logging pretty much everything that doesn’t happen every frame, like when an enemy dies or the user clicks on a button."}, {"post_id": 76508, "ts": "2026-10-03T19:37:01Z", "hours": 7.5089, "text": "Progress has been (very) slow but there’s some more new content: Crabs & Bat : I added crab enemies. There is a normal crab that is like a slime and then an armored crab (not shown in video) that is bigger and meant to be a boss. There is also a bat enemy. Pause Menu : Theere is a pause menu now. It allows the user to retry the map or go back to the main menu. I am finally making use of the other features of the scene manager. It’s a different scene but it’s rendered on top of the main game scene. I had to modify the scene manager to draw each scene on top of the last one in the stack. Otherwise, this is just the same usage of my GUI system. Rebalances : I did some rebalancing of the game. Towers generally cost different amounts of coins now and do different amounts of damage. I’ll probably have to do it again by the end of the project but this will do for now. Music : I am in the process of adding music. I am getting them from https://opengameart.org and crediting all publishers. I have a system where it will queue music files from a playlist and play those in sequence. They are pretty long files, but just in case. I’m probably forgetting some stuff (last time I touched this was like a week ago), but those are the major things."}, {"post_id": 72935, "ts": "2026-09-24T02:19:28Z", "hours": 5.8756, "text": "I am very glad stardance got extended! This definitely eases the pressure A LOT . Bit of a shorter devlog so as to not accidentally pass the 10h deadline. Here are the updates: Venom shooter : The venom shooter is a plant that shoots venom. It will poison the enemy. I did this through another effect. The recording doesn’t show it’s full potential, because I kind of force pushed to the repository and now I lost the change, but I have it on another computer. Essentuially, the damage over time is going to increase with the update instead of staying static and linked to the effect. More tiles! : I added the stone path tiles. They still need a little bit of work, as some areas don’t fully connect. The nice thing about working with stone sprites is that the textures connect pretty well regardless, but it’s still something I need to fix. New Map : I added a new map, Frontier. This one is just a somewhat harder version of Ground Zero, mostly to test out if the map selector and the new tiles actually worked. The map selector just had to be tweaked to refresh the UI when a new button is clicked, which is only one line, but otherwise everything went smoothly. Ghost : I added a new enemy, the Ghost. The ghost looks like a tortured soul, and at the moment he hasn’t received proper stats, so he’s just a clone of the slime. I want to make it somewhere in between the slime and fast slime. It uses a lot more frames than the other enemies to make it somewhat smooth. Ok chat I think we got this in the bag im tryna get that bambu a1 3d printer frfr i think i can get it now that the deadline has been increased tysm stardance devs!!!!"}, {"post_id": 71575, "ts": "2026-09-21T02:32:58Z", "hours": 7.1853, "text": "Ok, so a lot of progress, though it has been slow because the school year has genuinely driven a train through my productivity: Upgrades : This is the most recent thing, but basically I added upgrades. This is handled by using a list of values instead of single values when creating a new subclass of a Tower class. I track an upgrade index and increase it to change the index and some other stuff. I made some icons and added it to the tower selected menu. I will show the coins cost of the upgrade next, because I forgot to do that. I also made new sprites for the upgrades, and a complete resprite for the cannon, which badly needed it. I also remade the tower base, which looks much better now. Speed setting : I added a speed setting. This was a matter of tracking a delta time multiplier, and then multiplying it with everything that uses delta time. Remember that delta time is the amount of time between frames. It lets the developer do things like move an enemy at a movement speed independent of the frame rate, because the movement is split between the delta time. Frostspire : I added a new Frostspire tower. This is a tower that shoots icicles at enemies and makes them slower. To do the slower part, I made an effect system that gets appended to an array in the enemy. Effects have an overlay color, and will have several attributes that are applied to the enemy if it has them. As of right now, there is just a movement speed multiplier. I want to add a final venom tower that damages enemies over time, and that should be pretty easy. Tank slime : I added a tank slime, which is supposed to be the final boss of the Ground Zero map. I’m not sure if I have the inspiration to make more enemies other than slimes, or the drawing skills. Essentially it’s just a much bigger slime (takes up the whole width of the path) and green, and slower, and has a lot of health. I have to take the time to balance everything though, because 2 of the basic crossbows can kill it as of right now."}, {"post_id": 68312, "ts": "2026-09-14T22:14:49Z", "hours": 6.0117, "text": "I did this devlog mostly because I wanted to get a screenshot of (hopefully) six seven hours , but there has been some progress, even if it’s slow because now I have other things to do . Map Selector : I implemented a map selector, which will come in useful later on when I add more maps. I also want to do a little thing where every map is its own globe that kind of shows the outline of the map. I think it’ll look cool. Wave Control : I changed the wave logic to make it be controlled by the player. I was inspired by Bloons TD 6, and I think this makes it much better. Now, the player has as much time as they need to prepare for the next wave, or if they are feeling good they can just call in multiple waves and get it over with. Game Icon : I made a game icon, a shield with a golden cross and ruby in the center. I made it be the icon for the window, and it will be the icon for the .exe file when it’s time to ship. Canon : I added a cannon turret. It’s still kind of buggy, but the idea is that it will leave an explosion and that will also be the AoE so it can shoot multiple enemies, kind of like for crowd control. Generally, I really need to spend some time balancing the game, but I think that will come at a later time."}, {"post_id": 65687, "ts": "2026-09-11T00:36:05Z", "hours": 7.2467, "text": "I’ve kind of gotten into a slump, mostly because of school, but I think I’m back on track to finish this by the 30th of this month. Though I gotta say, it’s genuinely been slog to work on this now. I think I’m burning out Anyway, for the updates: Turret anti-aliasing : To fix the issue of turrets looking terribly when rotating, I used a new function that zooms and rotates the sprite, but also applies anti-aliasing. I can set the zoom scale to 1 and it will rotate the sprite but also anti-alias it. The jaggedness seen in other demos was because the actual map is rended in very low resolution (360x240) and then scaled up. GUI Makeover : I have given another makeover to the GUI. Now, most of it in the main game is a sleek semi-transparent black surface. I did this mostly because I couldn’t settle on a particular theme, and I didn’t know how to go about drawing such large sprites while still looking good. Waves : I finally got around to adding waves. They are a little buggy, but I ended up making a dictionary structure for the maps and put them in one big dictionary. This way, I can define which enemies spawn in which order, the interval between waves, etc. Enemies and turrets are also in their own dictionaries. Health : I added the health mechanic! It will now check if the health is equal or below 0 and send the user to a game over screen. Those screens will eventually get improved. Menus : I added a main menu, mostly because I had people trying the game, and it had to happen at some point. As of right now I am working on a map selector that harnesses that maps dictionary from earlier. (I did the devlog now because I was afraid of getting to 10h ) More menus and turrets : I added a ballista tower, which is slower but has higher range. I still have to balance it some more, and make a bolt projectile, and also probably make the tower control the damage instead of the arrow. That way I can subtract health from the enemy directly, which would fix an annoying bug where the turret shoots but the bullet doesn’t collide with the enemy, so it just stays there until it collides with another enemy. There is also another slime (the red slime) which is faster. This is to force the player to have at least 2 turrets."}, {"post_id": 63381, "ts": "2026-09-07T05:26:00Z", "hours": 6.885, "text": "Quite a bit of progress! Pixel art revamp : The pixel art has generally improved massively. I actually took the time to get some inspiration from Google and worked on the tileset. It now includes a lake and also generally just looks better, with borders around the paths. It did take a lot of time, though. I also implemented animations for this, for the slime, and perhaps for the crossbow too. I also made a little card container for the top 2 stats. Waves : I added waves! It’s now technically a fully playable tower defense game, I guess. As of right now it’s going to crash as soon as it gets farther than Wave 3 because I don’t have anything to do after it, but soon I will add another scene for that."}, {"post_id": 61219, "ts": "2026-09-04T01:33:38Z", "hours": 7.2719, "text": "Lots of progress again! This one was slightly more in the background, as I started a little bit of housekeeping: Transition from Rects to FRects : FRects are the same thing as normal Rects, except that they allow for floats. This didn’t really have an impact on the game other than making it easier to work with vectors for positioning, as they also use floats. UI Changes : I changed the positioning aspect of the UI. I recreated the Rect placement system of pygame, where you can select a point (eg. top left, center, midbottom, etc.) to use to position the rect. This is very flexible, and I copied it. Now, I can do things like place text with much more ease. I also changed the colors of the UI to make it darker and overall nicer. I made it so that the user had to select a turret and then go to a menu to see the cost and other attributes of it, which will be better for the future. Coins : I added coins, which will be the temporary currency when inside the game. This will be used to buy towers and such. Outside the main game, I am planning to create another one that is used to buy skills and stuff, just to make it more realistic."}, {"post_id": 57916, "ts": "2026-08-30T07:51:39Z", "hours": 7.0772, "text": "It took a while, but there have been some pretty big improvements. Transition to 1440x960px : I eventually found that being limited to 360x240 was going to be very limiting, specially with text because at low resolutions it looked like a jumbled mess. Thus I embarked on a pretty hard journey (not hard in retrospect) to figure out how to change the resolution but also keep the pixelated style without having to draw sprites at 4 times the resolution. The solution I ended up finding was to store a scale factor of 4 (360x4=1440, 240x4=960), and then scaling a separate surface to that resolution. Now, a surface is created with the same dimensions as the map, and everything is drawn to that surface instead of the map (I used to draw enemies, turrets, bullets, etc. onto the map because they moved together), and then that surface gets scaled. This allows me to keep the pixelated graphics on the actual game, and have crisp text on the GUI. For the offsets, I just moved the function that translated the screen coordinates to map ones from the map to the scene, and then adjusted it to take in the scale factor. Everything else works pretty much the same, as its only the image and mouse clicks getting scaled instead of rectangles. I scaled the button sprites to 32x32 to make them easier to draw, and then I have it in the config to scale them to 64x64. I decided to do that mostly for ease, because most of the other sprites are around that resolution anyway. Turret placement : I added more buttons to the GUI and added turret placement. The GUI itself is always going to be kind of janky. I moved it into its own class so as to sort of clean up the code in the main scene, but now the GUI manager does weird things like self.scene.game.screen.width which isn’t very pretty. It’ll do, though. I track a variable storing the turret to be placed (None if it’s not in that state) and a variable that stores whether it can be placed. I check for collisions between the path tiles (I knew it would be useful!) and the sprite to check if it can be placed. I also modified the draw function of the turret to make it red or green depending on it. GUI : Generally, for the GUI, I keep a state from an Enum (basically a fancy way of storing a string for a state), and then change the UI according to that state. I designed it in a way where it only rebuilds it on command, so it won’t rebuild the whole thing every frame, in hopes to save some sort of performance. Overall, some very good progress, even if it’s not 100% visible!"}, {"post_id": 56469, "ts": "2026-08-28T07:48:03Z", "hours": 6.7975, "text": "I decided to just write the GUI from scratch. This is kind of uncharted territory for me. I tried using pygame_gui but it felt really restrictive and the use of a json file for customization is absurd to me. I made a basic element abstract class so that all elements must have an update and draw method. I then made a button class and a container class. All elements have an ID, and when a button is clicked it sends out a pygame event, which is a feature I did like from pygame_gui. I think I will end up eventually making an UI manager class, as handling the state within the scene is getting clunky and weird."}, {"post_id": 54261, "ts": "2026-08-25T04:49:22Z", "hours": 6.2936, "text": "I’ve probably progressed more in these ~6.25 hours than the rest of the project combined. Fixed the map dragging boundary checks. This was just a matter of separating the if statement into one for each axis. Now, even if the map won’t move on the y-axis, it can move on the x-axis, for example. I added an enemy. This was also pretty simple. They take in a path instead of a position, and their initial position is just the first index of the path (the path is a list of coordinates that they walk to). Vector math made this much easier, as I could just subtract the current position of the enemy from the target, and multiply it with movement speed to move it. The enemy is actually a parent class, and the specific slime in the video is a very simple subclass of it that just has some stats. Default enemy behavior is handled in that parent class. I made a customizable health bar class. The cool part about it is that it uses linear interpolation to change its color as the health changes relative to the maximum. I made a ballistic projectile parent class and an arrow subclass. It takes a position and a target, as well as other stats, and uses vector math to move to the target. When it hits an enemy it takes health from the enemy and then ceases to exist. There is a turret class and a crossbow. The turret takes a projectile class (the crossbow takes the arrow, for example). It will make a new instance of the projectile when shooting. It has a circle for a range of effect, and it will point to and shoot at enemies within the circle. The r key will toggle between drawing the areas and not. Quite a lot of progress!"}, {"post_id": 53480, "ts": "2026-08-24T01:35:31Z", "hours": 7.2239, "text": "I decided to give up on the isometry because I wasn’t really getting anything done. I have gone back to using a 2d map instead.| The map is made with the Tiled Map Editor ( https://thorbjorn.itch.io/tiled ) and saved as a JSON file. Tiled is good for visually building maps but a pain to work with. I’d much rather write a map editor from scratch, genuinely. I might do it at some point, honestly. The map is actually split up into 3 layers: the ground, where turrets can be placed; the path tiles, where enemies will walk; and the path polygon, which is a line that the enemies will follow. This allows me to have separate path and ground groups which will simplify turret-path collisions later. In theory, I will be able to make the enemies follow the polygon, too. I had to write a whole function just to parse the map JSON files. It organizes the layers into a dictionary of keys and 2-dimensional Numpy arrays. For the path polygon, it converts it from a list of dicts to tuples. It also removes any other inconsistencies with the original file and only keeps the important stuff. I made the map bigger than the screen itself so that it is draggable. The checks for boundaries are kind of buggy but it’ll do for now. This was just a matter of keeping a variable to track if the map is being dragged, keeping an offset, checking for boundaries, and checking for mouse movements. I know this was kind of a setback, but real progress can be made now!"}, {"post_id": 44368, "ts": "2026-08-10T02:37:52Z", "hours": 5.3789, "text": "Turns out, rendering isometric grids is pretty hard! I followed a tutorial by DaFluffyPotato on isometric rendering which let me understand the drawing part, but there are going to be some issues with the grid system in the future. I had an issue in which the grid wouldn’t draw half of itself, and it was because it was drawing everything to the right of the top tile outside it. I got it to work by multiplying the grid width by 2 and then adding an offset, but it’s kind of a band-aid and I want to research more into how to actually solve it. I did actually draw the sprites myself, though, and I have a grass block that looks really nice but that’ll be for later."}, {"post_id": 43389, "ts": "2026-08-08T16:28:30Z", "hours": 6.8456, "text": "I’ve been working for a while, mostly on backwards-facing stuff about the general project structure: A basic game class is used for the actual game instance, letting me manage variables and such and then pass them around. A scene manager class manages different screens in the game. Abstract methods are used to make sure scenes will always handle events, update, and render by making sure the methods are always implemented. Each scene is a class object with several methods. A config manager takes in a bunch of dataclasses and allows accessing the config like globals. Tests check to make sure that an error is raised if a wrong key is accessed, and other stuff. Player ships all inherit from one overall base ship class, and so do turret from their base turret class. Turrets have an attachment point and player ships have points to attach to. Both sprites are joined at the points so as to create a mounting system in which the same ship can use different turret configurations. The next thing to work on is to allow the turret to rotate as if it was on top of the ship, and to handle ship movement, having it rotate to face where it is moving. The following image is actually 2 different sprites: the turret (green) and the ship (below). It draws them by blitting the turret on top of the ship sprite. I have decided to change the theme of the project. The vast majority of the time in this devlog was the background, and luckily I didn’t have much progress on the actual game part. It will now be a tower defense game."}]...
|
Title: City Defenders TD by @nautrw | Stardance
D Title: City Defenders TD by @nautrw | Stardance
Devlogs:
I’ve been working for a while, mostly on backwards-facing stuff about the general project structure: A basic game class is used for the actual game instance, letting me manage variables and such and then pass them around. A scene manager class manages different screens in the game. Abstract methods are used to make sure scenes will always handle events, update, and render by making sure the methods are always implemented. Each scene is a class object with several methods. A config manager takes in a bunch of dataclasses and allows accessing the config like globals. Tests check to make sure that an error is raised if a wrong key is accessed, and other stuff. Player ships all inherit from one overall base ship class, and so do turret from their base turret class. Turrets have an attachment point and player ships have points to attach to. Both sprites are joined at the points so as to create a mounting system in which the same ship can use different turret configurations. The next thing to work on is to allow the turret to rotate as if it was on top of the ship, and to handle ship movement, having it rotate to face where it is moving. The following image is actually 2 different sprites: the turret (green) and the ship (below). It draws them by blitting the turret on top of the ship sprite. I have decided to change the theme of the project. The vast majority of the time in this devlog was the background, and luckily I didn’t have much progress on the actual game part. It will now be a tower defense game.
Turns out, rendering isometric grids is pretty hard! I followed a tutorial by DaFluffyPotato on isometric rendering which let me understand the drawing part, but there are going to be some issues with the grid system in the future. I had an issue in which the grid wouldn’t draw half of itself, and it was because it was drawing everything to the right of the top tile outside it. I got it to work by multiplying the grid width by 2 and then adding an offset, but it’s kind of a band-aid and I want to research more into how to actually solve it. I did actually draw the sprites myself, though, and I have a grass block that looks really nice but that’ll be for later.
I decided to give up on the isometry because I wasn’t really getting anything done. I have gone back to using a 2d map instead.| The map is made with the Tiled Map Editor ( https://thorbjorn.itch.io/tiled ) and saved as a JSON file. Tiled is good for visually building maps but a pain to work with. I’d much rather write a map editor from scratch, genuinely. I might do it at some point, honestly. The map is actually split up into 3 layers: the ground, where turrets can be placed; the path tiles, where enemies will walk; and the path polygon, which is a line that the enemies will follow. This allows me to have separate path and ground groups which will simplify turret-path collisions later. In theory, I will be able to make the enemies follow the polygon, too. I had to write a whole function just to parse the map JSON files. It organizes the layers into a dictionary of keys and 2-dimensional Numpy arrays. For the path polygon, it converts it from a list of dicts to tuples. It also removes any other inconsistencies with the original file and only keeps the important stuff. I made the map bigger than the screen itself so that it is draggable. The checks for boundaries are kind of buggy but it’ll do for now. This was just a matter of keeping a variable to track if the map is being dragged, keeping an offset, checking for boundaries, and checking for mouse movements. I know this was kind of a setback, but real progress can be made now!
I’ve probably progressed more in these ~6.25 hours than the rest of the project combined. Fixed the map dragging boundary checks. This was just a matter of separating the if statement into one for each axis. Now, even if the map won’t move on the y-axis, it can move on the x-axis, for example. I added an enemy. This was also pretty simple. They take in a path instead of a position, and their initial position is just the first index of the path (the path is a list of coordinates that they walk to). Vector math made this much easier, as I could just subtract the current position of the enemy from the target, and multiply it with movement speed to move it. The enemy is actually a parent class, and the specific slime in the video is a very simple subclass of it that just has some stats. Default enemy behavior is handled in that parent class. I made a customizable health bar class. The cool part about it is that it uses linear interpolation to change its color as the health changes relative to the maximum. I made a ballistic projectile parent class and an arrow subclass. It takes a position and a target, as well as other stats, and uses vector math to move to the target. When it hits an enemy it takes health from the enemy and then ceases to exist. There is a turret class and a crossbow. The turret takes a projectile class (the crossbow takes the arrow, for example). It will make a new instance of the projectile when shooting. It has a circle for a range of effect, and it will point to and shoot at enemies within the circle. The r key will toggle between drawing the areas and not. Quite a lot of progress!
I decided to just write the GUI from scratch. This is kind of uncharted territory for me. I tried using pygame_gui but it felt really restrictive and the use of a json file for customization is absurd to me. I made a basic element abstract class so that all elements must have an update and draw method. I then made a button class and a container class. All elements have an ID, and when a button is clicked it sends out a pygame event, which is a feature I did like from pygame_gui. I think I will end up eventually making an UI manager class, as handling the state within the scene is getting clunky and weird.
It took a while, but there have been some pretty big improvements. Transition to 1440x960px : I eventually found that being limited to 360x240 was going to be very limiting, specially with text because at low resolutions it looked like a jumbled mess. Thus I embarked on a pretty hard journey (not hard in retrospect) to figure out how to change the resolution but also keep the pixelated style without having to draw sprites at 4 times the resolution. The solution I ended up finding was to store a scale factor of 4 (360x4=1440, 240x4=960), and then scaling a separate surface to that resolution. Now, a surface is created with the same dimensions as the map, and everything is drawn to that surface instead of the map (I used to draw enemies, turrets, bullets, etc. onto the map because they moved together), and then that surface gets scaled. This allows me to keep the pixelated graphics on the actual game, and have crisp text on the GUI. For the offsets, I just moved the function that translated the screen coordinates to map ones from the map to the scene, and then adjusted it to take in the scale factor. Everything else works pretty much the same, as its only the image and mouse clicks getting scaled instead of rectangles. I scaled the button sprites to 32x32 to make them easier to draw, and then I have it in the config to scale them to 64x64. I decided to do that mostly for ease, because most of the other sprites are around that resolution anyway. Turret placement : I added more buttons to the GUI and added turret placement. The GUI itself is always going to be kind of janky. I moved it into its own class so as to sort of clean up the code in the main scene, but now the GUI manager does weird things like self.scene.game.screen.width which isn’t very pretty. It’ll do, though. I track a variable storing the turret to be placed (None if it’s not in that state) and a variable that stores whether it can be placed. I check for collisions between the path tiles (I knew it would be useful!) and the sprite to check if it can be placed. I also modified the draw function of the turret to make it red or green depending on it. GUI : Generally, for the GUI, I keep a state from an Enum (basically a fancy way of storing a string for a state), and then change the UI according to that state. I designed it in a way where it only rebuilds it on command, so it won’t rebuild the whole thing every frame, in hopes to save some sort of performance. Overall, some very good progress, even if it’s not 100% visible!
Lots of progress again! This one was slightly more in the background, as I started a little bit of housekeeping: Transition from Rects to FRects : FRects are the same thing as normal Rects, except that they allow for floats. This didn’t really have an impact on the game other than making it easier to work with vectors for positioning, as they also use floats. UI Changes : I changed the positioning aspect of the UI. I recreated the Rect placement system of pygame, where you can select a point (eg. top left, center, midbottom, etc.) to use to position the rect. This is very flexible, and I copied it. Now, I can do things like place text with much more ease. I also changed the colors of the UI to make it darker and overall nicer. I made it so that the user had to select a turret and then go to a menu to see the cost and other attributes of it, which will be better for the future. Coins : I added coins, which will be the temporary currency when inside the game. This will be used to buy towers and such. Outside the main game, I am planning to create another one that is used to buy skills and stuff, just to make it more realistic.
Quite a bit of progress! Pixel art revamp : The pixel art has generally improved massively. I actually took the time to get some inspiration from Google and worked on the tileset. It now includes a lake and also generally just looks better, with borders around the paths. It did take a lot of time, though. I also implemented animations for this, for the slime, and perhaps for the crossbow too. I also made a little card container for the top 2 stats. Waves : I added waves! It’s now technically a fully playable tower defense game, I guess. As of right now it’s going to crash as soon as it gets farther than Wave 3 because I don’t have anything to do after it, but soon I will add another scene for that.
I’ve kind of gotten into a slump, mostly because of school, but I think I’m back on track to finish this by the 30th of this month. Though I gotta say, it’s genuinely been slog to work on this now. I think I’m burning out Anyway, for the updates: Turret anti-aliasing : To fix the issue of turrets looking terribly when rotating, I used a new function that zooms and rotates the sprite, but also applies anti-aliasing. I can set the zoom scale to 1 and it will rotate the sprite but also anti-alias it. The jaggedness seen in other demos was because the actual map is rended in very low resolution (360x240) and then scaled up. GUI Makeover : I have given another makeover to the GUI. Now, most of it in the main game is a sleek semi-transparent black surface. I did this mostly because I couldn’t settle on a particular theme, and I didn’t know how to go about drawing such large sprites while still looking good. Waves : I finally got around to adding waves. They are a little buggy, but I ended up making a dictionary structure for the maps and put them in one big dictionary. This way, I can define which enemies spawn in which order, the interval between waves, etc. Enemies and turrets are also in their own dictionaries. Health : I added the health mechanic! It will now check if the health is equal or below 0 and send the user to a game over screen. Those screens will eventually get improved. Menus : I added a main menu, mostly because I had people trying the game, and it had to happen at some point. As of right now I am working on a map selector that harnesses that maps dictionary from earlier. (I did the devlog now because I was afraid of getting to 10h ) More menus and turrets : I added a ballista tower, which is slower but has higher range. I still have to balance it some more, and make a bolt projectile, and also probably make the tower control the damage instead of the arrow. That way I can subtract health from the enemy directly, which would fix an annoying bug where the turret shoots but the bullet doesn’t collide with the enemy, so it just stays there until it collides with another enemy. There is also another slime (the red slime) which is faster. This is to force the player to have at least 2 turrets.
I did this devlog mostly because I wanted to get a screenshot of (hopefully) six seven hours , but there has been some progress, even if it’s slow because now I have other things to do . Map Selector : I implemented a map selector, which will come in useful later on when I add more maps. I also want to do a little thing where every map is its own globe that kind of shows the outline of the map. I think it’ll look cool. Wave Control : I changed the wave logic to make it be controlled by the player. I was inspired by Bloons TD 6, and I think this makes it much better. Now, the player has as much time as they need to prepare for the next wave, or if they are feeling good they can just call in multiple waves and get it over with. Game Icon : I made a game icon, a shield with a golden cross and ruby in the center. I made it be the icon for the window, and it will be the icon for the .exe file when it’s time to ship. Canon : I added a cannon turret. It’s still kind of buggy, but the idea is that it will leave an explosion and that will also be the AoE so it can shoot multiple enemies, kind of like for crowd control. Generally, I really need to spend some time balancing the game, but I think that will come at a later time.
Ok, so a lot of progress, though it has been slow because the school year has genuinely driven a train through my productivity: Upgrades : This is the most recent thing, but basically I added upgrades. This is handled by using a list of values instead of single values when creating a new subclass of a Tower class. I track an upgrade index and increase it to change the index and some other stuff. I made some icons and added it to the tower selected menu. I will show the coins cost of the upgrade next, because I forgot to do that. I also made new sprites for the upgrades, and a complete resprite for the cannon, which badly needed it. I also remade the tower base, which looks much better now. Speed setting : I added a speed setting. This was a matter of tracking a delta time multiplier, and then multiplying it with everything that uses delta time. Remember that delta time is the amount of time between frames. It lets the developer do things like move an enemy at a movement speed independent of the frame rate, because the movement is split between the delta time. Frostspire : I added a new Frostspire tower. This is a tower that shoots icicles at enemies and makes them slower. To do the slower part, I made an effect system that gets appended to an array in the enemy. Effects have an overlay color, and will have several attributes that are applied to the enemy if it has them. As of right now, there is just a movement speed multiplier. I want to add a final venom tower that damages enemies over time, and that should be pretty easy. Tank slime : I added a tank slime, which is supposed to be the final boss of the Ground Zero map. I’m not sure if I have the inspiration to make more enemies other than slimes, or the drawing skills. Essentially it’s just a much bigger slime (takes up the whole width of the path) and green, and slower, and has a lot of health. I have to take the time to balance everything though, because 2 of the basic crossbows can kill it as of right now.
I am very glad stardance got extended! This definitely eases the pressure A LOT . Bit of a shorter devlog so as to not accidentally pass the 10h deadline. Here are the updates: Venom shooter : The venom shooter is a plant that shoots venom. It will poison the enemy. I did this through another effect. The recording doesn’t show it’s full potential, because I kind of force pushed to the repository and now I lost the change, but I have it on another computer. Essentuially, the damage over time is going to increase with the update instead of staying static and linked to the effect. More tiles! : I added the stone path tiles. They still need a little bit of work, as some areas don’t fully connect. The nice thing about working with stone sprites is that the textures connect pretty well regardless, but it’s still something I need to fix. New Map : I added a new map, Frontier. This one is just a somewhat harder version of Ground Zero, mostly to test out if the map selector and the new tiles actually worked. The map selector just had to be tweaked to refresh the UI when a new button is clicked, which is only one line, but otherwise everything went smoothly. Ghost : I added a new enemy, the Ghost. The ghost looks like a tortured soul, and at the moment he hasn’t received proper stats, so he’s just a clone of the slime. I want to make it somewhere in between the slime and fast slime. It uses a lot more frames than the other enemies to make it somewhat smooth. Ok chat I think we got this in the bag im tryna get that bambu a1 3d printer frfr i think i can get it now that the deadline has been increased tysm stardance devs!!!!
Progress has been (very) slow but there’s some more new content: Crabs & Bat : I added crab enemies. There is a normal crab that is like a slime and then an armored crab (not shown in video) that is bigger and meant to be a boss. There is also a bat enemy. Pause Menu : Theere is a pause menu now. It allows the user to retry the map or go back to the main menu. I am finally making use of the other features of the scene manager. It’s a different scene but it’s rendered on top of the main game scene. I had to modify the scene manager to draw each scene on top of the last one in the stack. Otherwise, this is just the same usage of my GUI system. Rebalances : I did some rebalancing of the game. Towers generally cost different amounts of coins now and do different amounts of damage. I’ll probably have to do it again by the end of the project but this will do for now. Music : I am in the process of adding music. I am getting them from https://opengameart.org and crediting all publishers. I have a system where it will queue music files from a playlist and play those in sequence. They are pretty long files, but just in case. I’m probably forgetting some stuff (last time I touched this was like a week ago), but those are the major things.
A little bit faster progress now. Tower Shop : I have started work on a tower shop. I want it to be from the POV of the player looking into a medieval stall. As of right now, I’m still working on drawing it, and also it’s still hidden and non-functional. I edited all the towers to have a requirement of another tower, so as to make it a progression later on, Data Saving : I am going to start implementing a save system. For this, I just put some values into a data class and then implemented a way to save it to and load it from JSON. Molten Lands : There is a new map now, the molten lands. I also made a lava slime which is a bit stronger than the other enemies except for the bosses. It took a while to draw the sandy tiles for it, but I feel as though I’ve gotten much better at drawing than before. Logging : I added logging. This probably should’ve been added earlier, but this will help tremendously to fix any bugs in the code. For now, I am logging pretty much everything that doesn’t happen every frame, like when an enemy dies or the user clicks on a button.
I’ve started work on a tower shop. I spent several hours drawing the background, but I think it came out looking really good. It only took so much time, which is why I’m making the log now. I also used a template human model for the merchant. I am going to show the different upgrades on the menu. I haven’t added the buy functionality yet, but that will probably be pretty easy. I got some chill guitar music from opengameart.
I’ve been working on 2 major things that look small but are actually pretty big: Currency buttons : I’ve had to do some major revamps to several parts of the GUI system, but now I have buttons that show the currency. I am now using these for the upgrades, buy towers, and the new tower shop with the shards. I am now allowing for icon elements to be passed into the Button class. This allows for custom positioning, and thus this new way of buttons. Then I had to change the way that elements refreshed in the GUI managers. It took a while to figure out, but now they will be red if there isn’t enough currency. Main menu background : Art is incredibly time-consuming for me, and I keep scrapping designs but I think this one is the one and the one I’ll stick with for the finished thing.
I’ve been kind of behind again, but I think I’ve made some cool stuff. Tower shop is now an official mechanic. I just remembered I need to set the default shards back to 0, but it’s fully working now. Main menu : I ended up setting the background of it to a stone wall, which to be honest is just taken from the tower shop background. I was wasting too much time on drawing. Map selector music : I finally got some music for the map selector. It’s some public domain guitar music like the tower shop, but different. I think it sounds pretty nice. Victory & defeat scene revamp : I revamped the victory and defeat scenes. Now, they show a banner in the center of the screen and the amount of shards the player receives. A defeat will get 1/2 of the shards reward, to allow them to actually improve. 3x speed setting : While waiting for the enemies to get to the end so I could test the defeated scene, I got tired and decided to add a new 3x speed button. I ended up refactoring the whole thing but now the code is much cleaner.
There’s been a lot of progress, I think. The game is pretty much done at this point. What’s left is just to balance the game. Renamed Ground Zero to Magic Forest : Magic Forest sounds like a much cooler name that fits the theme of the game, so I just renamed it. Data Saving : I finally got around to saving the data when closing. I just made a function that closed the game and then saved the data, and then any pathway that exits the game just calls that function. Save and quit : I added a save and quit feature to the pause menu. I am now tracking a state inside the pause menu GUI manager. There is first a save and quit option, and then that leads to a second menu that warns the player and asks them to confirm their choice. There is also an X button in the main menu that straight up quotes the game, too. Archipelago : I made a new map, the Archipelago. This follows a thin strip of land on which the enemies walk. I actually had to rework how the map system worked, adding an option to draw the ground on top or below the blocked layer. I also had to add an extra check on the logic for determining if a player can place a tower. Flamethrower : I added a new flamethrower tower. As of right now, it has the same stats as the cannon. I am going to be balancing the whole thing soon. This is going to be the final tower I think.
Ok, so I actually lied when I said the game was done. I still have a lot of balancing to do, and with this have come some other major changes. Particle System : I added a particle system (unfortunately they go very fast and I wasn’t able to capture it). This was originally because the effect overlay colors looked really bad. Now, particles with rise up from the enemy with an effect and then fade out over time. I then figured out that I could actually make the overlay color draw correctly by using the RGBA multiplication blending method. It still looks way cooler now. Balancing : Many towers have been nerfed, especially the cannon. I am fortunate to have people that can playtest my game. It’s definitely gotten much harder. I’m still working on it, though. The point now is that the balancing of the towers and when the player unlocks them has lead me to the mechanic of unlocking one tower per map. Thus, I have created 3 more maps because there are 7 towers in total. I might have to make a final one for the flamethrower to be used. I’ve spent A LOT of time balancing since last devlog, and I think it shows lol.
I added a credit scene, and now the project has got to be most definitely ready to ship I need them stardust 😭
As requested by some playtesters I quickly added an instructions page with the basic controls of the game. It’s not great but hopefully it works. I’ve also been fiddling a lot trying to get the installation commands working and trying the executables on several virtual machines. The game is done and I’m going to ship!
Ships:
I made City Defenders TD (ironically named since there aren’t any cities). This is a medieval and fantasy-inspired tower defense game built entirely with Pygame-CE. I drew every single sprite manually using Aseprite and implemented my very own custom GUI system from scratch. There are several maps and several towers to unlock by progressing through the game. I hope you enjoy this project as much as I enjoyed making it....
|
1793566577.9959986
|
1793652977.9959986
|
|
39908
|
FFvert by @Nahida4479 | Stardance
|
Nahida4479
|
2
|
28.0
|
400
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T02:46:36Z", "hours": 17.0, "multiplier": 15.92, "payout": 279, "blessing": "neutral", "text": "Hello everyone, I have finished my FFvert project. In this project I built a system based on ffmpeg , @imgly/background-removal-node , and youtube-dl-exec , which enables converting images and videos, removing image backgrounds, and downloading YouTube videos. Conversion video system For this system I use the ffmpeg package. This system supports 6 video and 1 audio formats: gif mov mp3 mp4 avi mkv wmv The supported resolutions: 4K, 1440p, 1080p, 720p, 480p I’m proud that the GIF format additionally generates a color palette for better color accuracy. Conversion image system This system is based on the ffmpeg package. Supports 7 image formats: png jpg webp bmp tiff ico qoi Remove background system This is a special option in the FFvert panel when you upload an image. The background removal system is based on the @imgly/background-removal-node package. The AI model isnet_fp16 is downloaded from IMG.LY servers and runs locally. YouTube Downloader system The YouTube Downloader is based on the youtube-dl-exec package. The file is downloaded and converted using FFmpeg for the user-selected format and resolution. Supported 12 formats: MP4 MP3 MOV GIF MKV WEBM AAC M4A FLAC WAV OPUS VORBIS The supported resolutions: 1440p, 1080p, 720p, 480p, 360p, 240p, 144p How to use You can try my project at: convert.nahida4479.org If you prefer to run it locally, I have 2 options for you :) You can run the image using a pre-built Docker image. docker pull ghcr.io/nahida4479/ffvert:latest docker run -p 3003:3003 ghcr.io/nahida4479/ffvert:latest or build it yourself git clone https://github.com/Nahida4479/FFvert.git cd FFvert docker build -t ffvert . docker run -p 3003:3003 ffvert Summary I spent a lot of time on this project and thoroughly enjoyed studying CSS and improving my JavaScript skills. I hope you like this project. Good luck with your own projects :)", "repo": "https://github.com/Nahida4479/FFvert/tree/app", "demo": "https://convert.nahida4479.org/"}, {"ship_num": 2, "ts": "2026-08-01T21:15:51Z", "hours": 11.0, "multiplier": 11.3, "payout": 121, "blessing": "neutral", "text": "FFvert is a web app that lets you convert an uploaded file into a different format. I spent a lot of time on the design that was actually where I struggled the most. I’m proud that the conversion system works perfectly, and of the quality of the converted GIFs. My app is live at convert.nahida4479.org, so anyone can try it out.", "repo": "https://github.com/Nahida4479/FFvert/tree/app", "demo": "https://convert.nahida4479.org/"}]...
|
[{"post_id": 55297, "ts": "202 [{"post_id": 55297, "ts": "2026-08-27T01:21:28Z", "hours": 3.6989, "text": "Devlog 12 New Built and published a Docker container on GitHub Added a progress bar for YouTube Downloader Disabled the OK button until the file is ready Adjusted YouTube Downloader GUI for mobile devices Added a 2GB file upload limit to FFvert Updated README.md Docker You can run the image using a pre-built Docker image. docker pull ghcr.io/nahida4479/ffvert:latest docker run -p 3003:3003 ghcr.io/nahida4479/ffvert:latest or build it yourself git clone https://github.com/Nahida4479/FFvert.git cd FFvert docker build -t ffvert . docker run -p 3003:3003 ffvert"}, {"post_id": 54150, "ts": "2026-08-24T23:50:59Z", "hours": 2.6828, "text": "Devlog 11 New Section How to use Change name yt-dlp –> YouTube Downloader Full YouTube video download system YouTube download video system: I use the node package youtube-dl-exec for this system. The file is downloaded by the backend and converted using FFmpeg for the user-selected format. For GIF files FFmpeg generates a special palette for better color accuracy."}, {"post_id": 53452, "ts": "2026-08-24T00:37:39Z", "hours": 2.7008, "text": "Devlog 10 New GUI Text Input (for YouTube video link) Format List Resolution List OK Button Text input: Input where you will paste a YouTube video link. Format list: Supported formats: MP4 , MP3 , MOV , GIF , MKV , WEBM , AAC , M4A , FLAC , WAV , OPUS , VORBIS . Resolution list: Supported resolutions: 1440p , 1080p , 720p , 480p , 360p , 240p , 144p Plans I plan to implement a full video download system based on yt-dlp , with support for both 16:9 and 9:16 video formats."}, {"post_id": 52705, "ts": "2026-08-23T00:12:51Z", "hours": 1.4672, "text": "Devlog 9 New Added background removal system based on @imgly/background-removal-node Added typing animation for text Click or drag video or image file here Changed example files animation to a new color animation"}, {"post_id": 51999, "ts": "2026-08-22T00:38:23Z", "hours": 3.5158, "text": "Devlog 8 New FFvert GUI Added mobile devices support"}, {"post_id": 51361, "ts": "2026-08-20T23:51:37Z", "hours": 1.8914, "text": "Devlog 7 New New supported image files (TIFF, ICO, QOI) Added a CSS animation to the format examples Full image conversion system Automatically detects if you uploaded an image or a video and shows the right options Updated README.md (supported image files) Publishes new Github releases"}, {"post_id": 50654, "ts": "2026-08-19T22:31:54Z", "hours": 1.5422, "text": "Devlog 6 New Added support for uploading images, with format options adapting automatically Unique output file name Default file resolution option Default file resolution system The output file has the same resolution as the input file (for example, a 1920x1080 input produces a 1920x1080 output)"}, {"post_id": 39129, "ts": "2026-08-01T20:52:01Z", "hours": 0.7492, "text": "Final version"}, {"post_id": 39082, "ts": "2026-08-01T19:32:28Z", "hours": 2.7336, "text": "New design"}, {"post_id": 38590, "ts": "2026-08-01T02:14:00Z", "hours": 1.5681, "text": "Add fun fact and high quality GIF system"}, {"post_id": 37856, "ts": "2026-07-30T20:34:54Z", "hours": 4.0483, "text": "New resolution and download systems :)"}, {"post_id": 35323, "ts": "2026-07-26T17:19:03Z", "hours": 1.6556, "text": "Basic convert system"}]...
|
Title: FFvert by @Nahida4479 | Stardance
Devlogs: Title: FFvert by @Nahida4479 | Stardance
Devlogs:
Basic convert system
New resolution and download systems :)
Add fun fact and high quality GIF system
New design
Final version
Devlog 6 New Added support for uploading images, with format options adapting automatically Unique output file name Default file resolution option Default file resolution system The output file has the same resolution as the input file (for example, a 1920x1080 input produces a 1920x1080 output)
Devlog 7 New New supported image files (TIFF, ICO, QOI) Added a CSS animation to the format examples Full image conversion system Automatically detects if you uploaded an image or a video and shows the right options Updated README.md (supported image files) Publishes new Github releases
Devlog 8 New FFvert GUI Added mobile devices support
Devlog 9 New Added background removal system based on @imgly/background-removal-node Added typing animation for text Click or drag video or image file here Changed example files animation to a new color animation
Devlog 10 New GUI Text Input (for YouTube video link) Format List Resolution List OK Button Text input: Input where you will paste a YouTube video link. Format list: Supported formats: MP4 , MP3 , MOV , GIF , MKV , WEBM , AAC , M4A , FLAC , WAV , OPUS , VORBIS . Resolution list: Supported resolutions: 1440p , 1080p , 720p , 480p , 360p , 240p , 144p Plans I plan to implement a full video download system based on yt-dlp , with support for both 16:9 and 9:16 video formats.
Devlog 11 New Section How to use Change name yt-dlp –> YouTube Downloader Full YouTube video download system YouTube download video system: I use the node package youtube-dl-exec for this system. The file is downloaded by the backend and converted using FFmpeg for the user-selected format. For GIF files FFmpeg generates a special palette for better color accuracy.
Devlog 12 New Built and published a Docker container on GitHub Added a progress bar for YouTube Downloader Disabled the OK button until the file is ready Adjusted YouTube Downloader GUI for mobile devices Added a 2GB file upload limit to FFvert Updated README.md Docker You can run the image using a pre-built Docker image. docker pull ghcr.io/nahida4479/ffvert:latest docker run -p 3003:3003 ghcr.io/nahida4479/ffvert:latest or build it yourself git clone https://github.com/Nahida4479/FFvert.git cd FFvert docker build -t ffvert . docker run -p 3003:3003 ffvert
Ships:
FFvert is a web app that lets you convert an uploaded file into a different format. I spent a lot of time on the design that was actually where I struggled the most. I’m proud that the conversion system works perfectly, and of the quality of the converted GIFs. My app is live at convert.nahida4479.org, so anyone can try it out.
Hello everyone, I have finished my FFvert project. In this project I built a system based on ffmpeg , @imgly/background-removal-node , and youtube-dl-exec , which enables converting images and videos, removing image backgrounds, and downloading YouTube videos. Conversion video system For this system I use the ffmpeg package. This system supports 6 video and 1 audio formats: gif mov mp3 mp4 avi mkv wmv The supported resolutions: 4K, 1440p, 1080p, 720p, 480p I’m proud that the GIF format additionally generates a color palette for better color accuracy. Conversion image system This system is based on the ffmpeg package. Supports 7 image formats: png jpg webp bmp tiff ico qoi Remove background system This is a special option in the FFvert panel when you upload an image. The background removal system is based on the @imgly/background-removal-node package. The AI model isnet_fp16 is downloaded from IMG.LY servers and runs locally. YouTube Downloader system The YouTube Downloader is based on the youtube-dl-exec package. The file is downloaded and converted using FFmpeg for the user-selected format and resolution. Supported 12 formats: MP4 MP3 MOV GIF MKV WEBM AAC M4A FLAC WAV OPUS VORBIS The supported resolutions: 1440p, 1080p, 720p, 480p, 360p, 240p, 144p How to use You can try my project at: convert.nahida4479.org If you prefer to run it locally, I have 2 options for you :) You can run the image using a pre-built Docker image. docker pull ghcr.io/nahida4479/ffvert:latest docker run -p 3003:3003 ghcr.io/nahida4479/ffvert:latest or build it yourself git clone https://github.com/Nahida4479/FFvert.git cd FFvert docker build -t ffvert . docker run -p 3003:3003 ffvert Summary I spent a lot of time on this project and thoroughly enjoyed studying CSS and improving my JavaScript skills. I hope you like this project. Good luck with your own projects :)...
|
1793566568.7327454
|
1793652968.7327454
|
|
52039
|
Polaroid Booth by @Aamina | Stardance
|
Aamina
|
1
|
2.0
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T23:05:54Z", "hours": 2.0, "multiplier": 15.93, "payout": 38, "blessing": "neutral", "text": "I built Polaroid Booth, a browser-based photo booth app using HTML, CSS, and JavaScript that captures pictures from your webcam and turns them into realistic polaroid-style snapshots, complete with a white border and a randomly rotated tilt. The trickiest part was handling the camera access and capture logic,getting the video feed to reliably render onto a canvas and convert into a clean image without lag or permission issues took some trial and error, along with fine-tuning the CSS rotation so the photos looked naturally scattered instead of just messy.", "repo": "https://github.com/Aaminanad/Polaroid-Booth", "demo": "https://aaminanad.github.io/Polaroid-Booth/"}]...
|
[{"post_id": 51333, "ts": "202 [{"post_id": 51333, "ts": "2026-08-20T22:46:48Z", "hours": 1.3739, "text": "DEVLOG #2 JavaScript (Vanilla): Camera access via navigator.mediaDevices.getUserMedia(), drawing video frames to canvas, converting canvas to image, DOM manipulation, randomized rotation logic, download functionality the cam is working yayayayayy!!"}, {"post_id": 51235, "ts": "2026-08-20T19:30:08Z", "hours": 0.9972, "text": "DEVLOG #1: Worked on HTML and CSS: Built the whole Polaroid Booth interface from scratch in a single HTML file. The HTML sets up a retro camera viewfinder (element), a big red snap button, and a gallery wall where Polaroids pile up. In CSS I added a blue background, a camera module (rounded corners, shadows, a pressable button with a 3D click effect), and each Polaroid card gets its own random rotation via a CSS custom property (–rot) so the wall looks like a real messy photo table."}]...
|
Title: Polaroid Booth by @Aamina | Stardance
Devl Title: Polaroid Booth by @Aamina | Stardance
Devlogs:
DEVLOG #1: Worked on HTML and CSS: Built the whole Polaroid Booth interface from scratch in a single HTML file. The HTML sets up a retro camera viewfinder (element), a big red snap button, and a gallery wall where Polaroids pile up. In CSS I added a blue background, a camera module (rounded corners, shadows, a pressable button with a 3D click effect), and each Polaroid card gets its own random rotation via a CSS custom property (–rot) so the wall looks like a real messy photo table.
DEVLOG #2 JavaScript (Vanilla): Camera access via navigator.mediaDevices.getUserMedia(), drawing video frames to canvas, converting canvas to image, DOM manipulation, randomized rotation logic, download functionality the cam is working yayayayayy!!
Ships:
I built Polaroid Booth, a browser-based photo booth app using HTML, CSS, and JavaScript that captures pictures from your webcam and turns them into realistic polaroid-style snapshots, complete with a white border and a randomly rotated tilt. The trickiest part was handling the camera access and capture logic,getting the video feed to reliably render onto a canvas and convert into a clean image without lag or permission issues took some trial and error, along with fine-tuning the CSS rotation so the photos looked naturally scattered instead of just messy....
|
1793566562.2839882
|
1793652962.2839882
|
|
59594
|
Monochrome text editor by @alessandro_09 | Stardan Monochrome text editor by @alessandro_09 | Stardance...
|
alessandro_09
|
1
|
35.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T21:26:45Z", "hours": 35.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first ever text editor entirely in C++! Monochrome is a light-weight text editor made entirely in C++ thanks to the raylib and raygui library! It has basic features such as file loading, saving, editing, scroll panel, file renaming and a file dialog to choose what file to load! It was a bit challenging since it required a lot of knowledge to know how to show text, store it, load and save the files. Especially making the GUI since it needs to have anchors, have a kinda dynamic layout if I resize the window. But I still manage to do it! I’m proud of what I made and I hope that other people would love this project as much as I do, as I find pretty interesting how text editor works! One thing that people should know before trying is that macOS is NOT currently supported and it probably won’t work at ALL . I don’t have a Mac to test it on so I don’t wanna risk it.. Sorry about it. Thanks for everything and I hope that you’ll like my project!", "repo": "https://github.com/fireslash88/MonochromeTextEditor", "demo": "https://github.com/fireslash88/MonochromeTextEditor/releases/tag/v1.0.0"}]...
|
[{"post_id": 85055, "ts": "202 [{"post_id": 85055, "ts": "2026-10-30T21:06:40Z", "hours": 3.8942, "text": "It’s time!! Okay it’s finally time to get everything ready and ship it!! And finally.. name reveal! Monochrome Text Editor!! The reason for this name? No clue. I actually had no idea how to call it.. and while looking around the room I noticed a notebook of mine. It’s from a brand called Monocromo here in Italy, and it literally translate into Monochrome.. So I just decided to go for that randomly, lol. Anyway, I’m so happy to have finally finished my project! Hope it’ll get reviewed in time to get something from the shop. Thanks for everything and thank you Hack club for this incredible event!"}, {"post_id": 84835, "ts": "2026-10-30T12:53:52Z", "hours": 4.8525, "text": "Day 7 - ALMOST DONEE Worked a lot again and I’m BASICALLY DONE YEAHHH!!! I just need to clean up some things, fix parts of the GUI that are still bad and then do a quick clean up of the project folder since it’s ass ❤️ Anyway, I managed to add a file dialog option to choose what file to load (taken from raygui examples, ty raysan..) but I didn’t manage to add some basic features… such as copy and paste (mainly because I’m not sure if I can manage in time even because it would imply adding text selection… I’ll work on fixing these things first and then I’ll think about adding Copy and paste, maybe even an option to Rename the file.. but I don’t know.. OH YEAH, I also managed to add a scrolling bar so it’s a great advancement! About AI disclosure, I forgot to talk about it… I used some AI just for debugging the scrolling bar and I think I’ll use it to fix the CMakeLists.txt . I want to try and also ship this project to Linux, since I have a burner laptop that I can use to test if it works! So I’ll probably get a help from AI to set up GitHub Actions too. I never used it.. (I’m sorry for Mac users but I have no idea how to build for your platform and I don’t have any Mac to try it by myself first.. So I’m probably skipping it.)"}, {"post_id": 83939, "ts": "2026-10-28T22:38:05Z", "hours": 6.7981, "text": "Day 6 - Am I cooked? Okay, so I’ve been working a lot on the project these days and I’m proud to say that I managed to get Save and File loading working yayyy!1!1! OK NOW I GOTTA LOCK IN REAL FAST FOR THE NEW GUI. Gui rework 2??? Yeah exactly, working on a new and already (almost) functional GUI. It’s almost done cause I need to connect all the features and make it actually work. I also managed to add a file dialog to choose what file to load, but I didn’t create it. It’s an example made from raysan on the examples from raygui! It’s so pretty and works really good. So like I said, I just need to connect all the features together and I’m ready to ship it! (Gotta be fast since Stardance is ending in 2 days.. oh god.) Almost forgot.. I STILL NEED TO WRITE THE DAMN README.md Small notice, in the second screenshot, there’s an option in the little panel called “Save file as”, I’ll probably won’t add it in the ship cause I have no idea how to do it at the moment.."}, {"post_id": 81826, "ts": "2026-10-22T17:22:50Z", "hours": 2.1894, "text": "Day 5 - First GUI Rework!! I was a bit busy so I didn’t post a devlog yesterday, but anyway.. I FINALLY DID THE FIRST GUI REWORK!!! It took some time to plan and layout everything and it’s still not perfect. I’ll keep working onto it and make it better. I wanted to make a better one real quick just because I was bored. Useless to say, I’m using Raygui (again) for the GUI! I know that there are probably better libraries but I really love all the raylib ecosystem and I just want to learn even more about it! Thank god the creatore of raygui made a layout software for it, otherwise it would have been a PAIN to make everything look good. Anyway, like I said, everything is still a WORK IN PROGRESS . What’s next? Now, it’s time to work on file loading, saving, editing and creating! After that, I’ll probably work on the GUI again since I want to add styles, some menus and other things. I’m not sure if I’ll add more things after the GUI, I’m not sure cause Stardance is ending soon so I want to ship a working software before it ends so I’ll have to be fast. I’ll keep working on this project anyway cause I’m starting to love it a lot so I want to make it even better! SCREENSHOTSSS!!! YEAH"}, {"post_id": 81305, "ts": "2026-10-20T19:19:00Z", "hours": 4.5569, "text": "Day 4 - WE ARE SO BACK Okay, it’s been like… 27 days… I know yeah, I was quite busy and didn’t pay attention at stardance at all. But I kept working on the project from time to time But now.. I decided to finally lock in! After some time, I finally managed to get it work nicely and has basic functions! MULTI LINE TEXT!!! Hell yeah! I can finally write multi line text without problems! It should work good but could give some errors from time to time. Not sure.. Anyway, I also added a cursor, two debug optiosn to just see the actual cursor position cause on the screen it shows the value + 1 and then a way to see the grid where the text goes! I also added the space when you press Tab (need to adjust it cause I think it’s not the right way to implement it) Another thing I added is the possibility to move the cursor with the arrow keys! And that’s pretty much all for now… yeah. What I’m working on now? Now, I’ll start working on a way to add the scrollbar, maybe a way to select with the mouse where the cursor go and maybe I’ll start adding a way to create, edit and save files… Hope I’ll do it in time. Oh, also I’ll start working on a GUI hopefully. As of now it’s basically ass and it’s only with a light theme. If I manage, I could try to add dark theme. Thank you for everything! Here’s some screenshot of the program!"}, {"post_id": 72886, "ts": "2026-09-23T22:58:08Z", "hours": 4.6356, "text": "Day 3 - It’s almost here.. Okay.. since I went back to school I didn’t have time and even forgot to do devlogs to be fair. Yeah I know.. I’m lazy and pretty forgetful.. BUT WORRY NOT AS STARDANCE HAS BEEN EXTENDED UNTIL 31st OF OCTOBER!! So I have enough time to continue, polish off and ship this project of mine! Anyway, even though I haven’t made any significant devlog, it doesn’t mean I haven’t done anything… Actually, I managed to refactor pretty much the entire code to use OOP and classes! yayyy! Somehow I managed to learn the basics of OOP and as of now it’s actually quite nice and easier to work with, I guess. Other than that.. I’m actually even closer to get it done than ever! As of now, I’m writing a TextBuffer class that will handle all of the attributes and methods regarding the text modification! There’s still a lot to add but eventually, I’m getting there… In the next devlogs I’ll try and explain the structure more and maybe, if I’m not lazy, in about 3-4 devlogs I might actually be able to finish the TextBuffer class and could easily write multi-line text!!! (Devlogs will probably start again from monday cause Im too busy this weekend.) See y’all on the next devlog!"}, {"post_id": 67187, "ts": "2026-09-13T07:48:26Z", "hours": 2.3928, "text": "Day 2 - I honestly don’t know Okay. It’s been 4 days and I haven’t made too much progress since I was busy doing things and I need to go back to school tomorrow so I’m going to be even more busier. Quick recap What did I do? I’m trying to actually make the user be able to write… It kinda worked at the start, but only in one line so know I’m trying to figure out a way to do multiple lines as it should. Rewriting the entire code And I’m also deciding if I should rewrite the entire code to use OOP and check if it’s better but it’s going to be a pain. Even because I never used OOP in C++ to be fair but I’m gonna give it a try anyway. Respectfully? I’m going crazy"}, {"post_id": 64929, "ts": "2026-09-09T17:26:30Z", "hours": 5.5047, "text": "Day 1 - First devlog!! And just like I said before… There we are with my new project!! Yayy! My custom text editor! The project will be a simple text editor coded in C++! Since I still want to work on raylib, it will be based on that, cause I don’t want to learn OpenGL yet and do everything from 0… And even because I truly love the raylib library! Features? So, at this moment I’m still not sure of what I’m gonna add so I’ll start listing the features once I have a decent base of the project since it’s still a mess! If you have any idea or feature that you’d like, please, don’t hesitate to request it! I’m open to feedback of all kind! So just make a comment or shoot a DM! Why a text editor?… Isn’t that quite difficult? Yeah.. It is, as a matter of fact, with this devlog I logged about 5h 27mins cause nothing worked at first and there’s basically nothing. I can just press Enter and Backspace to add and remove lines. That’s all. But being a programmer is a journey that never ends. You never stop learning new things, especially from the start, or at least this is my opinion. I don’t care if the project is messy, bad, unoptimized and probably worse compared to others! My goal is to learn to make better things, and the only way to do it is to create things and push yourself even harder. Being a programmer is something that I truly love and I’m always looking to get better and learn new things, especially as a beginner. Even if it means trying to make hard projects like this one and maybe failing.. But I don’t see it as a failure, I see it as a way to get better and improve myself. And I truly hope that everyone can do the same. Do whatever you want and always believe in yourself. Last thing Alright, enough with the speech and let’s put and end to this devlog. I’ll work on creating the repo later and I’m gonna show a screenshot of the status of the project at this exact moment! Another thing… You may have notice that the project’s name has “untitled”, that’s because I don’t have a name for my software.. So please, if you have any suggestion on the name write them on the comments! Thank you everyone and see y’all on the next devlog!"}]...
|
Title: Monochrome text editor by @alessandro_09 | Title: Monochrome text editor by @alessandro_09 | Stardance
Devlogs:
Day 1 - First devlog!! And just like I said before… There we are with my new project!! Yayy! My custom text editor! The project will be a simple text editor coded in C++! Since I still want to work on raylib, it will be based on that, cause I don’t want to learn OpenGL yet and do everything from 0… And even because I truly love the raylib library! Features? So, at this moment I’m still not sure of what I’m gonna add so I’ll start listing the features once I have a decent base of the project since it’s still a mess! If you have any idea or feature that you’d like, please, don’t hesitate to request it! I’m open to feedback of all kind! So just make a comment or shoot a DM! Why a text editor?… Isn’t that quite difficult? Yeah.. It is, as a matter of fact, with this devlog I logged about 5h 27mins cause nothing worked at first and there’s basically nothing. I can just press Enter and Backspace to add and remove lines. That’s all. But being a programmer is a journey that never ends. You never stop learning new things, especially from the start, or at least this is my opinion. I don’t care if the project is messy, bad, unoptimized and probably worse compared to others! My goal is to learn to make better things, and the only way to do it is to create things and push yourself even harder. Being a programmer is something that I truly love and I’m always looking to get better and learn new things, especially as a beginner. Even if it means trying to make hard projects like this one and maybe failing.. But I don’t see it as a failure, I see it as a way to get better and improve myself. And I truly hope that everyone can do the same. Do whatever you want and always believe in yourself. Last thing Alright, enough with the speech and let’s put and end to this devlog. I’ll work on creating the repo later and I’m gonna show a screenshot of the status of the project at this exact moment! Another thing… You may have notice that the project’s name has “untitled”, that’s because I don’t have a name for my software.. So please, if you have any suggestion on the name write them on the comments! Thank you everyone and see y’all on the next devlog!
Day 2 - I honestly don’t know Okay. It’s been 4 days and I haven’t made too much progress since I was busy doing things and I need to go back to school tomorrow so I’m going to be even more busier. Quick recap What did I do? I’m trying to actually make the user be able to write… It kinda worked at the start, but only in one line so know I’m trying to figure out a way to do multiple lines as it should. Rewriting the entire code And I’m also deciding if I should rewrite the entire code to use OOP and check if it’s better but it’s going to be a pain. Even because I never used OOP in C++ to be fair but I’m gonna give it a try anyway. Respectfully? I’m going crazy
Day 3 - It’s almost here.. Okay.. since I went back to school I didn’t have time and even forgot to do devlogs to be fair. Yeah I know.. I’m lazy and pretty forgetful.. BUT WORRY NOT AS STARDANCE HAS BEEN EXTENDED UNTIL 31st OF OCTOBER!! So I have enough time to continue, polish off and ship this project of mine! Anyway, even though I haven’t made any significant devlog, it doesn’t mean I haven’t done anything… Actually, I managed to refactor pretty much the entire code to use OOP and classes! yayyy! Somehow I managed to learn the basics of OOP and as of now it’s actually quite nice and easier to work with, I guess. Other than that.. I’m actually even closer to get it done than ever! As of now, I’m writing a TextBuffer class that will handle all of the attributes and methods regarding the text modification! There’s still a lot to add but eventually, I’m getting there… In the next devlogs I’ll try and explain the structure more and maybe, if I’m not lazy, in about 3-4 devlogs I might actually be able to finish the TextBuffer class and could easily write multi-line text!!! (Devlogs will probably start again from monday cause Im too busy this weekend.) See y’all on the next devlog!
Day 4 - WE ARE SO BACK Okay, it’s been like… 27 days… I know yeah, I was quite busy and didn’t pay attention at stardance at all. But I kept working on the project from time to time But now.. I decided to finally lock in! After some time, I finally managed to get it work nicely and has basic functions! MULTI LINE TEXT!!! Hell yeah! I can finally write multi line text without problems! It should work good but could give some errors from time to time. Not sure.. Anyway, I also added a cursor, two debug optiosn to just see the actual cursor position cause on the screen it shows the value + 1 and then a way to see the grid where the text goes! I also added the space when you press Tab (need to adjust it cause I think it’s not the right way to implement it) Another thing I added is the possibility to move the cursor with the arrow keys! And that’s pretty much all for now… yeah. What I’m working on now? Now, I’ll start working on a way to add the scrollbar, maybe a way to select with the mouse where the cursor go and maybe I’ll start adding a way to create, edit and save files… Hope I’ll do it in time. Oh, also I’ll start working on a GUI hopefully. As of now it’s basically ass and it’s only with a light theme. If I manage, I could try to add dark theme. Thank you for everything! Here’s some screenshot of the program!
Day 5 - First GUI Rework!! I was a bit busy so I didn’t post a devlog yesterday, but anyway.. I FINALLY DID THE FIRST GUI REWORK!!! It took some time to plan and layout everything and it’s still not perfect. I’ll keep working onto it and make it better. I wanted to make a better one real quick just because I was bored. Useless to say, I’m using Raygui (again) for the GUI! I know that there are probably better libraries but I really love all the raylib ecosystem and I just want to learn even more about it! Thank god the creatore of raygui made a layout software for it, otherwise it would have been a PAIN to make everything look good. Anyway, like I said, everything is still a WORK IN PROGRESS . What’s next? Now, it’s time to work on file loading, saving, editing and creating! After that, I’ll probably work on the GUI again since I want to add styles, some menus and other things. I’m not sure if I’ll add more things after the GUI, I’m not sure cause Stardance is ending soon so I want to ship a working software before it ends so I’ll have to be fast. I’ll keep working on this project anyway cause I’m starting to love it a lot so I want to make it even better! SCREENSHOTSSS!!! YEAH
Day 6 - Am I cooked? Okay, so I’ve been working a lot on the project these days and I’m proud to say that I managed to get Save and File loading working yayyy!1!1! OK NOW I GOTTA LOCK IN REAL FAST FOR THE NEW GUI. Gui rework 2??? Yeah exactly, working on a new and already (almost) functional GUI. It’s almost done cause I need to connect all the features and make it actually work. I also managed to add a file dialog to choose what file to load, but I didn’t create it. It’s an example made from raysan on the examples from raygui! It’s so pretty and works really good. So like I said, I just need to connect all the features together and I’m ready to ship it! (Gotta be fast since Stardance is ending in 2 days.. oh god.) Almost forgot.. I STILL NEED TO WRITE THE DAMN README.md Small notice, in the second screenshot, there’s an option in the little panel called “Save file as”, I’ll probably won’t add it in the ship cause I have no idea how to do it at the moment..
Day 7 - ALMOST DONEE Worked a lot again and I’m BASICALLY DONE YEAHHH!!! I just need to clean up some things, fix parts of the GUI that are still bad and then do a quick clean up of the project folder since it’s ass ❤️ Anyway, I managed to add a file dialog option to choose what file to load (taken from raygui examples, ty raysan..) but I didn’t manage to add some basic features… such as copy and paste (mainly because I’m not sure if I can manage in time even because it would imply adding text selection… I’ll work on fixing these things first and then I’ll think about adding Copy and paste, maybe even an option to Rename the file.. but I don’t know.. OH YEAH, I also managed to add a scrolling bar so it’s a great advancement! About AI disclosure, I forgot to talk about it… I used some AI just for debugging the scrolling bar and I think I’ll use it to fix the CMakeLists.txt . I want to try and also ship this project to Linux, since I have a burner laptop that I can use to test if it works! So I’ll probably get a help from AI to set up GitHub Actions too. I never used it.. (I’m sorry for Mac users but I have no idea how to build for your platform and I don’t have any Mac to try it by myself first.. So I’m probably skipping it.)
It’s time!! Okay it’s finally time to get everything ready and ship it!! And finally.. name reveal! Monochrome Text Editor!! The reason for this name? No clue. I actually had no idea how to call it.. and while looking around the room I noticed a notebook of mine. It’s from a brand called Monocromo here in Italy, and it literally translate into Monochrome.. So I just decided to go for that randomly, lol. Anyway, I’m so happy to have finally finished my project! Hope it’ll get reviewed in time to get something from the shop. Thanks for everything and thank you Hack club for this incredible event!
Ships:
I made my first ever text editor entirely in C++! Monochrome is a light-weight text editor made entirely in C++ thanks to the raylib and raygui library! It has basic features such as file loading, saving, editing, scroll panel, file renaming and a file dialog to choose what file to load! It was a bit challenging since it required a lot of knowledge to know how to show text, store it, load and save the files. Especially making the GUI since it needs to have anchors, have a kinda dynamic layout if I resize the window. But I still manage to do it! I’m proud of what I made and I hope that other people would love this project as much as I do, as I find pretty interesting how text editor works! One thing that people should know before trying is that macOS is NOT currently supported and it probably won’t work at ALL . I don’t have a Mac to test it on so I don’t wanna risk it.. Sorry about it. Thanks for everything and I hope that you’ll like my project!...
|
1793566559.2094877
|
1793652959.2094877
|
|
59519
|
SHILPIN ARM CONTROLLER by @Sparsh01 | Stardance
|
Sparsh01
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T18:36:32Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "a python file which control the robotic arm in blender i have used pyserial library to connect python in blender also added arduino ide file to see arm is working or not used claude to find bugs make the movement smooth and convert whole file in .zip file", "repo": "https://github.com/Sparsh230/Shilpin-Robotic-Arm", "demo": "https://drive.google.com/file/d/13zbtRFRpEtjRWoOhVLJjb8KEwAN-hVRs/view?usp=sharing"}]...
|
[{"post_id": 63738, "ts": "202 [{"post_id": 63738, "ts": "2026-09-07T18:06:28Z", "hours": 0.3767, "text": "1st devlog- finnaly wrote the code and the programm is working succesfully on blender after many hours it is workinggg"}]...
|
Title: SHILPIN ARM CONTROLLER by @Sparsh01 | Stard Title: SHILPIN ARM CONTROLLER by @Sparsh01 | Stardance
Devlogs:
1st devlog- finnaly wrote the code and the programm is working succesfully on blender after many hours it is workinggg
Ships:
a python file which control the robotic arm in blender i have used pyserial library to connect python in blender also added arduino ide file to see arm is working or not used claude to find bugs make the movement smooth and convert whole file in .zip file...
|
1793566558.0502946
|
1793652958.0502946
|
|
70336
|
Remorse by @ajay | Stardance
|
ajay
|
1
|
4.0
|
8
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-18T15:27:38Z", "hours": 4.0, "multiplier": 1.97, "payout": 8, "blessing": "neutral", "text": "I made an API(kinda) in python with FastAPI and this can translate morse code and english back and forth. There are 2 GET endpoints for the same.", "repo": "https://github.com/s-ajay-2010/remorse", "demo": "https://remorse.orpheusairlines.xyz/"}]...
|
[{"post_id": 80693, "ts": "202 [{"post_id": 80693, "ts": "2026-10-18T15:17:01Z", "hours": 4.185, "text": "Finished Remorse This is an API written in python with FastAPI. Added 2 GET endpoints on for morse to english and another for english to morse. And a smoll UI to it for landing page. That’s all yayy!! P.S.: Since I’m porting this from #cq the devlogs are there, hence I’ve attached images of em :3"}]...
|
Title: Remorse by @ajay | Stardance
Devlogs:
Fini Title: Remorse by @ajay | Stardance
Devlogs:
Finished Remorse This is an API written in python with FastAPI. Added 2 GET endpoints on for morse to english and another for english to morse. And a smoll UI to it for landing page. That’s all yayy!! P.S.: Since I’m porting this from #cq the devlogs are there, hence I’ve attached images of em :3
Ships:
I made an API(kinda) in python with FastAPI and this can translate morse code and english back and forth. There are 2 GET endpoints for the same....
|
1793566555.1528838
|
1793652955.1528838
|
|
50743
|
ChemiBot by @rasmus_stenlund | Stardance
|
rasmus_stenlund
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:45:24Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ChemiBot ChemiBot is a simple slack bot used for getting info about elements, compounds and some fun facts about a daily element. It has 5 different commands, three of them being connected to a periodic table api. This was my first ever time making a slack bot and I feel like i have really learned from it and could probably make it without following the guide (at least for the most part). Connecting my bot to the api was the hardest part, but when I figured out how to make one command I could easily make the rest.", "repo": "https://github.com/RasmusStenlund/ChemiBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BR1NKF9GE"}]...
|
[{"post_id": 49857, "ts": "202 [{"post_id": 49857, "ts": "2026-08-18T20:09:03Z", "hours": 1.2361, "text": "Devlog 2 I added all my custom commands and used the periodic table of elements API to get all of the data. It was pretty hard making all of these but the guide definitely helped me. I also made some typos and one thing that I struggled to understand was why some lines were indented, but it turned out that I had, in my responses, left some whitespace which turned into indentation in the app response. To do The final things to do are hosting it on HackClub Nest and writing my readme."}, {"post_id": 49448, "ts": "2026-08-18T09:18:21Z", "hours": 0.4811, "text": "Devlog 1 I have now connected my bot to slack and added two simple commands: Ping and Help. Next steps The next things I will add are commands that allow the user to get data from the periodic table by using atomic number, get the element of the day and the molar mass of a compound."}]...
|
Title: ChemiBot by @rasmus_stenlund | Stardance
D Title: ChemiBot by @rasmus_stenlund | Stardance
Devlogs:
Devlog 1 I have now connected my bot to slack and added two simple commands: Ping and Help. Next steps The next things I will add are commands that allow the user to get data from the periodic table by using atomic number, get the element of the day and the molar mass of a compound.
Devlog 2 I added all my custom commands and used the periodic table of elements API to get all of the data. It was pretty hard making all of these but the guide definitely helped me. I also made some typos and one thing that I struggled to understand was why some lines were indented, but it turned out that I had, in my responses, left some whitespace which turned into indentation in the app response. To do The final things to do are hosting it on HackClub Nest and writing my readme.
Ships:
ChemiBot ChemiBot is a simple slack bot used for getting info about elements, compounds and some fun facts about a daily element. It has 5 different commands, three of them being connected to a periodic table api. This was my first ever time making a slack bot and I feel like i have really learned from it and could probably make it without following the guide (at least for the most part). Connecting my bot to the api was the hardest part, but when I figured out how to make one command I could easily make the rest....
|
1793566543.1519477
|
1793652943.1519477
|
|
59513
|
OpenVector Phase 1 by @Blobbie | Stardance
|
Blobbie
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T22:18:55Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple fork on AeroVector for it to be more accurate, was pretty hard b/c of bugs and glitches from the source. I fixed them and will get working on phase 2 where I work on integration with open rocket so you can design something on open rocket and transalate it into a better sim method.", "repo": "https://github.com/BlobbieAbhi/OpenVector", "demo": "https://github.com/BlobbieAbhi/AeroVECTOR-demo"}]...
|
[{"post_id": 63796, "ts": "202 [{"post_id": 63796, "ts": "2026-09-07T19:14:48Z", "hours": 0.2886, "text": "Finished the basic translation layer from open rocket to aerovector for more analysis"}]...
|
Title: OpenVector Phase 1 by @Blobbie | Stardance
Title: OpenVector Phase 1 by @Blobbie | Stardance
Devlogs:
Finished the basic translation layer from open rocket to aerovector for more analysis
Ships:
I made a simple fork on AeroVector for it to be more accurate, was pretty hard b/c of bugs and glitches from the source. I fixed them and will get working on phase 2 where I work on integration with open rocket so you can design something on open rocket and transalate it into a better sim method....
|
1793566540.2460225
|
1793652940.2460225
|
|
50739
|
My very own WebOS by @hikmat | Stardance
|
hikmat
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T16:03:38Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "During these 6 days I spent on the project I had so much fun learning and building my own WebOS difficulties were that I did not know how to code luckily I took the workshop guides to build this project which Im very proud of!", "repo": "https://github.com/hikmatgara/stardance.os", "demo": "https://stardance-os.vercel.app"}]...
|
[{"post_id": 53140, "ts": "202 [{"post_id": 53140, "ts": "2026-08-23T16:01:24Z", "hours": 0.2739, "text": "Im finalising this project I had so much fun learning and building at the same time I added my last 2 apps to the WebOS might comeback to this project in the future and re-ship."}, {"post_id": 51818, "ts": "2026-08-21T17:41:15Z", "hours": 0.8731, "text": "Added my first app “Diary” I actually started feeling Like Terry Davis after building this Webo, I will hopefully finish and ship the project tomorrow if nothing breaks down)"}, {"post_id": 50927, "ts": "2026-08-20T12:08:29Z", "hours": 1.1497, "text": "Updated the wallpaper to be visible on the demo URL, then restyled the close and open buttons and to finalize it by uploading everything to my GitHub Repo."}, {"post_id": 50547, "ts": "2026-08-19T19:00:54Z", "hours": 2.2658, "text": "I refined the code added a separate JS file and linked it to html file then I also changed the wallpaper of my WebOS, added buttons to open and close the welcome window and fixed the clock so now its live."}, {"post_id": 50190, "ts": "2026-08-19T10:05:17Z", "hours": 1.0831, "text": "restyled my WebOS, changed the wallpaper, added a top bar and added a live clock but for some reason it doesn’t update :( Will fix it soon!"}, {"post_id": 49729, "ts": "2026-08-18T17:16:01Z", "hours": 1.0633, "text": "I added a wallpaper and tinkered with borders, paddings and margins."}, {"post_id": 49516, "ts": "2026-08-18T12:04:34Z", "hours": 1.1044, "text": "I started learning how to code in html big thanks to hack club for this life changing opportunity and so far I started coding the webOS and its going smooth"}]...
|
Title: My very own WebOS by @hikmat | Stardance
D Title: My very own WebOS by @hikmat | Stardance
Devlogs:
I started learning how to code in html big thanks to hack club for this life changing opportunity and so far I started coding the webOS and its going smooth
I added a wallpaper and tinkered with borders, paddings and margins.
restyled my WebOS, changed the wallpaper, added a top bar and added a live clock but for some reason it doesn’t update :( Will fix it soon!
I refined the code added a separate JS file and linked it to html file then I also changed the wallpaper of my WebOS, added buttons to open and close the welcome window and fixed the clock so now its live.
Updated the wallpaper to be visible on the demo URL, then restyled the close and open buttons and to finalize it by uploading everything to my GitHub Repo.
Added my first app “Diary” I actually started feeling Like Terry Davis after building this Webo, I will hopefully finish and ship the project tomorrow if nothing breaks down)
Im finalising this project I had so much fun learning and building at the same time I added my last 2 apps to the WebOS might comeback to this project in the future and re-ship.
Ships:
During these 6 days I spent on the project I had so much fun learning and building my own WebOS difficulties were that I did not know how to code luckily I took the workshop guides to build this project which Im very proud of!...
|
1793566535.458499
|
1793652935.458499
|
|
63202
|
My own site! by @mateielicopter | Stardance
|
mateielicopter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @mateielicopter | Stardance
|
1793048131.5531933
|
1793652931.5531933
|
|
63201
|
Untitled project by @roz | Stardance
|
roz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @roz | Stardance
|
1793048130.6734676
|
1793652930.6734676
|
|
59506
|
All Finance by @nicklogan1412 | Stardance
|
nicklogan1412
|
1
|
5.0
|
47
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T19:45:59Z", "hours": 5.0, "multiplier": 8.83, "payout": 47, "blessing": "neutral", "text": "Before I ship, I want to say thank you to the Stardance Community and the Shipwrights. You guys are the nicest people ive ever made and this platform is amazing, thank you for making it what it is today. Love yall This project is a website that holds Finance information in one place, so you dont have to go to multiple websites. The project solves the following issues a laggy browser from many tabs opening many tabs Trusting data from unsafe websites and finally, saving you time from search up and down one the internet.", "repo": "https://github.com/Biscutbuilder/All-Finance", "demo": "https://biscutbuilder.github.io/All-Finance/"}]...
|
[{"post_id": 64411, "ts": "202 [{"post_id": 64411, "ts": "2026-09-08T19:32:10Z", "hours": 0.85, "text": "Devlog 4 here’s what I did Fully integrated the new Silver and Gold price charts Integrated a stock price tracker for the top 4 most traded stocks Cleaned up my CSS more Added footer that contains credits Added more scroll down buttons I had a really hard time putting the new graphs in because they were really buggy and incredibly hard to resize. The Stock thing was easier to put in due to the fact the code was way less complicated. For more information, check my github The charts are stocks are powered by Goldbroker and Elfsight. Big thanks to @aavarvd for encouraging me to make this"}, {"post_id": 64015, "ts": "2026-09-08T03:52:30Z", "hours": 0.6922, "text": "Devlog 3 what i worked on: Integrated a new silver and gold tracker, with jump to buttons. The old tracker has a cloud fare anti bot system that didnt allow the Iframe to work consistently. I aslo restructed alot of my code to make it easier to understand."}, {"post_id": 63988, "ts": "2026-09-08T02:42:07Z", "hours": 2.2022, "text": "Devlog 2 Today I did the following things :) Improved on my CSS and made the website look alot better Removed the graphs with silver and gold prices, as they stopped working. made images that will be inside of the website on a later date Made a intro area with directions and credits to people that have helped The project worked very well!!"}, {"post_id": 63911, "ts": "2026-09-07T22:59:44Z", "hours": 1.5908, "text": "Created the base of the website The website will be a finance site that shows the value of many items. Here is how I created my website 1. I created a HTML website 2. I researched different price trackers that I can input into my wonderful HTML website 3. I coded them into my website, big thank you to APMEX for allowing me to use their trackers. 4. Improved my CSS 5. Cleaned up alot of my code"}]...
|
Title: All Finance by @nicklogan1412 | Stardance
Title: All Finance by @nicklogan1412 | Stardance
Devlogs:
Created the base of the website The website will be a finance site that shows the value of many items. Here is how I created my website 1. I created a HTML website 2. I researched different price trackers that I can input into my wonderful HTML website 3. I coded them into my website, big thank you to APMEX for allowing me to use their trackers. 4. Improved my CSS 5. Cleaned up alot of my code
Devlog 2 Today I did the following things :) Improved on my CSS and made the website look alot better Removed the graphs with silver and gold prices, as they stopped working. made images that will be inside of the website on a later date Made a intro area with directions and credits to people that have helped The project worked very well!!
Devlog 3 what i worked on: Integrated a new silver and gold tracker, with jump to buttons. The old tracker has a cloud fare anti bot system that didnt allow the Iframe to work consistently. I aslo restructed alot of my code to make it easier to understand.
Devlog 4 here’s what I did Fully integrated the new Silver and Gold price charts Integrated a stock price tracker for the top 4 most traded stocks Cleaned up my CSS more Added footer that contains credits Added more scroll down buttons I had a really hard time putting the new graphs in because they were really buggy and incredibly hard to resize. The Stock thing was easier to put in due to the fact the code was way less complicated. For more information, check my github The charts are stocks are powered by Goldbroker and Elfsight. Big thanks to @aavarvd for encouraging me to make this
Ships:
Before I ship, I want to say thank you to the Stardance Community and the Shipwrights. You guys are the nicest people ive ever made and this platform is amazing, thank you for making it what it is today. Love yall This project is a website that holds Finance information in one place, so you dont have to go to multiple websites. The project solves the following issues a laggy browser from many tabs opening many tabs Trusting data from unsafe websites and finally, saving you time from search up and down one the internet....
|
1793566529.9089422
|
1793652929.9089422
|
|
63200
|
ContToKey by @matest | Stardance
|
matest
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ContToKey by @matest | Stardance
|
1793048128.6396153
|
1793652928.6396153
|
|
63199
|
My awesome macropad! by @Mtswratchanon | Stardance
|
Mtswratchanon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Mtswratchanon | St Title: My awesome macropad! by @Mtswratchanon | Stardance...
|
1793048127.7760584
|
1793652927.7760584
|
|
63198
|
My first slack bot! by @Muhammadsheerali | Stardan My first slack bot! by @Muhammadsheerali | Stardance...
|
Muhammadsheerali
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Muhammadsheerali | Title: My first slack bot! by @Muhammadsheerali | Stardance...
|
1793048126.917682
|
1793652926.917682
|
|
63197
|
My awesome macropad! by @masterknight | Stardance
|
masterknight
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @masterknight | Sta Title: My awesome macropad! by @masterknight | Stardance...
|
1793048126.0483806
|
1793652926.0483806
|
|
63196
|
Dis-Cord by @VickB | Stardance
|
VickB
|
0
|
14.67
|
0
|
[]
|
[{"post_id": 73688, "ts": "202 [{"post_id": 73688, "ts": "2026-09-25T18:09:15Z", "hours": 0.7181, "text": "Devlog #10: Finally made the github repo and the readme looking really sick i hope the 3d print comes out exactly how i think it would It has been an awesome journey"}, {"post_id": 73330, "ts": "2026-09-24T21:38:12Z", "hours": 1.0064, "text": "Devlog #9?: Redesigned the desk mount simpler and efficient looked at the print time for all componenets 1Day and change brother thats too much i hope the design is one good so i dont have to make iterations when i order it"}, {"post_id": 73246, "ts": "2026-09-24T17:40:09Z", "hours": 1.6042, "text": "Devlog #8: Made under the table stand for my hackpad fixed schematics made it look nice and neat"}, {"post_id": 72975, "ts": "2026-09-24T04:24:47Z", "hours": 1.6236, "text": "Devlog #7: Made the firmware for hackpad made it so like normal mode open windows apps kicad arduino youtube and all if i press the rotary button it will act as a discord shortcut to mute deafen and screen share and much more cant wait to see it live in action."}, {"post_id": 72856, "ts": "2026-09-23T21:35:23Z", "hours": 1.3469, "text": "Added space in the design to put in led idk it’s too thin to be printed i’ll test print one in my nearby library i hope it prints fine i also added power for led, i do need to buy led flexible seperate which costs about 15 dollars cad and some resistors on top so lets see i hope this turn out good."}, {"post_id": 72487, "ts": "2026-09-23T02:12:32Z", "hours": 1.285, "text": "fixing body for having space for led flexible filament fixed alot still have to think and make the space and make it look cool"}, {"post_id": 72077, "ts": "2026-09-22T03:38:23Z", "hours": 2.1294, "text": "Devlog #4: Today I worked more on my Hackpad design and mainly focused on making the case look more unique instead of just having a basic shape. I kept the 6 switches, OLED, and rotary knob layout but started adding more details to the housing like the layered edges, sharper corners, and spaces for orange accents. I’m going for a black and bright orange look since I’m not using RGB, so I also started planning an orange strip under the keys, orange side accents, and an orange ring around the knob. I also worked on making the OLED and key area look more built into the case instead of just sitting on top. Overall, I’m getting a much better idea of how I want the final design to look and I’ll keep refining the details next session."}, {"post_id": 71581, "ts": "2026-09-21T02:57:55Z", "hours": 1.9644, "text": "Devlog #3: Started working on the body of the Hackpad but soon realised the centering of the main control was off the angles and all of the things were wrong fixed alot made adjustements started modelling the body how i wanted going pretty good feeling confident can see my vision come to life."}, {"post_id": 70405, "ts": "2026-09-19T03:43:08Z", "hours": 0.9206, "text": "Devlog #2: Successfully done all the routing mapping and 3d look of the pcb made adjustements to corner spacing and the look of it have a great vision for it it will look amazingggggg"}, {"post_id": 69782, "ts": "2026-09-17T19:35:31Z", "hours": 2.0669, "text": "Devlog #1: Designing the ultimate discord command center Hackpad. As a gamer i want ease of muting my mic comms and discord controls and have extra buttons for little features in games that have hard keybinds completed the schematics and PCB also added 3d models to visualize it much better"}]...
|
Title: Dis-Cord by @VickB | Stardance
Devlogs:
De Title: Dis-Cord by @VickB | Stardance
Devlogs:
Devlog #1: Designing the ultimate discord command center Hackpad. As a gamer i want ease of muting my mic comms and discord controls and have extra buttons for little features in games that have hard keybinds completed the schematics and PCB also added 3d models to visualize it much better
Devlog #2: Successfully done all the routing mapping and 3d look of the pcb made adjustements to corner spacing and the look of it have a great vision for it it will look amazingggggg
Devlog #3: Started working on the body of the Hackpad but soon realised the centering of the main control was off the angles and all of the things were wrong fixed alot made adjustements started modelling the body how i wanted going pretty good feeling confident can see my vision come to life.
Devlog #4: Today I worked more on my Hackpad design and mainly focused on making the case look more unique instead of just having a basic shape. I kept the 6 switches, OLED, and rotary knob layout but started adding more details to the housing like the layered edges, sharper corners, and spaces for orange accents. I’m going for a black and bright orange look since I’m not using RGB, so I also started planning an orange strip under the keys, orange side accents, and an orange ring around the knob. I also worked on making the OLED and key area look more built into the case instead of just sitting on top. Overall, I’m getting a much better idea of how I want the final design to look and I’ll keep refining the details next session.
fixing body for having space for led flexible filament fixed alot still have to think and make the space and make it look cool
Added space in the design to put in led idk it’s too thin to be printed i’ll test print one in my nearby library i hope it prints fine i also added power for led, i do need to buy led flexible seperate which costs about 15 dollars cad and some resistors on top so lets see i hope this turn out good.
Devlog #7: Made the firmware for hackpad made it so like normal mode open windows apps kicad arduino youtube and all if i press the rotary button it will act as a discord shortcut to mute deafen and screen share and much more cant wait to see it live in action.
Devlog #8: Made under the table stand for my hackpad fixed schematics made it look nice and neat
Devlog #9?: Redesigned the desk mount simpler and efficient looked at the print time for all componenets 1Day and change brother thats too much i hope the design is one good so i dont have to make iterations when i order it
Devlog #10: Finally made the github repo and the readme looking really sick i hope the 3d print comes out exactly how i think it would It has been an awesome journey...
|
1793048124.8204484
|
1793652924.8204484
|
|
63193
|
Stardance Telemetry by @cipherquintet | Stardance
|
cipherquintet
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Stardance Telemetry by @cipherquintet | Sta Title: Stardance Telemetry by @cipherquintet | Stardance...
|
1793048123.112383
|
1793652923.112383
|
|
63190
|
Jumpstart by @MisterCheese | Stardance
|
MisterCheese
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Jumpstart by @MisterCheese | Stardance
|
1793048121.070719
|
1793652921.070719
|
|
63189
|
Jumpstart by @MisterCheese | Stardance
|
MisterCheese
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Jumpstart by @MisterCheese | Stardance
|
1793048120.248811
|
1793652920.248811
|
|
13667
|
dnp3 Parser and Simulator by @arnabm | Stardance
|
arnabm
|
1
|
104.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T03:47:21Z", "hours": 104.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built a partial implementation of DNP3 in C, along with a TCP client/server simulator and an interactive packet parser. DNP3 is a communication protocol used in SCADA systems, including power utilities and water management. It lets equipment at remote sites send measurements and status information to control centers. The protocol is decades old and widely used, but finding detailed, freely available documentation was surprisingly difficult. My project implements a small subset of it so you can generate data, exchange packets between programs, and inspect what those packets contain. Why was it challenging? The hardest part was turning the protocol’s packet layouts into working C code. DNP3 originated in serial communication, and carrying its frames over TCP meant handling the fact that one network read doesn’t necessarily equal one complete packet. This was also my first big C project. Coming from Java, I had to get comfortable with pointers, manual memory handling, sockets, and the difference between a struct’s layout in memory and the bytes a protocol expects. Struct padding caused a lot more trouble than I expected 😭. I also took a roughly two-month break. Returning to code I’d written while still learning C was a challenge of its own, especially where I hadn’t used consistent conventions or documented my decisions. What are you proud of? Mostly, that I stuck with it. This project pushed me through problems that initially felt impossible and taught me how to break them down, investigate them, and keep going. I understand memory layout, byte order, networking, and C much better now than when I started. Seeing the client request data, the server build a response, and the parser turn those bytes into readable fields made that work feel worth it. What should people know before using it? Read the README first! It explains how to build the programs, configure connections, and use the supported packet formats. This is a partial implementation, so it won’t interpret every DNP3 packet. For a quick demo: Start the server. Its default port is 48188. Choose Group 1, Variation 2 for binary values with flags, or Group 30, Variation 1 for analog values with flags. Use a small point range, such as 0–7. Start the client, enter port 48188, and enter 0 as the address to use localhost. Copy a complete reply from the client’s output into the parser. Join the hex bytes into one line and leave out the surrounding log messages. (certain consoles will do this automatically hint hint vscode", "repo": "https://github.com/arnabmondal-eg/dnp3", "demo": "https://github.com/arnabmondal-eg/dnp3/releases/tag/latest"}]...
|
[{"post_id": 86151, "ts": "202 [{"post_id": 86151, "ts": "2026-11-01T03:03:35Z", "hours": 11.1631, "text": "Just finished the Server-Client loop, as well as overhawling the parser binary. We are ready to SHIP!"}, {"post_id": 58550, "ts": "2026-08-31T00:08:09Z", "hours": 1.8961, "text": "Added the data generation, request creation, and response creation to the client and server. You can see a demo below. Not a giant change, just integrating the the new functions into the Client and Server."}, {"post_id": 57761, "ts": "2026-08-30T01:20:48Z", "hours": 10.5842, "text": "IM FREEEEE I FINALLY finished writing the write_data() function. Now full packet generation, with a request, and a reply is complete! Litterly the only thing left to do is make the ui. I AM DONE WITH THE BACKEND!!!!! I have included a handy guide to the output bellow. Instead of another picture of my terminal, you guys get to enjoy some color coded google docs!"}, {"post_id": 49396, "ts": "2026-08-18T06:12:20Z", "hours": 10.715, "text": "Im just going to appologize now, this devlog is not gonna be that great. I have been working the past few days on packet generation. Specifically on requesting data from a server, and writing that data to a packet as a server. As you can see by the time, this is much harder than it may seem. Though I did predict this a while ago. When the client request data from the server, a function is invoked that configures the group (data type; digital or analog) and the variation (presentation; packed format or with extra flags). When the server responds to this request, it invokes a function (technically 2) that refreshes the data it has (currently using a random number generator) and writes that to a packet. The packet is mostly a clone of the request, just with the source and destination switched, and the data added. Currently, I have both functions completed (or almost completed), but I still need to add crc to the reply form the server, and fix the many bugs that have arrisen from this change. Bellow I have an example request, no reply becuase the function is currently inoperable :( 05 64 0F C4 01 00 00 00 C8 E2 C1 C0 01 01 01 10 F7 03 00 0F 00 00 This request is asking for data from the server with address 1, data type 30 (digital), and the data points 3-15 Once again, very sorry for the poor quality dev log, but I just wanted to get an update out before I dug myself into an even deeper hole. See you guys later!"}, {"post_id": 45462, "ts": "2026-08-11T23:06:44Z", "hours": 6.2953, "text": "Been a busy 4 days. Worked on mostly modularity for the program, making sure that I am not repeating code that can be a function as part of a larger library The 2 libraries I implemented were the common/ and network/ libraries. These are used in both the client and server. Common includes functions like setting up connections, sending packets, receiving packets, interpreting them, and polling them for data The network library handles connecting to a server/client, and others. I also finally added the ability for the client (main stations/ems) to multiple servers (outstations/rtu). You can see a demo of all this working in the video. That’s it for now, goodbye!"}, {"post_id": 42903, "ts": "2026-08-07T21:11:13Z", "hours": 2.3822, "text": "More work on the logging system. Realized that we can use a global var with an init function to remove the need for each log call to pass the file pointer to the log Previous Method; // main log_err ( errno , \"client/main\" , fptr ); The fptr is a FILE* varible that points to the logging file New Method; // log.c static FILE * log_file = NULL ; int log_init ( const char * file_path ) { log_file = fopen ( file_path , \"a\" ); if ( log_file == NULL ) { log_err ( errno , \"log/log_init\" ); return - 1 ; } return 0 ; } // main log_init ( \"log/log.txt\" ); log_err ( errno , \"client/main\" ); The new method means all you have to pass is errno and the location of error. Super Simple!!! I also updated both client and server with this system. Bye"}, {"post_id": 41747, "ts": "2026-08-06T04:11:05Z", "hours": 0.5658, "text": "Small addition. Made log_info() a variadic function, like printf() . This means you can now do the same formatting like printf(\"hello %s\", \"world\") . This allows for easier logging to file and console, as both are just an arg in the funciton call! Yay!!!!"}, {"post_id": 41582, "ts": "2026-08-05T21:33:22Z", "hours": 2.0283, "text": "Finished adding the logging library I mentioned in the last post. It supports Colored text for warning and errors, time stamps, and better formatting. Ironically, the hardest part about this was figuring out how to use ANSI escape codes to support the colored text. This Medium article fromVitor Matias was super helpful! i also realized most people dont wanna read walls, so my updates will be smaller form now!"}, {"post_id": 41164, "ts": "2026-08-05T06:12:35Z", "hours": 6.4817, "text": "DevLog 15 Been busy the past couple of days with some school, so sorry I haven’t posted sooner, but I have also built out a couple more features.The Main additions are; Reusable frequent packet structures (acknowledge, negative acknowledge, reset link) Server Client loop 1. Ability to choose packet type to send to server (through TUI) in client 2. Server responds, and client is able to display response Better error handling, with more checks for errno and printing to log and console Better logging through file rather than just console The logging is proably my favorite new feature. It saves previous runs and even annotates the time and date the run took place. The error info is also much more helpful, and more often my program tells me why it crashed, instead of just ending or segfaulting client [ main]: Connection refused ^^^^ This now happens when you try to run the client with out a server on the configured adress or port Errors I ran into There actually wasn’t that much stuff going wrong, just took me pretty long as I had to edit a lot of functions and flows. A big issue i did run into was adding select() , also know as polling to the socket. Basicly, my code will loop checking the socket and parsing the data in it. But, a problem occurs if there is no data in the socket waiting. Polling allows my code to check if there actually is data, and if not wait/move on to the next task. But, I had incorrectly configured the function (the documentation for this function is especially confusing…), and this lead it to always report data in the socket. This then lead to errors with trying to map that data into a struct, and it just lead to catastrophy. Immediate Plans Have some stuff I’m going to / want to try and start before the next devlog; Logging Functions to simply logging to console and file * Something like log_note() , log_warn() , and log_error() * Currently just writing both fprintf() and perror() Add functionality to digital and analog requests * Need to add packet structures and creator functions for both Seperate network functionality like socket() , send() , etc… into its own library fucntions Seperate shared code between server and client into common library Media I thought I would include this section to explain some of things in the attached videos. These show all the features I implemented, including the client server loop, logging, and error handling Video 1 This just shows the current loop between the client and server, where the client sends a packet, a reset link packet in this case, and the server responds, in this case with a simple acknowledgement. It also shows how both programs log information about their runs in an assocaited text file. Btw, if you have some sugestions for making this better, please leave a comment . This is just about the simplest way to do logging, so other ideas are appreciated! Video 2 This shows an example of custom ports, error handling, and more logging. Both the client and server support custom ports (and server adresses in the case of the client) passed in as a launch argument. You can see when the client trys to connect to a server that either doesn’t exist on the current port, or isn’t active, an error message is displayed into the console and logged in the file. Alternatively, when both use the same port, the connection succeds, that port is logged as well. Wrap Up Lots of stuff to do still, and I am super excited to get started. Thank you to the few of you who have been following development since the beginning, and hello to anyone new!"}, {"post_id": 34839, "ts": "2026-07-25T21:21:26Z", "hours": 2.57, "text": "Manual Packet Creation and More! Just finished adding the ability to create a packet based on parameters rather than requiring a premade packet. Manual Packets Basicly, instead of needing something like , uint8_t input [] = { 0x05 , 0x64 , ... }; dnp3p_st packet_s = mkPacket ( input ); You can now just use a function and pass in parameters. Then, since this is just a fancy memory structure, a simple memcpy into an appropriately sized array will give you both! (The raw packet, and the structure) uint8_t packet [ 30 ] = { 0 }; // did some renaming, uses dnp3Lib for library funcs now dnp3p_st packet_s = dnp3Lib_mkPacket_manual ( 1 , 0 , 30 , 2 , 0 , 10 ); // params are: destination, source, group, variation, startIndex, and stopIndex memcpy ( & packet , & packet_s , 30 ); This will give you basicly the same thing as the first example, meaning you can create a packet based on a discription, rather than a discription based on a packet. This will be very useful when creating responses from to the client from the server, or vice versa. Should be noted that this is technically not very complete, but it is just an example for now. Pre-made Packets On the topic of creating a packet based on a discription, I also created some functions to create packets for common messages, including; Reset Link Required when creating a new connection Acknowledgement Negative Acknowledgment These will be useful when making connections, and sending responses to requests and replies. Wrap Up Still got a ways to go in terms of completion, but I’m hoping to ramp up my speed, been a little busy the past couple weeks."}, {"post_id": 31917, "ts": "2026-07-20T18:19:30Z", "hours": 1.1969, "text": "Added the ability to pick a custom socket or server ip. Also actualy pushed becuase I forgot last time"}, {"post_id": 31334, "ts": "2026-07-19T17:17:47Z", "hours": 4.9769, "text": "Just finished getting the client server connection working. Next thing to do is to interpret the packet on the server side, then create a reply based on the request."}, {"post_id": 26929, "ts": "2026-07-12T00:21:49Z", "hours": 3.2033, "text": "Dev log 11? I just pushed some changes and merged main and dev. This update I basically just made some fixes that should make the parser more accurate overall, but there are still a few lingering bugs. The main change I made was adding a system to clean the packet of any CRC bytes from within. Normally, a packet contains 2 bytes of CRC spread around it, with 2 after the end of the header, and after that 2 after every 16 bytes. This change will allow my data handler to not accidentally ingest CRC bytes, which would mess up the spacing of each data segment, and result in randomness. I also added a function to calculate the size of a packet based on the length information stored within it, rather than the physical memory size of it. This is better, as I can call it from any function and not have to pass in the size as a param. Overall, I am around 90% done with the backend, and just have a couple bugs to fix. I have attached a screen shot of some of the new features."}, {"post_id": 25364, "ts": "2026-07-09T16:42:47Z", "hours": 1.4706, "text": "Added parsing for more Objects Has not been very long but I am back with an update. I just finished adding in parsing for more object types, including Group 1 Varriation 1 Varriation 2 Group 30 Varriation 1 Varriation 2 I’ll also try and make more frequent posts here!"}, {"post_id": 25027, "ts": "2026-07-08T23:27:04Z", "hours": 9.7514, "text": "DNP3 Parser Update - Understanding a DNP3 Packet This week I finished parsing DNP3 Group 1 Variation 1 , the first object type supported by the parser. That means the parser can now decode binary input status values from real DNP3 traffic instead of just stopping at the object header. I also got some practice using GDB to debug my programs! Super useful as I ran into some segmentation faults that would have been impossible to fix without it! How a DNP3 Packet Works DNP3 (Distributed Network Protocol 3) is an industrial control protocol used by electric utilities, water systems, and other critical infrastructure. Communication happens between a Master (SCADA server) and one or more Outstations (RTUs, relays, PLCs, etc.). A packet is made up of several layers: Data Link Layer Transport Layer Application Header Object Header(s) Object Data Data Link Layer The packet always begins with the start bytes: 0x05 0x64 These identify the frame as DNP3. The rest of the link header contains: Length Control byte Destination address Source address CRC This layer is responsible for moving frames between devices and detecting transmission errors. Transport Layer The transport header is only one byte long, but it’s important because it: Marks the start and end of fragmented messages Provides a sequence number so fragments can be reassembled Application Layer The application header tells the receiver what operation is being requested. Examples include: Read Write Response Confirm It also contains application control flags and an application sequence number. Object Headers After the application header come one or more object headers. These tell the parser what type of data follows . An object header contains: Group number Variation number Qualifier For example: Group 1 Variation 1 represents packed binary input values. The qualifier then specifies how many objects are present and how they are indexed. Object Data Finally comes the actual payload. For Group 1 Variation 1, each bit represents the current state of a binary input: 1 = ON 0 = OFF The parser reads these bytes and expands them into individual points that can be displayed or analyzed. Completed Sections Data Link Layer parsing Transport Header parsing Application Header parsing Object Header parsing Group 1 Variation 1 object parsing Next up is adding support for additional object groups and variations so the parser can decode more real-world DNP3 traffic."}, {"post_id": 15996, "ts": "2026-06-25T23:42:02Z", "hours": 7.0044, "text": "Transport Header, Printing Updates, and Bug Fixes! Its once again that time. This week I worked on the object header, updated the printing on the DLC parsing, as well as fixing a couple big bugs. Transport Header The transport header consists of 5 parts, and its main job is to explains the format, and ordering of the data in the packet. Note that there are multiple object and data blocks in a single packet, but currently I can only parse 1 at most. Bugs Fixed Ran into a couple bugs, but I’ll just mention 2. When filling the range (part of the object header) I ran into some errors. It turns out that I had forgoten to initilize the space with 0s, and that ment that if less than 8 bytes were assigned, there was garbage memory sitting in the space. Fix was pretty easy, just zeroed out the space and then assigned the data Incorrect DLC data being printed. Another strange bug, not really sure what was causing it Fix was pretty simple, just rewrote the print statements (attached a picture) Wrap Up Thanks for enduring that yap fest. Next update will probably be when I add in data parsing, unless I make some major change.Hope you enjoyed it. Check out the GitHub: https://github.com/arnabmondal-eg/dnp3 And have a safe , fun, and patriotic Fourth of July !"}, {"post_id": 10044, "ts": "2026-06-16T16:44:41Z", "hours": 7.025, "text": "DNP3 Parser I genuinely dont know how its been 7 hours. I feel like the majority of my time is fixing bugs and trying to get my code to compile. Where I’ve Been It’s been a while since my last devlog, and I have spent the past 7 hours adding a good bit. Main thing is that almost the entire packet is now being parsed, or atleast the hard part. The entire header, dlc byte, transport header, and application header are parsed , so the only thing left is the Object headers and the data itself. I also created a new struct to hold all of these functions , so you can just pass in a hex and get all this data out, no need to call each portions functionality anymore. Whats Next Moving forward, I have a couple goals/milestones I have to hit before I can ship this project: Parse the rest of the packet Check validity on entire packet (using CRC bytes) Finish Parser UI (almost done, but still some more to be done) Create Control/Main Station UI Create RTU/Secondary Station UI Link backend and frontend using network sockets Create systems for creating packets (I believe this will be much more difficult than parsing them) Simulate “Conversations” between the main and outstations Create binaries for Windows, Mac, and Linux"}, {"post_id": 8365, "ts": "2026-06-13T22:07:59Z", "hours": 1.3322, "text": "Just did a little rework to move all header files to the inc/ folder. This should make it less cluttered, but we will see how this holds up. Next things on the chopping block are: Implement Transport Header Parsing Implement Application Header Parsing Check all CRC bytes in entire packet Check out the GitHub! https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 7776, "ts": "2026-06-13T00:04:46Z", "hours": 5.6458, "text": "Its been a while… Hello! I have been working on the parser for a while. This post will be an explanation of where I am in the project so far. I wouldn’t go as far as to say that I am close to done yet, but I’m definitely nearing the halfway point. The past 2 days I have reworked how packets are interpreted, as well as adding some new helper utilities/functions to make future decoding easier. I also implemented a full bit-by-bit decomposition of the DLC byte in a header! This was super fun and rewarding as I learned a lot about bit-wise operations in C, as well as strengthening my understand of memory and how it is transferred through a program. I also learned I can’t spell! Wrote valid as “vaild” over 10 times! I also learned that C doesn’t pass the size of an array automatically! Super fun bugs! \\s Feel free to critique my code on the GitHub! https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 6455, "ts": "2026-06-10T21:20:28Z", "hours": 1.3786, "text": "Finished reworking the Parser UI. It uses a split pane so you can get as much or as little space as you need. Features a text input area on the left with a parse button on the bottom, and a tree view on the right (to see the parsed packet contents) with a valid indicator on the bottom. Nothing is hooked up yet to logic, so that is coming up soon on the list! Swing is definitely kind of tedious to write though! Check out the github: https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 5990, "ts": "2026-06-10T01:27:53Z", "hours": 2.5494, "text": "Just finished writing the final portion of the header validity checker, which uses a brand new CRC byte calculator! Very Fun to make, as I really got to dig deep into bit-wise operations for the first time, but definitely challenging! In terms of the backend, there is still much to do, but I am getting close to completion. The frontend still is in rough shape however. Making Good Progress!"}, {"post_id": 5857, "ts": "2026-06-09T20:07:09Z", "hours": 2.4053, "text": "Improved project structure, worked on README, added tasks to make compiling easier. Really want this to be usable, so I am putting in the work to make it simple to understand and use. Also I hated writing this project tree. Leme know if there is some tool i can use to do this automatically in the future"}, {"post_id": 5339, "ts": "2026-06-09T02:25:31Z", "hours": 1.3033, "text": "Working on the parser backend. Currently planning for all the backend to be in C, while I handle the frontend in Java using Swing. While this may seem like an ancient technology, most production SCADA applications use Swing for its long term support. And Java and C are obvious choices aswell. Heres a pic of the header part of the interpreter, and some work in progress ui. Much more work to come!"}]...
|
Title: dnp3 Parser and Simulator by @arnabm | Star Title: dnp3 Parser and Simulator by @arnabm | Stardance
Devlogs:
Working on the parser backend. Currently planning for all the backend to be in C, while I handle the frontend in Java using Swing. While this may seem like an ancient technology, most production SCADA applications use Swing for its long term support. And Java and C are obvious choices aswell. Heres a pic of the header part of the interpreter, and some work in progress ui. Much more work to come!
Improved project structure, worked on README, added tasks to make compiling easier. Really want this to be usable, so I am putting in the work to make it simple to understand and use. Also I hated writing this project tree. Leme know if there is some tool i can use to do this automatically in the future
Just finished writing the final portion of the header validity checker, which uses a brand new CRC byte calculator! Very Fun to make, as I really got to dig deep into bit-wise operations for the first time, but definitely challenging! In terms of the backend, there is still much to do, but I am getting close to completion. The frontend still is in rough shape however. Making Good Progress!
Finished reworking the Parser UI. It uses a split pane so you can get as much or as little space as you need. Features a text input area on the left with a parse button on the bottom, and a tree view on the right (to see the parsed packet contents) with a valid indicator on the bottom. Nothing is hooked up yet to logic, so that is coming up soon on the list! Swing is definitely kind of tedious to write though! Check out the github: https://github.com/arnabmondal-eg/dnp3
Its been a while… Hello! I have been working on the parser for a while. This post will be an explanation of where I am in the project so far. I wouldn’t go as far as to say that I am close to done yet, but I’m definitely nearing the halfway point. The past 2 days I have reworked how packets are interpreted, as well as adding some new helper utilities/functions to make future decoding easier. I also implemented a full bit-by-bit decomposition of the DLC byte in a header! This was super fun and rewarding as I learned a lot about bit-wise operations in C, as well as strengthening my understand of memory and how it is transferred through a program. I also learned I can’t spell! Wrote valid as “vaild” over 10 times! I also learned that C doesn’t pass the size of an array automatically! Super fun bugs! \s Feel free to critique my code on the GitHub! https://github.com/arnabmondal-eg/dnp3
Just did a little rework to move all header files to the inc/ folder. This should make it less cluttered, but we will see how this holds up. Next things on the chopping block are: Implement Transport Header Parsing Implement Application Header Parsing Check all CRC bytes in entire packet Check out the GitHub! https://github.com/arnabmondal-eg/dnp3
DNP3 Parser I genuinely dont know how its been 7 hours. I feel like the majority of my time is fixing bugs and trying to get my code to compile. Where I’ve Been It’s been a while since my last devlog, and I have spent the past 7 hours adding a good bit. Main thing is that almost the entire packet is now being parsed, or atleast the hard part. The entire header, dlc byte, transport header, and application header are parsed , so the only thing left is the Object headers and the data itself. I also created a new struct to hold all of these functions , so you can just pass in a hex and get all this data out, no need to call each portions functionality anymore. Whats Next Moving forward, I have a couple goals/milestones I have to hit before I can ship this project: Parse the rest of the packet Check validity on entire packet (using CRC bytes) Finish Parser UI (almost done, but still some more to be done) Create Control/Main Station UI Create RTU/Secondary Station UI Link backend and frontend using network sockets Create systems for creating packets (I believe this will be much more difficult than parsing them) Simulate “Conversations” between the main and outstations Create binaries for Windows, Mac, and Linux
Transport Header, Printing Updates, and Bug Fixes! Its once again that time. This week I worked on the object header, updated the printing on the DLC parsing, as well as fixing a couple big bugs. Transport Header The transport header consists of 5 parts, and its main job is to explains the format, and ordering of the data in the packet. Note that there are multiple object and data blocks in a single packet, but currently I can only parse 1 at most. Bugs Fixed Ran into a couple bugs, but I’ll just mention 2. When filling the range (part of the object header) I ran into some errors. It turns out that I had forgoten to initilize the space with 0s, and that ment that if less than 8 bytes were assigned, there was garbage memory sitting in the space. Fix was pretty easy, just zeroed out the space and then assigned the data Incorrect DLC data being printed. Another strange bug, not really sure what was causing it Fix was pretty simple, just rewrote the print statements (attached a picture) Wrap Up Thanks for enduring that yap fest. Next update will probably be when I add in data parsing, unless I make some major change.Hope you enjoyed it. Check out the GitHub: https://github.com/arnabmondal-eg/dnp3 And have a safe , fun, and patriotic Fourth of July !
DNP3 Parser Update - Understanding a DNP3 Packet This week I finished parsing DNP3 Group 1 Variation 1 , the first object type supported by the parser. That means the parser can now decode binary input status values from real DNP3 traffic instead of just stopping at the object header. I also got some practice using GDB to debug my programs! Super useful as I ran into some segmentation faults that would have been impossible to fix without it! How a DNP3 Packet Works DNP3 (Distributed Network Protocol 3) is an industrial control protocol used by electric utilities, water systems, and other critical infrastructure. Communication happens between a Master (SCADA server) and one or more Outstations (RTUs, relays, PLCs, etc.). A packet is made up of several layers: Data Link Layer Transport Layer Application Header Object Header(s) Object Data Data Link Layer The packet always begins with the start bytes: 0x05 0x64 These identify the frame as DNP3. The rest of the link header contains: Length Control byte Destination address Source address CRC This layer is responsible for moving frames between devices and detecting transmission errors. Transport Layer The transport header is only one byte long, but it’s important because it: Marks the start and end of fragmented messages Provides a sequence number so fragments can be reassembled Application Layer The application header tells the receiver what operation is being requested. Examples include: Read Write Response Confirm It also contains application control flags and an application sequence number. Object Headers After the application header come one or more object headers. These tell the parser what type of data follows . An object header contains: Group number Variation number Qualifier For example: Group 1 Variation 1 represents packed binary input values. The qualifier then specifies how many objects are present and how they are indexed. Object Data Finally comes the actual payload. For Group 1 Variation 1, each bit represents the current state of a binary input: 1 = ON 0 = OFF The parser reads these bytes and expands them into individual points that can be displayed or analyzed. Completed Sections Data Link Layer parsing Transport Header parsing Application Header parsing Object Header parsing Group 1 Variation 1 object parsing Next up is adding support for additional object groups and variations so the parser can decode more real-world DNP3 traffic.
Added parsing for more Objects Has not been very long but I am back with an update. I just finished adding in parsing for more object types, including Group 1 Varriation 1 Varriation 2 Group 30 Varriation 1 Varriation 2 I’ll also try and make more frequent posts here!
Dev log 11? I just pushed some changes and merged main and dev. This update I basically just made some fixes that should make the parser more accurate overall, but there are still a few lingering bugs. The main change I made was adding a system to clean the packet of any CRC bytes from within. Normally, a packet contains 2 bytes of CRC spread around it, with 2 after the end of the header, and after that 2 after every 16 bytes. This change will allow my data handler to not accidentally ingest CRC bytes, which would mess up the spacing of each data segment, and result in randomness. I also added a function to calculate the size of a packet based on the length information stored within it, rather than the physical memory size of it. This is better, as I can call it from any function and not have to pass in the size as a param. Overall, I am around 90% done with the backend, and just have a couple bugs to fix. I have attached a screen shot of some of the new features.
Just finished getting the client server connection working. Next thing to do is to interpret the packet on the server side, then create a reply based on the request.
Added the ability to pick a custom socket or server ip. Also actualy pushed becuase I forgot last time
Manual Packet Creation and More! Just finished adding the ability to create a packet based on parameters rather than requiring a premade packet. Manual Packets Basicly, instead of needing something like , uint8_t input [] = { 0x05 , 0x64 , ... }; dnp3p_st packet_s = mkPacket ( input ); You can now just use a function and pass in parameters. Then, since this is just a fancy memory structure, a simple memcpy into an appropriately sized array will give you both! (The raw packet, and the structure) uint8_t packet [ 30 ] = { 0 }; // did some renaming, uses dnp3Lib for library funcs now dnp3p_st packet_s = dnp3Lib_mkPacket_manual ( 1 , 0 , 30 , 2 , 0 , 10 ); // params are: destination, source, group, variation, startIndex, and stopIndex memcpy ( & packet , & packet_s , 30 ); This will give you basicly the same thing as the first example, meaning you can create a packet based on a discription, rather than a discription based on a packet. This will be very useful when creating responses from to the client from the server, or vice versa. Should be noted that this is technically not very complete, but it is just an example for now. Pre-made Packets On the topic of creating a packet based on a discription, I also created some functions to create packets for common messages, including; Reset Link Required when creating a new connection Acknowledgement Negative Acknowledgment These will be useful when making connections, and sending responses to requests and replies. Wrap Up Still got a ways to go in terms of completion, but I’m hoping to ramp up my speed, been a little busy the past couple weeks.
DevLog 15 Been busy the past couple of days with some school, so sorry I haven’t posted sooner, but I have also built out a couple more features.The Main additions are; Reusable frequent packet structures (acknowledge, negative acknowledge, reset link) Server Client loop 1. Ability to choose packet type to send to server (through TUI) in client 2. Server responds, and client is able to display response Better error handling, with more checks for errno and printing to log and console Better logging through file rather than just console The logging is proably my favorite new feature. It saves previous runs and even annotates the time and date the run took place. The error info is also much more helpful, and more often my program tells me why it crashed, instead of just ending or segfaulting client [ main]: Connection refused ^^^^ This now happens when you try to run the client with out a server on the configured adress or port Errors I ran into There actually wasn’t that much stuff going wrong, just took me pretty long as I had to edit a lot of functions and flows. A big issue i did run into was adding select() , also know as polling to the socket. Basicly, my code will loop checking the socket and parsing the data in it. But, a problem occurs if there is no data in the socket waiting. Polling allows my code to check if there actually is data, and if not wait/move on to the next task. But, I had incorrectly configured the function (the documentation for this function is especially confusing…), and this lead it to always report data in the socket. This then lead to errors with trying to map that data into a struct, and it just lead to catastrophy. Immediate Plans Have some stuff I’m going to / want to try and start before the next devlog; Logging Functions to simply logging to console and file * Something like log_note() , log_warn() , and log_error() * Currently just writing both fprintf() and perror() Add functionality to digital and analog requests * Need to add packet structures and creator functions for both Seperate network functionality like socket() , send() , etc… into its own library fucntions Seperate shared code between server and client into common library Media I thought I would include this section to explain some of things in the attached videos. These show all the features I implemented, including the client server loop, logging, and error handling Video 1 This just shows the current loop between the client and server, where the client sends a packet, a reset link packet in this case, and the server responds, in this case with a simple acknowledgement. It also shows how both programs log information about their runs in an assocaited text file. Btw, if you have some sugestions for making this better, please leave a comment . This is just about the simplest way to do logging, so other ideas are appreciated! Video 2 This shows an example of custom ports, error handling, and more logging. Both the client and server support custom ports (and server adresses in the case of the client) passed in as a launch argument. You can see when the client trys to connect to a server that either doesn’t exist on the current port, or isn’t active, an error message is displayed into the console and logged in the file. Alternatively, when both use the same port, the connection succeds, that port is logged as well. Wrap Up Lots of stuff to do still, and I am super excited to get started. Thank you to the few of you who have been following development since the beginning, and hello to anyone new!
Finished adding the logging library I mentioned in the last post. It supports Colored text for warning and errors, time stamps, and better formatting. Ironically, the hardest part about this was figuring out how to use ANSI escape codes to support the colored text. This Medium article fromVitor Matias was super helpful! i also realized most people dont wanna read walls, so my updates will be smaller form now!
Small addition. Made log_info() a variadic function, like printf() . This means you can now do the same formatting like printf("hello %s", "world") . This allows for easier logging to file and console, as both are just an arg in the funciton call! Yay!!!!
More work on the logging system. Realized that we can use a global var with an init function to remove the need for each log call to pass the file pointer to the log Previous Method; // main log_err ( errno , "client/main" , fptr ); The fptr is a FILE* varible that points to the logging file New Method; // log.c static FILE * log_file = NULL ; int log_init ( const char * file_path ) { log_file = fopen ( file_path , "a" ); if ( log_file == NULL ) { log_err ( errno , "log/log_init" ); return - 1 ; } return 0 ; } // main log_init ( "log/log.txt" ); log_err ( errno , "client/main" ); The new method means all you have to pass is errno and the location of error. Super Simple!!! I also updated both client and server with this system. Bye
Been a busy 4 days. Worked on mostly modularity for the program, making sure that I am not repeating code that can be a function as part of a larger library The 2 libraries I implemented were the common/ and network/ libraries. These are used in both the client and server. Common includes functions like setting up connections, sending packets, receiving packets, interpreting them, and polling them for data The network library handles connecting to a server/client, and others. I also finally added the ability for the client (main stations/ems) to multiple servers (outstations/rtu). You can see a demo of all this working in the video. That’s it for now, goodbye!
Im just going to appologize now, this devlog is not gonna be that great. I have been working the past few days on packet generation. Specifically on requesting data from a server, and writing that data to a packet as a server. As you can see by the time, this is much harder than it may seem. Though I did predict this a while ago. When the client request data from the server, a function is invoked that configures the group (data type; digital or analog) and the variation (presentation; packed format or with extra flags). When the server responds to this request, it invokes a function (technically 2) that refreshes the data it has (currently using a random number generator) and writes that to a packet. The packet is mostly a clone of the request, just with the source and destination switched, and the data added. Currently, I have both functions completed (or almost completed), but I still need to add crc to the reply form the server, and fix the many bugs that have arrisen from this change. Bellow I have an example request, no reply becuase the function is currently inoperable :( 05 64 0F C4 01 00 00 00 C8 E2 C1 C0 01 01 01 10 F7 03 00 0F 00 00 This request is asking for data from the server with address 1, data type 30 (digital), and the data points 3-15 Once again, very sorry for the poor quality dev log, but I just wanted to get an update out before I dug myself into an even deeper hole. See you guys later!
IM FREEEEE I FINALLY finished writing the write_data() function. Now full packet generation, with a request, and a reply is complete! Litterly the only thing left to do is make the ui. I AM DONE WITH THE BACKEND!!!!! I have included a handy guide to the output bellow. Instead of another picture of my terminal, you guys get to enjoy some color coded google docs!
Added the data generation, request creation, and response creation to the client and server. You can see a demo below. Not a giant change, just integrating the the new functions into the Client and Server.
Just finished the Server-Client loop, as well as overhawling the parser binary. We are ready to SHIP!
Ships:
What did you make? I built a partial implementation of DNP3 in C, along with a TCP client/server simulator and an interactive packet parser. DNP3 is a communication protocol used in SCADA systems, including power utilities and water management. It lets equipment at remote sites send measurements and status information to control centers. The protocol is decades old and widely used, but finding detailed, freely available documentation was surprisingly difficult. My project implements a small subset of it so you can generate data, exchange packets between programs, and inspect what those packets contain. Why was it challenging? The hardest part was turning the protocol’s packet layouts into working C code. DNP3 originated in serial communication, and carrying its frames over TCP meant handling the fact that one network read doesn’t necessarily equal one complete packet. This was also my first big C project. Coming from Java, I had to get comfortable with pointers, manual memory handling, sockets, and the difference between a struct’s layout in memory and the bytes a protocol expects. Struct padding caused a lot more trouble than I expected 😭. I also took a roughly two-month break. Returning to code I’d written while still learning C was a challenge of its own, especially where I hadn’t used consistent conventions or documented my decisions. What are you proud of? Mostly, that I stuck with it. This project pushed me through problems that initially felt impossible and taught me how to break them down, investigate them, and keep going. I understand memory layout, byte order, networking, and C much better now than when I started. Seeing the client request data, the server build a response, and the parser turn those bytes into readable fields made that work feel worth it. What should people know before using it? Read the README first! It explains how to build the programs, configure connections, and use the supported packet formats. This is a partial implementation, so it won’t interpret every DNP3 packet. For a quick demo: Start the server. Its default port is 48188. Choose Group 1, Variation 2 for binary values with flags, or Group 30, Variation 1 for analog values with flags. Use a small point range, such as 0–7. Start the client, enter port 48188, and enter 0 as the address to use localhost. Copy a complete reply from the client’s output into the parser. Join the hex bytes into one line and leave out the surrounding log messages. (certain consoles will do this automatically hint hint vscode...
|
1793566519.807824
|
1793652919.807824
|
|
63187
|
Hand gestured RC plane by @sricharangaddam300 | St Hand gestured RC plane by @sricharangaddam300 | Stardance...
|
sricharangaddam300
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hand gestured RC plane by @sricharangaddam3 Title: Hand gestured RC plane by @sricharangaddam300 | Stardance...
|
1793048118.4991663
|
1793652918.4991663
|
|
50721
|
KeyraSite by @Keyra | Stardance
|
Keyra
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T10:45:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own personal portfolio where I can keep my projects, achievements, and contact links all in one place! The biggest challenge was turning the design I had in my head into an actual website, and I changed a LOT of little things before I was happy with it. My favorite part is definitely the galaxy background because I’ve always wanted a website with a galaxy theme!! the site is simple but has three buttons which take you to each section + links to my github and linkedin.", "repo": "https://github.com/Keyrajmnz/KeyraSite", "demo": "https://keyrajmnz.github.io/KeyraSite/"}]...
|
[{"post_id": 52239, "ts": "202 [{"post_id": 52239, "ts": "2026-08-22T10:29:49Z", "hours": 2.4792, "text": "Built a personal site! I gave it a dark galaxy + computer vibe and filled it with projects, achievements, and details that actually feel like me. I changed sooo many tiny things along the way, but seeing it all come together was 100% worth it ★"}]...
|
Title: KeyraSite by @Keyra | Stardance
Devlogs:
B Title: KeyraSite by @Keyra | Stardance
Devlogs:
Built a personal site! I gave it a dark galaxy + computer vibe and filled it with projects, achievements, and details that actually feel like me. I changed sooo many tiny things along the way, but seeing it all come together was 100% worth it ★
Ships:
I made my own personal portfolio where I can keep my projects, achievements, and contact links all in one place! The biggest challenge was turning the design I had in my head into an actual website, and I changed a LOT of little things before I was happy with it. My favorite part is definitely the galaxy background because I’ve always wanted a website with a galaxy theme!! the site is simple but has three buttons which take you to each section + links to my github and linkedin....
|
1793566517.7785153
|
1793652917.7785153
|
|
63185
|
RF based morse code transmitter by @ajmaleee__ | S RF based morse code transmitter by @ajmaleee__ | Stardance...
|
ajmaleee__
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: RF based morse code transmitter by @ajmalee Title: RF based morse code transmitter by @ajmaleee__ | Stardance...
|
1793048117.6747282
|
1793652917.6747282
|
|
63184
|
My awesome macropad! by @Summie | Stardance
|
Summie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Summie | Stardance
|
1793048116.8249655
|
1793652916.8249655
|
|
63182
|
My awesome macropad! by @dhruvasm | Stardance
|
dhruvasm
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @dhruvasm | Stardan Title: My awesome macropad! by @dhruvasm | Stardance...
|
1793048115.9595435
|
1793652915.9595435
|
|
63181
|
JapanOS by @ViratReddy | Stardance
|
ViratReddy
|
0
|
0.36
|
0
|
[]
|
[{"post_id": 70374, "ts": "202 [{"post_id": 70374, "ts": "2026-09-19T02:08:55Z", "hours": 0.365, "text": "Adding images now"}]...
|
Title: JapanOS by @ViratReddy | Stardance
Devlogs Title: JapanOS by @ViratReddy | Stardance
Devlogs:
Adding images now...
|
1793048115.0908322
|
1793652915.0908322
|
|
63180
|
My own site! by @Kirti-Kumari | Stardance
|
Kirti-Kumari
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Kirti-Kumari | Stardance
|
1793048114.244221
|
1793652914.244221
|
|
63179
|
Fps by @expiring32 | Stardance
|
expiring32
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Fps by @expiring32 | Stardance
|
1793048113.4310837
|
1793652913.4310837
|
|
63178
|
Digital watch by @freddiejcgray | Stardance
|
freddiejcgray
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Digital watch by @freddiejcgray | Stardance
|
1793048112.5896323
|
1793652912.5896323
|
|
63177
|
BLARE by @ligishuen | Stardance
|
ligishuen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE by @ligishuen | Stardance
|
1793048111.7054868
|
1793652911.7054868
|
|
63176
|
Rex board by @T-Rex_ | Stardance
|
T-Rex_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Rex board by @T-Rex_ | Stardance
|
1793048110.8274393
|
1793652910.8274393
|
|
63175
|
prototype of rl trading bot on xauusd by @orlandor prototype of rl trading bot on xauusd by @orlandorocco | Stardance...
|
orlandorocco
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: prototype of rl trading bot on xauusd by @o Title: prototype of rl trading bot on xauusd by @orlandorocco | Stardance...
|
1793048109.8241842
|
1793652909.8241842
|
|
48178
|
Domestic Violence Advocacy by @Sushmita | Stardanc Domestic Violence Advocacy by @Sushmita | Stardance...
|
Sushmita
|
1
|
2.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T01:14:34Z", "hours": 2.0, "multiplier": 2.12, "payout": 5, "blessing": "neutral", "text": "I made an advocacy website on domestic violence using HTML, CSS, and JS. Since I’ve made a few websites before, it was for the most part not challenging, but I had to look up some small problems I had. I used my previous projects’ repos for inspriation/help as well. I’m proud that I’m able to combine everything that I’ve learned into this project!", "repo": "https://github.com/Sushmita-Jacob/dv-advocacy", "demo": "https://sushmita-jacob.github.io/dv-advocacy/"}]...
|
[{"post_id": 50003, "ts": "202 [{"post_id": 50003, "ts": "2026-08-19T01:07:27Z", "hours": 1.1264, "text": "Devlog #2: Styling I added/changed the following features: Made the nav bar cleaner Added a border around the DV definition and facts Changed the font to something that fits the topic better Fixed image styling (made them the same size and added a border) Added better coloring (ex. the nav bar button is darker when hovered over)"}, {"post_id": 47853, "ts": "2026-08-16T02:35:00Z", "hours": 1.2939, "text": "Devlog #1: Basic website I decided to create a website for a domestic violence instiute capstone project and Girls Who Code’s Pathways program (Web Development). The website currently features 3 pages: a home page with the definition of domestic violence, a fact generator that circles through different DV facts, and resources by My Sister’s Place on types/signs of DV compared to healthy relationships. I plan to add better styling, animations, and fix the navigation bar."}]...
|
Title: Domestic Violence Advocacy by @Sushmita | S Title: Domestic Violence Advocacy by @Sushmita | Stardance
Devlogs:
Devlog #1: Basic website I decided to create a website for a domestic violence instiute capstone project and Girls Who Code’s Pathways program (Web Development). The website currently features 3 pages: a home page with the definition of domestic violence, a fact generator that circles through different DV facts, and resources by My Sister’s Place on types/signs of DV compared to healthy relationships. I plan to add better styling, animations, and fix the navigation bar.
Devlog #2: Styling I added/changed the following features: Made the nav bar cleaner Added a border around the DV definition and facts Changed the font to something that fits the topic better Fixed image styling (made them the same size and added a border) Added better coloring (ex. the nav bar button is darker when hovered over)
Ships:
I made an advocacy website on domestic violence using HTML, CSS, and JS. Since I’ve made a few websites before, it was for the most part not challenging, but I had to look up some small problems I had. I used my previous projects’ repos for inspriation/help as well. I’m proud that I’m able to combine everything that I’ve learned into this project!...
|
1793566506.7579882
|
1793652906.7579882
|
|
63174
|
test by @dfe | Stardance
|
dfe
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: test by @dfe | Stardance
|
1793048105.7632253
|
1793652905.7632253
|
|
63172
|
MP3 player by @Thenix | Stardance
|
Thenix
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: MP3 player by @Thenix | Stardance
|
1793048104.897536
|
1793652904.897536
|
|
63169
|
My own site! by @kamron | Stardance
|
kamron
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @kamron | Stardance
|
1793048104.013243
|
1793652904.013243
|
|
34054
|
Orion by @phattar4phan | Stardance
|
phattar4phan
|
1
|
9.72
|
92
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T19:20:46Z", "hours": 9.0, "multiplier": 9.95, "payout": 92, "blessing": "neutral", "text": "I make an AI model that could classify white blood cell from scratch (one input at a time as I dont have enough compute unit), the challenging parts ware that I’m not really that good at math so yeah need some AI to help coding the model part to ensure as much accuracy as possible, although it’s minimal but I tried to make it have the highest possible accuracy, the last trained one got ‘Peak’ at 99.19% quite good but it results in getting 100% confident score every time. Before testing, you can test it directly in the web, no downloading or installation required unless you want to make it locally (test at orion.phattar4phan.workers.dev), Proud to show that at least I can make an AI model, next one will be small language model with only ~7.8m parameters, just wait!", "repo": "https://github.com/phattar4phan/orion", "demo": "https://orion.phattar4phan.workers.dev/"}]...
|
[{"post_id": 33586, "ts": "202 [{"post_id": 33586, "ts": "2026-07-23T17:06:01Z", "hours": 0.7214, "text": "Retrained the model as I have added ‘label_smoothing=0.1’ to criterion to lower the probability of image that is jot white blood cell to be classified and show as a type of wbc with high confident score, also removed static glassmorphism header from the site and also added grid table with some clustered gradients as the background to not make it static"}, {"post_id": 33129, "ts": "2026-07-22T19:11:35Z", "hours": 1.7517, "text": "Finale version, removed the 5 models comparison as I dont have time to create all that right now. Only 1 model 1 interference and it’s donee"}, {"post_id": 29552, "ts": "2026-07-16T15:47:41Z", "hours": 3.8708, "text": "Created new landing page and web app page, also bunch of new objs"}, {"post_id": 27749, "ts": "2026-07-13T16:05:40Z", "hours": 0.5442, "text": "Modified some configurations and deploy or vercel (try it at orion-cnn.vercel.app)"}, {"post_id": 27173, "ts": "2026-07-12T14:29:04Z", "hours": 3.0931, "text": "Trained CNN from scratch model, and more training logs: Training Logs ┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━┓ ┃ Epoch ┃ Loss ┃ Accuracy ┃ Valid ┃ Duration(s) ┃ ┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━┩ │ 1/20 │ 0.8463 │ 66.54% │ 86.70% │ 48.77 │ │ 2/20 │ 0.5111 │ 81.43% │ 92.74% │ 47.21 │ │ 3/20 │ 0.3835 │ 86.39% │ 91.02% │ 47.00 │ │ 4/20 │ 0.3203 │ 88.78% │ 93.51% │ 46.79 │ │ 5/20 │ 0.2671 │ 90.80% │ 93.51% │ 47.19 │ │ 6/20 │ 0.2448 │ 91.36% │ 93.58% │ 47.44 │ │ 7/20 │ 0.2161 │ 92.34% │ 94.11% │ 47.21 │ │ 8/20 │ 0.1961 │ 93.18% │ 95.82% │ 47.16 │ │ 9/20 │ 0.1859 │ 93.48% │ 96.25% │ 47.15 │ │ 10/20 │ 0.1693 │ 93.97% │ 95.72% │ 47.82 │ │ 11/20 │ 0.1592 │ 94.35% │ 94.46% │ 47.51 │ │ 12/20 │ 0.1503 │ 94.60% │ 96.07% │ 47.39 │ │ 13/20 │ 0.1405 │ 95.24% │ 95.26% │ 47.59 │ │ 14/20 │ 0.1356 │ 95.07% │ 96.28% │ 47.66 │ │ 15/20 │ 0.1232 │ 95.79% │ 96.21% │ 48.00 │ │ 16/20 │ 0.1218 │ 95.91% │ 96.81% │ 47.60 │ │ 17/20 │ 0.1195 │ 95.93% │ 98.11% │ 47.72 │ │ 18/20 │ 0.1162 │ 96.10% │ 97.54% │ 48.10 │ │ 19/20 │ 0.1076 │ 96.49% │ 97.58% │ 47.76 │ │ 20/20 │ 0.1054 │ 96.36% │ 97.05% │ 47.81 │ └───────┴────────┴──────────┴────────┴─────────────┘ Best: E:17 | Validation Accuracy: 98.11 Resulted in the best validation accuracy at 98.11% and at epoch 17th, only need to train the remaining 4 models"}]...
|
Title: Orion by @phattar4phan | Stardance
Devlogs Title: Orion by @phattar4phan | Stardance
Devlogs:
Trained CNN from scratch model, and more training logs: Training Logs ┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━┓ ┃ Epoch ┃ Loss ┃ Accuracy ┃ Valid ┃ Duration(s) ┃ ┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━┩ │ 1/20 │ 0.8463 │ 66.54% │ 86.70% │ 48.77 │ │ 2/20 │ 0.5111 │ 81.43% │ 92.74% │ 47.21 │ │ 3/20 │ 0.3835 │ 86.39% │ 91.02% │ 47.00 │ │ 4/20 │ 0.3203 │ 88.78% │ 93.51% │ 46.79 │ │ 5/20 │ 0.2671 │ 90.80% │ 93.51% │ 47.19 │ │ 6/20 │ 0.2448 │ 91.36% │ 93.58% │ 47.44 │ │ 7/20 │ 0.2161 │ 92.34% │ 94.11% │ 47.21 │ │ 8/20 │ 0.1961 │ 93.18% │ 95.82% │ 47.16 │ │ 9/20 │ 0.1859 │ 93.48% │ 96.25% │ 47.15 │ │ 10/20 │ 0.1693 │ 93.97% │ 95.72% │ 47.82 │ │ 11/20 │ 0.1592 │ 94.35% │ 94.46% │ 47.51 │ │ 12/20 │ 0.1503 │ 94.60% │ 96.07% │ 47.39 │ │ 13/20 │ 0.1405 │ 95.24% │ 95.26% │ 47.59 │ │ 14/20 │ 0.1356 │ 95.07% │ 96.28% │ 47.66 │ │ 15/20 │ 0.1232 │ 95.79% │ 96.21% │ 48.00 │ │ 16/20 │ 0.1218 │ 95.91% │ 96.81% │ 47.60 │ │ 17/20 │ 0.1195 │ 95.93% │ 98.11% │ 47.72 │ │ 18/20 │ 0.1162 │ 96.10% │ 97.54% │ 48.10 │ │ 19/20 │ 0.1076 │ 96.49% │ 97.58% │ 47.76 │ │ 20/20 │ 0.1054 │ 96.36% │ 97.05% │ 47.81 │ └───────┴────────┴──────────┴────────┴─────────────┘ Best: E:17 | Validation Accuracy: 98.11 Resulted in the best validation accuracy at 98.11% and at epoch 17th, only need to train the remaining 4 models
Modified some configurations and deploy or vercel (try it at orion-cnn.vercel.app)
Created new landing page and web app page, also bunch of new objs
Finale version, removed the 5 models comparison as I dont have time to create all that right now. Only 1 model 1 interference and it’s donee
Retrained the model as I have added ‘label_smoothing=0.1’ to criterion to lower the probability of image that is jot white blood cell to be classified and show as a type of wbc with high confident score, also removed static glassmorphism header from the site and also added grid table with some clustered gradients as the background to not make it static
Ships:
I make an AI model that could classify white blood cell from scratch (one input at a time as I dont have enough compute unit), the challenging parts ware that I’m not really that good at math so yeah need some AI to help coding the model part to ensure as much accuracy as possible, although it’s minimal but I tried to make it have the highest possible accuracy, the last trained one got ‘Peak’ at 99.19% quite good but it results in getting 100% confident score every time. Before testing, you can test it directly in the web, no downloading or installation required unless you want to make it locally (test at orion.phattar4phan.workers.dev), Proud to show that at least I can make an AI model, next one will be small language model with only ~7.8m parameters, just wait!...
|
1793566503.7411263
|
1793652903.7411263
|
|
63168
|
My first slack bot! by @Antibiotics | Stardance
|
Antibiotics
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Antibiotics | Stard Title: My first slack bot! by @Antibiotics | Stardance...
|
1793048103.171474
|
1793652903.171474
|
|
63167
|
html website by @bdntx1 | Stardance
|
bdntx1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: html website by @bdntx1 | Stardance
|
1793048102.3139074
|
1793652902.3139074
|
|
63166
|
Rocket trajectory & orbitan simulator by @Mari Rocket trajectory & orbitan simulator by @Mariamm1 | Stardance...
|
Mariamm1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Rocket trajectory & orbitan simulator b Title: Rocket trajectory & orbitan simulator by @Mariamm1 | Stardance...
|
1793048101.4123354
|
1793652901.4123354
|
|
63163
|
Yy by @rishabhs | Stardance
|
rishabhs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Yy by @rishabhs | Stardance
|
1793048100.540668
|
1793652900.540668
|
|
47357
|
Cosmic conqueror by @ayaan17120 | Stardance
|
ayaan17120
|
1
|
44.0
|
615
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T20:29:24Z", "hours": 44.0, "multiplier": 13.86, "payout": 615, "blessing": "neutral", "text": "i made a game called the cosmic conqueror, the adventures of mishi, this game is something i worked and it honestly was reallt tiring, i got stuvk like a million times for small errors and it was really tiring. i love this game but now after doing everything i realised i have put every effort intp and i lovr this despite anything. i made a small error tho, to the space riddle, i didnt change the question so there are two blackhole riddles, but the answer to one is space", "repo": "https://github.com/Jsvuskgxixylsurdoyc/COSMIC-CONQUUEROR", "demo": "https://qaziiiayaan.itch.io/cosmic-conqueror"}]...
|
[{"post_id": 54033, "ts": "202 [{"post_id": 54033, "ts": "2026-08-24T19:46:19Z", "hours": 4.7894, "text": "i finally added all the start pause game over, complete scenes and finallt put all of these guys intop thier respective places and the game is finally complete"}, {"post_id": 53058, "ts": "2026-08-23T13:38:16Z", "hours": 3.9117, "text": "I coded these interactive riddle walls basically, you walk up to a dead end, a UI pops up, and you have to type in the exact right password to a riddle. If you get it right, the wall literally deletes itself and clears the path. I placed four of these riddle gates across the map. Getting the UI to actually work was a nightmare though. but now I finally have actual on-screen popups that yell ‘Right Answer!’ or ‘Wrong Answer!’ in your face and fade out after a couple of seconds. On top of that, I built out the whole Space Key fragment mechanic and completely mapped out the dungeon layout. You start in this bottom tunnel, solve your way through the main gates, and then have to survive branching left and right mazes to hunt down these key fragments. I set it all up so you’ll eventually have to clear a central boss arena and fight off skeleton mage ambushes just to get the pieces. I also spent way too long fixing dumb bugs like my character freezing mid-run when opening a menu, or endlessly jumping against flat walls like an idiot because of broken physics code. But I locked the movement inputs down, and it finally actually plays like a real dungeon crawler. The grind was unreal, but we’re locked in now."}, {"post_id": 52527, "ts": "2026-08-22T18:05:25Z", "hours": 3.2258, "text": "Today, I mapped out the core layout for my game and officially shifted the concept to a sci-fi “space dungeon.” The main loop is now focused on exploring the map, fighting through various enemies, and eventually finding a way to escape back to your home planet. To make the exploration actually matter, I decided to add a collectible space key that the player must find to unlock the final escape shuttle. After some trial and error with the engine’s physics, I successfully got the key fully implemented and working. With the escape puzzle finished, I am ready to move on and start building out the rest of the stuff, like the enemies and boss fights!"}, {"post_id": 51768, "ts": "2026-08-21T16:38:51Z", "hours": 1.6261, "text": "today i jus worked on player animations, added different spells and added drain and limit systems for that, and i also added stamina drain systems"}, {"post_id": 51155, "ts": "2026-08-20T17:29:56Z", "hours": 1.6436, "text": "today i couldnt do much. i jus fixed a lot of bugs. and i also started to work on the abilities of the player and what they can do"}, {"post_id": 50415, "ts": "2026-08-19T16:08:32Z", "hours": 5.0589, "text": "i added the projectile attacks, made them work for anyday. and made sure the attacks are perfect and fixed the bugs and now working on ui, too tired to post a screenshot, sorry guys :)"}, {"post_id": 49721, "ts": "2026-08-18T17:07:48Z", "hours": 2.6131, "text": "today i did a lot of work, i added the attack mechanics and made my player get attacked and attack. its not only animation now it works, now ive to work on the projectiles and health bars and make sure the player dies actually, so this is all very cool"}, {"post_id": 48890, "ts": "2026-08-17T13:37:17Z", "hours": 2.4631, "text": "first i added the skeleton warrior and did everything related to him Then I added the new Skeleton Mage, and oh my god, this guy gave me so many headaches. Whenever I clicked on him, the editor threw this weird float and bool mismatch error. I had to go into the animation tracks and change the update mode to discrete so the engine wouldn’t freak out. And then, after writing all the codes and doing everything, he STILL wasn’t attacking me. I made sure the script was perfect, right? But then I realized I plugged the wires backwards in the Animation Tree… I literally had the move state plugged into the shot port. Fixed that, and he still wasn’t shooting. Why? Because I just forgot to tick the ‘Autostart’ box on his attack timer. Honestly so annoying."}, {"post_id": 48377, "ts": "2026-08-16T18:14:54Z", "hours": 3.67, "text": "Worked on setting up and fixing the boss AI and animation state machine in Godot. Got the base movement working, fixed the attack timer pacing so the boss doesn’t instantly spam ranged attacks from across the map, and successfully resolved the issue where the boss kept playing the running/walking animation in place instead of returning to idle. Decided to temporarily shelf the spin attack feature by commenting out the code to keep things simple for now, and finalized a smooth, working combat loop with proper melee and ranged states."}, {"post_id": 48023, "ts": "2026-08-16T09:38:10Z", "hours": 4.2953, "text": "#devlog so finally i am done with the player mechanics completely, my player now blinks jumps runs walks, sprints, can defend using a sheild, can attack with a sword and can switch to a wand and attack using that. now ill start working on the attack mechanics and the enemies"}, {"post_id": 47392, "ts": "2026-08-15T09:42:46Z", "hours": 3.8317, "text": "right now i first addeed the sprint and jump to the capsule and then i finally added the chharacter and his animations and made those animations work, jump run and idle"}, {"post_id": 47024, "ts": "2026-08-14T16:50:48Z", "hours": 3.6786, "text": "earlier i messed up and put everything in one scene, i had to redo everything and fixed it, plus i added spring and did everything related to the camera. now im workingg on the jump"}, {"post_id": 46809, "ts": "2026-08-14T10:05:00Z", "hours": 3.5264, "text": "i am working on survival game which is inspired from the legend of zelda in which you kill the final boss of another planet and escape on your shuttle. right now i have made the base and the character, i have coded the character and the camera controls, gave the camera basic code to follow the character and basic rotational mechanics"}]...
|
Title: Cosmic conqueror by @ayaan17120 | Stardance Title: Cosmic conqueror by @ayaan17120 | Stardance
Devlogs:
i am working on survival game which is inspired from the legend of zelda in which you kill the final boss of another planet and escape on your shuttle. right now i have made the base and the character, i have coded the character and the camera controls, gave the camera basic code to follow the character and basic rotational mechanics
earlier i messed up and put everything in one scene, i had to redo everything and fixed it, plus i added spring and did everything related to the camera. now im workingg on the jump
right now i first addeed the sprint and jump to the capsule and then i finally added the chharacter and his animations and made those animations work, jump run and idle
#devlog so finally i am done with the player mechanics completely, my player now blinks jumps runs walks, sprints, can defend using a sheild, can attack with a sword and can switch to a wand and attack using that. now ill start working on the attack mechanics and the enemies
Worked on setting up and fixing the boss AI and animation state machine in Godot. Got the base movement working, fixed the attack timer pacing so the boss doesn’t instantly spam ranged attacks from across the map, and successfully resolved the issue where the boss kept playing the running/walking animation in place instead of returning to idle. Decided to temporarily shelf the spin attack feature by commenting out the code to keep things simple for now, and finalized a smooth, working combat loop with proper melee and ranged states.
first i added the skeleton warrior and did everything related to him Then I added the new Skeleton Mage, and oh my god, this guy gave me so many headaches. Whenever I clicked on him, the editor threw this weird float and bool mismatch error. I had to go into the animation tracks and change the update mode to discrete so the engine wouldn’t freak out. And then, after writing all the codes and doing everything, he STILL wasn’t attacking me. I made sure the script was perfect, right? But then I realized I plugged the wires backwards in the Animation Tree… I literally had the move state plugged into the shot port. Fixed that, and he still wasn’t shooting. Why? Because I just forgot to tick the ‘Autostart’ box on his attack timer. Honestly so annoying.
today i did a lot of work, i added the attack mechanics and made my player get attacked and attack. its not only animation now it works, now ive to work on the projectiles and health bars and make sure the player dies actually, so this is all very cool
i added the projectile attacks, made them work for anyday. and made sure the attacks are perfect and fixed the bugs and now working on ui, too tired to post a screenshot, sorry guys :)
today i couldnt do much. i jus fixed a lot of bugs. and i also started to work on the abilities of the player and what they can do
today i jus worked on player animations, added different spells and added drain and limit systems for that, and i also added stamina drain systems
Today, I mapped out the core layout for my game and officially shifted the concept to a sci-fi “space dungeon.” The main loop is now focused on exploring the map, fighting through various enemies, and eventually finding a way to escape back to your home planet. To make the exploration actually matter, I decided to add a collectible space key that the player must find to unlock the final escape shuttle. After some trial and error with the engine’s physics, I successfully got the key fully implemented and working. With the escape puzzle finished, I am ready to move on and start building out the rest of the stuff, like the enemies and boss fights!
I coded these interactive riddle walls basically, you walk up to a dead end, a UI pops up, and you have to type in the exact right password to a riddle. If you get it right, the wall literally deletes itself and clears the path. I placed four of these riddle gates across the map. Getting the UI to actually work was a nightmare though. but now I finally have actual on-screen popups that yell ‘Right Answer!’ or ‘Wrong Answer!’ in your face and fade out after a couple of seconds. On top of that, I built out the whole Space Key fragment mechanic and completely mapped out the dungeon layout. You start in this bottom tunnel, solve your way through the main gates, and then have to survive branching left and right mazes to hunt down these key fragments. I set it all up so you’ll eventually have to clear a central boss arena and fight off skeleton mage ambushes just to get the pieces. I also spent way too long fixing dumb bugs like my character freezing mid-run when opening a menu, or endlessly jumping against flat walls like an idiot because of broken physics code. But I locked the movement inputs down, and it finally actually plays like a real dungeon crawler. The grind was unreal, but we’re locked in now.
i finally added all the start pause game over, complete scenes and finallt put all of these guys intop thier respective places and the game is finally complete
Ships:
i made a game called the cosmic conqueror, the adventures of mishi, this game is something i worked and it honestly was reallt tiring, i got stuvk like a million times for small errors and it was really tiring. i love this game but now after doing everything i realised i have put every effort intp and i lovr this despite anything. i made a small error tho, to the space riddle, i didnt change the question so there are two blackhole riddles, but the answer to one is space...
|
1793566499.814219
|
1793652899.814219
|
|
63162
|
FairwayIndex by @fedcr | Stardance
|
fedcr
|
0
|
4.45
|
0
|
[]
|
[{"post_id": 70132, "ts": "202 [{"post_id": 70132, "ts": "2026-09-18T15:04:09Z", "hours": 2.2717, "text": "I have made the html page, with links and c++ script. Now I will work on the css to make the web page “lookable at”"}, {"post_id": 69779, "ts": "2026-09-17T19:28:01Z", "hours": 1.3131, "text": "Implemented the complete index averaging engine. Added cap limiters (soft and hard cap). Built the CLI driver and JSON exporter. Validated index outputs againt official 20 round benchmark, logging selected scoring differentials and cap trigger states. It seems to have some bugs I will work on later"}, {"post_id": 69729, "ts": "2026-09-17T17:40:33Z", "hours": 0.5581, "text": "Implemented the world handicap system differential formulas and added the world handicap system sliding scale matrix determining the exact count of lowest differentials used base on total registered scoring records. Incorpored 113 standard slope baseline"}, {"post_id": 69712, "ts": "2026-09-17T16:57:39Z", "hours": 0.3106, "text": "Initialized the FairwayIndex repository. Defined standard world handicap system domain models, including course rating, slope, adjusted gross score and 9 or 18 hole round configurations with playing conditions calculation support"}]...
|
Title: FairwayIndex by @fedcr | Stardance
Devlogs Title: FairwayIndex by @fedcr | Stardance
Devlogs:
Initialized the FairwayIndex repository. Defined standard world handicap system domain models, including course rating, slope, adjusted gross score and 9 or 18 hole round configurations with playing conditions calculation support
Implemented the world handicap system differential formulas and added the world handicap system sliding scale matrix determining the exact count of lowest differentials used base on total registered scoring records. Incorpored 113 standard slope baseline
Implemented the complete index averaging engine. Added cap limiters (soft and hard cap). Built the CLI driver and JSON exporter. Validated index outputs againt official 20 round benchmark, logging selected scoring differentials and cap trigger states. It seems to have some bugs I will work on later
I have made the html page, with links and c++ script. Now I will work on the css to make the web page “lookable at”...
|
1793048099.67773
|
1793652899.67773
|
|
63161
|
UniVision AR by @Motabar_Hayitboyeva | Stardance
|
Motabar_Hayitboyeva
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: UniVision AR by @Motabar_Hayitboyeva | Star Title: UniVision AR by @Motabar_Hayitboyeva | Stardance...
|
1793048098.8342285
|
1793652898.8342285
|
|
63159
|
My own site! by @Douae | Stardance
|
Douae
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Douae | Stardance
|
1793048097.1132812
|
1793652897.1132812
|