|
30723
|
My Personal Site by @253_Mathilde_IYKYK | Stardanc My Personal Site by @253_Mathilde_IYKYK | Stardance...
|
253_Mathilde_IYKYK
|
1
|
7.92
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T17:09:31Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website about myself. I found it pretty hard to keep everything organized inside the div containers because my layout is quite full. Most of the time I used an interpreter, which made things a bit harder, but I think it really helped me to get back into the language in the context of programming. I had so much fun. For my project, there’s one thing you should definitely try: please highlight a piece of text. I know it’s such a small amount of code and such a simple feature, but I just love it so much. Also, please check out all the little details I added. Working on this project reminded me how much I missed programming. I hope I’ll make more projects now that school is finally over. The rest of my website is pretty self‑explanatory. I typed this message myself in English, but I corrected it with AI, so please understand that. I did not use AI in my code.", "repo": "https://github.com/253-Mathilde/My-Universe", "demo": "https://253-mathilde.github.io/My-Universe/"}]...
|
[{"post_id": 25264, "ts": "202 [{"post_id": 25264, "ts": "2026-07-09T12:50:26Z", "hours": 0.9222, "text": "So I organized the code and changed some stuff.It still looks the same ( when you just check the site but the code is different) and I am going to upgrade this when I am done with my OS!"}, {"post_id": 23579, "ts": "2026-07-06T16:47:52Z", "hours": 0.2889, "text": "We’re now at the end of our project. I made the README really long (don’t worry — if you only want single elements from my site, just scroll down; there are lots of links). I hope you like it, and I’ll definitely make more projects. This one was just to get back into programming"}, {"post_id": 23550, "ts": "2026-07-06T16:08:28Z", "hours": 0.5817, "text": "Hi there ,I think I am going to ship today!!!!!"}, {"post_id": 23515, "ts": "2026-07-06T15:13:41Z", "hours": 2.1981, "text": "I just finished my README! I did my best to explain everything — hope you like it! I literally wrote it three times because I’m too dumb to save things 😭😭. If you have any questions, just leave a comment and I’ll try my best to help you!"}, {"post_id": 22966, "ts": "2026-07-05T17:18:33Z", "hours": 2.55, "text": "Hi, I really locked in and made the website! I know it’s not perfect, but all I need are a few size adjustments and some picture changes. I’m not so sure about that big doll picture (I hope you know which one I mean) in the middle of the container. Do you have any ideas on what might look better, or should I leave it as it is? I also need to update my README, but I’m not sure if I’ll have enough time today."}, {"post_id": 22799, "ts": "2026-07-05T11:43:48Z", "hours": 0.9025, "text": "I just did my README and started working on my site. I think I am getting pretty far with this project today!"}]...
|
Title: My Personal Site by @253_Mathilde_IYKYK | S Title: My Personal Site by @253_Mathilde_IYKYK | Stardance
Devlogs:
I just did my README and started working on my site. I think I am getting pretty far with this project today!
Hi, I really locked in and made the website! I know it’s not perfect, but all I need are a few size adjustments and some picture changes. I’m not so sure about that big doll picture (I hope you know which one I mean) in the middle of the container. Do you have any ideas on what might look better, or should I leave it as it is? I also need to update my README, but I’m not sure if I’ll have enough time today.
I just finished my README! I did my best to explain everything — hope you like it! I literally wrote it three times because I’m too dumb to save things 😭😭. If you have any questions, just leave a comment and I’ll try my best to help you!
Hi there ,I think I am going to ship today!!!!!
We’re now at the end of our project. I made the README really long (don’t worry — if you only want single elements from my site, just scroll down; there are lots of links). I hope you like it, and I’ll definitely make more projects. This one was just to get back into programming
So I organized the code and changed some stuff.It still looks the same ( when you just check the site but the code is different) and I am going to upgrade this when I am done with my OS!
Ships:
I made a website about myself. I found it pretty hard to keep everything organized inside the div containers because my layout is quite full. Most of the time I used an interpreter, which made things a bit harder, but I think it really helped me to get back into the language in the context of programming. I had so much fun. For my project, there’s one thing you should definitely try: please highlight a piece of text. I know it’s such a small amount of code and such a simple feature, but I just love it so much. Also, please check out all the little details I added. Working on this project reminded me how much I missed programming. I hope I’ll make more projects now that school is finally over. The rest of my website is pretty self‑explanatory. I typed this message myself in English, but I corrected it with AI, so please understand that. I did not use AI in my code....
|
1793105260.0580018
|
1793191660.0580018
|
|
1920
|
Grove by @EthanK | Stardance
|
EthanK
|
1
|
6.94
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-01T19:07:01Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a desktop application that is available on all platforms, mobile coming soon. It is built on Tauri, a lightweight equivalent to electron with a bit of rust backend, and with its light infrastructure of majority being a single HTML file, this make the app very light, about 9MB. I developed this look through experimentation and brought it out to this project, designed to be a subscription free, nicer, opensource, simpler version of TickTick, an app I use very much everyday. Hope you all enjoy the feel of the carefully crafted animations and the simplicity of this app. As always, I am always open to suggestions and feedback and the landingpage it is hosted on even has a place for you to add your feedback with github issues or you can always send me an email. I will continue expanding on this project as I am getting more and more ideas for it and i will try my best to keep the releases always updated with the latest changes. Enjoy!", "repo": "https://github.com/3t1-1aN/Grove_organic_todo_website", "demo": "https://grove-todo.vercel.app"}]...
|
[{"post_id": 6019, "ts": "2026 [{"post_id": 6019, "ts": "2026-06-10T02:50:40Z", "hours": 0.5522, "text": "In general for anyone checking out the app in its beta stage: if something’s unclear, start by checking the onboarding guide. Additionally, explanations for all the app’s features are covered on the landing page. if it is still not mentioned there or you find it really unclear, please put it as an issue for me to check out on my github and I will gladly make the required changes. Thank you"}, {"post_id": 3656, "ts": "2026-06-06T18:07:01Z", "hours": 3.3828, "text": "Made the app android compatible while adding quality of life features overall"}, {"post_id": 385, "ts": "2026-06-01T18:56:17Z", "hours": 3.3969, "text": "added a page to my product landing page to post screenshots of the actual product"}]...
|
Title: Grove by @EthanK | Stardance
Devlogs:
adde Title: Grove by @EthanK | Stardance
Devlogs:
added a page to my product landing page to post screenshots of the actual product
Made the app android compatible while adding quality of life features overall
In general for anyone checking out the app in its beta stage: if something’s unclear, start by checking the onboarding guide. Additionally, explanations for all the app’s features are covered on the landing page. if it is still not mentioned there or you find it really unclear, please put it as an issue for me to check out on my github and I will gladly make the required changes. Thank you
Ships:
This is a desktop application that is available on all platforms, mobile coming soon. It is built on Tauri, a lightweight equivalent to electron with a bit of rust backend, and with its light infrastructure of majority being a single HTML file, this make the app very light, about 9MB. I developed this look through experimentation and brought it out to this project, designed to be a subscription free, nicer, opensource, simpler version of TickTick, an app I use very much everyday. Hope you all enjoy the feel of the carefully crafted animations and the simplicity of this app. As always, I am always open to suggestions and feedback and the landingpage it is hosted on even has a place for you to add your feedback with github issues or you can always send me an email. I will continue expanding on this project as I am getting more and more ideas for it and i will try my best to keep the releases always updated with the latest changes. Enjoy!...
|
1793105262.1170738
|
1793191662.1170738
|
|
21477
|
The KB by @Kartik_B | Stardance
|
Kartik_B
|
2
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-22T17:07:24Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "THE KB I made my personal website with the personal website mission. This website is space themed, it has planets for different thing like Introduction, Projects etc. You have a ship and you explore the planets. The website is made to scroll horizontally. Mobile version isn’t available right now. The website will continue to go on as i make more projects do more stuff in my life.", "repo": "https://github.com/K-BIDDOLIYA/The-KB", "demo": "https://the-kb.vercel.app"}, {"ship_num": 2, "ts": "2026-09-06T18:43:07Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The-KB i my personal website under the mission personal site. This site is based on space theme. This is my first ship. I will add the designs and some more info later as i go. Right now it has 7 circle (they’re supposed to be planets actually)", "repo": "https://github.com/K-BIDDOLIYA/The-KB", "demo": "https://the-kb.vercel.app"}]...
|
[{"post_id": 81577, "ts": "202 [{"post_id": 81577, "ts": "2026-10-21T18:46:30Z", "hours": 3.3928, "text": "I changed Achievements to Specials. Made some design changes. Added more projects. Added some Specials. Changed the planets and now they play an animation."}, {"post_id": 80549, "ts": "2026-10-18T04:13:35Z", "hours": 4.4444, "text": "I love my project more than anything. That’s why i made a separate projects.html for them with a timeline. All of the projects not included till now. And will not be cause the no. of projects is still increasing day by day. They are mostly on the june to october side cause before that, i used to delete failed projects and also heavy AI usage was there. Here’s a screenshot."}, {"post_id": 68537, "ts": "2026-09-15T08:48:16Z", "hours": 1.6364, "text": "Yoo, i just added some designs that i learned from a tutorial type video. The panel looks cool. But now, i’ll work on another thing inside of it. The Timeline. It will be revealed soon. What do you think about this project."}, {"post_id": 66134, "ts": "2026-09-11T19:11:31Z", "hours": 1.4808, "text": "Just tryna spit some words from the soul here No design work done yet, just plain code. Also, should i add a timeline to show everything i did online. I can use it for scheduling projects also."}, {"post_id": 63104, "ts": "2026-09-06T18:38:30Z", "hours": 1.3342, "text": "Ok, i have completed all the requirements. I’ll do the design stuff later. I’m making the first ship now."}, {"post_id": 62068, "ts": "2026-09-05T09:36:39Z", "hours": 2.0969, "text": "The project is going good. I am planning to ship the version 1 without the info in there, cause i just came to know that the first ship won’t be rated. So, i’ll just have the requirements completed and the project will be get its first ship right away. I have added 7 circles here, what could be the plan for the design? can you guess? Edit: I just left claude and i’m tryna do it alone."}, {"post_id": 60776, "ts": "2026-09-03T11:26:57Z", "hours": 2.7822, "text": "I have made a new plan and design for the website. I am also trying to learn HTML, CSS and JS while building this project that’s why its taking too long. i am learning the thing first before i implement it in the codes. Claude is helping me in the learning part, but i swear i didn’t used it to generate a single line of code. It is just instructing me on what to do next. I will not reveal the plan right now. Try to guess it Here’s a screenshot."}, {"post_id": 58017, "ts": "2026-08-30T11:08:54Z", "hours": 1.0689, "text": "TheKB Devlog - #1 Just started off with learning some HTML and CSS for the first time. I am planning to include soo many stuff about me in this personal website. I don’t really have any design ideas right now, please give me some ideas for how can i make the website look more impressive and crazy. This i the first look btw."}]...
|
Title: The KB by @Kartik_B | Stardance
Devlogs:
T Title: The KB by @Kartik_B | Stardance
Devlogs:
TheKB Devlog - #1 Just started off with learning some HTML and CSS for the first time. I am planning to include soo many stuff about me in this personal website. I don’t really have any design ideas right now, please give me some ideas for how can i make the website look more impressive and crazy. This i the first look btw.
I have made a new plan and design for the website. I am also trying to learn HTML, CSS and JS while building this project that’s why its taking too long. i am learning the thing first before i implement it in the codes. Claude is helping me in the learning part, but i swear i didn’t used it to generate a single line of code. It is just instructing me on what to do next. I will not reveal the plan right now. Try to guess it Here’s a screenshot.
The project is going good. I am planning to ship the version 1 without the info in there, cause i just came to know that the first ship won’t be rated. So, i’ll just have the requirements completed and the project will be get its first ship right away. I have added 7 circles here, what could be the plan for the design? can you guess? Edit: I just left claude and i’m tryna do it alone.
Ok, i have completed all the requirements. I’ll do the design stuff later. I’m making the first ship now.
Just tryna spit some words from the soul here No design work done yet, just plain code. Also, should i add a timeline to show everything i did online. I can use it for scheduling projects also.
Yoo, i just added some designs that i learned from a tutorial type video. The panel looks cool. But now, i’ll work on another thing inside of it. The Timeline. It will be revealed soon. What do you think about this project.
I love my project more than anything. That’s why i made a separate projects.html for them with a timeline. All of the projects not included till now. And will not be cause the no. of projects is still increasing day by day. They are mostly on the june to october side cause before that, i used to delete failed projects and also heavy AI usage was there. Here’s a screenshot.
I changed Achievements to Specials. Made some design changes. Added more projects. Added some Specials. Changed the planets and now they play an animation.
Ships:
The-KB i my personal website under the mission personal site. This site is based on space theme. This is my first ship. I will add the designs and some more info later as i go. Right now it has 7 circle (they’re supposed to be planets actually)
THE KB I made my personal website with the personal website mission. This website is space themed, it has planets for different thing like Introduction, Projects etc. You have a ship and you explore the planets. The website is made to scroll horizontally. Mobile version isn’t available right now. The website will continue to go on as i make more projects do more stuff in my life....
|
1793105263.0467744
|
1793191663.0467744
|
|
56039
|
Honeycomb by @seanlhwi | Stardance
|
seanlhwi
|
1
|
0.32
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T05:50:48Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My creation is the Honeycomb Clicker, a 3D printed magnetic fidget clicker with iconic hexagonal designs all over the model. A core challenge was making the clearance of the switch with the case an appropriate amount while not changing the initial design.", "repo": "https://github.com/seanlhwi/Honeycomb-Clicker", "demo": ""}]...
|
[{"post_id": 75131, "ts": "202 [{"post_id": 75131, "ts": "2026-09-29T07:12:14Z", "hours": 0.3169, "text": "Editing Clearances! Today, I shortly edited the clearances on my magnet honeycomb fidget clicker, and made a youtube video as the demo!"}, {"post_id": 61325, "ts": "2026-09-04T05:41:09Z", "hours": 1.2169, "text": "My project is done!!! (for real this time) This is my Honeycomb Clicker, a 3D printed magnetic fidget clicker with satisfying magnets and iconic hexagonal designs all around the model. Go to my Github page to print it (Page name is, “Honeycomb Clicker”)! As for today, I finished working on my Github repo by adding a BOM, assembly instructions, and a photo."}, {"post_id": 60087, "ts": "2026-09-02T07:19:30Z", "hours": 0.6333, "text": "FINALLY! My Honeycomb Clicker is nearly done! All I did for this revision was adjusting the magnet clearances and adding a notch for an assembly guide. I also made a version with 2 magnets on each side!"}, {"post_id": 59371, "ts": "2026-09-01T04:09:36Z", "hours": 0.8336, "text": "Today, I worked on my 3rd revision of my Honeycomb Clicker. It was mostly clearance issues, again, but I also added 2 small hexagons to indicate which side is supposed to align with which."}, {"post_id": 58690, "ts": "2026-08-31T06:26:12Z", "hours": 1.7589, "text": "For this work period, I fixed mistakes and errors from my first iteration of my Honeycomb Clicker. After a test print, many problems were clear, such as clearance issues and warped walls. Hopefully my changes can fix them!"}, {"post_id": 58519, "ts": "2026-08-30T23:09:26Z", "hours": 1.2503, "text": "Today, I worked on fixing on small errors. For example, I forgot to add clearances for all of the moving parts, so I updated the measurements. The next steps are to slice it in Bambu Studio and do a test print!"}, {"post_id": 57914, "ts": "2026-08-30T07:45:52Z", "hours": 6.1586, "text": "Today, I worked on my 3d CAD clicker. As I was working on it, the projct got harder and harder since I kept on trying to make it more detailed. Some key improvements are the designs on the switch it self, and the more precise angles and measurements. The only thing that bothers me is because I didn’t record the timelapse for the first 2 hours…"}]...
|
Title: Honeycomb by @seanlhwi | Stardance
Devlogs Title: Honeycomb by @seanlhwi | Stardance
Devlogs:
Today, I worked on my 3d CAD clicker. As I was working on it, the projct got harder and harder since I kept on trying to make it more detailed. Some key improvements are the designs on the switch it self, and the more precise angles and measurements. The only thing that bothers me is because I didn’t record the timelapse for the first 2 hours…
Today, I worked on fixing on small errors. For example, I forgot to add clearances for all of the moving parts, so I updated the measurements. The next steps are to slice it in Bambu Studio and do a test print!
For this work period, I fixed mistakes and errors from my first iteration of my Honeycomb Clicker. After a test print, many problems were clear, such as clearance issues and warped walls. Hopefully my changes can fix them!
Today, I worked on my 3rd revision of my Honeycomb Clicker. It was mostly clearance issues, again, but I also added 2 small hexagons to indicate which side is supposed to align with which.
FINALLY! My Honeycomb Clicker is nearly done! All I did for this revision was adjusting the magnet clearances and adding a notch for an assembly guide. I also made a version with 2 magnets on each side!
My project is done!!! (for real this time) This is my Honeycomb Clicker, a 3D printed magnetic fidget clicker with satisfying magnets and iconic hexagonal designs all around the model. Go to my Github page to print it (Page name is, “Honeycomb Clicker”)! As for today, I finished working on my Github repo by adding a BOM, assembly instructions, and a photo.
Editing Clearances! Today, I shortly edited the clearances on my magnet honeycomb fidget clicker, and made a youtube video as the demo!
Ships:
My creation is the Honeycomb Clicker, a 3D printed magnetic fidget clicker with iconic hexagonal designs all over the model. A core challenge was making the clearance of the switch with the case an appropriate amount while not changing the initial design....
|
1793105264.2696538
|
1793191664.2696538
|
|
57370
|
Casino by @Faisal | Stardance
|
Faisal
|
1
|
4.01
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T07:35:29Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple casino bot which have coin flip to bet coin on prediction of a coin flip and balance to show balance and daily to get 1000 coins daily and work to get a random amount [100-500] every hour.", "repo": "https://github.com/Faisal-Saqib/Casino-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 60319, "ts": "202 [{"post_id": 60319, "ts": "2026-09-02T16:31:42Z", "hours": 4.0086, "text": "I learned about js and hand coded the slack bot"}, {"post_id": 60092, "ts": "2026-09-02T07:30:58Z", "hours": 0.4931, "text": "I built the casino bot which support coin flip which is used to bet some amount of amount in balance on outcome of a coin flip"}]...
|
Title: Casino by @Faisal | Stardance
Devlogs:
I b Title: Casino by @Faisal | Stardance
Devlogs:
I built the casino bot which support coin flip which is used to bet some amount of amount in balance on outcome of a coin flip
I learned about js and hand coded the slack bot
Ships:
I made a simple casino bot which have coin flip to bet coin on prediction of a coin flip and balance to show balance and daily to get 1000 coins daily and work to get a random amount [100-500] every hour....
|
1793105265.4453611
|
1793191665.4453611
|
|
38372
|
LinkTree Generator by @guguplorenz | Stardance
|
guguplorenz
|
1
|
9.0
|
17
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T21:44:00Z", "hours": 9.0, "multiplier": 1.89, "payout": 17, "blessing": "neutral", "text": "I created a website that allows users to customize a Linktree with their own links, colors, text, and images, and then export them in HTML format. The hardest part of creating this website was exporting, since I had never done it before, but in the end, I managed to do it. To test it, just access the link https://gustavoplorenz.github.io/LinkTreeGenerator/", "repo": "https://github.com/GustavoPLorenz/LinkTreeGenerator", "demo": "https://gustavoplorenz.github.io/LinkTreeGenerator/"}]...
|
[{"post_id": 41584, "ts": "202 [{"post_id": 41584, "ts": "2026-08-05T21:38:25Z", "hours": 2.4008, "text": "I finished the entire site, now it accepts up to 7 links, two background colors, a main color, a color for the links, an image, as well as the link texts, title and subtitle"}, {"post_id": 36857, "ts": "2026-07-29T05:39:00Z", "hours": 5.6886, "text": "The entire interface is ready, including editing the title, text, and links, as well as changing the colors. I still need to get the download button working and fix any minor bugs"}, {"post_id": 33226, "ts": "2026-07-22T22:54:08Z", "hours": 1.02, "text": "Finished making the home page, I still need to add the buttons that will custom the LinkTree."}]...
|
Title: LinkTree Generator by @guguplorenz | Starda Title: LinkTree Generator by @guguplorenz | Stardance
Devlogs:
Finished making the home page, I still need to add the buttons that will custom the LinkTree.
The entire interface is ready, including editing the title, text, and links, as well as changing the colors. I still need to get the download button working and fix any minor bugs
I finished the entire site, now it accepts up to 7 links, two background colors, a main color, a color for the links, an image, as well as the link texts, title and subtitle
Ships:
I created a website that allows users to customize a Linktree with their own links, colors, text, and images, and then export them in HTML format. The hardest part of creating this website was exporting, since I had never done it before, but in the end, I managed to do it. To test it, just access the link https://gustavoplorenz.github.io/LinkTreeGenerator/...
|
1793105266.3497508
|
1793191666.3497508
|
|
57378
|
CleanNewTab by @aviral_dewangan14 | Stardance
|
|
1
|
28.99
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-03T05:32:28Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a project or you can say a new tab page which will appear when you open a new tab with the future chrome extension in html css and js not used any nextjs library .It was challenging to make that level skeomorphism ui and integrating the weather api .I was proud of this design and ui and the clean it builds .You can see that the ui is so clean and with skeomorphism and also the clean layout it is and in future it will be available as a chrome extension which will unlock more new features .So Do not forget to try this and give good ratings", "repo": "https://github.com/AviralDewangan14/CleanNewTab", "demo": "https://cleanewtab.vercel.app/"}]...
|
[{"post_id": 60925, "ts": "202 [{"post_id": 60925, "ts": "2026-09-03T16:19:16Z", "hours": 10.9908, "text": "Builded the news section but still it is not complete so it is not in production but in few time you can use this updated one and i use there google news scrapers"}, {"post_id": 60667, "ts": "2026-09-03T05:19:42Z", "hours": 3.0464, "text": "Integrated the weather system to see weather info at your location make sure to give good ratings"}, {"post_id": 60337, "ts": "2026-09-02T16:51:09Z", "hours": 6.7, "text": "Builded the focus window and integrating in normal home screen and also integrated it into the home screen also and i added the focus timer in home screen Please give good reviews and ratings and follow too"}, {"post_id": 60143, "ts": "2026-09-02T10:09:06Z", "hours": 2.1972, "text": "I Builded a theme toggler it takes a lot of time for animation and these things and for it i take help of ai but not fully written some css and full html for it and ai written some css and full js for theme toggler only"}, {"post_id": 60101, "ts": "2026-09-02T07:57:05Z", "hours": 0.3464, "text": "Builded this setting window which looks good with its shadows do not forget to give good rating and follow me for these good skeomorphism"}, {"post_id": 60095, "ts": "2026-09-02T07:36:01Z", "hours": 2.365, "text": "I Builded this home page of new tab the cleanewtab some bugs are still and i will solve it and show my final work in devlog"}, {"post_id": 60056, "ts": "2026-09-02T05:15:39Z", "hours": 2.9014, "text": "Finally I Implemented the onboarding page with a skeomorphism ui"}]...
|
Title: CleanNewTab by @aviral_dewangan14 | Stardan Title: CleanNewTab by @aviral_dewangan14 | Stardance
Devlogs:
Finally I Implemented the onboarding page with a skeomorphism ui
I Builded this home page of new tab the cleanewtab some bugs are still and i will solve it and show my final work in devlog
Builded this setting window which looks good with its shadows do not forget to give good rating and follow me for these good skeomorphism
I Builded a theme toggler it takes a lot of time for animation and these things and for it i take help of ai but not fully written some css and full html for it and ai written some css and full js for theme toggler only
Builded the focus window and integrating in normal home screen and also integrated it into the home screen also and i added the focus timer in home screen Please give good reviews and ratings and follow too
Integrated the weather system to see weather info at your location make sure to give good ratings
Builded the news section but still it is not complete so it is not in production but in few time you can use this updated one and i use there google news scrapers
Ships:
I have made a project or you can say a new tab page which will appear when you open a new tab with the future chrome extension in html css and js not used any nextjs library .It was challenging to make that level skeomorphism ui and integrating the weather api .I was proud of this design and ui and the clean it builds .You can see that the ui is so clean and with skeomorphism and also the clean layout it is and in future it will be available as a chrome extension which will unlock more new features .So Do not forget to try this and give good ratings...
|
1793105267.24829
|
1793191667.24829
|
|
35151
|
SmartBot by @WESELY | Stardance
|
WESELY
|
1
|
2.28
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T17:04:04Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built SmartBot, a lightweight Slack bot running on Node.js using the Bolt framework and Socket Mode. It’s hosted on my Linux server (Nest) and handles several interactive Slash commands. What was challenging? Getting the Slack API integration just right! I ran into issues with the 3-second timeout limit on Slack commands when pulling data from external APIs (like the Dog/Cat/Duck APIs). Debugging Git conflicts and managing the systemd service restarts on my Linux server via SSH also took some troubleshooting to get everything synced up and running smoothly in the background. What are you proud of? I’m really proud of making the bot fully asynchronous and robust. Even if one of the external APIs fails, the bot handles the error gracefully and doesn’t crash the entire background service. Plus, seeing the duck pictures and random jokes instantly pop up in Slack after a successful deployment feels amazing! What should people know so they can test your project? You can use the following commands in our Slack workspace: /smartbot-ping – Check the latency /smartbot-help – Get a list of all commands /smartbot-catfact & /smartbot-dogfact – Get random animal facts /smartbot-catpicture & /smartbot-duckpicture – Get random cute animal images /smartbot-joke – For some random humor", "repo": "https://github.com/WESELY-CZ/SmartBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BJ6MUBXUH"}]...
|
[{"post_id": 31268, "ts": "202 [{"post_id": 31268, "ts": "2026-07-19T15:18:59Z", "hours": 0.2833, "text": "Today I completely rewrote the README.md into the correct technical structure and created a dedicated channel on Slack for the bot to safely debug all slash commands."}, {"post_id": 29590, "ts": "2026-07-16T16:59:15Z", "hours": 0.7169, "text": "Added 3 more commands"}, {"post_id": 29431, "ts": "2026-07-16T11:37:18Z", "hours": 0.6667, "text": "Done it. YAAAAAAAY"}, {"post_id": 28770, "ts": "2026-07-15T07:51:02Z", "hours": 0.8169, "text": "I am waiting for hosting"}]...
|
Title: SmartBot by @WESELY | Stardance
Devlogs:
I Title: SmartBot by @WESELY | Stardance
Devlogs:
I am waiting for hosting
Done it. YAAAAAAAY
Added 3 more commands
Today I completely rewrote the README.md into the correct technical structure and created a dedicated channel on Slack for the bot to safely debug all slash commands.
Ships:
I built SmartBot, a lightweight Slack bot running on Node.js using the Bolt framework and Socket Mode. It’s hosted on my Linux server (Nest) and handles several interactive Slash commands. What was challenging? Getting the Slack API integration just right! I ran into issues with the 3-second timeout limit on Slack commands when pulling data from external APIs (like the Dog/Cat/Duck APIs). Debugging Git conflicts and managing the systemd service restarts on my Linux server via SSH also took some troubleshooting to get everything synced up and running smoothly in the background. What are you proud of? I’m really proud of making the bot fully asynchronous and robust. Even if one of the external APIs fails, the bot handles the error gracefully and doesn’t crash the entire background service. Plus, seeing the duck pictures and random jokes instantly pop up in Slack after a successful deployment feels amazing! What should people know so they can test your project? You can use the following commands in our Slack workspace: /smartbot-ping – Check the latency /smartbot-help – Get a list of all commands /smartbot-catfact & /smartbot-dogfact – Get random animal facts /smartbot-catpicture & /smartbot-duckpicture – Get random cute animal images /smartbot-joke – For some random humor...
|
1793105268.3915515
|
1793191668.3915515
|
|
40497
|
My site by @Pollo | Stardance
|
Pollo
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T14:19:57Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My personal portfolio is ready! I’m gonna be updating it through time with new projects and sections to be more personalized, but for now this is all I could think about. I hope the theme is not too dispersive.", "repo": "https://github.com/PolloArrostoBenCotto/PerzonalZite", "demo": "https://pollorfolio.vercel.app/"}]...
|
[{"post_id": 40074, "ts": "202 [{"post_id": 40074, "ts": "2026-08-03T13:23:02Z", "hours": 0.4983, "text": "Almost finished, added docs and icons!"}, {"post_id": 40039, "ts": "2026-08-03T11:59:42Z", "hours": 0.7536, "text": "Making progress. I’m worried it looks too visually complicated, but it does look cool indeed"}, {"post_id": 35749, "ts": "2026-07-27T11:59:31Z", "hours": 0.44, "text": "Done for today"}, {"post_id": 35738, "ts": "2026-07-27T11:22:55Z", "hours": 1.12, "text": "Doing something :D"}]...
|
Title: My site by @Pollo | Stardance
Devlogs:
Doi Title: My site by @Pollo | Stardance
Devlogs:
Doing something :D
Done for today
Making progress. I’m worried it looks too visually complicated, but it does look cool indeed
Almost finished, added docs and icons!
Ships:
My personal portfolio is ready! I’m gonna be updating it through time with new projects and sections to be more personalized, but for now this is all I could think about. I hope the theme is not too dispersive....
|
1793105269.5148203
|
1793191669.5148203
|
|
4279
|
Minimalist OS by @DimensionLess | Stardance
|
DimensionLess
|
2
|
16.0
|
80
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T13:42:21Z", "hours": 11.0, "multiplier": 14.42, "payout": 80, "blessing": "neutral", "text": "I finished my WEB OS . It took way longer then expected , i spent way to mush time reading articles and watching countless YouTube tutorials. I could have completed this project with my existing skills too but i wanted to use this opportunity to learn and improve. I did use AI wherever i got stuck, or have to solve some bug and for structuring my files and code . New Features: Added some basic games (snake, Tetris) Added a boot animation Wallpaper app Resizable windows A fully customisable clock in centre Gallery App Overall structure was improved like putting apps in dock to save space in bottom bar", "repo": "https://github.com/6255127/Web-OS", "demo": "https://6255127.github.io/Web-OS/"}, {"ship_num": 2, "ts": "2026-06-19T07:26:00Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a very minimalist OS called Void OS", "repo": "https://github.com/6255127/Web-OS", "demo": "https://6255127.github.io/Web-OS/"}]...
|
[{"post_id": 28875, "ts": "202 [{"post_id": 28875, "ts": "2026-07-15T13:23:53Z", "hours": 4.5156, "text": "- Core Stabilizations and UI Additions Technical Changes Window Manager (Gallery Bug): Fixed a critical rendering issue where the Gallery window dropped. The window had no default dimension in the openWin() switch statement, and so did not match up with the CSS min-width constraint, leading to positional calc() errors. The explicit dimensions ( 600x500 ) solved the layout thrashing. Desktop Clock Widget: New clock widget that shows the current time, and is customizable and placed on top of the window manager’s stacking context but under the wallpaper layer. Asset Pipeline Refactor: Got rid of all redundant and large local media files from the wallpaperList . Optimized to a single remote CDN image to avoid 404’s and limit local storage costs. Boot Sequence UI: Changed linear opacity fades to a CSS3D transform that is accelerated by hardware. /* Boot sequence 3D transform snippet */ .boot-logo { animation : bootLogoAnim 2s cubic-bezier ( 0.22 , 1 , 0.36 , 1 ) infinite ; transform-style : preserve-3d ; }"}, {"post_id": 27587, "ts": "2026-07-13T09:28:27Z", "hours": 4.4514, "text": "What Changed This Session Spent a few hours cleaning up the project and adding some stuff that was missing. Main things were reorganizing the files, adding proper app folders to the dock, wiring up Tetris and Snake, and making the terminal actually worth using. Project Structure The original had everything dumped in the root folder — HTML, JS, CSS, MP4s, all mixed together. Moved media files into their own folder so at least it looks intentional. webos/ ├── index.html ├── css/ ├── js/ └── media/ Not revolutionary, but it was bothering me. Dock Folders The dock had too many individual icons and was getting messy. Grouped everything into three folders instead: Tools — Notes, Terminal, Calculator, Settings Games — Tetris, Snake, Pixel Art Media — Music Player Clicking a folder opens a small window, then clicking an app inside launches it. The dock went from 8+ icons to 6 . Also moved Settings into Tools because it was sitting in Media for some reason, which made no sense. Games Added Tetris and Snake . Both run on canvas, each in their own JS file so they don’t pollute apps.js . Tetris Ghost piece Wall kicks Hard drop with the Space bar Speeds up every 10 lines Snake WASD or Arrow Keys Apple won’t spawn on the snake body Also fixed the icons for both. They were using random SVGs that had nothing to do with the games. Tetris now shows an actual T-tetromino shape. Snake shows a little body of blocks with a pink apple dot. Terminal Commands The original terminal had about one command and it was useless ( help ). Rewrote the whole thing with stuff that I’d actually use: wp fuji/stars/matrix — Swap wallpaper without touching Settings theme dark/light — Quick theme switch from the keyboard calc 12*8+4 — Math without opening the Calculator app neofetch — Uptime, browser, current wallpaper, theme close <app> — Close any app by name cowsay fortune flip roll 20 color #hex — Inline colour swatch history — Last 20 commands rm -rf / and sudo — Try them help — Actually shows all of the commands"}, {"post_id": 15606, "ts": "2026-06-25T11:43:00Z", "hours": 0.6731, "text": "i added an option to add ur own live wallpapers and songs in the music’s player and i also added a calculator app"}, {"post_id": 15578, "ts": "2026-06-25T10:36:56Z", "hours": 1.4828, "text": "i added live wallpapers and i previously created a pallet forge app as another project so i just integrating that into my my WEB OS too"}, {"post_id": 6870, "ts": "2026-06-11T14:58:15Z", "hours": 5.4431, "text": "I made a minimalist OS . It contains basics apps like notes , wallpaper and a focus timer timer ."}]...
|
Title: Minimalist OS by @DimensionLess | Stardance Title: Minimalist OS by @DimensionLess | Stardance
Devlogs:
I made a minimalist OS . It contains basics apps like notes , wallpaper and a focus timer timer .
i added live wallpapers and i previously created a pallet forge app as another project so i just integrating that into my my WEB OS too
i added an option to add ur own live wallpapers and songs in the music’s player and i also added a calculator app
What Changed This Session Spent a few hours cleaning up the project and adding some stuff that was missing. Main things were reorganizing the files, adding proper app folders to the dock, wiring up Tetris and Snake, and making the terminal actually worth using. Project Structure The original had everything dumped in the root folder — HTML, JS, CSS, MP4s, all mixed together. Moved media files into their own folder so at least it looks intentional. webos/ ├── index.html ├── css/ ├── js/ └── media/ Not revolutionary, but it was bothering me. Dock Folders The dock had too many individual icons and was getting messy. Grouped everything into three folders instead: Tools — Notes, Terminal, Calculator, Settings Games — Tetris, Snake, Pixel Art Media — Music Player Clicking a folder opens a small window, then clicking an app inside launches it. The dock went from 8+ icons to 6 . Also moved Settings into Tools because it was sitting in Media for some reason, which made no sense. Games Added Tetris and Snake . Both run on canvas, each in their own JS file so they don’t pollute apps.js . Tetris Ghost piece Wall kicks Hard drop with the Space bar Speeds up every 10 lines Snake WASD or Arrow Keys Apple won’t spawn on the snake body Also fixed the icons for both. They were using random SVGs that had nothing to do with the games. Tetris now shows an actual T-tetromino shape. Snake shows a little body of blocks with a pink apple dot. Terminal Commands The original terminal had about one command and it was useless ( help ). Rewrote the whole thing with stuff that I’d actually use: wp fuji/stars/matrix — Swap wallpaper without touching Settings theme dark/light — Quick theme switch from the keyboard calc 12*8+4 — Math without opening the Calculator app neofetch — Uptime, browser, current wallpaper, theme close <app> — Close any app by name cowsay fortune flip roll 20 color #hex — Inline colour swatch history — Last 20 commands rm -rf / and sudo — Try them help — Actually shows all of the commands
- Core Stabilizations and UI Additions Technical Changes Window Manager (Gallery Bug): Fixed a critical rendering issue where the Gallery window dropped. The window had no default dimension in the openWin() switch statement, and so did not match up with the CSS min-width constraint, leading to positional calc() errors. The explicit dimensions ( 600x500 ) solved the layout thrashing. Desktop Clock Widget: New clock widget that shows the current time, and is customizable and placed on top of the window manager’s stacking context but under the wallpaper layer. Asset Pipeline Refactor: Got rid of all redundant and large local media files from the wallpaperList . Optimized to a single remote CDN image to avoid 404’s and limit local storage costs. Boot Sequence UI: Changed linear opacity fades to a CSS3D transform that is accelerated by hardware. /* Boot sequence 3D transform snippet */ .boot-logo { animation : bootLogoAnim 2s cubic-bezier ( 0.22 , 1 , 0.36 , 1 ) infinite ; transform-style : preserve-3d ; }
Ships:
I made a very minimalist OS called Void OS
I finished my WEB OS . It took way longer then expected , i spent way to mush time reading articles and watching countless YouTube tutorials. I could have completed this project with my existing skills too but i wanted to use this opportunity to learn and improve. I did use AI wherever i got stuck, or have to solve some bug and for structuring my files and code . New Features: Added some basic games (snake, Tetris) Added a boot animation Wallpaper app Resizable windows A fully customisable clock in centre Gallery App Overall structure was improved like putting apps in dock to save space in bottom bar...
|
1793105270.4148178
|
1793191670.4148178
|
|
5084
|
LUNAR-SCRUB by @AshishPatel | Stardance
|
AshishPatel
|
1
|
1.38
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-03T09:44:06Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I Made: I built the code for a Smart Lunar Dust Cleaner rover using an Arduino Uno and an ESP32. Basically, since space dust on the Moon sticks to solar panels and blocks the rover’s only power source, I made a system where a rotating brush automatically sweeps the dust off the panels to keep them clean. It also has a 4WD motor setup to move around and a servo-controlled dust bin to collect and dump out the debris. What Was Challenging: The hardest part was making sure the rover could take driving commands from the ESP32 while constantly checking the sensors at the same time. I had to code a safety system so that if the ultrasonic or IR sensors detect a rock or a crater ledge closer than 15cm, it instantly overrides everything and hits the brakes completely to save the rover from crashing. What I Am Proud Of: I’m super proud of cleaning up the code and putting all the important settings right at the very top. Things like pin numbers, distance limits, and brush timers are just simple numbers now. Anyone can change how the robot behaves without messing up the main logic underneath. How To Test It: Open the Arduino sketch and you can test the auto-braking by just blocking the ultrasonic sensor or triggering the IR pin—the motors will freeze instantly. You can also type commands in the serial monitor like ‘F’ to drive, ‘M’ to start the solar panel brush, and ‘D’ to open the dust flap", "repo": "https://github.com/ashish030810/LUNAR-SCRUB-", "demo": ""}]...
|
[{"post_id": 2645, "ts": "2026 [{"post_id": 2645, "ts": "2026-06-05T09:27:40Z", "hours": 0.3789, "text": "I worked on the core system architecture for the LUNAR-SCRUB automated rover. I successfully mapped out the 16-subsystem hardware matrix, configured the FSM autonomous navigation engine, and fixed critical pin conflicts with the I2C LCD screen and hardware serial lines. The code and detailed documentation are now fully updated on GitHub!"}, {"post_id": 1350, "ts": "2026-06-03T09:38:23Z", "hours": 0.4617, "text": "A smart, automated self-maintenance rover designed for the harsh lunar surface. Because electrostatic lunar regolith (space dust) covers solar panels and blocks their energy source, this project uses an Arduino Uno and an ESP32 to run an automated cleaning loop. When activated, a specialized rotating brush sweeps abrasive dust off the solar cells to restore power generation, while a servo-controlled dust tank opens to collect and safely purge the debris. For navigation safety, the system integrates an ultrasonic sensor and an IR sensor to instantly trigger an emergency stop if the rover encounters deep craters or dangerous rocks"}, {"post_id": 1338, "ts": "2026-06-03T08:56:21Z", "hours": 0.3928, "text": "I am developing the core embedded architecture for a Smart Lunar Dust Cleaner / Solar-Protection Rover. On the Moon, abrasive regolith dust accumulates on solar panels, cutting off the rover’s only source of energy. My project solves this by using a dual-processor setup: an ESP32 to handle custom app data streams, and an Arduino Uno to execute real-time physical routines. In this coding session, I engineered the safety override logic and operational sub-routines. The system coordinates: A 4WD Moon-Terrain Chassis: Controlled via an L298N driver to navigate rough ground. Dual-Sensor Protection Array: Combining an HC-SR04 Ultrasonic sensor and a LiDAR/IR sensor to freeze locomotion before hitting craters or rocks. Automated Solar Panel Brush: A dedicated cleaning motor that sweeps abrasive dust off the solar cells to restore power generation. Servo-Actuated Dirt Tank: Keeps collected regolith safely sealed in a containment box until a serial purge command triggers the servo to open the trapdoor and dump the dust."}]...
|
Title: LUNAR-SCRUB by @AshishPatel | Stardance
De Title: LUNAR-SCRUB by @AshishPatel | Stardance
Devlogs:
I am developing the core embedded architecture for a Smart Lunar Dust Cleaner / Solar-Protection Rover. On the Moon, abrasive regolith dust accumulates on solar panels, cutting off the rover’s only source of energy. My project solves this by using a dual-processor setup: an ESP32 to handle custom app data streams, and an Arduino Uno to execute real-time physical routines. In this coding session, I engineered the safety override logic and operational sub-routines. The system coordinates: A 4WD Moon-Terrain Chassis: Controlled via an L298N driver to navigate rough ground. Dual-Sensor Protection Array: Combining an HC-SR04 Ultrasonic sensor and a LiDAR/IR sensor to freeze locomotion before hitting craters or rocks. Automated Solar Panel Brush: A dedicated cleaning motor that sweeps abrasive dust off the solar cells to restore power generation. Servo-Actuated Dirt Tank: Keeps collected regolith safely sealed in a containment box until a serial purge command triggers the servo to open the trapdoor and dump the dust.
A smart, automated self-maintenance rover designed for the harsh lunar surface. Because electrostatic lunar regolith (space dust) covers solar panels and blocks their energy source, this project uses an Arduino Uno and an ESP32 to run an automated cleaning loop. When activated, a specialized rotating brush sweeps abrasive dust off the solar cells to restore power generation, while a servo-controlled dust tank opens to collect and safely purge the debris. For navigation safety, the system integrates an ultrasonic sensor and an IR sensor to instantly trigger an emergency stop if the rover encounters deep craters or dangerous rocks
I worked on the core system architecture for the LUNAR-SCRUB automated rover. I successfully mapped out the 16-subsystem hardware matrix, configured the FSM autonomous navigation engine, and fixed critical pin conflicts with the I2C LCD screen and hardware serial lines. The code and detailed documentation are now fully updated on GitHub!
Ships:
What I Made: I built the code for a Smart Lunar Dust Cleaner rover using an Arduino Uno and an ESP32. Basically, since space dust on the Moon sticks to solar panels and blocks the rover’s only power source, I made a system where a rotating brush automatically sweeps the dust off the panels to keep them clean. It also has a 4WD motor setup to move around and a servo-controlled dust bin to collect and dump out the debris. What Was Challenging: The hardest part was making sure the rover could take driving commands from the ESP32 while constantly checking the sensors at the same time. I had to code a safety system so that if the ultrasonic or IR sensors detect a rock or a crater ledge closer than 15cm, it instantly overrides everything and hits the brakes completely to save the rover from crashing. What I Am Proud Of: I’m super proud of cleaning up the code and putting all the important settings right at the very top. Things like pin numbers, distance limits, and brush timers are just simple numbers now. Anyone can change how the robot behaves without messing up the main logic underneath. How To Test It: Open the Arduino sketch and you can test the auto-braking by just blocking the ultrasonic sensor or triggering the IR pin—the motors will freeze instantly. You can also type commands in the serial monitor like ‘F’ to drive, ‘M’ to start the solar panel brush, and ‘D’ to open the dust flap...
|
1793105271.9238067
|
1793191671.9238067
|
|
14773
|
Time on Screen by @Matthew | Stardance
|
Matthew
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T01:22:37Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a basic digital clock for the Arduino GIGA R1 WiFi Display! It has the time from the Network Time Protocol, Light and dark mode, display of a home assistant sensor, and support for 24 hour time! I was originally going to use the National Weather Service API, however, I ran in to some security issues and instead decided to go with Home Assistant. To use it, you have to download the repository and open it in the Arduino IDE, then upload it from there.", "repo": "https://github.com/matthew0112/timeOnScreen", "demo": ""}]...
|
[{"post_id": 7206, "ts": "2026 [{"post_id": 7206, "ts": "2026-06-12T01:08:56Z", "hours": 1.1281, "text": "I added my final touches to my digital clock! Here is what I Improved: Centered Text on the Screen Military time support The ability to disable the home assistant sensor And documentation"}, {"post_id": 6666, "ts": "2026-06-11T05:30:17Z", "hours": 2.8503, "text": "I added the date and temperature. I sadly could not get the National Weather Service API working, so I switched to the Home Assistant API to get the value of a sensor. I also added light mode support, alongside dark mode."}, {"post_id": 6341, "ts": "2026-06-10T17:51:40Z", "hours": 1.1325, "text": "I got the local RTC time working and centered the text"}, {"post_id": 6070, "ts": "2026-06-10T06:14:04Z", "hours": 1.35, "text": "I added basic support for getting the time from the Network Time API, and then display it on the screen. I still want to add Support for: The local Real Time Clock (RTC) and adding a small weather “widget” below the time via the National weather service API"}]...
|
Title: Time on Screen by @Matthew | Stardance
Dev Title: Time on Screen by @Matthew | Stardance
Devlogs:
I added basic support for getting the time from the Network Time API, and then display it on the screen. I still want to add Support for: The local Real Time Clock (RTC) and adding a small weather “widget” below the time via the National weather service API
I got the local RTC time working and centered the text
I added the date and temperature. I sadly could not get the National Weather Service API working, so I switched to the Home Assistant API to get the value of a sensor. I also added light mode support, alongside dark mode.
I added my final touches to my digital clock! Here is what I Improved: Centered Text on the Screen Military time support The ability to disable the home assistant sensor And documentation
Ships:
I made a basic digital clock for the Arduino GIGA R1 WiFi Display! It has the time from the Network Time Protocol, Light and dark mode, display of a home assistant sensor, and support for 24 hour time! I was originally going to use the National Weather Service API, however, I ran in to some security issues and instead decided to go with Home Assistant. To use it, you have to download the repository and open it in the Arduino IDE, then upload it from there....
|
1793105272.8194206
|
1793191672.8194206
|
|
12124
|
My first slack bot! by @RTicked | Stardance
|
RTicked
|
1
|
1.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-08T10:54:22Z", "hours": 1.0, "multiplier": 1.3, "payout": 2, "blessing": "neutral", "text": "Guys check out my first ever coding project! its called superslackbot on the hackclub slack group! Commands are /dsb-hello-hi32, /dsb-joke96, /dsb-catfact62 . Hope you guys like it.", "repo": "https://github.com/rticked/stardance-slack-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0266FRGV"}]...
|
[{"post_id": 4749, "ts": "2026 [{"post_id": 4749, "ts": "2026-06-08T06:13:26Z", "hours": 1.2953, "text": "Finally got most bits of my Slack bot (the one listed in the missions) working but 1 command won’t work… Anyways does anyone know how i earn stardust? and where to learn coding? (ideally smth like duolingo.) Thanks"}]...
|
Title: My first slack bot! by @RTicked | Stardance Title: My first slack bot! by @RTicked | Stardance
Devlogs:
Finally got most bits of my Slack bot (the one listed in the missions) working but 1 command won’t work… Anyways does anyone know how i earn stardust? and where to learn coding? (ideally smth like duolingo.) Thanks
Ships:
Guys check out my first ever coding project! its called superslackbot on the hackclub slack group! Commands are /dsb-hello-hi32, /dsb-joke96, /dsb-catfact62 . Hope you guys like it....
|
1793105273.7239544
|
1793191673.7239544
|
|
57388
|
Interactive quiz by @saatvik_270211 | Stardance
|
saatvik_270211
|
3
|
5.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T10:23:35Z", "hours": 1.0, "multiplier": 2.33, "payout": 1, "blessing": "neutral", "text": "Interactive quiz - As per the suggestions i worked on giving correct answers to all the incorrect marked answers after finishing the quiz. Had to understand how that work and got into many syntax errors . But at last it worked more that i expected .", "repo": "https://github.com/Kingplayer-eng/Interactive-quiz", "demo": "https://kingplayer-eng.github.io/Interactive-quiz/"}, {"ship_num": 2, "ts": "2026-09-06T08:56:47Z", "hours": 2.0, "multiplier": 1.01, "payout": 1, "blessing": "neutral", "text": "Interactive Quiz with levels- Easy , Moderate and hard . Increased number of question . Enabled Light and dark mode . State Management: Tracks player score and question progress at the end of quiz . Thanks for all the suggestions guys :D", "repo": "https://github.com/Kingplayer-eng/Interactive-quiz", "demo": "https://kingplayer-eng.github.io/Interactive-quiz/"}, {"ship_num": 3, "ts": "2026-09-04T05:20:04Z", "hours": 2.0, "multiplier": 1.08, "payout": 2, "blessing": "neutral", "text": "I made a Interactive quiz with start button . Used AI for debugging . It has working buttons and back to quiz .", "repo": "https://github.com/Kingplayer-eng/Interactive-quiz", "demo": "https://kingplayer-eng.github.io/Interactive-quiz/"}]...
|
[{"post_id": 66484, "ts": "202 [{"post_id": 66484, "ts": "2026-09-12T10:11:19Z", "hours": 0.2792, "text": "Added background image rather than pale black screen ."}, {"post_id": 66426, "ts": "2026-09-12T07:53:31Z", "hours": 0.7711, "text": "Added incorrect answer solution at the end of quiz . Lot of syntax errors but looking closely got corrected."}, {"post_id": 62757, "ts": "2026-09-06T08:47:30Z", "hours": 1.0022, "text": "#Working with suggestion . Hi guys today i added light and dark mode . You can choose with your choice . Also increased number of question in each levels . Thanks everyone :)"}, {"post_id": 62157, "ts": "2026-09-05T12:35:41Z", "hours": 1.1539, "text": "WORKING ON SUGGESTION Hey guys i will be working on suggestion from now on . Some guy gave a suggestion for adding Levels for quiz so i added easy , moderate and hard levels . You can try any of them and big thx to that guy :D"}, {"post_id": 61309, "ts": "2026-09-04T05:03:37Z", "hours": 0.5133, "text": "Added start button for quiz and fixed problems."}, {"post_id": 61273, "ts": "2026-09-04T03:53:33Z", "hours": 0.5861, "text": "#Day 3 working on Interactive quiz . Added more questions with working click button and debugged using AI."}, {"post_id": 60751, "ts": "2026-09-03T10:05:53Z", "hours": 0.4875, "text": "#Day 2 working on interactive quiz"}, {"post_id": 60150, "ts": "2026-09-02T10:29:55Z", "hours": 0.3611, "text": "#Day 1 - Making interactive quiz"}]...
|
Title: Interactive quiz by @saatvik_270211 | Stard Title: Interactive quiz by @saatvik_270211 | Stardance
Devlogs:
#Day 1 - Making interactive quiz
#Day 2 working on interactive quiz
#Day 3 working on Interactive quiz . Added more questions with working click button and debugged using AI.
Added start button for quiz and fixed problems.
WORKING ON SUGGESTION Hey guys i will be working on suggestion from now on . Some guy gave a suggestion for adding Levels for quiz so i added easy , moderate and hard levels . You can try any of them and big thx to that guy :D
#Working with suggestion . Hi guys today i added light and dark mode . You can choose with your choice . Also increased number of question in each levels . Thanks everyone :)
Added incorrect answer solution at the end of quiz . Lot of syntax errors but looking closely got corrected.
Added background image rather than pale black screen .
Ships:
I made a Interactive quiz with start button . Used AI for debugging . It has working buttons and back to quiz .
Interactive Quiz with levels- Easy , Moderate and hard . Increased number of question . Enabled Light and dark mode . State Management: Tracks player score and question progress at the end of quiz . Thanks for all the suggestions guys :D
Interactive quiz - As per the suggestions i worked on giving correct answers to all the incorrect marked answers after finishing the quiz. Had to understand how that work and got into many syntax errors . But at last it worked more that i expected ....
|
1793105274.6006265
|
1793191674.6006265
|
|
23456
|
Ramix (LFS) by @pksmkwe26 | Stardance
|
pksmkwe26
|
1
|
19.0
|
232
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T14:59:44Z", "hours": 19.0, "multiplier": 12.02, "payout": 232, "blessing": "neutral", "text": "I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM . qemu-system-x86_64 \\ -enable-kvm \\ -cpu host \\ -smp 2 \\ -m 2G \\ -cdrom Ramix-20260719.iso \\ \\ -display gtk,gl = on \\ -device virtio-vga-gl \\ \\ -device qemu-xhci \\ \\ -netdev user,id = net0 \\ -device virtio-net-pci,netdev = net0 . Feel free to try it on qemu and drop some feedbacks", "repo": "https://github.com/kwe26/ramix-lfs", "demo": "https://github.com/kwe26/ramix-lfs/releases/tag/0.1-lfs.3"}]...
|
[{"post_id": 31243, "ts": "202 [{"post_id": 31243, "ts": "2026-07-19T14:28:46Z", "hours": 2.9694, "text": "Devlog - 5 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well FINALLY, SSL WORKS!!! New Features Wayland (No Compositor) Wlroots Mesa OpenSSL as RXPKG CA-Certs Properly Compiled DRM Support GIT!! We can now see the penguins and the new Kernel Panic screen thanks to DRM Support + GPU Support . we only support virtio-gpu right now but planning to expand more! . Hopefully, it’s the last devlog before the 1st Ship of this Project also i couldn’t get tinywl working, will try it in next release 0.2 Thanks for following the dev till now!"}, {"post_id": 26681, "ts": "2026-07-11T16:50:22Z", "hours": 4.6217, "text": "Devlog - 4 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well WOWOWWOW, Finallly own package manager??? New Features iproute2 iputils systemd-confs RX Package Manager About the RX Package Manager The package manager is currently written in dart It currently stores packages at /var/lib/rxpkg/vol/<package>/<version> It symlinks it to main /, So it would be better i thought there’s also rxbuild . command to build .rx package it’s kind of like PKGBUILD sample bash build.toml version = 1 [ build ] system = \"autotools\" out_of_source = true configure = [ \"--prefix=/usr\" , \"--sysconfdir=/etc\" , \"--localstatedir=/var\" , \"--disable-nls\" ] make = [ \"-j${NPROC}\" ] install = [ \"DESTDIR=${DESTDIR}\" ] #sample bash manifest.toml name = \"bash\" version = \"5.3.0\" release = 1 arch = \"x86_64\" license = \"GPL-3.0-or-later\" description = \"GNU Bourne Again Shell\" homepage = \"https://www.gnu.org/software/bash/\" maintainer = \"Ramix Team\" depends = [ \"glibc>=2.43\" , \"readline>=8.3\" , \"ncurses>=6.6\" ] Run rxbuild . and there you go your bash.rx package!! You can find the latest ISO in my github release page! Run it like this in qemu qemu-system-x86_64 \\ -cpu host \\ -m 2G \\ -cdrom Ramix.iso \\ -netdev user,id = net0 \\ -device e1000,netdev = net0 \\ -enable-kvm Share your feedbacks in Comments section, I love it"}, {"post_id": 22694, "ts": "2026-07-05T07:59:50Z", "hours": 5.7103, "text": "Devlog - 3 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, SystemD Support! SystemD now boots as PID 1 at started and now we also have GETTY Support User Management New Features Python 3 Meson, Ninja, CMake Sqlite3, Shadow SystemD!!! Linux-PAM Kmod for modprobe and such commands Login Support!! Upcoming Changes Networking Graphical Interface Recovery Grab the Test Release ISO from Github https://github.com/kwe26/ramix-lfs/releases/tag/0.1 QEMU Command qemu-system-x86_64 \\ -cpu host \\ -m 2G \\ -cdrom Ramix.iso \\ -netdev user,id = net0 \\ -device e1000,netdev = net0 \\ -enable-kvm And it will startup!!! Other Changes *since we had prepared GCC and Compiler Enviorment inside the Chroot, from now all the new libs, programs will be compiled inside the chroot now with the inclusion of scripts_chroot and invoke-chroot.sh *"}, {"post_id": 18175, "ts": "2026-06-29T06:57:07Z", "hours": 3.1797, "text": "Devlog - 2 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, It can Now Boot on QEMU Steps i followed to make it bootable First i Compressed the Rootfs into rootfs.squashfs Created an Initramfs with Busybox to mount and switch root to squashfs Grub to Boot into Kernel using the Initramfs. There’s still some issues with GCC not working properly due to Pass 2 Compiler not being compiled QEMU COMMAND qemu-system-x86_64 -cpu host -m 2G -cdrom Ramix.iso -enable-kvm ISO Link for Testing https://github.com/kwe26/ramix-lfs/releases/tag/testing"}, {"post_id": 13185, "ts": "2026-06-21T16:10:03Z", "hours": 2.8047, "text": "Devlog - 1 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Today I’ve Compiled Basic GCC, Make, GNU Bash And Coreutils, Kernel Headers I’m trying to Get this to around usable-state Distro as TUI and SystemD!! Compiling GMP required an Patch for GCC 16 Which i found on Gitlab, I’ve referenced it on Repo. My Goals Get it Boot on QEMU Basic Internet Access (i doubt) QuickJS & Python Beyond Current Goals X.org/Wayland Support A Basic Desktop Manager Support for Real Hardwares Forgive me for the Logo, I’ll create an proper one in time being"}]...
|
Title: Ramix (LFS) by @pksmkwe26 | Stardance
Devl Title: Ramix (LFS) by @pksmkwe26 | Stardance
Devlogs:
Devlog - 1 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Today I’ve Compiled Basic GCC, Make, GNU Bash And Coreutils, Kernel Headers I’m trying to Get this to around usable-state Distro as TUI and SystemD!! Compiling GMP required an Patch for GCC 16 Which i found on Gitlab, I’ve referenced it on Repo. My Goals Get it Boot on QEMU Basic Internet Access (i doubt) QuickJS & Python Beyond Current Goals X.org/Wayland Support A Basic Desktop Manager Support for Real Hardwares Forgive me for the Logo, I’ll create an proper one in time being
Devlog - 2 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, It can Now Boot on QEMU Steps i followed to make it bootable First i Compressed the Rootfs into rootfs.squashfs Created an Initramfs with Busybox to mount and switch root to squashfs Grub to Boot into Kernel using the Initramfs. There’s still some issues with GCC not working properly due to Pass 2 Compiler not being compiled QEMU COMMAND qemu-system-x86_64 -cpu host -m 2G -cdrom Ramix.iso -enable-kvm ISO Link for Testing https://github.com/kwe26/ramix-lfs/releases/tag/testing
Devlog - 3 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, SystemD Support! SystemD now boots as PID 1 at started and now we also have GETTY Support User Management New Features Python 3 Meson, Ninja, CMake Sqlite3, Shadow SystemD!!! Linux-PAM Kmod for modprobe and such commands Login Support!! Upcoming Changes Networking Graphical Interface Recovery Grab the Test Release ISO from Github https://github.com/kwe26/ramix-lfs/releases/tag/0.1 QEMU Command qemu-system-x86_64 \ -cpu host \ -m 2G \ -cdrom Ramix.iso \ -netdev user,id = net0 \ -device e1000,netdev = net0 \ -enable-kvm And it will startup!!! Other Changes *since we had prepared GCC and Compiler Enviorment inside the Chroot, from now all the new libs, programs will be compiled inside the chroot now with the inclusion of scripts_chroot and invoke-chroot.sh *
Devlog - 4 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well WOWOWWOW, Finallly own package manager??? New Features iproute2 iputils systemd-confs RX Package Manager About the RX Package Manager The package manager is currently written in dart It currently stores packages at /var/lib/rxpkg/vol/<package>/<version> It symlinks it to main /, So it would be better i thought there’s also rxbuild . command to build .rx package it’s kind of like PKGBUILD sample bash build.toml version = 1 [ build ] system = "autotools" out_of_source = true configure = [ "--prefix=/usr" , "--sysconfdir=/etc" , "--localstatedir=/var" , "--disable-nls" ] make = [ "-j${NPROC}" ] install = [ "DESTDIR=${DESTDIR}" ] #sample bash manifest.toml name = "bash" version = "5.3.0" release = 1 arch = "x86_64" license = "GPL-3.0-or-later" description = "GNU Bourne Again Shell" homepage = "https://www.gnu.org/software/bash/" maintainer = "Ramix Team" depends = [ "glibc>=2.43" , "readline>=8.3" , "ncurses>=6.6" ] Run rxbuild . and there you go your bash.rx package!! You can find the latest ISO in my github release page! Run it like this in qemu qemu-system-x86_64 \ -cpu host \ -m 2G \ -cdrom Ramix.iso \ -netdev user,id = net0 \ -device e1000,netdev = net0 \ -enable-kvm Share your feedbacks in Comments section, I love it
Devlog - 5 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well FINALLY, SSL WORKS!!! New Features Wayland (No Compositor) Wlroots Mesa OpenSSL as RXPKG CA-Certs Properly Compiled DRM Support GIT!! We can now see the penguins and the new Kernel Panic screen thanks to DRM Support + GPU Support . we only support virtio-gpu right now but planning to expand more! . Hopefully, it’s the last devlog before the 1st Ship of this Project also i couldn’t get tinywl working, will try it in next release 0.2 Thanks for following the dev till now!
Ships:
I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM . qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -smp 2 \ -m 2G \ -cdrom Ramix-20260719.iso \ \ -display gtk,gl = on \ -device virtio-vga-gl \ \ -device qemu-xhci \ \ -netdev user,id = net0 \ -device virtio-net-pci,netdev = net0 . Feel free to try it on qemu and drop some feedbacks...
|
1793105275.7680967
|
1793191675.7680967
|
|
29837
|
stardance-challenge-plugin by @raczjonathan12 | St stardance-challenge-plugin by @raczjonathan12 | Stardance...
|
raczjonathan12
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T08:16:41Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Claude Code skill designed for faster & better projects for the Stardance Challenge", "repo": "https://github.com/raczjonathan12/stardance-challenge-plugin", "demo": "https://github.com/raczjonathan12/stardance-challenge-plugin/releases/tag/v1.0.0"}]...
|
[{"post_id": 22689, "ts": "202 [{"post_id": 22689, "ts": "2026-07-05T07:44:46Z", "hours": 0.8356, "text": "Added /ship, the last skill in the set, that checks whether a project is actually ready to submit before you hit send. It goes through the things a Shipwright reviewer actually checks: a public GitHub repo, a README that isn’t just boilerplate, a live demo link that actually responds, a devlog entry newer than the last time you shipped, and Hackatime tracking.It only reports gaps, doesn’t try to fix anything itself, just points you at /readme, /devlog, or the right gh command depending on what’s missing. Tried it on a throwaway repo that had never shipped, then with old and fresh ship timestamps, to check the devlog comparison actually flips the right way. Also pointed it at a genuinely broken demo link and a fake GitHub remote, just to make sure it reports a real failure instead of quietly assuming things are fine."}, {"post_id": 22651, "ts": "2026-07-05T06:30:31Z", "hours": 0.4142, "text": "Added a third skill, /commit, that drafts real commit messages instead of leaving you to type “fix” again. It looks at your actual staged and unstaged diff, checks whether it’s really one coherent change or a few things mashed together, and only then writes the message, imperative mood, specific about what changed, no vague one-word placeholders. It always asks before actually running git commit, even if you say you’re in a hurry, since that’s exactly when a wrong commit slips through unnoticed. Right after, went back and added it to the README, so it shows up in Features and Quick Start next to /devlog and /readme instead of getting left out the way /readme almost was last time."}, {"post_id": 22639, "ts": "2026-07-05T05:59:00Z", "hours": 0.9814, "text": "Built a second skill, /readme, then had to fix it twice after it actually missed things. Added /readme so it writes a real README straight from the repo, checking manifests and existing docs instead of guessing. Ran it on this project and it only wrote up /devlog. Turned out the skill was trusting an old doc that said there was just one skill, instead of looking at what was actually in the skills folder. Fixed that and had it always check the real directory listing over any doc’s claim. Then noticed the README still just mentioned /readme in passing instead of giving it a proper section. Made the rule stricter: every component found has to get its own labeled group in Features, no exceptions. Went one more round after that. The detection was written around “skills” specifically, so it wouldn’t have caught other kinds of components like agents or commands. Reworded it to catch any repeated pattern of the same kind of thing, then tested it against a fake plugin with a skill and an agent side by side, and it gave both their own sections this time."}, {"post_id": 22608, "ts": "2026-07-05T04:53:46Z", "hours": 0.3792, "text": "Added a rule letting devlogs actually sound excited or annoyed instead of staying flat and careful. Went through the devlog skill again and loosened it up. Before, the tone rules kept everything even no matter how a session actually went. Now it can sound genuinely pumped if the work went well, or genuinely annoyed if it didn’t, instead of forcing a flat middle voice. Also switched the default format to short lines with blank lines between them instead of one dense paragraph, closer to how someone actually jots down what they did. Added a bit about not listing more than three things in a row like a changelog, and about swapping in big words for plain ones when a small one says the same thing."}, {"post_id": 21673, "ts": "2026-07-03T19:12:50Z", "hours": 1.3539, "text": "Spent the day building out a devlog skill for Claude Code and kept finding new ways it could go wrong. Started by dropping the CLI-and-backend plan and turning this into a plugin instead, a plugin.json plus a first SKILL.md that has Claude read your git history and write the entry right there, no server needed. A few hours later I went back through it and added a bunch of edge cases I hadn’t thought about the first time, things like a huge diff, a binary file, a commit from someone else, work sitting uncommitted, a diff with something that looks like a secret in it, that kind of thing. I also added a self-check pass so the draft gets reread against a short list of AI-writing tics before it’s shown to anyone.Then near the end of the day I caught something in my own rules. The skill was telling itself to sound honest and grounded, but it had no rule against describing a design decision as if it were a bug that actually happened, which is exactly the kind of thing this tool is supposed to catch. I added that as a third rule sitting above everything else in the file, next to the no-inventing-details rule, and cleaned up a duplicate rule while I was in there. I also pulled an old demo devlog.md entry that had been sitting in the repo from testing.Right now I’m still in the middle of another pass, adding a rule about writing in plain, everyday language instead of anything that sounds like an essay or a spec, and one about calling out jargon words like “guardrail” or “architecture” that only make sense with full context. Not committed yet, still checking whether the wording actually reads like something a person would say."}, {"post_id": 21482, "ts": "2026-07-03T13:36:10Z", "hours": 1.5406, "text": "I thought that a qwen model would be enough for generating good quality devlogs but it turns out it isn’t, so I’m switching approaches. I’m going to build a plugin for Claude that generates high quality and human devlogs. P.S. here is the output I managed to get with the qwen model: I added a note flag to the devlog command so I can hand-write details when the automated git log feels too sparse. The CLI now sends requests to the backend over HTTP. I swapped the model to qwen3.6-flash when I hit rate limits and added a fallback just in case that one locks up too. File-change stats get calculated and injected into the prompt alongside the commit data."}, {"post_id": 20772, "ts": "2026-07-02T13:53:53Z", "hours": 1.5911, "text": "Built a CLI that reads git commits and a backend that turns those commits into AI-written devlogs. The CLI uses Commander to pull git log history and hand it off to the backend. The backend takes that commit data and generates a devlog through OpenRouter. Lost a good chunk of time to two bugs that failed silently instead of erroring properly: the SDK wanted the request wrapped inside a field called chatRequest, not documented anywhere obvious. Then I had baseURL instead of serverURL in the client config, so requests were quietly going to the wrong server the whole time. Next: wiring the CLI to actually call the backend."}]...
|
Title: stardance-challenge-plugin by @raczjonathan Title: stardance-challenge-plugin by @raczjonathan12 | Stardance
Devlogs:
Built a CLI that reads git commits and a backend that turns those commits into AI-written devlogs. The CLI uses Commander to pull git log history and hand it off to the backend. The backend takes that commit data and generates a devlog through OpenRouter. Lost a good chunk of time to two bugs that failed silently instead of erroring properly: the SDK wanted the request wrapped inside a field called chatRequest, not documented anywhere obvious. Then I had baseURL instead of serverURL in the client config, so requests were quietly going to the wrong server the whole time. Next: wiring the CLI to actually call the backend.
I thought that a qwen model would be enough for generating good quality devlogs but it turns out it isn’t, so I’m switching approaches. I’m going to build a plugin for Claude that generates high quality and human devlogs. P.S. here is the output I managed to get with the qwen model: I added a note flag to the devlog command so I can hand-write details when the automated git log feels too sparse. The CLI now sends requests to the backend over HTTP. I swapped the model to qwen3.6-flash when I hit rate limits and added a fallback just in case that one locks up too. File-change stats get calculated and injected into the prompt alongside the commit data.
Spent the day building out a devlog skill for Claude Code and kept finding new ways it could go wrong. Started by dropping the CLI-and-backend plan and turning this into a plugin instead, a plugin.json plus a first SKILL.md that has Claude read your git history and write the entry right there, no server needed. A few hours later I went back through it and added a bunch of edge cases I hadn’t thought about the first time, things like a huge diff, a binary file, a commit from someone else, work sitting uncommitted, a diff with something that looks like a secret in it, that kind of thing. I also added a self-check pass so the draft gets reread against a short list of AI-writing tics before it’s shown to anyone.Then near the end of the day I caught something in my own rules. The skill was telling itself to sound honest and grounded, but it had no rule against describing a design decision as if it were a bug that actually happened, which is exactly the kind of thing this tool is supposed to catch. I added that as a third rule sitting above everything else in the file, next to the no-inventing-details rule, and cleaned up a duplicate rule while I was in there. I also pulled an old demo devlog.md entry that had been sitting in the repo from testing.Right now I’m still in the middle of another pass, adding a rule about writing in plain, everyday language instead of anything that sounds like an essay or a spec, and one about calling out jargon words like “guardrail” or “architecture” that only make sense with full context. Not committed yet, still checking whether the wording actually reads like something a person would say.
Added a rule letting devlogs actually sound excited or annoyed instead of staying flat and careful. Went through the devlog skill again and loosened it up. Before, the tone rules kept everything even no matter how a session actually went. Now it can sound genuinely pumped if the work went well, or genuinely annoyed if it didn’t, instead of forcing a flat middle voice. Also switched the default format to short lines with blank lines between them instead of one dense paragraph, closer to how someone actually jots down what they did. Added a bit about not listing more than three things in a row like a changelog, and about swapping in big words for plain ones when a small one says the same thing.
Built a second skill, /readme, then had to fix it twice after it actually missed things. Added /readme so it writes a real README straight from the repo, checking manifests and existing docs instead of guessing. Ran it on this project and it only wrote up /devlog. Turned out the skill was trusting an old doc that said there was just one skill, instead of looking at what was actually in the skills folder. Fixed that and had it always check the real directory listing over any doc’s claim. Then noticed the README still just mentioned /readme in passing instead of giving it a proper section. Made the rule stricter: every component found has to get its own labeled group in Features, no exceptions. Went one more round after that. The detection was written around “skills” specifically, so it wouldn’t have caught other kinds of components like agents or commands. Reworded it to catch any repeated pattern of the same kind of thing, then tested it against a fake plugin with a skill and an agent side by side, and it gave both their own sections this time.
Added a third skill, /commit, that drafts real commit messages instead of leaving you to type “fix” again. It looks at your actual staged and unstaged diff, checks whether it’s really one coherent change or a few things mashed together, and only then writes the message, imperative mood, specific about what changed, no vague one-word placeholders. It always asks before actually running git commit, even if you say you’re in a hurry, since that’s exactly when a wrong commit slips through unnoticed. Right after, went back and added it to the README, so it shows up in Features and Quick Start next to /devlog and /readme instead of getting left out the way /readme almost was last time.
Added /ship, the last skill in the set, that checks whether a project is actually ready to submit before you hit send. It goes through the things a Shipwright reviewer actually checks: a public GitHub repo, a README that isn’t just boilerplate, a live demo link that actually responds, a devlog entry newer than the last time you shipped, and Hackatime tracking.It only reports gaps, doesn’t try to fix anything itself, just points you at /readme, /devlog, or the right gh command depending on what’s missing. Tried it on a throwaway repo that had never shipped, then with old and fresh ship timestamps, to check the devlog comparison actually flips the right way. Also pointed it at a genuinely broken demo link and a fake GitHub remote, just to make sure it reports a real failure instead of quietly assuming things are fine.
Ships:
I made a Claude Code skill designed for faster & better projects for the Stardance Challenge...
|
1793105276.9242306
|
1793191676.9242306
|
|
29365
|
My own site! by @MadameLouise | Stardance
|
MadameLouise
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T15:58:54Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Why PDForge? Most PDF generation involves wrangling Puppeteer, wkhtmltopdf, or WeasyPrint — tools that are painful to install, slow to run, and fragile in production. PDForge takes all of that off your plate. You send us an HTML/CSS template and your data as JSON. We render it through a real Chromium engine and return a pixel-perfect PDF. The whole round-trip takes about 200ms. Your data is never stored. Every request is rendered in an isolated browser context and the result is streamed back to you immediately. Nothing hits disk. Nothing is logged. Once the response is sent, your data is gone.", "repo": "https://github.com/AmruthaMuralidhar1/pdforge", "demo": "https://amruthamuralidhar1.github.io/pdforge/"}]...
|
[{"post_id": 40809, "ts": "202 [{"post_id": 40809, "ts": "2026-08-04T15:57:57Z", "hours": 0.0333, "text": "Completed the webpage and deployed on github pages This is an info and starters page for my API that generates from any sort of json date to pdf reciepts! Can use for bulk conversion with low latency! Can auto create based on use case or from pre built custom html template."}, {"post_id": 23969, "ts": "2026-07-07T06:30:42Z", "hours": 0.0, "text": "Worked on PDForge, A fast, simple API to generate PDFs. Send your data and an HTML template — get a production-ready PDF back in milliseconds."}]...
|
Title: My own site! by @MadameLouise | Stardance
Title: My own site! by @MadameLouise | Stardance
Devlogs:
Worked on PDForge, A fast, simple API to generate PDFs. Send your data and an HTML template — get a production-ready PDF back in milliseconds.
Completed the webpage and deployed on github pages This is an info and starters page for my API that generates from any sort of json date to pdf reciepts! Can use for bulk conversion with low latency! Can auto create based on use case or from pre built custom html template.
Ships:
Why PDForge? Most PDF generation involves wrangling Puppeteer, wkhtmltopdf, or WeasyPrint — tools that are painful to install, slow to run, and fragile in production. PDForge takes all of that off your plate. You send us an HTML/CSS template and your data as JSON. We render it through a real Chromium engine and return a pixel-perfect PDF. The whole round-trip takes about 200ms. Your data is never stored. Every request is rendered in an isolated browser context and the result is streamed back to you immediately. Nothing hits disk. Nothing is logged. Once the response is sent, your data is gone....
|
1793105278.0596402
|
1793191678.0596402
|
|
33778
|
ChickenSite by @Adammm | Stardance
|
Adammm
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T17:06:34Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi! This is my project. It’s a simple HTML, CSS, and JS site that I made for a hackathon project! This project is open source, so feel free to use this as a template! Be warned, though, there are no comments or anything so it will be hard to figure out if you have no coding experience. I made the main framework of the website using HTML and the style using CSS, and connected those files together. On my website, there are buttons that you can press to redirect to different pages. There are 3 pages right now: the about me page, the portfolio page, and the chickens page. The about me page is, well, about me, the portfolio page has images and links to some projects that I have made, and finally, the chickens page includes images that I took of my chickens. I also added a APOD page for fun! you can see random APOD dates from the official NASA API! Every day, it automatically loads to the new APOD so you can see what the new information and picture is!", "repo": "https://github.com/Halcyon28/ChickenSite", "demo": "https://squid-site.vercel.app/"}]...
|
[{"post_id": 27239, "ts": "202 [{"post_id": 27239, "ts": "2026-07-12T17:03:14Z", "hours": 0.4492, "text": "debugged the key using google gemini"}, {"post_id": 27204, "ts": "2026-07-12T15:34:00Z", "hours": 0.8233, "text": "Made the site the theme of my favorite show, squid game. I used a free image online for the backdrop and some basic js code for debugging that I got from anthropic AI. There was a bug where the font color kept being off and again, I had to use AI to debug it as I did not understand what was wrong. I also added a dark and light theme toggler and added the squid game logo as text on the main info bar and reworked the navigation bar to be more smooth so that when hovering above the buttons they float a little. I fixed the APOD page not showing the images by using Claude code and modifying the code where the key is recieved and making a new JS file to help with recieving the key from the .env file."}, {"post_id": 27176, "ts": "2026-07-12T14:32:56Z", "hours": 0.8369, "text": "Added a new font using .css and importing it from the url https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap for a font that is more clean"}]...
|
Title: ChickenSite by @Adammm | Stardance
Devlogs Title: ChickenSite by @Adammm | Stardance
Devlogs:
Added a new font using .css and importing it from the url https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap for a font that is more clean
Made the site the theme of my favorite show, squid game. I used a free image online for the backdrop and some basic js code for debugging that I got from anthropic AI. There was a bug where the font color kept being off and again, I had to use AI to debug it as I did not understand what was wrong. I also added a dark and light theme toggler and added the squid game logo as text on the main info bar and reworked the navigation bar to be more smooth so that when hovering above the buttons they float a little. I fixed the APOD page not showing the images by using Claude code and modifying the code where the key is recieved and making a new JS file to help with recieving the key from the .env file.
debugged the key using google gemini
Ships:
Hi! This is my project. It’s a simple HTML, CSS, and JS site that I made for a hackathon project! This project is open source, so feel free to use this as a template! Be warned, though, there are no comments or anything so it will be hard to figure out if you have no coding experience. I made the main framework of the website using HTML and the style using CSS, and connected those files together. On my website, there are buttons that you can press to redirect to different pages. There are 3 pages right now: the about me page, the portfolio page, and the chickens page. The about me page is, well, about me, the portfolio page has images and links to some projects that I have made, and finally, the chickens page includes images that I took of my chickens. I also added a APOD page for fun! you can see random APOD dates from the official NASA API! Every day, it automatically loads to the new APOD so you can see what the new information and picture is!...
|
1793105278.9323883
|
1793191678.9323883
|
|
18624
|
Format by @franco | Stardance
|
franco
|
1
|
7.0
|
73
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T00:36:44Z", "hours": 7.0, "multiplier": 11.76, "payout": 73, "blessing": "neutral", "text": "What I made I built Format , a Chrome extension that upgrades how you manage tabs. It gives you a fast, OS-style tab switcher inside the browser (press Ctrl+Shift+Space to cycle active tabs) and integrates Google’s Gemini API to automatically group open tabs into clean, colored categories. What was challenging Injecting the tab switcher overlay dynamically into arbitrary web pages without breaking their original layouts or CSS styling. Getting the background worker to reliably track the tab history (Most Recently Used order) and sync it to the UI in real-time was also a fun state-management puzzle. What I’m proud of The UI/UX feels incredibly fluid and premium. It follows Material 3 design principles with dynamic accent themes that automatically adjust to light/dark modes, and the AI grouping works surprisingly fast and accurately. How to test it Load the extension folder in Chrome Developer Mode ( chrome://extensions/ ). Open the extension popup, go to settings, and enter your Gemini API key. Click Organize with AI to see your tabs grouped automatically, or use Ctrl+Shift+Space to instantly toggle and cycle through your tabs!", "repo": "https://github.com/Franco-Senes/Format", "demo": "https://github.com/Franco-Senes/Format/releases/tag/1.1"}]...
|
[{"post_id": 10971, "ts": "202 [{"post_id": 10971, "ts": "2026-06-18T00:02:46Z", "hours": 4.2919, "text": "I’ve finished the project also make some ui and logic fixes i am so proud of what i made"}, {"post_id": 8969, "ts": "2026-06-14T22:40:43Z", "hours": 0.3333, "text": "guess what now i need to code the ui again……… so yeah also need to code the backend acording to the new ui so lets get on coding also erased the manifiest for some reason…"}, {"post_id": 8843, "ts": "2026-06-14T18:21:16Z", "hours": 1.2311, "text": "Made the ui into actual code https://streamable.com/zx4o3b"}, {"post_id": 8796, "ts": "2026-06-14T16:36:20Z", "hours": 0.6625, "text": "Finished making a ui in Figma now its time to recreate it"}]...
|
Title: Format by @franco | Stardance
Devlogs:
Fin Title: Format by @franco | Stardance
Devlogs:
Finished making a ui in Figma now its time to recreate it
Made the ui into actual code https://streamable.com/zx4o3b
guess what now i need to code the ui again……… so yeah also need to code the backend acording to the new ui so lets get on coding also erased the manifiest for some reason…
I’ve finished the project also make some ui and logic fixes i am so proud of what i made
Ships:
What I made I built Format , a Chrome extension that upgrades how you manage tabs. It gives you a fast, OS-style tab switcher inside the browser (press Ctrl+Shift+Space to cycle active tabs) and integrates Google’s Gemini API to automatically group open tabs into clean, colored categories. What was challenging Injecting the tab switcher overlay dynamically into arbitrary web pages without breaking their original layouts or CSS styling. Getting the background worker to reliably track the tab history (Most Recently Used order) and sync it to the UI in real-time was also a fun state-management puzzle. What I’m proud of The UI/UX feels incredibly fluid and premium. It follows Material 3 design principles with dynamic accent themes that automatically adjust to light/dark modes, and the AI grouping works surprisingly fast and accurately. How to test it Load the extension folder in Chrome Developer Mode ( chrome://extensions/ ). Open the extension popup, go to settings, and enter your Gemini API key. Click Organize with AI to see your tabs grouped automatically, or use Ctrl+Shift+Space to instantly toggle and cycle through your tabs!...
|
1793105280.0473244
|
1793191680.0473244
|
|
57393
|
My own site! by @m-altahan | Stardance
|
m-altahan
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T18:35:29Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own personal website that shows my projects and the events that i attended and a little description for each project . The Css was a little bit of a hassle Because it kept breaking and me to fix the problem. Note: Used AI to decide the colors on the website . But all code was written by me with no Ai assistance .", "repo": "https://github.com/mahmoud-altahanxvii/My-Personal-Website", "demo": "https://mahmoud-altahanxvii.github.io/My-Personal-Website/"}]...
|
[{"post_id": 64380, "ts": "202 [{"post_id": 64380, "ts": "2026-09-08T18:21:07Z", "hours": 1.1261, "text": "Third Devlog : finished the following pages : Dumb google , Reverse Search . Also added links to the projects and hackathons i attended with most recent one Being Replay alexandria and the other ones . And with that iam going to ship my Personal-Website"}, {"post_id": 61845, "ts": "2026-09-04T23:32:30Z", "hours": 3.1508, "text": "Devlog 2 : revamped the CSS changing the color scheme , font and tiny stuff like font size . Also added a page for Shadow Swap Check it Out ,and a little bit of the reverse google page (WIP) and organized the files (if that’s your thing ) see You next Devlog (´▽`ʃ♡ƪ)"}, {"post_id": 60500, "ts": "2026-09-02T21:27:34Z", "hours": 1.3294, "text": "First log : My personal website ,is (as you guessed ) MY Personal website 😄 made the structure and chose the color palate (might change it later ) . Caution !: Links listed only lead to a blank page with only the title in tab😅"}]...
|
Title: My own site! by @m-altahan | Stardance
Dev Title: My own site! by @m-altahan | Stardance
Devlogs:
First log : My personal website ,is (as you guessed ) MY Personal website 😄 made the structure and chose the color palate (might change it later ) . Caution !: Links listed only lead to a blank page with only the title in tab😅
Devlog 2 : revamped the CSS changing the color scheme , font and tiny stuff like font size . Also added a page for Shadow Swap Check it Out ,and a little bit of the reverse google page (WIP) and organized the files (if that’s your thing ) see You next Devlog (´▽`ʃ♡ƪ)
Third Devlog : finished the following pages : Dumb google , Reverse Search . Also added links to the projects and hackathons i attended with most recent one Being Replay alexandria and the other ones . And with that iam going to ship my Personal-Website
Ships:
I made my own personal website that shows my projects and the events that i attended and a little description for each project . The Css was a little bit of a hassle Because it kept breaking and me to fix the problem. Note: Used AI to decide the colors on the website . But all code was written by me with no Ai assistance ....
|
1793105281.185898
|
1793191681.185898
|
|
48851
|
my-biopage by @echo-ilovech3ss | Stardance
|
echo-ilovech3ss
|
1
|
3.67
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T13:07:35Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal about me / Bio-page, inspired from my old version, as the first repo here! I used ai for some of the code, the brainstorming and ideas were mine.", "repo": "https://github.com/echo-ilovech3ss/my-biopage", "demo": "https://shreyasloveschess.netlify.app/"}]...
|
[{"post_id": 48662, "ts": "202 [{"post_id": 48662, "ts": "2026-08-17T04:44:21Z", "hours": 2.6736, "text": "#Devlog 3 Updated the CSS, It looked too bloated, along with removing some features that weren’t what I was going for really."}, {"post_id": 48138, "ts": "2026-08-16T13:03:55Z", "hours": 0.4039, "text": "#Devlog 2 Added a 3D character viewer for my bio website, its live now!"}, {"post_id": 47925, "ts": "2026-08-16T06:06:08Z", "hours": 0.5961, "text": "#Devlog 1 I’m working on adding more cool things like this chess engine my my new updated biopage, it will be hosted at shreyasloveschess.netlify.app soon right now it has the old version."}]...
|
Title: my-biopage by @echo-ilovech3ss | Stardance
Title: my-biopage by @echo-ilovech3ss | Stardance
Devlogs:
#Devlog 1 I’m working on adding more cool things like this chess engine my my new updated biopage, it will be hosted at shreyasloveschess.netlify.app soon right now it has the old version.
#Devlog 2 Added a 3D character viewer for my bio website, its live now!
#Devlog 3 Updated the CSS, It looked too bloated, along with removing some features that weren’t what I was going for really.
Ships:
I made a personal about me / Bio-page, inspired from my old version, as the first repo here! I used ai for some of the code, the brainstorming and ideas were mine....
|
1793105282.0764208
|
1793191682.0764208
|
|
33704
|
morse code onekey by @Pery | Stardance
|
Pery
|
1
|
2.0
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T17:15:10Z", "hours": 2.0, "multiplier": 5.44, "payout": 10, "blessing": "neutral", "text": "Project finally done! i will add this project to my personal site too! Hope yall like it and this time i tried my best to make the design a little nice", "repo": "https://github.com/davidperyro-stack/Morse-code", "demo": "https://davidperyro-stack.github.io/Morse-code/"}]...
|
[{"post_id": 26690, "ts": "202 [{"post_id": 26690, "ts": "2026-07-11T16:58:40Z", "hours": 0.5244, "text": "adding everything but a “/” qwq (also added beep)"}, {"post_id": 26650, "ts": "2026-07-11T16:16:07Z", "hours": 0.5942, "text": "Added translator and changed the look of the site :3"}, {"post_id": 26619, "ts": "2026-07-11T15:26:45Z", "hours": 0.7706, "text": "trying to add an translator (and maybe space,aka “/”)"}]...
|
Title: morse code onekey by @Pery | Stardance
Dev Title: morse code onekey by @Pery | Stardance
Devlogs:
trying to add an translator (and maybe space,aka “/”)
Added translator and changed the look of the site :3
adding everything but a “/” qwq (also added beep)
Ships:
Project finally done! i will add this project to my personal site too! Hope yall like it and this time i tried my best to make the design a little nice...
|
1793105282.9427726
|
1793191682.9427726
|
|
15146
|
Hamstersarus OS by @Hamstersarus | Stardance
|
Hamstersarus
|
1
|
3.9
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T02:40:25Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a website to serve as my portfolio. It is a tiny web operating system. Instead of making just a regular about me page, I made a “desktop” that people can use to get to know me. I included by resume, skills, prior projects, and contact information.", "repo": "https://github.com/Hamstersarus/Hamstersarus_Website", "demo": "https://hamstersarus.github.io/HamstersarusOS/"}]...
|
[{"post_id": 9046, "ts": "2026 [{"post_id": 9046, "ts": "2026-06-15T03:12:35Z", "hours": 0.6767, "text": "I wanted to show off my website but I was on my phone and thats when I realized it doesn’t really work on the phone… The only problem was that the windows wouldn’t drag. The github website page function I used for the website formatted it fine for different screens. I fixed the issue with the dragging on touchscreen. I also made the 2048 game work on touchscreen. Also, I updated the algorithm for the 2048 game. I have written code for it before in Java just for practice and I wanted to take advantage of the fact that I already had an algorithm that works and I understand, so that’s what I decided to do. Now I can understand the 2048 code a little better (I wrote it before understanding JavaScript as well as I do now and most of it is from bits and pieces I found while researching). I also wanted to add some pictures of projects I’ve done. So far, I really only have one but I do have some currently on their way to me in the mail so I’ll add those later. Another think I feel like it’s important for me to note, I know that my README looks like it was written by AI with all the emojis but I actually wrote them all in there myself, I feel like they add a lot to the aesthetic instead of just being plain text. I source all my emojis from: https://emojicopy.com/"}, {"post_id": 8531, "ts": "2026-06-14T06:06:32Z", "hours": 1.2256, "text": "So a lot of changes… I was brainstorming what I should add and I had the bright and original idea to add a contact me app! Problem is, I already have my socials linked. I want a way for people to reach me directly though. My first thought was to make a new Gmail account (I don’t want spamming on my main account) but then I was doing some research and I realized I can make a discord webhook. After a TON of trial and error, I figured out how it works and every message through that app goes straight into a private discord server. I committed all my changes and I was pretty happy with my code. But then I get an email from GitGaurdian… It said that my url was exposed. I had put the url in the frontend. After some panicking, I find out what cloudlfare workers are. I put my webhook in cloudflare and everything is okay!! Now you can send me a message! :) I also wanted to make a little magic 8-ball game just for fun. It’s a hamster that tells you your fortune!! How fun is that?"}, {"post_id": 7842, "ts": "2026-06-13T02:32:12Z", "hours": 0.5722, "text": "This update was mostly polish and housekeeping. I renamed my repository to HamstersarusOS, which gave my portfolio a cleaner link to share around, it now lives at https://hamstersarus.github.io/HamstersarusOS/ . After renaming I went through and updated all the internal links so the project cards and README point to the new address instead of the old broken one. I also cleaned up my portfolio a bit: I tweaked the likes in my About Me section and removed a leftover note in the Skills app that was only meant for me but was accidentally showing to visitors. Nothing flashy this time, just tightening things up and making the site easier to send to people."}, {"post_id": 7815, "ts": "2026-06-13T01:24:28Z", "hours": 0.8089, "text": "Since my last update I turned my webOS into a proper portfolio. First I gave the music player a real upgrade so a lofi track starts playing the moment you enter the desktop, with a little “now playing” notification, and it keeps playing even if you close the music window instead of stacking a second song on top like it used to. Then I added four new apps to show off my work: a Projects window with cards for HamstersarusOS, my SENTINEL surveillance game, my Fight game, and my 2048 game, each linked to its GitHub repo; a Skills window with little proficiency bars; a Resume window with my education, internship, and awards; and a Contact window with my GitHub, LinkedIn, and email. I also filled in the About Me app with my real name and bio. One thing I was careful about was privacy, since the site is fully public with no password I deliberately left my home address and phone number off it and only put the professional stuff online. It’s all live at https://hamstersarus.github.io/Hamstersarus_Website/ and it actually feels like a portfolio now instead of just a demo."}, {"post_id": 7444, "ts": "2026-06-12T12:15:27Z", "hours": 0.6464, "text": "Since my last update I finished the rest of the webOS jam. I built my first real app, an About Me window with a little bio and my likes and dislikes, and then two “advanced” apps: a music player that actually plays real lofi tracks with play, pause, and skip (the disc even spins while it’s playing), and a fully playable purple version of 2048 that you control with the arrow keys or WASD. The 2048 game is my bonus feature that the guide didn’t ask for. The trickiest part was a layout bug where the 2048 board kept spilling out of its window and making everything look like it was shifting around while I played, which turned out to be a CSS grid quirk where the columns refused to shrink to fit, fixed by switching them to minmax(0, 1fr). I also added a README so anyone visiting my repo knows what the project is and how to run it. Everything is live and public at https://hamstersarus.github.io/Hamstersarus_Website/ and all five parts of the jam are now done."}, {"post_id": 7423, "ts": "2026-06-12T11:25:21Z", "hours": 0.3833, "text": "Building my personal website as a little web operating system for Stardance, following the Hack Club webOS jam. It’s plain HTML, CSS, and JavaScript with a lavender “Tokyo Night” desktop-rice look crossed with a Y2K Windows scrapbook vibe, and the graph-paper wallpaper is pure CSS. So far I’ve got a welcome screen that boots into a desktop with a live clock, clickable desktop icons, and draggable windows you can move around, bring to the front, and close. The trickiest bug was my enter button “not working,” which turned out to be my code editor’s preview, not my code, fixing itself the moment I opened it in a real browser. It’s live and public at https://hamstersarus.github.io/Hamstersarus_Website/ and next up is building my first real app plus a bonus feature the guide doesn’t cover."}]...
|
Title: Hamstersarus OS by @Hamstersarus | Stardanc Title: Hamstersarus OS by @Hamstersarus | Stardance
Devlogs:
Building my personal website as a little web operating system for Stardance, following the Hack Club webOS jam. It’s plain HTML, CSS, and JavaScript with a lavender “Tokyo Night” desktop-rice look crossed with a Y2K Windows scrapbook vibe, and the graph-paper wallpaper is pure CSS. So far I’ve got a welcome screen that boots into a desktop with a live clock, clickable desktop icons, and draggable windows you can move around, bring to the front, and close. The trickiest bug was my enter button “not working,” which turned out to be my code editor’s preview, not my code, fixing itself the moment I opened it in a real browser. It’s live and public at https://hamstersarus.github.io/Hamstersarus_Website/ and next up is building my first real app plus a bonus feature the guide doesn’t cover.
Since my last update I finished the rest of the webOS jam. I built my first real app, an About Me window with a little bio and my likes and dislikes, and then two “advanced” apps: a music player that actually plays real lofi tracks with play, pause, and skip (the disc even spins while it’s playing), and a fully playable purple version of 2048 that you control with the arrow keys or WASD. The 2048 game is my bonus feature that the guide didn’t ask for. The trickiest part was a layout bug where the 2048 board kept spilling out of its window and making everything look like it was shifting around while I played, which turned out to be a CSS grid quirk where the columns refused to shrink to fit, fixed by switching them to minmax(0, 1fr). I also added a README so anyone visiting my repo knows what the project is and how to run it. Everything is live and public at https://hamstersarus.github.io/Hamstersarus_Website/ and all five parts of the jam are now done.
Since my last update I turned my webOS into a proper portfolio. First I gave the music player a real upgrade so a lofi track starts playing the moment you enter the desktop, with a little “now playing” notification, and it keeps playing even if you close the music window instead of stacking a second song on top like it used to. Then I added four new apps to show off my work: a Projects window with cards for HamstersarusOS, my SENTINEL surveillance game, my Fight game, and my 2048 game, each linked to its GitHub repo; a Skills window with little proficiency bars; a Resume window with my education, internship, and awards; and a Contact window with my GitHub, LinkedIn, and email. I also filled in the About Me app with my real name and bio. One thing I was careful about was privacy, since the site is fully public with no password I deliberately left my home address and phone number off it and only put the professional stuff online. It’s all live at https://hamstersarus.github.io/Hamstersarus_Website/ and it actually feels like a portfolio now instead of just a demo.
This update was mostly polish and housekeeping. I renamed my repository to HamstersarusOS, which gave my portfolio a cleaner link to share around, it now lives at https://hamstersarus.github.io/HamstersarusOS/ . After renaming I went through and updated all the internal links so the project cards and README point to the new address instead of the old broken one. I also cleaned up my portfolio a bit: I tweaked the likes in my About Me section and removed a leftover note in the Skills app that was only meant for me but was accidentally showing to visitors. Nothing flashy this time, just tightening things up and making the site easier to send to people.
So a lot of changes… I was brainstorming what I should add and I had the bright and original idea to add a contact me app! Problem is, I already have my socials linked. I want a way for people to reach me directly though. My first thought was to make a new Gmail account (I don’t want spamming on my main account) but then I was doing some research and I realized I can make a discord webhook. After a TON of trial and error, I figured out how it works and every message through that app goes straight into a private discord server. I committed all my changes and I was pretty happy with my code. But then I get an email from GitGaurdian… It said that my url was exposed. I had put the url in the frontend. After some panicking, I find out what cloudlfare workers are. I put my webhook in cloudflare and everything is okay!! Now you can send me a message! :) I also wanted to make a little magic 8-ball game just for fun. It’s a hamster that tells you your fortune!! How fun is that?
I wanted to show off my website but I was on my phone and thats when I realized it doesn’t really work on the phone… The only problem was that the windows wouldn’t drag. The github website page function I used for the website formatted it fine for different screens. I fixed the issue with the dragging on touchscreen. I also made the 2048 game work on touchscreen. Also, I updated the algorithm for the 2048 game. I have written code for it before in Java just for practice and I wanted to take advantage of the fact that I already had an algorithm that works and I understand, so that’s what I decided to do. Now I can understand the 2048 code a little better (I wrote it before understanding JavaScript as well as I do now and most of it is from bits and pieces I found while researching). I also wanted to add some pictures of projects I’ve done. So far, I really only have one but I do have some currently on their way to me in the mail so I’ll add those later. Another think I feel like it’s important for me to note, I know that my README looks like it was written by AI with all the emojis but I actually wrote them all in there myself, I feel like they add a lot to the aesthetic instead of just being plain text. I source all my emojis from: https://emojicopy.com/
Ships:
I created a website to serve as my portfolio. It is a tiny web operating system. Instead of making just a regular about me page, I made a “desktop” that people can use to get to know me. I included by resume, skills, prior projects, and contact information....
|
1793105283.811732
|
1793191683.811732
|
|
26517
|
Exopossibilities by @Skye | Stardance
|
Skye
|
2
|
63.0
|
909
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T20:04:39Z", "hours": 50.0, "multiplier": 15.94, "payout": 791, "blessing": "neutral", "text": "Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}, {"ship_num": 2, "ts": "2026-07-06T03:13:26Z", "hours": 13.0, "multiplier": 9.22, "payout": 118, "blessing": "neutral", "text": "I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}]...
|
[{"post_id": 55773, "ts": "202 [{"post_id": 55773, "ts": "2026-08-27T19:32:22Z", "hours": 1.9789, "text": "Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!"}, {"post_id": 54681, "ts": "2026-08-25T18:55:05Z", "hours": 6.4967, "text": "I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!"}, {"post_id": 53153, "ts": "2026-08-23T16:17:58Z", "hours": 3.2425, "text": "Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!"}, {"post_id": 47729, "ts": "2026-08-15T20:47:06Z", "hours": 3.0519, "text": "I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile."}, {"post_id": 46666, "ts": "2026-08-14T03:09:32Z", "hours": 4.6506, "text": "So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious)."}, {"post_id": 45328, "ts": "2026-08-11T18:28:35Z", "hours": 2.3153, "text": "I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make."}, {"post_id": 44940, "ts": "2026-08-11T01:14:31Z", "hours": 3.0764, "text": "Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons."}, {"post_id": 44250, "ts": "2026-08-09T21:36:52Z", "hours": 5.9186, "text": "I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile."}, {"post_id": 38479, "ts": "2026-07-31T21:40:58Z", "hours": 1.9289, "text": "Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?"}, {"post_id": 37691, "ts": "2026-07-30T16:16:58Z", "hours": 7.0717, "text": "So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen."}, {"post_id": 29699, "ts": "2026-07-16T19:47:15Z", "hours": 1.7039, "text": "I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!"}, {"post_id": 29264, "ts": "2026-07-16T02:17:50Z", "hours": 1.1181, "text": "Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared."}, {"post_id": 29145, "ts": "2026-07-15T20:33:59Z", "hours": 2.8753, "text": "I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!"}, {"post_id": 28859, "ts": "2026-07-15T12:41:13Z", "hours": 1.6367, "text": "Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!"}, {"post_id": 27429, "ts": "2026-07-13T00:02:15Z", "hours": 1.2636, "text": "So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now."}, {"post_id": 26975, "ts": "2026-07-12T02:57:00Z", "hours": 1.3003, "text": "A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!"}, {"post_id": 23246, "ts": "2026-07-06T02:28:12Z", "hours": 1.9897, "text": "I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!"}, {"post_id": 22973, "ts": "2026-07-05T17:34:03Z", "hours": 7.4275, "text": "Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool."}, {"post_id": 18833, "ts": "2026-06-30T01:11:16Z", "hours": 2.2908, "text": "I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details."}, {"post_id": 18399, "ts": "2026-06-29T15:17:03Z", "hours": 1.0153, "text": "I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body."}, {"post_id": 17766, "ts": "2026-06-28T18:14:30Z", "hours": 0.4517, "text": "Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.)."}]...
|
Title: Exopossibilities by @Skye | Stardance
Devl Title: Exopossibilities by @Skye | Stardance
Devlogs:
Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.).
I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body.
I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details.
Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool.
I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!
A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!
So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now.
Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!
I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!
Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared.
I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!
So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen.
Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?
I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile.
Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons.
I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make.
So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious).
I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile.
Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!
I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!
Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!
Ships:
I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!
Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!...
|
1793105286.3802345
|
1793191686.3802345
|
|
30120
|
My own site! by @krishsage | Stardance
|
krishsage
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T07:08:59Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Created Personal Site . Learned basic html and css which is hard tbh and last thing to be creative to design like i am not web dev or frontend designer i like doing backend things and low level langs such as rust", "repo": "https://github.com/Krish-Saga/personal-site", "demo": "https://krish-saga.github.io/personal-site"}]...
|
[{"post_id": 21339, "ts": "202 [{"post_id": 21339, "ts": "2026-07-03T07:03:46Z", "hours": 1.9903, "text": "Just learned basic html and css . and created this lil site"}]...
|
Title: My own site! by @krishsage | Stardance
Dev Title: My own site! by @krishsage | Stardance
Devlogs:
Just learned basic html and css . and created this lil site
Ships:
Created Personal Site . Learned basic html and css which is hard tbh and last thing to be creative to design like i am not web dev or frontend designer i like doing backend things and low level langs such as rust...
|
1793105287.6725607
|
1793191687.6725607
|
|
48859
|
WordLift by @raajk | Stardance
|
raajk
|
1
|
0.29
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T07:45:48Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A simple dictionary which is useful for learning meanings of new word and learning a new word. If you ask what do you mean by learning a new word it just means increasing your vocabulary and if you ask how just try searching a meaning of new word, it will give you the meaning for the exact word and shows synonyms for that word both for poetry and essay writing.", "repo": "https://github.com/raajweb1-maker/WordLift", "demo": "https://wordlift.crentai.qzz.io/"}]...
|
[{"post_id": 52174, "ts": "202 [{"post_id": 52174, "ts": "2026-08-22T08:18:21Z", "hours": 0.2939, "text": "updated readme and removed unnecessary files in github"}, {"post_id": 47935, "ts": "2026-08-16T06:20:23Z", "hours": 0.2558, "text": "A simple dictionary for both meanings and vocabulary"}]...
|
Title: WordLift by @raajk | Stardance
Devlogs:
A Title: WordLift by @raajk | Stardance
Devlogs:
A simple dictionary for both meanings and vocabulary
updated readme and removed unnecessary files in github
Ships:
A simple dictionary which is useful for learning meanings of new word and learning a new word. If you ask what do you mean by learning a new word it just means increasing your vocabulary and if you ask how just try searching a meaning of new word, it will give you the meaning for the exact word and shows synonyms for that word both for poetry and essay writing....
|
1793105288.5757065
|
1793191688.5757065
|
|
1983
|
rasterminal by @PavolUlicny | Stardance
|
PavolUlicny
|
1
|
470.39
|
8580
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T16:24:17Z", "hours": 449.0, "multiplier": 19.99, "payout": 8580, "blessing": "neutral", "text": "rasterminal rasterminal is a 3D model viewer in the terminal Why i decided to build it The original idea didn’t really have any big inspiration, I’ve just always been fascinated by the inner workings of 3D and how that all works. I’ve been wanting to build a project involving 3D for a while and I didn’t want to make just another program that uses libraries and GPU drivers to do all the work. So I came up with the idea: a software rasterizer that renders in the terminal! There are lots of TUIs and lots of boring old software rasterizer projects, so I just combined the two into something unique. And over time, I realized I could make it an actually useful tool, with no real competition: a 3D model viewer in the terminal. Sure, there are some similar projects on GitHub (like taigrr’s trophy), but none are actually usable with heavier models or support pixel graphics. What I learned I learned a lot. I really mean a lot. Anything from math and rendering to how terminals work and how to control them using escape sequences. I don’t want to sit here and name everything I learned over the period of the last 5 months, but I can confidently say that this project really taught me how much work goes into everyday software and how to actually develop and maintain a project professionally. The future of rasterminal The whole project is very far from done. You can see that from the latest release version: v0.1.0-alpha.2. I’ve got a lot of work to do and I’ve roughly got the major landmarks mapped out. Main things I definitely want to change/add at some point before v1 are: Add animation support (currently can only render still meshes) Complete the renderer (complete support for basically every feature of every format that makes sense to support) Add optional GPU acceleration (after I’m satisfied with everything else) Hardware / OS support Supports every major OS (Windows, Linux, MacOS, and any other POSIX-based OS, so practically everything), and every CPU that I could think of (any architecture, 32 or 64bit). You would have to actually try a to find a platform that it doesn’t support (most of the unsupported hardware are big-endian systems, which are basically phased out completely). This is one of the main goals of the project, so (almost) any modern machine with a terminal can run it. Special thanks Special thanks to anyone who followed, liked, helped, or otherwise supported the project in any way. I wouldn’t have had the motivation to push it this far if it wasn’t for you guys.", "repo": "https://github.com/PavolUlicny/rasterminal", "demo": "https://github.com/PavolUlicny/rasterminal/releases/tag/v0.1.0-alpha.2"}]...
|
[{"post_id": 70278, "ts": "202 [{"post_id": 70278, "ts": "2026-09-18T21:10:51Z", "hours": 6.11, "text": "Code quality and CI improvements Finally did the long overdue main loop refactor. The main loop is now way shorter, more readable and more testable. I just split off some of the main loop’s work into it’s own modules, which made them way better looking and also, since they are now standalone modules, actually testable. A big win for repo structure. In the process, I also replaced the input handling’s long if chain that made each character do it’s job with a switch statement. It’s more readable and theoretically faster, although since I compile it with -O3, it probably made no difference or an unnoticeable one at best. I also finally fixed the super long CI times. Until now, CI used to take ~50 minutes (depending on how fast the GitHub runner was) because of cppcheck. Everything else finished in under 10 minutes, but cppcheck stalled it for an hour. It was stalling in mesh_assimp.cpp (the assimp wrapper) for most of it’s runtime. I always thought it was because assimp is a very large library. So I experimented with it a little. I included everything I include in the wrapper into a test file with a little code and ran cppcheck on that. It finished in less than 10 seconds. Eventually, I found out it was somehow taking that long because the main loader function was too long and handled too much by itself. So i just refactored it into 3 separate functions, without changing the behavior at all. Somehow, I still don’t get why, it reduced the whole cppcheck run to 9 minutes. a more than 5x improvement, just because I split a function into more functions. I’m not complaining, but it’s definitely weird. CI is now way faster and adding new things is gonna be way smoother now."}, {"post_id": 68728, "ts": "2026-09-15T17:06:41Z", "hours": 6.6975, "text": "Miscellaneous fixes and improvements Fixed two races in platform code (one MacOS, one Windows) Removed build flags that disabled some compiler security hardening at the cost of a little performance Fixed the test framework to not freak out on NaN in near assertions Improved thread launching and handling in loaders and renderer So overall just boring fixes and improvements, nothing special."}, {"post_id": 66825, "ts": "2026-09-12T18:42:57Z", "hours": 8.5847, "text": "Refactored the platform layer The whole platform layer was just one file until now. Since I did a lot of work on it recently, it grew to over 2400 lines of code. It was super confusing and disorienting. So I decided to refactor it (split it) into 8 files, based on what they handle: console.h - saving/restoring terminal state control.h - termination signal handling file.h - file operations (64bit) input_reader.h - handling input (not parsing, that is it’s own file) shared_memory.h - shared memory handling for the kitty protocol terminal_io.h - writes output to the terminal terminal_query.h - querying the terminal for things like graphics capability, etc. timing.h - frame timing and sleeps"}, {"post_id": 64252, "ts": "2026-09-08T14:55:07Z", "hours": 2.3467, "text": "Last pre-release checks and cleanup I’m finally ready to release v0.1.0-alpha.2. Only notable thing I changed here is that I changed the default thread count: It now defaults to hardware concurrency everywhere. Other than that, I of course did final documentation checks and fixes and now I’m just waiting for CI to pass so I can tag it and let the release workflow do the last step. So this is hopefully the last devlog before my ship!"}, {"post_id": 63837, "ts": "2026-09-07T20:19:19Z", "hours": 10.4164, "text": "Did some polish and cleanup of the platform layer Did final polish and cleanup of the platform layer since I want to actually finally cut a release relatively soon and I just did a lot of work there. Fixed things like useless tests, outdated or wrong comments and some platform specific quirks. Probably actually gonna cut a release soon (this time for real). Also added early rejections for BVH and CSM files, since they contain no model geometry (they can’t currently be displayed at all) and documented the change. The code is basically done (hopefully, I really don’t want to find another big gap that’s gonna take a week to close), I just want to correct anything wrong in the README, changelog, manpage or help menu and maybe make them look a little better before cutting a release and shipping."}, {"post_id": 62122, "ts": "2026-09-05T11:43:50Z", "hours": 9.5678, "text": "Working on SIGSTOP and SIGCONT handling SIGSTOP and SIGCONT are POSIX signals for stopping and resuming a running process. I’m working on adding handling for these, so you can safely pause and unpause rasterminal at any time. This is a lot of work, since until now, we just set up the terminal on program start and cleaned up when the program exited. There’s a lot of quirks and weird scenarios that I have to handle, for example if another signal gets sent while cleaning up the terminal for SIGSTOP. I’m trying to catch as many edge cases by just doing random things while using the program and also with the help of AI to come up with potentially uncaught scenarios."}, {"post_id": 59763, "ts": "2026-09-01T18:10:34Z", "hours": 4.3639, "text": "Added handling for SIGINT, SIGTERM, SIGQUIT and SIGHUP I don’t really have much to say here, I just added the full per-spec handling for all these. Only remaining POSIX-only gap is now SIGSTOP/SIGCONT (stop/resume process). I’m also starting school now, so I’ll be working on this less."}, {"post_id": 58964, "ts": "2026-08-31T15:12:04Z", "hours": 3.8394, "text": "Fully fixed and merged the first POSIX cleanup item Well, would you look at that! That took significantly less time than the Windows fix. It is partly because it was a smaller fix and only part whole POSIX fix, while the Windows one was the whole thing and also the foundation had already been laid out from the Windows work and I just integrated the POSIX path into that, but it is also very much because Microsoft is a horrible, terrible company that can’t make good software. I mean, look at GitHub, they have been going downhill ever since they got acquired by Microsoft. Now that I got that out of my system, here’s what was fixed: If the program cannot enable raw mode at startup, it safely fails instead of continuing and corrupting the terminal state If the cleanup gets interrupted, it retries cleanup so it doesn’t leave the terminal state corrupted after one failed attempt Onto the next POSIX fix: handling SIGQUIT and SIGHUP."}, {"post_id": 58269, "ts": "2026-08-30T17:14:59Z", "hours": 8.6936, "text": "Merged the full Windows console restoration branch My nightmare is over. I hopefully won’t have to deal with Windows for a while now. Summary of what is now fixed/handled on Windows: Ctrl+C, Ctrl+Break and Q exits fully recover the terminal’s state Ctrl+C and Ctrl+Break don’t leak mouse escape sequences into the next prompt if you terminate while actively dragging a model A bunch of other minor Windows or cmd.exe specific quirks Only thing that isn’t handled (didn’t find a good way to handle it) is task manager “end process”. It kills the program without cleaning up and sometimes freezes the shell."}, {"post_id": 56881, "ts": "2026-08-28T21:26:16Z", "hours": 9.6883, "text": "I HATE WINDOWS Windows just doesn’t work. It doesn’t work. Nothing works on Windows. Everything breaks. I don’t get it. THE UNIT TESTS PASS ON WINDOWS CI BUT WHEN I ACTUALLY RUN THE TESTS ON WINDOWS IT FAILS????? HOW IS THAT EVEN POSSIBLE. The release is now definitely getting delayed by at least a week because I keep running into more and more and more and more and more and more and more and more and more issues. I hate Windows. Microslop is the only company that could mess up a basic terminal emulator. And I also have to reboot my PC every time I fix something and push it and then reboot to get back to linux. this is torture. At one point I tried to do it on a Windows VM on linux but that was too slow so I just gave up."}, {"post_id": 55585, "ts": "2026-08-27T15:06:53Z", "hours": 8.8714, "text": "Found a bunch of terminal cleanup gaps Most of them are Windows or cmd.exe specific (nothing ever works on Windows), but some are present on POSIX too. The Windows specific ones are: cmd.exe for some unknown reason doesn’t turn off the raw input sequences, so arrow keys don’t work like they should, even though I explicitly turn it off (????????) (I hate Windows, they always have to do something unexplainable for no reason just so your code doesn’t work as it should) when you terminate the program with ctrl+c or ctrl+break while actively dragging the model around, it sometimes leaks mouse escape sequences into the next prompt bunch of other weird small stuff that nobody cares about And the few on POSIX are mostly ctrl+z suspend/resume behaviour not recovering the terminal and the same thing with ctrl+\\ (SIGQUIT). I’m still working on fixing these. Most of the windows ones are already fixed, but I haven’t even started with the linux/POSIX ones. I have postponed the planned release to when I fix these + any other issues I find."}, {"post_id": 54695, "ts": "2026-08-25T19:14:01Z", "hours": 10.7308, "text": "Cutting a release The repo is in a pretty complete and polished state, so I’ll cut a release here. This will also probably be the last release before I ship, so I’m making sure that nothing is broken and everything works on every platform. I’ve still got a lot of work to do though, even after the end of stardance, like animations, glTF PBR, format completeness for every format, GPU acceleration, etc."}, {"post_id": 53861, "ts": "2026-08-24T15:48:08Z", "hours": 10.9639, "text": "Merged the full assimp integration into main I really don’t have much to say here, I’ve already put all the info about the branch into the past devlogs. All the formats work and the wrapper is very sturdy. I’ve found more bugs in assimp itself than my code (devlog on that soon). So, rasterminal can now load basically any 3D model you throw at it. Some of the formats assimp supports are so niche, I’ve never even heard of them."}, {"post_id": 53278, "ts": "2026-08-23T18:46:58Z", "hours": 13.1411, "text": "Fuzzing my assimp wrapper I’m trying a bunch of hand-crafted models from all the formats that I can load and trying to find things that dont load or render properly. Also had AI write me a simple fuzzer in python and I’m just letting it run for a few hours. Also auditing the assimp loader paths against my wrapper to find any format specific behaviour that should be handled. I’ve already found a bunch of things and I’m still finding more. Assimp has a lot of weird quirks and issues that I keep running into. Honestly kinda regretting the decision to integrate it, but since I’m already so deep in, I’ll just keep going."}, {"post_id": 52574, "ts": "2026-08-22T19:13:37Z", "hours": 11.0969, "text": "Still working on the assimp intgration Currently trying various models from all the different model formats that assimp loads. So far found a segfault, some weird behavior and integration mistakes that I made. Also found a small bug in assimp itself, for which I’ve submitted the PR with the fix to their GitHub repo. For anyone interested, here’s the PR: https://github.com/assimp/assimp/pull/6799"}, {"post_id": 51884, "ts": "2026-08-21T19:41:32Z", "hours": 6.9825, "text": "Working on assimp integration Yop, I’m adding the Open Asset Import Library as a fallback for any model formats that aren’t natively supported with their own dedicated loader (only ones with dedicated loaders are glTF2, PLY, STL and OBJ). I’m still keeping the dedicated loaders, because they are more feature-complete, to-spec and wayyy faster (especially the glTF one). I added it because I feel like for a 3D model viewer, support for many formats, even niche and obscure ones, is pretty important, even though nobody might use them. This roughly doubled compile time and almost quadrupled binary size, which also made CI take way longer (of course). It somehow made the MacOS runners take 50 minutes to compile (from the previous 3 minutes), but I fixed that by bounding the number of processes CMake can spawn to the number of threads on the runner (previously was using -j which spawns as many as it wants and it was spawning about 230 of them). I’m still testing how it handles various model formats and trying to find any reachable segfaults."}, {"post_id": 51275, "ts": "2026-08-20T20:14:42Z", "hours": 6.7119, "text": "Cleanup and restructuring changes After I just merged three big feature branches (kitty and sixel graphics protocols and the high-res performance branch), I needed to do some overdue cleanup and refactoring. And so I did: Collapsed the super long changelog entries into way more readable and legible points Restructured the src directory into multiple subdirectories because it had like 50 files already Sadly completely removed the Make build system, so now you can only build with CMake (CMake is very much evil and even more evil but it’s the only one of the two that supports windows and I was tired of managing two build systems) Removed the –graphics-scale flag, so now everything renders at native resolution And some small docs and comment cleanup"}, {"post_id": 50683, "ts": "2026-08-20T00:07:13Z", "hours": 12.3297, "text": "Finally merging the performance branch It’s finally time to merge the performance branch. I basically redesigned the whole renderer and rasterizer around high resolution workloads, where it would still choose the old high-poly paths where they were faster. Even snuck in some SSE2 SIMD code (picture), although I will probably be switching to a dispatch SIMD library like Google’s Highway. Not entirely sure it will be Highway or even if I will do that yet, that depends on the code complexity and before/after benchmarks."}, {"post_id": 49184, "ts": "2026-08-17T20:28:00Z", "hours": 14.5689, "text": "Still optimizing… Spent the first ~7 hours trying to find microoptimizations and each one was either a wash or worse somehow. The compiler works in mysterious ways. At some point, I just gave up and let Claude have a go at the optimizing. Surprisingly it actually came up with a lot of interesting optimization techniques and solutions that I definitely couldn’t have come up with on my own. But it found so much, that the whole diff adds 5k lines of code. So now I’ll be cleaning up, testing, and maybe further optimizing that diff…"}, {"post_id": 48227, "ts": "2026-08-16T15:09:59Z", "hours": 3.5944, "text": "My reported bug in libtermkey has been fixed in the newest version Just got an email from one of the maintainers that the crash bug i reported a month ago was fixed in the new release. libtermkey is a terminal input parsing library that I considered using and found a crash bug in. The bug was already fixed in neovim’s fork of the library, so i just pointed the maintainers at that fix. For anybody interested, here’s the issue link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142891"}, {"post_id": 48078, "ts": "2026-08-16T11:20:07Z", "hours": 11.47, "text": "Working on improving performance With the addition of the high-res protocols, the target resolutions quickly went from hundreds or thousands of pixels to millions. So I now desperately need to improve performance. So far it’s looking promising: A whole model covering the camera 6 moving at 4k went from about 8 fps to 20-30 fps. Not ideal yet, but I think we’re on the right track. Super dense meshes (more than 2 million polygons) improved 2-3x Meshes with transparent parts improved about 2x While these wins may seem really big (they kinda are), the jump in resolutions still means they are barely usable interactively. I do want to add gpu acceleration later (with the cpu path as a fallback), but until then I want to make it as fast as I possibly can."}, {"post_id": 47112, "ts": "2026-08-14T19:18:15Z", "hours": 9.0333, "text": "Fully merged sixel Fully merged the sixel protocol implementation. Works on all platforms everywhere that supports it. So now both high-res terminal protocols done. Moving onto other minor things and especially performance."}, {"post_id": 46486, "ts": "2026-08-13T18:38:49Z", "hours": 10.6753, "text": "Working on adding full Sixel support Working on adding support for the other mainstream terminal pixel protocol of the main two - Sixel. Already did fully implemented the kitty protocol last time, so once I’m done with this one, I’ll be done with terminal protocols (at least for the near future, hopefully). There are some other ones like the iterm2 protocol, but that one’s pretty rare and I won’t add it unless I really don’t have anything better to do. It’s basically done, just need to polish it and test it on a bunch of terminals and operating systems to make sure everything works before merging."}, {"post_id": 44676, "ts": "2026-08-10T16:23:20Z", "hours": 4.0767, "text": "Fully merged and done with Kitty Finally completed the kitty protocol implementation. It is kinda slow, since the resolution is so much bigger, so I will try to optimize the high-res performance even more. So now the next two big milestones are: Add Sixel on top of kitty, that’ll be a lot of work Optimize the rasterizer even more I was thinking of maybe adding gpu rendering as an option for super large meshes or high-res scenarios, but idk. I’ll definetly keep the pure cpu renderer for computers without gpus, but I’m not sure about a gpu implementation. It would be hard to do, less portable and it might not even work that well."}, {"post_id": 44513, "ts": "2026-08-10T09:59:08Z", "hours": 6.8483, "text": "Found a bug in Ghostty’s kitty protocol handling Ghostty is a modern and fast terminal emulator that i personally use. While testing the kitty protocol feature in rasterminal, I found a Ghostty bug that lagged my whole computer after a few minutes. I tested it in Kitty (terminal emulator) and there it worked fine. I looked at Ghostty’s code vs Kitty’s, found the bug and reported it to the Ghostty maintainers. Mitchell himself (the creator) fixed it in like 2 hours. Honestly I’m kinda sad I didn’t get to become a contributor and fix the bug, but since it was a small fix and I already described it in the issue, I get why Mitchell just fixed it in main. Here’s the full issue: https://github.com/ghostty-org/ghostty/discussions/13719"}, {"post_id": 43513, "ts": "2026-08-08T20:35:37Z", "hours": 7.6361, "text": "Working on adding support for the Kitty protocol Some modern terminals like Kitty and Ghostty have support for the Kitty protocol. It’s a feature that allows you to display high resolution content like images and videos in the terminal without it looking super pixelated. There’s also the Sixel protocol, which is basically the same thing but a little worse and more widely supported (even Windows terminal has it). I’ll add Sixel after i merge Kitty to main. It is very clearly a worthwhile feature and I have been planning to add it from the start of the project. Today I finally decided that it’s time. Most of the work is already done on the branch and i’m just polishing out the bugs and issues before I merge. In the photos, you can see the comparison between using just the block characters and using Kitty. It is a night and day difference. Although the performance isn’t great at that high of a resolution, but I’m still working on optimizing that."}, {"post_id": 42752, "ts": "2026-08-07T17:00:51Z", "hours": 3.5125, "text": "Minor comment cleanup Just did some comment cleanup: Deleted redundant comments and why comments Removed separator comments Compressed or rewrote some really long comments (without removing the info they give)"}, {"post_id": 42161, "ts": "2026-08-06T19:24:06Z", "hours": 8.2153, "text": "Added issue templates + contributing documentation Added templates and a config for submitting GitHub issues, for both bug reports and feature requests. Also added a CONTRIBUTING.md for clear instructions on how to make, structure and audit code contributions. (tests, linters, formatting, etc.) I tried to make some optimizations to the renderer by auditing the compiler generated assembly and looking for inefficiencies, but everything i tried turned out to actually hurt performance. And GitHub actions decided to have a major outage right when i pushed the commits, so that’s awesome"}, {"post_id": 39599, "ts": "2026-08-02T18:05:04Z", "hours": 7.4436, "text": "Completely redesigned and rewrote the HUD The HUD used to be just a single line at the bottom of the screen aligned to the left. It looked pretty bad, but it did tell the user everything they needed to know. [picture 1] First, I added model name sanitization, so models with control bytes like newline ( \\n ), line feed or other symbols like emojis can’t break the whole program when trying to display them in the HUD. Then, I completely redesigned the whole HUD to look better and be more robust, while still telling the user everything they need to know. I went with this design [picture 2]: On the left, you only have the model name. In the middle, first you have the current shading mode (highlighted in cyan), then the lighting mode in plain white and then the background color in gray. All three middle indicators are separated with a dot and are different colors, so nobody can confuse them. On the right, there’s 3 boolean indicators: spin (if the model spin is on), backface cull (if it’s currently culling backfaces) and texture (if it’s showing the texture, isn’t there at all on models without a texture). They are gray if inactive and cyan if active. The last thing on the right is just the fps number. There can also be optional indicators: Wireframe color (in the middle, after the shading mode) which only shows up in wireframe mode. [picture 3] First person speed multiplier (on the right, between the bools and the fps number) which shows up only in first person mode. [picture 4] I also made each “island” cleanly disappear when the terminal’s width is too low instead of just slowly getting cut off letter by letter. I think this design looks better, less cluttered and is pretty easy to understand at a glance. I would very much appreciate a star on GitHub!"}, {"post_id": 38478, "ts": "2026-07-31T21:36:35Z", "hours": 7.7572, "text": "Did a smaller fix and added a pretty big feature First, let’s talk about the small fix: I Fixed a super long model name showing up in the HUD in it’s full length, often blocking out other HUD elements. Previously, the HUD would display a model name of any length. Now there’s a hard cap of 24 chars, with any name longer than that truncated (middle style truncation) to fit into that limit. And now the big feature: Added a first person noclip-style camera mode. It’s accessed with the –first-person flag and let’s you explore the model as a floating camera (not bound like the default orbit camera). It was honestly easier to implement than I thought it would be. With it, I added two new keybinds special to the first person mode - E and V for going up and down. They don’t do nothing in orbit mode. Also added a second –first-person-speed flag for controlling the initial movement speed. It is also controllable during runtime with scrolling or +/- (I didn’t know what to bind these to in this mode since you can’t zoom like in orbit mode and this was the only place where they fit). In the photos, you can see some angles taken in the first person mode that weren’t possible in the default orbit mode."}, {"post_id": 37806, "ts": "2026-07-30T19:08:29Z", "hours": 2.7436, "text": "Finally committed and pushed the input rework Tested it on both linux and windows and everything seems to work. No inputs interpreted as other inputs, all edge cases handled, just works. Finally can move onto other things."}, {"post_id": 37656, "ts": "2026-07-30T15:25:21Z", "hours": 9.285, "text": "Still working on the input parsing system It is very hard and I keep finding bugs and reasons to redesign it. I’m in pain. I do think I’m getting closer to the final robust design."}, {"post_id": 36697, "ts": "2026-07-28T22:28:53Z", "hours": 9.9361, "text": "Working on completely rewriting the current input parsing handling The current input handling is subpar at best; it interprets a lot of random keys as escape, which currently quits the program (This will also be changed to Q and Ctrl+C only. Kind of a no-brainer since this is the more standard choice for TUIs - for example btop - and it also means I don’t have to deal with the headache of distinguishing function keys and others from escape) and has a lot of other quirky behavior that needs fixing. I’ll also try to improve robustness against malformed input like a leaky SSH session. There are a lot of various edge cases and situations where you have no way to distinguish real input from malformed input. This is all a very major pain in the ass. And I thought figuring out the raw mode output would be the hard part. And after all this, I’ll end up with way less attention than strictly slower, less robust competitors, just because they already have an audience from other projects. I bet nobody will even read this. I’m basically talking to myself right now. Or maybe, just to spite me, the algorithm will push this more than my other devlogs."}, {"post_id": 35924, "ts": "2026-07-27T17:55:43Z", "hours": 8.7953, "text": "So, i found two memory bugs in a widely used terminal input library I was researching terminal input libraries to use for this project because my current approach was so buggy that it wasn’t worth fixing. Both of them are memory bugs in the libtermkey library. There are forks of the lib with this fixed, but since many projects still rely on this lib, i submitted them anyways. I’ve also confirmed that the bug is present on my machine on Ubuntu 24.04 LTS on Neovim, because it links the vulnerable shared library. I didn’t mark them as CVEs (hopefully that isn’t a problem). If anyone want’s to look at the bug reports, they are at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142891 and https://bugs.launchpad.net/ubuntu/+source/libtermkey/+bug/2161916"}, {"post_id": 33607, "ts": "2026-07-23T17:38:48Z", "hours": 4.5575, "text": "Added more CLI flags for startup customizability Added flags to set the camera pitch, yaw and zoom on startup. Now every runtime-settable variable can be set during startup through the CLI. The R button now resets the state to the CLI set state, not to factory defaults."}, {"post_id": 32607, "ts": "2026-07-21T21:48:11Z", "hours": 4.4442, "text": "Added –spin-speed and –spin-direction flags Added CLI flags for the spin speed and direction. The speed is in deg/s and the directions is simply left or right. Here’s what 1000 deg/s looks like spinning to the right:"}, {"post_id": 30923, "ts": "2026-07-18T22:17:24Z", "hours": 8.6892, "text": "Did a bunch of small code quality and usability improvements Fixed a Windows bug that crashed the program on model sizes bigger than 2GB, improved the orbit usability (fixed mouse drag behavior when models are turned upside down), and did a few cleanups and fixes in the CLI parsing. I’m planning on adding a few CLI flags that I think can be very useful for some people, specifically better spin settings, starting camera angle/zoom control and a few more."}, {"post_id": 29772, "ts": "2026-07-16T21:27:23Z", "hours": 0.7175, "text": "Finally merged color-fallback, I can move onto other things The branch is finally merged. I’ve accumulated a bunch of usability and code quirks and issues that i can finally get to now that the branch is merged. So now I’ll be reworking all the CLI flags, camera and other components. And we also passed the 700 commit mark with this merge!"}, {"post_id": 29484, "ts": "2026-07-16T13:40:29Z", "hours": 4.9444, "text": "Changed the 24bit to 256 color palette conversion logic Until now, the conversion picked the closest color possible mathematically. But from testing on a bunch of different models, I’ve realized that it doesn’t actually look very close to the human eye. So I swapped it out for a different method, called CIELAB distance. Now it still doesn’t look perfect, but as a fallback for older terminals it’s close enough."}, {"post_id": 28408, "ts": "2026-07-14T17:26:16Z", "hours": 9.2258, "text": "Working on a –color compatibility flag The color terminal compatibility thing I was working on has landed in the branch, now I’m adding a –color flag to override the automatic capability detection for situations like ssh, where we almost always degrade to the 256 color pallete for maximum compatibility. So now you’re gonna be able to use the right color mode even if the automatic detection is wrong for your situation."}, {"post_id": 27302, "ts": "2026-07-12T19:23:17Z", "hours": 10.3522, "text": "Working on terminal color capability detection I am adding automatic terminal capability detection, meaning that rasterminal will get the terminal type and either refuse to render on super old or “dumb” terminals, degrade on some terminals and render normally on modern ones."}, {"post_id": 24314, "ts": "2026-07-07T20:18:01Z", "hours": 5.1908, "text": "Working on adding 256 color support Some older terminals can’t display full 24bit RGB colors and use a 256 color palette instead. I’m adding a fallback so the older terminals can still use rasterminal. It still calculates the full old RGB colors, but then just maps them to the nearest 256 color with LUTs. On a side note, I switched my terminal emulator from Kitty to Ghostty."}, {"post_id": 23070, "ts": "2026-07-05T20:10:12Z", "hours": 10.4403, "text": "Working on portability Did a bunch of small fixes and improvements in the last ~week. Right now I’m on vacation for the next couple of days, so I won’t be active. I am currently working on broader terminal and platform support, so older systems and terminals will be able to run cleanly with some fallbacks or will fail loud with a clear message about what isn’t supported."}, {"post_id": 19371, "ts": "2026-06-30T17:34:50Z", "hours": 5.1925, "text": "Completely removed the shadow map Before, rasterminal built a shadow map on model load and displayed it during runtime. I now completely removed it, because it was slower during load, slower during runtime, sometimes looked broken on curved surfaces and added essentially no value. Here, the first picture is with the shadow map and the second is without."}, {"post_id": 18685, "ts": "2026-06-29T21:27:29Z", "hours": 13.4722, "text": "Wasted 7 hours of my life Did a bunch of smaller cleanups and fixes, and then I tried to template the unlit and lit paths in the rasterize_flat function, which turned out to be a performance regression. Awesome."}, {"post_id": 17021, "ts": "2026-06-27T17:00:39Z", "hours": 5.7733, "text": "Added a release workflow, manpage and changelog I added a github release workflow that works alongside the changelog and released the first pre-release version: v0.1.0-alpha.1 Also added a manpage and an install target to make and cmake that installs the binary, docs and manpage into the path."}, {"post_id": 16313, "ts": "2026-06-26T15:28:43Z", "hours": 5.1883, "text": "Pararelized the wireframe shading mode I did a bunch of small things alongside it, but the main feature for this devlog is the pararelization of the wireframe shading mode. It was previously fully single threaded, but it wasn’t that hard to pararelize, i just had to make the function it used to write into the framebuffer (draw_line) CAS atomic, to avoid race conditions. Now wireframe is the fastest shading mode in basically all scenarios. Below, you can see a performance benchmark (built into rasterminal using a flag) with wireframe mode on a super dense mesh and how the wireframe mode looks like (you can also cycle the colors)."}, {"post_id": 15932, "ts": "2026-06-25T21:35:36Z", "hours": 1.9053, "text": "Split the tests into sub-directories The test suite is now very long (20k LOC across 47 files), so i decided to split it into sub-directories instead of just having 47 files in one flat dir. It’s cleaner, more maintainable and looks better."}, {"post_id": 15741, "ts": "2026-06-25T16:48:43Z", "hours": 4.9903, "text": "Completely removed gouraud shading mode Gouraud was previously the main shading mode, but now I’ve just completely removed it. It was by far the slowest, while not adding any actual value to the project. Blinn-phong lighting is faster AND it supports more features (normal maps, etc.), so there was just no point in keeping gouraud. Now that I’ve removed it, the project has less code to maintain and a faster default shading mode with more features."}, {"post_id": 15551, "ts": "2026-06-25T08:50:38Z", "hours": 3.7597, "text": "Added proper OBJ bump map support OBJ bump maps are textures for simulating bumps and wrinkles on models. Blender used to author bump maps as normal maps for some reason, so I made it automatically detect if it’s a normal map disguised as a bump map and handle it well, since there are a lot of old Blender OBJ models in the wild. But it also handles bump maps as bump maps normally, so it’s basically the best of both worlds."}, {"post_id": 15117, "ts": "2026-06-24T15:43:58Z", "hours": 6.87, "text": "Added texture transform into the TEXCOORD branch and merged it into main Not that hard, just read it, pass it to the rasterizer and then display it. I did have a very sneaky bug in the loader that made the whole feature render wrong, where I just had to negate one value to fully fix it, but now everything fully works. Below you can see the Khronos test asset for texture transforms. (tick means fully working, clearcoat is not yet implemented so it doesn’t show as working)"}, {"post_id": 13839, "ts": "2026-06-22T17:59:12Z", "hours": 5.2097, "text": "Added TEXCOORD_1 support glTF sometimes authors a second TEXCOORD set (first one is TEXCOORD_0, 0 indexed numbering). The official spec only requires support for the first two TEXCOORD sets, even though there can theoretically be any number of them in a model. That said, major model exporters don’t author any more than the two sets, so to avoid extra work, I only added support for 0 and 1. (not merged into main yet, I want to polish it a little and maybe add KHR_texture_transform support on top of it first)"}, {"post_id": 12798, "ts": "2026-06-20T22:37:18Z", "hours": 7.6314, "text": "Optimized the transparent cleanup path in the renderer After rendering the model in the transparent path, we have to resolve the transparent pixels, which basically just pastes in the pixels behind it and sometimes tints it based on how dark and what color the transparent material is (tinted glass will make the things behind it darker, normal glass will be mostly completely untinted). Before, the resolve function looped over every single pixel in the frame, even non-transparent and background ones. This is obviously wasteful. So I made it find the smallest box, in which all the transparent pixels of the whole frame fit and just looped over that. It recovered the overhead of the transparent resolve on models with smaller transparent parts, but it also made fully transparent or mostly transparent models slightly slower (it still basically loops over almost the whole screen on these types of models, so keeping track of the smallest bounding box while also still doing the same work as before made it a little slower). But the performance benefits for the average model outweighed the losses on rare fully transparent models. In the image, you can see the benchmark results versus the baseline."}, {"post_id": 12171, "ts": "2026-06-19T21:42:34Z", "hours": 6.6653, "text": "Made the shading mode branches compile time instead of runtime in the renderer with templates Did the same template if constexpr (compile time if branches) thing that we already do for opaque/transparent models with the shading mode (was a runtime per triangle if branch before), which improved performance. It basically just makes a new copy of the function for each shading mode x each transparency mode, so 4x2 which is 8 slightly different functions and uses the correct one on each call. That increases binary size and icache pressure, but drops per triangle or per pixel if branches that hurt performance, so it’s an overall performance win. Benchmarked across a ton of different resolutions, models, shading modes, etc. (the benchmark by itself took like 2 hours to run)"}, {"post_id": 10115, "ts": "2026-06-16T18:24:38Z", "hours": 4.0297, "text": "Added support for wrap modes for textures Only in glTF and OBJ models (the only ones that support it) and verified with the Khronos group sample assets model. Also added PLY texture support."}, {"post_id": 9453, "ts": "2026-06-15T20:20:25Z", "hours": 4.6839, "text": "Working on adding supersampling anti-aliasing Still a work in progress and I might not merge it into main, because it’s a lot of work for not that much benefit. I have to catch a lot of bad_allocs and things like that for super large SSAA sizes, which is really annoying and can affect performance. SSAA works by rendering at a higher resolution and then downscaling for better edges (makes edges smooth and fade-in instead of jagged) Picture with 2x SSAA and without SSAA:"}, {"post_id": 8652, "ts": "2026-06-14T11:36:32Z", "hours": 5.2058, "text": "Adapted the arg parsing and CLI behaviour to the GNU standard Now, rasterminal’s CLI behaves under the GNU CLI standards, so on par with most linux tools."}, {"post_id": 8162, "ts": "2026-06-13T16:37:29Z", "hours": 2.8394, "text": "Added deduplicating vertices to the stl loader. After two unsuccessful and unmerged branches, I finally did something useful on main. I used to deduplicate the vertices in stl_reader and then reduplicate them in the loader. But now, we just dedup in stl_reader and use those. That also allowed me to enable ambient occlusion, which was disabled for stl before. And now crease smoothing fully works too. And it’s faster (runtime wise, load time is slower because of ambient occlusion and crease smoothing that weren’t there before). So an all-round very positive change, and also an end to my non-merging dry spell."}, {"post_id": 7990, "ts": "2026-06-13T10:20:35Z", "hours": 2.4908, "text": "Replaced tinyobjloader with rapidobj for way faster obj parsing But after actually replacing it and integrating it into the source code, i realized it’s not worth it, because rapidobj just has too many downsides and isn’t very actively supported anymore. For example, it doesn’t support multiple mtl files, which is against the spec. So if i want to keep it spec compliant, I need to find a workaround for it, which just isn’t worth the speed increase of rapidobj, even if it’s like 4x faster (from my testing on a large obj) The graph is from this article: https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/"}, {"post_id": 7643, "ts": "2026-06-12T19:26:54Z", "hours": 8.7975, "text": "I tried to rewrite the STL loader from scratch for more performance But it’s taking super long and I’m way too bored with it, so I think I’ll just abandon the branch and work on something else."}, {"post_id": 6791, "ts": "2026-06-11T11:35:25Z", "hours": 3.6575, "text": "Added full native 32 bit support for all platforms Didn’t have to redesign any of the source code (thankfully), just some warning suppressing and fixing some static casts. Also added a CI job that’ll flag future 32 bit compatibility regressions."}, {"post_id": 5755, "ts": "2026-06-09T17:34:17Z", "hours": 4.1133, "text": "Transparency is fully done and merged. Did some polish, cleanup and optimization on the transparency branch and successfully merged into main."}, {"post_id": 4897, "ts": "2026-06-08T13:53:56Z", "hours": 3.2906, "text": "Transparency is basically done, with caveats. Transparency works correctly, but transmission , which is completely different, is simplified to transparency. So for spec-complete gltf, I would need to implement the whole transmission pipeline, which I’m way too lazy to do right now. So for now, we just simplify it to transparency and call it a day."}, {"post_id": 4320, "ts": "2026-06-07T16:09:10Z", "hours": 6.2586, "text": "Working on adding transparency support. For that, I have to completely rework the rendering loop and the rasterizers, so basically the whole core of the project. It’s going very badly. And since performance is a big factor here, I’m going for a template approach so the transparency overhead doesn’t affect non-transparent meshes."}, {"post_id": 3846, "ts": "2026-06-06T22:11:48Z", "hours": 3.5269, "text": "I did a hot-loop performance cleanup run, because the hot loops were getting slower with new features, and I found a big optimization opportunity in clip-near call sites: clip_near slices off the part of a triangle that pokes behind the camera’s near plane, but almost every triangle is fully in front of it with nothing to clip. The pipeline still called it for all of them, and in the compiled binary that common case just copied all three vertices to memory and back, millions of times a frame. The fix was to check inline whether the triangle is fully in front and skip the call entirely if so. Result on a 2.77M-triangle model: median frame time dropped from 21.1 ms to 19.2 ms, about 8.7% faster."}, {"post_id": 3572, "ts": "2026-06-06T15:51:49Z", "hours": 2.4386, "text": "Because of all the libraries I added, the binary size increased significantly. I don’t use most of the vendored code, so I added build flags to ignore unused code in the final binary. Other than that, I added some other performance flags and also a CMakePresets.txt. It took longer than it should’ve, because I tested and benchmarked a bunch of other configs and flags. I put off PGO for now."}, {"post_id": 2939, "ts": "2026-06-05T20:55:20Z", "hours": 3.9267, "text": "I wired in Webp image format support by vendoring in google’s libwebp decoding library. It wasn’t that hard to wire into the source code, the hard part was the vendoring, dealing with licenses and professional vendoring practices. Only thing that remains to add for full gltf extension support is avif image support, but I’ll do that later."}, {"post_id": 2739, "ts": "2026-06-05T14:38:57Z", "hours": 1.3417, "text": "I just added unlit material support, which means materials that are supposed to stay intentionally unaffected by lighting render correctly. Pretty straightforward change, just read it at load time and then check if that material is unlit during the lighting pass and skip it."}, {"post_id": 2631, "ts": "2026-06-05T08:21:00Z", "hours": 3.3225, "text": "Reworked the whole readme with better instructions, screenshots and a gif. The gif was super annoying to polish, because i used asciinema which records all the setup escape sequences so there were gaps at the start and end that i had to manually read and remove. And I also had to perfectly close it exactly when it did one full rotation and that took like an hour to perfect. At least now I don’t have to touch the readme for a while."}, {"post_id": 2311, "ts": "2026-06-04T18:46:14Z", "hours": 3.1892, "text": "Well, I tried to refactor the main rendering loop for like the third time, because it’s horrifyingly indented, but it has defeated me once again. At this point, I’m confident that it’s impossible to do without a noticeable drop in performance, or g++ is just ragebaiting me. I installed a rainbow indentation neovim plugin just to show the absurdity of this."}, {"post_id": 386, "ts": "2026-06-01T18:58:14Z", "hours": 0.6783, "text": "I just implemented KTX2 and Basis texture support, which are special compressed texture formats. So now any models with these textures are viewable in rasterminal."}, {"post_id": 359, "ts": "2026-06-01T17:59:06Z", "hours": 4.5428, "text": "Hey everyone, I want to introduce my project! rasterminal is a full software 3D rasterizer and model viewer that runs entirely in your terminal. The whole rendering pipeline is implemented from scratch. I only rely on third-party libraries for load-time things like 3D model parsing, image parsing, and decompression. It doesn’t touch the GPU at all, running purely on the CPU. That makes it completely safe for SSH usage, though it does come with a performance cost. I use multithreading to recover some of what’s lost, and the result is still significantly faster than any other terminal 3D viewer I’ve come across. Right now I’m focused on broader 3D format feature support and transparent material rendering. If you want to try it out, I’d love to hear what you think, feedback and issues are very welcome over on GitHub. https://github.com/PavolUlicny/rasterminal Thanks for any support! 🙏"}]...
|
Title: rasterminal by @PavolUlicny | Stardance
De Title: rasterminal by @PavolUlicny | Stardance
Devlogs:
Hey everyone, I want to introduce my project! rasterminal is a full software 3D rasterizer and model viewer that runs entirely in your terminal. The whole rendering pipeline is implemented from scratch. I only rely on third-party libraries for load-time things like 3D model parsing, image parsing, and decompression. It doesn’t touch the GPU at all, running purely on the CPU. That makes it completely safe for SSH usage, though it does come with a performance cost. I use multithreading to recover some of what’s lost, and the result is still significantly faster than any other terminal 3D viewer I’ve come across. Right now I’m focused on broader 3D format feature support and transparent material rendering. If you want to try it out, I’d love to hear what you think, feedback and issues are very welcome over on GitHub. https://github.com/PavolUlicny/rasterminal Thanks for any support! 🙏
I just implemented KTX2 and Basis texture support, which are special compressed texture formats. So now any models with these textures are viewable in rasterminal.
Well, I tried to refactor the main rendering loop for like the third time, because it’s horrifyingly indented, but it has defeated me once again. At this point, I’m confident that it’s impossible to do without a noticeable drop in performance, or g++ is just ragebaiting me. I installed a rainbow indentation neovim plugin just to show the absurdity of this.
Reworked the whole readme with better instructions, screenshots and a gif. The gif was super annoying to polish, because i used asciinema which records all the setup escape sequences so there were gaps at the start and end that i had to manually read and remove. And I also had to perfectly close it exactly when it did one full rotation and that took like an hour to perfect. At least now I don’t have to touch the readme for a while.
I just added unlit material support, which means materials that are supposed to stay intentionally unaffected by lighting render correctly. Pretty straightforward change, just read it at load time and then check if that material is unlit during the lighting pass and skip it.
I wired in Webp image format support by vendoring in google’s libwebp decoding library. It wasn’t that hard to wire into the source code, the hard part was the vendoring, dealing with licenses and professional vendoring practices. Only thing that remains to add for full gltf extension support is avif image support, but I’ll do that later.
Because of all the libraries I added, the binary size increased significantly. I don’t use most of the vendored code, so I added build flags to ignore unused code in the final binary. Other than that, I added some other performance flags and also a CMakePresets.txt. It took longer than it should’ve, because I tested and benchmarked a bunch of other configs and flags. I put off PGO for now.
I did a hot-loop performance cleanup run, because the hot loops were getting slower with new features, and I found a big optimization opportunity in clip-near call sites: clip_near slices off the part of a triangle that pokes behind the camera’s near plane, but almost every triangle is fully in front of it with nothing to clip. The pipeline still called it for all of them, and in the compiled binary that common case just copied all three vertices to memory and back, millions of times a frame. The fix was to check inline whether the triangle is fully in front and skip the call entirely if so. Result on a 2.77M-triangle model: median frame time dropped from 21.1 ms to 19.2 ms, about 8.7% faster.
Working on adding transparency support. For that, I have to completely rework the rendering loop and the rasterizers, so basically the whole core of the project. It’s going very badly. And since performance is a big factor here, I’m going for a template approach so the transparency overhead doesn’t affect non-transparent meshes.
Transparency is basically done, with caveats. Transparency works correctly, but transmission , which is completely different, is simplified to transparency. So for spec-complete gltf, I would need to implement the whole transmission pipeline, which I’m way too lazy to do right now. So for now, we just simplify it to transparency and call it a day.
Transparency is fully done and merged. Did some polish, cleanup and optimization on the transparency branch and successfully merged into main.
Added full native 32 bit support for all platforms Didn’t have to redesign any of the source code (thankfully), just some warning suppressing and fixing some static casts. Also added a CI job that’ll flag future 32 bit compatibility regressions.
I tried to rewrite the STL loader from scratch for more performance But it’s taking super long and I’m way too bored with it, so I think I’ll just abandon the branch and work on something else.
Replaced tinyobjloader with rapidobj for way faster obj parsing But after actually replacing it and integrating it into the source code, i realized it’s not worth it, because rapidobj just has too many downsides and isn’t very actively supported anymore. For example, it doesn’t support multiple mtl files, which is against the spec. So if i want to keep it spec compliant, I need to find a workaround for it, which just isn’t worth the speed increase of rapidobj, even if it’s like 4x faster (from my testing on a large obj) The graph is from this article: https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/
Added deduplicating vertices to the stl loader. After two unsuccessful and unmerged branches, I finally did something useful on main. I used to deduplicate the vertices in stl_reader and then reduplicate them in the loader. But now, we just dedup in stl_reader and use those. That also allowed me to enable ambient occlusion, which was disabled for stl before. And now crease smoothing fully works too. And it’s faster (runtime wise, load time is slower because of ambient occlusion and crease smoothing that weren’t there before). So an all-round very positive change, and also an end to my non-merging dry spell.
Adapted the arg parsing and CLI behaviour to the GNU standard Now, rasterminal’s CLI behaves under the GNU CLI standards, so on par with most linux tools.
Working on adding supersampling anti-aliasing Still a work in progress and I might not merge it into main, because it’s a lot of work for not that much benefit. I have to catch a lot of bad_allocs and things like that for super large SSAA sizes, which is really annoying and can affect performance. SSAA works by rendering at a higher resolution and then downscaling for better edges (makes edges smooth and fade-in instead of jagged) Picture with 2x SSAA and without SSAA:
Added support for wrap modes for textures Only in glTF and OBJ models (the only ones that support it) and verified with the Khronos group sample assets model. Also added PLY texture support.
Made the shading mode branches compile time instead of runtime in the renderer with templates Did the same template if constexpr (compile time if branches) thing that we already do for opaque/transparent models with the shading mode (was a runtime per triangle if branch before), which improved performance. It basically just makes a new copy of the function for each shading mode x each transparency mode, so 4x2 which is 8 slightly different functions and uses the correct one on each call. That increases binary size and icache pressure, but drops per triangle or per pixel if branches that hurt performance, so it’s an overall performance win. Benchmarked across a ton of different resolutions, models, shading modes, etc. (the benchmark by itself took like 2 hours to run)
Optimized the transparent cleanup path in the renderer After rendering the model in the transparent path, we have to resolve the transparent pixels, which basically just pastes in the pixels behind it and sometimes tints it based on how dark and what color the transparent material is (tinted glass will make the things behind it darker, normal glass will be mostly completely untinted). Before, the resolve function looped over every single pixel in the frame, even non-transparent and background ones. This is obviously wasteful. So I made it find the smallest box, in which all the transparent pixels of the whole frame fit and just looped over that. It recovered the overhead of the transparent resolve on models with smaller transparent parts, but it also made fully transparent or mostly transparent models slightly slower (it still basically loops over almost the whole screen on these types of models, so keeping track of the smallest bounding box while also still doing the same work as before made it a little slower). But the performance benefits for the average model outweighed the losses on rare fully transparent models. In the image, you can see the benchmark results versus the baseline.
Added TEXCOORD_1 support glTF sometimes authors a second TEXCOORD set (first one is TEXCOORD_0, 0 indexed numbering). The official spec only requires support for the first two TEXCOORD sets, even though there can theoretically be any number of them in a model. That said, major model exporters don’t author any more than the two sets, so to avoid extra work, I only added support for 0 and 1. (not merged into main yet, I want to polish it a little and maybe add KHR_texture_transform support on top of it first)
Added texture transform into the TEXCOORD branch and merged it into main Not that hard, just read it, pass it to the rasterizer and then display it. I did have a very sneaky bug in the loader that made the whole feature render wrong, where I just had to negate one value to fully fix it, but now everything fully works. Below you can see the Khronos test asset for texture transforms. (tick means fully working, clearcoat is not yet implemented so it doesn’t show as working)
Added proper OBJ bump map support OBJ bump maps are textures for simulating bumps and wrinkles on models. Blender used to author bump maps as normal maps for some reason, so I made it automatically detect if it’s a normal map disguised as a bump map and handle it well, since there are a lot of old Blender OBJ models in the wild. But it also handles bump maps as bump maps normally, so it’s basically the best of both worlds.
Completely removed gouraud shading mode Gouraud was previously the main shading mode, but now I’ve just completely removed it. It was by far the slowest, while not adding any actual value to the project. Blinn-phong lighting is faster AND it supports more features (normal maps, etc.), so there was just no point in keeping gouraud. Now that I’ve removed it, the project has less code to maintain and a faster default shading mode with more features.
Split the tests into sub-directories The test suite is now very long (20k LOC across 47 files), so i decided to split it into sub-directories instead of just having 47 files in one flat dir. It’s cleaner, more maintainable and looks better.
Pararelized the wireframe shading mode I did a bunch of small things alongside it, but the main feature for this devlog is the pararelization of the wireframe shading mode. It was previously fully single threaded, but it wasn’t that hard to pararelize, i just had to make the function it used to write into the framebuffer (draw_line) CAS atomic, to avoid race conditions. Now wireframe is the fastest shading mode in basically all scenarios. Below, you can see a performance benchmark (built into rasterminal using a flag) with wireframe mode on a super dense mesh and how the wireframe mode looks like (you can also cycle the colors).
Added a release workflow, manpage and changelog I added a github release workflow that works alongside the changelog and released the first pre-release version: v0.1.0-alpha.1 Also added a manpage and an install target to make and cmake that installs the binary, docs and manpage into the path.
Wasted 7 hours of my life Did a bunch of smaller cleanups and fixes, and then I tried to template the unlit and lit paths in the rasterize_flat function, which turned out to be a performance regression. Awesome.
Completely removed the shadow map Before, rasterminal built a shadow map on model load and displayed it during runtime. I now completely removed it, because it was slower during load, slower during runtime, sometimes looked broken on curved surfaces and added essentially no value. Here, the first picture is with the shadow map and the second is without.
Working on portability Did a bunch of small fixes and improvements in the last ~week. Right now I’m on vacation for the next couple of days, so I won’t be active. I am currently working on broader terminal and platform support, so older systems and terminals will be able to run cleanly with some fallbacks or will fail loud with a clear message about what isn’t supported.
Working on adding 256 color support Some older terminals can’t display full 24bit RGB colors and use a 256 color palette instead. I’m adding a fallback so the older terminals can still use rasterminal. It still calculates the full old RGB colors, but then just maps them to the nearest 256 color with LUTs. On a side note, I switched my terminal emulator from Kitty to Ghostty.
Working on terminal color capability detection I am adding automatic terminal capability detection, meaning that rasterminal will get the terminal type and either refuse to render on super old or “dumb” terminals, degrade on some terminals and render normally on modern ones.
Working on a –color compatibility flag The color terminal compatibility thing I was working on has landed in the branch, now I’m adding a –color flag to override the automatic capability detection for situations like ssh, where we almost always degrade to the 256 color pallete for maximum compatibility. So now you’re gonna be able to use the right color mode even if the automatic detection is wrong for your situation.
Changed the 24bit to 256 color palette conversion logic Until now, the conversion picked the closest color possible mathematically. But from testing on a bunch of different models, I’ve realized that it doesn’t actually look very close to the human eye. So I swapped it out for a different method, called CIELAB distance. Now it still doesn’t look perfect, but as a fallback for older terminals it’s close enough.
Finally merged color-fallback, I can move onto other things The branch is finally merged. I’ve accumulated a bunch of usability and code quirks and issues that i can finally get to now that the branch is merged. So now I’ll be reworking all the CLI flags, camera and other components. And we also passed the 700 commit mark with this merge!
Did a bunch of small code quality and usability improvements Fixed a Windows bug that crashed the program on model sizes bigger than 2GB, improved the orbit usability (fixed mouse drag behavior when models are turned upside down), and did a few cleanups and fixes in the CLI parsing. I’m planning on adding a few CLI flags that I think can be very useful for some people, specifically better spin settings, starting camera angle/zoom control and a few more.
Added –spin-speed and –spin-direction flags Added CLI flags for the spin speed and direction. The speed is in deg/s and the directions is simply left or right. Here’s what 1000 deg/s looks like spinning to the right:
Added more CLI flags for startup customizability Added flags to set the camera pitch, yaw and zoom on startup. Now every runtime-settable variable can be set during startup through the CLI. The R button now resets the state to the CLI set state, not to factory defaults.
So, i found two memory bugs in a widely used terminal input library I was researching terminal input libraries to use for this project because my current approach was so buggy that it wasn’t worth fixing. Both of them are memory bugs in the libtermkey library. There are forks of the lib with this fixed, but since many projects still rely on this lib, i submitted them anyways. I’ve also confirmed that the bug is present on my machine on Ubuntu 24.04 LTS on Neovim, because it links the vulnerable shared library. I didn’t mark them as CVEs (hopefully that isn’t a problem). If anyone want’s to look at the bug reports, they are at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142891 and https://bugs.launchpad.net/ubuntu/+source/libtermkey/+bug/2161916
Working on completely rewriting the current input parsing handling The current input handling is subpar at best; it interprets a lot of random keys as escape, which currently quits the program (This will also be changed to Q and Ctrl+C only. Kind of a no-brainer since this is the more standard choice for TUIs - for example btop - and it also means I don’t have to deal with the headache of distinguishing function keys and others from escape) and has a lot of other quirky behavior that needs fixing. I’ll also try to improve robustness against malformed input like a leaky SSH session. There are a lot of various edge cases and situations where you have no way to distinguish real input from malformed input. This is all a very major pain in the ass. And I thought figuring out the raw mode output would be the hard part. And after all this, I’ll end up with way less attention than strictly slower, less robust competitors, just because they already have an audience from other projects. I bet nobody will even read this. I’m basically talking to myself right now. Or maybe, just to spite me, the algorithm will push this more than my other devlogs.
Still working on the input parsing system It is very hard and I keep finding bugs and reasons to redesign it. I’m in pain. I do think I’m getting closer to the final robust design.
Finally committed and pushed the input rework Tested it on both linux and windows and everything seems to work. No inputs interpreted as other inputs, all edge cases handled, just works. Finally can move onto other things.
Did a smaller fix and added a pretty big feature First, let’s talk about the small fix: I Fixed a super long model name showing up in the HUD in it’s full length, often blocking out other HUD elements. Previously, the HUD would display a model name of any length. Now there’s a hard cap of 24 chars, with any name longer than that truncated (middle style truncation) to fit into that limit. And now the big feature: Added a first person noclip-style camera mode. It’s accessed with the –first-person flag and let’s you explore the model as a floating camera (not bound like the default orbit camera). It was honestly easier to implement than I thought it would be. With it, I added two new keybinds special to the first person mode - E and V for going up and down. They don’t do nothing in orbit mode. Also added a second –first-person-speed flag for controlling the initial movement speed. It is also controllable during runtime with scrolling or +/- (I didn’t know what to bind these to in this mode since you can’t zoom like in orbit mode and this was the only place where they fit). In the photos, you can see some angles taken in the first person mode that weren’t possible in the default orbit mode.
Completely redesigned and rewrote the HUD The HUD used to be just a single line at the bottom of the screen aligned to the left. It looked pretty bad, but it did tell the user everything they needed to know. [picture 1] First, I added model name sanitization, so models with control bytes like newline ( \n ), line feed or other symbols like emojis can’t break the whole program when trying to display them in the HUD. Then, I completely redesigned the whole HUD to look better and be more robust, while still telling the user everything they need to know. I went with this design [picture 2]: On the left, you only have the model name. In the middle, first you have the current shading mode (highlighted in cyan), then the lighting mode in plain white and then the background color in gray. All three middle indicators are separated with a dot and are different colors, so nobody can confuse them. On the right, there’s 3 boolean indicators: spin (if the model spin is on), backface cull (if it’s currently culling backfaces) and texture (if it’s showing the texture, isn’t there at all on models without a texture). They are gray if inactive and cyan if active. The last thing on the right is just the fps number. There can also be optional indicators: Wireframe color (in the middle, after the shading mode) which only shows up in wireframe mode. [picture 3] First person speed multiplier (on the right, between the bools and the fps number) which shows up only in first person mode. [picture 4] I also made each “island” cleanly disappear when the terminal’s width is too low instead of just slowly getting cut off letter by letter. I think this design looks better, less cluttered and is pretty easy to understand at a glance. I would very much appreciate a star on GitHub!
Added issue templates + contributing documentation Added templates and a config for submitting GitHub issues, for both bug reports and feature requests. Also added a CONTRIBUTING.md for clear instructions on how to make, structure and audit code contributions. (tests, linters, formatting, etc.) I tried to make some optimizations to the renderer by auditing the compiler generated assembly and looking for inefficiencies, but everything i tried turned out to actually hurt performance. And GitHub actions decided to have a major outage right when i pushed the commits, so that’s awesome
Minor comment cleanup Just did some comment cleanup: Deleted redundant comments and why comments Removed separator comments Compressed or rewrote some really long comments (without removing the info they give)
Working on adding support for the Kitty protocol Some modern terminals like Kitty and Ghostty have support for the Kitty protocol. It’s a feature that allows you to display high resolution content like images and videos in the terminal without it looking super pixelated. There’s also the Sixel protocol, which is basically the same thing but a little worse and more widely supported (even Windows terminal has it). I’ll add Sixel after i merge Kitty to main. It is very clearly a worthwhile feature and I have been planning to add it from the start of the project. Today I finally decided that it’s time. Most of the work is already done on the branch and i’m just polishing out the bugs and issues before I merge. In the photos, you can see the comparison between using just the block characters and using Kitty. It is a night and day difference. Although the performance isn’t great at that high of a resolution, but I’m still working on optimizing that.
Found a bug in Ghostty’s kitty protocol handling Ghostty is a modern and fast terminal emulator that i personally use. While testing the kitty protocol feature in rasterminal, I found a Ghostty bug that lagged my whole computer after a few minutes. I tested it in Kitty (terminal emulator) and there it worked fine. I looked at Ghostty’s code vs Kitty’s, found the bug and reported it to the Ghostty maintainers. Mitchell himself (the creator) fixed it in like 2 hours. Honestly I’m kinda sad I didn’t get to become a contributor and fix the bug, but since it was a small fix and I already described it in the issue, I get why Mitchell just fixed it in main. Here’s the full issue: https://github.com/ghostty-org/ghostty/discussions/13719
Fully merged and done with Kitty Finally completed the kitty protocol implementation. It is kinda slow, since the resolution is so much bigger, so I will try to optimize the high-res performance even more. So now the next two big milestones are: Add Sixel on top of kitty, that’ll be a lot of work Optimize the rasterizer even more I was thinking of maybe adding gpu rendering as an option for super large meshes or high-res scenarios, but idk. I’ll definetly keep the pure cpu renderer for computers without gpus, but I’m not sure about a gpu implementation. It would be hard to do, less portable and it might not even work that well.
Working on adding full Sixel support Working on adding support for the other mainstream terminal pixel protocol of the main two - Sixel. Already did fully implemented the kitty protocol last time, so once I’m done with this one, I’ll be done with terminal protocols (at least for the near future, hopefully). There are some other ones like the iterm2 protocol, but that one’s pretty rare and I won’t add it unless I really don’t have anything better to do. It’s basically done, just need to polish it and test it on a bunch of terminals and operating systems to make sure everything works before merging.
Fully merged sixel Fully merged the sixel protocol implementation. Works on all platforms everywhere that supports it. So now both high-res terminal protocols done. Moving onto other minor things and especially performance.
Working on improving performance With the addition of the high-res protocols, the target resolutions quickly went from hundreds or thousands of pixels to millions. So I now desperately need to improve performance. So far it’s looking promising: A whole model covering the camera 6 moving at 4k went from about 8 fps to 20-30 fps. Not ideal yet, but I think we’re on the right track. Super dense meshes (more than 2 million polygons) improved 2-3x Meshes with transparent parts improved about 2x While these wins may seem really big (they kinda are), the jump in resolutions still means they are barely usable interactively. I do want to add gpu acceleration later (with the cpu path as a fallback), but until then I want to make it as fast as I possibly can.
My reported bug in libtermkey has been fixed in the newest version Just got an email from one of the maintainers that the crash bug i reported a month ago was fixed in the new release. libtermkey is a terminal input parsing library that I considered using and found a crash bug in. The bug was already fixed in neovim’s fork of the library, so i just pointed the maintainers at that fix. For anybody interested, here’s the issue link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142891
Still optimizing… Spent the first ~7 hours trying to find microoptimizations and each one was either a wash or worse somehow. The compiler works in mysterious ways. At some point, I just gave up and let Claude have a go at the optimizing. Surprisingly it actually came up with a lot of interesting optimization techniques and solutions that I definitely couldn’t have come up with on my own. But it found so much, that the whole diff adds 5k lines of code. So now I’ll be cleaning up, testing, and maybe further optimizing that diff…
Finally merging the performance branch It’s finally time to merge the performance branch. I basically redesigned the whole renderer and rasterizer around high resolution workloads, where it would still choose the old high-poly paths where they were faster. Even snuck in some SSE2 SIMD code (picture), although I will probably be switching to a dispatch SIMD library like Google’s Highway. Not entirely sure it will be Highway or even if I will do that yet, that depends on the code complexity and before/after benchmarks.
Cleanup and restructuring changes After I just merged three big feature branches (kitty and sixel graphics protocols and the high-res performance branch), I needed to do some overdue cleanup and refactoring. And so I did: Collapsed the super long changelog entries into way more readable and legible points Restructured the src directory into multiple subdirectories because it had like 50 files already Sadly completely removed the Make build system, so now you can only build with CMake (CMake is very much evil and even more evil but it’s the only one of the two that supports windows and I was tired of managing two build systems) Removed the –graphics-scale flag, so now everything renders at native resolution And some small docs and comment cleanup
Working on assimp integration Yop, I’m adding the Open Asset Import Library as a fallback for any model formats that aren’t natively supported with their own dedicated loader (only ones with dedicated loaders are glTF2, PLY, STL and OBJ). I’m still keeping the dedicated loaders, because they are more feature-complete, to-spec and wayyy faster (especially the glTF one). I added it because I feel like for a 3D model viewer, support for many formats, even niche and obscure ones, is pretty important, even though nobody might use them. This roughly doubled compile time and almost quadrupled binary size, which also made CI take way longer (of course). It somehow made the MacOS runners take 50 minutes to compile (from the previous 3 minutes), but I fixed that by bounding the number of processes CMake can spawn to the number of threads on the runner (previously was using -j which spawns as many as it wants and it was spawning about 230 of them). I’m still testing how it handles various model formats and trying to find any reachable segfaults.
Still working on the assimp intgration Currently trying various models from all the different model formats that assimp loads. So far found a segfault, some weird behavior and integration mistakes that I made. Also found a small bug in assimp itself, for which I’ve submitted the PR with the fix to their GitHub repo. For anyone interested, here’s the PR: https://github.com/assimp/assimp/pull/6799
Fuzzing my assimp wrapper I’m trying a bunch of hand-crafted models from all the formats that I can load and trying to find things that dont load or render properly. Also had AI write me a simple fuzzer in python and I’m just letting it run for a few hours. Also auditing the assimp loader paths against my wrapper to find any format specific behaviour that should be handled. I’ve already found a bunch of things and I’m still finding more. Assimp has a lot of weird quirks and issues that I keep running into. Honestly kinda regretting the decision to integrate it, but since I’m already so deep in, I’ll just keep going.
Merged the full assimp integration into main I really don’t have much to say here, I’ve already put all the info about the branch into the past devlogs. All the formats work and the wrapper is very sturdy. I’ve found more bugs in assimp itself than my code (devlog on that soon). So, rasterminal can now load basically any 3D model you throw at it. Some of the formats assimp supports are so niche, I’ve never even heard of them.
Cutting a release The repo is in a pretty complete and polished state, so I’ll cut a release here. This will also probably be the last release before I ship, so I’m making sure that nothing is broken and everything works on every platform. I’ve still got a lot of work to do though, even after the end of stardance, like animations, glTF PBR, format completeness for every format, GPU acceleration, etc.
Found a bunch of terminal cleanup gaps Most of them are Windows or cmd.exe specific (nothing ever works on Windows), but some are present on POSIX too. The Windows specific ones are: cmd.exe for some unknown reason doesn’t turn off the raw input sequences, so arrow keys don’t work like they should, even though I explicitly turn it off (????????) (I hate Windows, they always have to do something unexplainable for no reason just so your code doesn’t work as it should) when you terminate the program with ctrl+c or ctrl+break while actively dragging the model around, it sometimes leaks mouse escape sequences into the next prompt bunch of other weird small stuff that nobody cares about And the few on POSIX are mostly ctrl+z suspend/resume behaviour not recovering the terminal and the same thing with ctrl+\ (SIGQUIT). I’m still working on fixing these. Most of the windows ones are already fixed, but I haven’t even started with the linux/POSIX ones. I have postponed the planned release to when I fix these + any other issues I find.
I HATE WINDOWS Windows just doesn’t work. It doesn’t work. Nothing works on Windows. Everything breaks. I don’t get it. THE UNIT TESTS PASS ON WINDOWS CI BUT WHEN I ACTUALLY RUN THE TESTS ON WINDOWS IT FAILS????? HOW IS THAT EVEN POSSIBLE. The release is now definitely getting delayed by at least a week because I keep running into more and more and more and more and more and more and more and more and more issues. I hate Windows. Microslop is the only company that could mess up a basic terminal emulator. And I also have to reboot my PC every time I fix something and push it and then reboot to get back to linux. this is torture. At one point I tried to do it on a Windows VM on linux but that was too slow so I just gave up.
Merged the full Windows console restoration branch My nightmare is over. I hopefully won’t have to deal with Windows for a while now. Summary of what is now fixed/handled on Windows: Ctrl+C, Ctrl+Break and Q exits fully recover the terminal’s state Ctrl+C and Ctrl+Break don’t leak mouse escape sequences into the next prompt if you terminate while actively dragging a model A bunch of other minor Windows or cmd.exe specific quirks Only thing that isn’t handled (didn’t find a good way to handle it) is task manager “end process”. It kills the program without cleaning up and sometimes freezes the shell.
Fully fixed and merged the first POSIX cleanup item Well, would you look at that! That took significantly less time than the Windows fix. It is partly because it was a smaller fix and only part whole POSIX fix, while the Windows one was the whole thing and also the foundation had already been laid out from the Windows work and I just integrated the POSIX path into that, but it is also very much because Microsoft is a horrible, terrible company that can’t make good software. I mean, look at GitHub, they have been going downhill ever since they got acquired by Microsoft. Now that I got that out of my system, here’s what was fixed: If the program cannot enable raw mode at startup, it safely fails instead of continuing and corrupting the terminal state If the cleanup gets interrupted, it retries cleanup so it doesn’t leave the terminal state corrupted after one failed attempt Onto the next POSIX fix: handling SIGQUIT and SIGHUP.
Added handling for SIGINT, SIGTERM, SIGQUIT and SIGHUP I don’t really have much to say here, I just added the full per-spec handling for all these. Only remaining POSIX-only gap is now SIGSTOP/SIGCONT (stop/resume process). I’m also starting school now, so I’ll be working on this less.
Working on SIGSTOP and SIGCONT handling SIGSTOP and SIGCONT are POSIX signals for stopping and resuming a running process. I’m working on adding handling for these, so you can safely pause and unpause rasterminal at any time. This is a lot of work, since until now, we just set up the terminal on program start and cleaned up when the program exited. There’s a lot of quirks and weird scenarios that I have to handle, for example if another signal gets sent while cleaning up the terminal for SIGSTOP. I’m trying to catch as many edge cases by just doing random things while using the program and also with the help of AI to come up with potentially uncaught scenarios.
Did some polish and cleanup of the platform layer Did final polish and cleanup of the platform layer since I want to actually finally cut a release relatively soon and I just did a lot of work there. Fixed things like useless tests, outdated or wrong comments and some platform specific quirks. Probably actually gonna cut a release soon (this time for real). Also added early rejections for BVH and CSM files, since they contain no model geometry (they can’t currently be displayed at all) and documented the change. The code is basically done (hopefully, I really don’t want to find another big gap that’s gonna take a week to close), I just want to correct anything wrong in the README, changelog, manpage or help menu and maybe make them look a little better before cutting a release and shipping.
Last pre-release checks and cleanup I’m finally ready to release v0.1.0-alpha.2. Only notable thing I changed here is that I changed the default thread count: It now defaults to hardware concurrency everywhere. Other than that, I of course did final documentation checks and fixes and now I’m just waiting for CI to pass so I can tag it and let the release workflow do the last step. So this is hopefully the last devlog before my ship!
Refactored the platform layer The whole platform layer was just one file until now. Since I did a lot of work on it recently, it grew to over 2400 lines of code. It was super confusing and disorienting. So I decided to refactor it (split it) into 8 files, based on what they handle: console.h - saving/restoring terminal state control.h - termination signal handling file.h - file operations (64bit) input_reader.h - handling input (not parsing, that is it’s own file) shared_memory.h - shared memory handling for the kitty protocol terminal_io.h - writes output to the terminal terminal_query.h - querying the terminal for things like graphics capability, etc. timing.h - frame timing and sleeps
Miscellaneous fixes and improvements Fixed two races in platform code (one MacOS, one Windows) Removed build flags that disabled some compiler security hardening at the cost of a little performance Fixed the test framework to not freak out on NaN in near assertions Improved thread launching and handling in loaders and renderer So overall just boring fixes and improvements, nothing special.
Code quality and CI improvements Finally did the long overdue main loop refactor. The main loop is now way shorter, more readable and more testable. I just split off some of the main loop’s work into it’s own modules, which made them way better looking and also, since they are now standalone modules, actually testable. A big win for repo structure. In the process, I also replaced the input handling’s long if chain that made each character do it’s job with a switch statement. It’s more readable and theoretically faster, although since I compile it with -O3, it probably made no difference or an unnoticeable one at best. I also finally fixed the super long CI times. Until now, CI used to take ~50 minutes (depending on how fast the GitHub runner was) because of cppcheck. Everything else finished in under 10 minutes, but cppcheck stalled it for an hour. It was stalling in mesh_assimp.cpp (the assimp wrapper) for most of it’s runtime. I always thought it was because assimp is a very large library. So I experimented with it a little. I included everything I include in the wrapper into a test file with a little code and ran cppcheck on that. It finished in less than 10 seconds. Eventually, I found out it was somehow taking that long because the main loader function was too long and handled too much by itself. So i just refactored it into 3 separate functions, without changing the behavior at all. Somehow, I still don’t get why, it reduced the whole cppcheck run to 9 minutes. a more than 5x improvement, just because I split a function into more functions. I’m not complaining, but it’s definitely weird. CI is now way faster and adding new things is gonna be way smoother now.
Ships:
rasterminal rasterminal is a 3D model viewer in the terminal Why i decided to build it The original idea didn’t really have any big inspiration, I’ve just always been fascinated by the inner workings of 3D and how that all works. I’ve been wanting to build a project involving 3D for a while and I didn’t want to make just another program that uses libraries and GPU drivers to do all the work. So I came up with the idea: a software rasterizer that renders in the terminal! There are lots of TUIs and lots of boring old software rasterizer projects, so I just combined the two into something unique. And over time, I realized I could make it an actually useful tool, with no real competition: a 3D model viewer in the terminal. Sure, there are some similar projects on GitHub (like taigrr’s trophy), but none are actually usable with heavier models or support pixel graphics. What I learned I learned a lot. I really mean a lot. Anything from math and rendering to how terminals work and how to control them using escape sequences. I don’t want to sit here and name everything I learned over the period of the last 5 months, but I can confidently say that this project really taught me how much work goes into everyday software and how to actually develop and maintain a project professionally. The future of rasterminal The whole project is very far from done. You can see that from the latest release version: v0.1.0-alpha.2. I’ve got a lot of work to do and I’ve roughly got the major landmarks mapped out. Main things I definitely want to change/add at some point before v1 are: Add animation support (currently can only render still meshes) Complete the renderer (complete support for basically every feature of every format that makes sense to support) Add optional GPU acceleration (after I’m satisfied with everything else) Hardware / OS support Supports every major OS (Windows, Linux, MacOS, and any other POSIX-based OS, so practically everything), and every CPU that I could think of (any architecture, 32 or 64bit). You would have to actually try a to find a platform that it doesn’t support (most of the unsupported hardware are big-endian systems, which are basically phased out completely). This is one of the main goals of the project, so (almost) any modern machine with a terminal can run it. Special thanks Special thanks to anyone who followed, liked, helped, or otherwise supported the project in any way. I wouldn’t have had the motivation to push it this far if it wasn’t for you guys....
|
1793105289.4980307
|
1793191689.4980307
|
|
23158
|
World Cup Dashboard by @jdszekeres | Stardance
|
jdszekeres
|
1
|
4.0
|
31
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T16:53:40Z", "hours": 4.0, "multiplier": 8.56, "payout": 31, "blessing": "neutral", "text": "I built a World Cup dashboard to keep track of the World’s biggest sporting event without needing to watch the full games. This project uses the unofficial ESPN API to pull live updates and displays them with Pygame. The app also comes with sound effects for different events to inform you of what is happening.", "repo": "https://github.com/jdszekeres/world_cup_dashboard", "demo": "https://github.com/jdszekeres/world_cup_dashboard/releases/tag/v0.0.0"}]...
|
[{"post_id": 12920, "ts": "202 [{"post_id": 12920, "ts": "2026-06-21T04:50:19Z", "hours": 0.5567, "text": "I got the app to build to an exe! One headache and one Ecuador vs Curaçao match later. Didn’t get to test the goal scoring notification :("}, {"post_id": 12816, "ts": "2026-06-20T23:44:39Z", "hours": 0.6161, "text": "Added sounds when events happen. Waiting for the Ecuador vs Curaçao game to test it out!"}, {"post_id": 12692, "ts": "2026-06-20T18:47:25Z", "hours": 2.5156, "text": "Got the UI working and scraping ESPN data, I need to wait to make sure I’m covering all the different event, so my Hackatime duration is low"}]...
|
Title: World Cup Dashboard by @jdszekeres | Starda Title: World Cup Dashboard by @jdszekeres | Stardance
Devlogs:
Got the UI working and scraping ESPN data, I need to wait to make sure I’m covering all the different event, so my Hackatime duration is low
Added sounds when events happen. Waiting for the Ecuador vs Curaçao game to test it out!
I got the app to build to an exe! One headache and one Ecuador vs Curaçao match later. Didn’t get to test the goal scoring notification :(
Ships:
I built a World Cup dashboard to keep track of the World’s biggest sporting event without needing to watch the full games. This project uses the unofficial ESPN API to pull live updates and displays them with Pygame. The app also comes with sound effects for different events to inform you of what is happening....
|
1793105291.2158911
|
1793191691.2158911
|
|
24998
|
RenanG_OS by @renanfartes | Stardance
|
renanfartes
|
3
|
10.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T20:22:06Z", "hours": 4.0, "multiplier": 9.18, "payout": 33, "blessing": "neutral", "text": "I made my very own Web OS. I learned how to work with branches, handle remote settings and some parsing logic. The app includes multiple draggable windows, a terminal with 2 simple commands, a calculator, some notes and a change background function so you can upload your image! None AI Used for coding. I used only to understand the w3schools code for making HTML windows draggable, but none code was wreitten by it!", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-26T23:20:17Z", "hours": 1.0, "multiplier": 3.34, "payout": 3, "blessing": "neutral", "text": "My personal WebOS project. I created it to learn more about DOM manipulation, Navigator features and some other really cool stuff, such as dragabble logic and image saving in base64. There’s a Hacker Notes app, custom background and stardance info.", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}, {"ship_num": 3, "ts": "2026-06-25T16:48:50Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first and custom WEBOS! Is simple. I learned a lot about DOM manipulation and stuff.", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}]...
|
[{"post_id": 22192, "ts": "202 [{"post_id": 22192, "ts": "2026-07-04T15:10:20Z", "hours": 1.2736, "text": "Devlog #10 TERMINAL LOOP! FInally i added the logic to loop the terminal. Now it Receives an input. When Enter is pressed, the terminal engine parses it, and then executes. After, the terminal prints the OS string. Since there isn’t any terminal logic or so, the function just returns a plain old string. But using a getter function allows me to refactor easily later. Commands: help and clear implemented."}, {"post_id": 21197, "ts": "2026-07-03T00:26:39Z", "hours": 0.3878, "text": "Devlog #09 Terminal Scaffolded! I simply just added the icon and added some style to the new window. It is translucid now and i plan in making a feature to disable transparency Later. The inputs of the terminal are correctly placed, but none functionality yet. (yeah, jetbrains mono as default XD)"}, {"post_id": 20876, "ts": "2026-07-02T16:24:29Z", "hours": 0.7408, "text": "Devlog #08 Calculator finished! I added the functionality with error treatment (infinity and NaN handling), a custom font and i added the apps icons. I also fixed a relative path problem with the default background. Also i learned how to delete a branch after merging it. It’s simple, but as i said before i never worked really with git branching. :p"}, {"post_id": 20387, "ts": "2026-07-01T23:32:42Z", "hours": 0.745, "text": "Devlog #07 Working on a calculator! I added the window, some reaaaly basic style and i fixed a lot of small details that i didn’t see (as all windows having the name of the OS, etc) None functionality had been implemented by now. I also created a branch for this feature. Is simple, but turns out i never really worked with branches in the past. XD"}, {"post_id": 20351, "ts": "2026-07-01T22:35:10Z", "hours": 0.4819, "text": "Devlog #06 As some reviews said, the windows were struggling when the mouse was above the viewport! So i fixed it making the os viewport relative and the position being always positive (with Math.max()) I was making a weird calc and then realised i could use this function. lol I also improved the organization and renamed a little files"}, {"post_id": 16574, "ts": "2026-06-26T23:15:09Z", "hours": 0.9628, "text": "Devlog #05 Now there’s custom backgrounds! I added a window where the user can input a image file and upload it to set the background. I learned how to handle file input events and File objects in Javascript."}, {"post_id": 15738, "ts": "2026-06-25T16:45:11Z", "hours": 0.9431, "text": "Devlog #04 DEPLOYED! The basic features are now working. I’ve added a stardance info app!"}, {"post_id": 15693, "ts": "2026-06-25T14:50:35Z", "hours": 0.7431, "text": "Devlog #03 I’ve styled the OS Top-Bar, the app-launcher, made the hacker notes app and windows are now scrollable. Everything just works fine. I also made some code improvements such as splitting the css logic into new files."}, {"post_id": 15350, "ts": "2026-06-24T23:19:45Z", "hours": 1.5461, "text": "Devlog #02 I made the clock of my webOs, the grab function and the windows and the close/open functions. I also corrected some overflow bugs (the window was stretching the page when pushed downwards)."}, {"post_id": 14816, "ts": "2026-06-24T01:53:06Z", "hours": 1.45, "text": "Devlog #01 yeeep First devlog of my webOS! I’ve found interesting to make this mission. Is a veryy saturated project but i think i can make something at least presentable. By the time i’ve just scaffolded the initial style classes and the initial content. Is nott draggable yet. I plan to refactor the web page to vue in a really distant future"}]...
|
Title: RenanG_OS by @renanfartes | Stardance
Devl Title: RenanG_OS by @renanfartes | Stardance
Devlogs:
Devlog #01 yeeep First devlog of my webOS! I’ve found interesting to make this mission. Is a veryy saturated project but i think i can make something at least presentable. By the time i’ve just scaffolded the initial style classes and the initial content. Is nott draggable yet. I plan to refactor the web page to vue in a really distant future
Devlog #02 I made the clock of my webOs, the grab function and the windows and the close/open functions. I also corrected some overflow bugs (the window was stretching the page when pushed downwards).
Devlog #03 I’ve styled the OS Top-Bar, the app-launcher, made the hacker notes app and windows are now scrollable. Everything just works fine. I also made some code improvements such as splitting the css logic into new files.
Devlog #04 DEPLOYED! The basic features are now working. I’ve added a stardance info app!
Devlog #05 Now there’s custom backgrounds! I added a window where the user can input a image file and upload it to set the background. I learned how to handle file input events and File objects in Javascript.
Devlog #06 As some reviews said, the windows were struggling when the mouse was above the viewport! So i fixed it making the os viewport relative and the position being always positive (with Math.max()) I was making a weird calc and then realised i could use this function. lol I also improved the organization and renamed a little files
Devlog #07 Working on a calculator! I added the window, some reaaaly basic style and i fixed a lot of small details that i didn’t see (as all windows having the name of the OS, etc) None functionality had been implemented by now. I also created a branch for this feature. Is simple, but turns out i never really worked with branches in the past. XD
Devlog #08 Calculator finished! I added the functionality with error treatment (infinity and NaN handling), a custom font and i added the apps icons. I also fixed a relative path problem with the default background. Also i learned how to delete a branch after merging it. It’s simple, but as i said before i never worked really with git branching. :p
Devlog #09 Terminal Scaffolded! I simply just added the icon and added some style to the new window. It is translucid now and i plan in making a feature to disable transparency Later. The inputs of the terminal are correctly placed, but none functionality yet. (yeah, jetbrains mono as default XD)
Devlog #10 TERMINAL LOOP! FInally i added the logic to loop the terminal. Now it Receives an input. When Enter is pressed, the terminal engine parses it, and then executes. After, the terminal prints the OS string. Since there isn’t any terminal logic or so, the function just returns a plain old string. But using a getter function allows me to refactor easily later. Commands: help and clear implemented.
Ships:
I made my first and custom WEBOS! Is simple. I learned a lot about DOM manipulation and stuff.
My personal WebOS project. I created it to learn more about DOM manipulation, Navigator features and some other really cool stuff, such as dragabble logic and image saving in base64. There’s a Hacker Notes app, custom background and stardance info.
I made my very own Web OS. I learned how to work with branches, handle remote settings and some parsing logic. The app includes multiple draggable windows, a terminal with 2 simple commands, a calculator, some notes and a change background function so you can upload your image! None AI Used for coding. I used only to understand the w3schools code for making HTML windows draggable, but none code was wreitten by it!...
|
1793105292.1287649
|
1793191692.1287649
|
|
29364
|
Robot Swarm: The Simulation by @dubbyy | Stardance
|
dubbyy
|
1
|
18.0
|
292
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T23:30:09Z", "hours": 18.0, "multiplier": 16.53, "payout": 292, "blessing": "neutral", "text": "I made a simulation of a decentralized robot swarm I plan on building. The most fun and challenging part was designing the communication and interaction between the robots. I’d say figuring that out was the biggest benefit from this project and will help a lot with the real thing. Aside from that I tried to make it as realistic as I could with simulated signals and sensors and wheels etc. enjoy :>", "repo": "https://github.com/dubbyy1/swarm-sim", "demo": "https://github.com/dubbyy1/swarm-sim/releases/tag/v0.1.2"}]...
|
[{"post_id": 29817, "ts": "202 [{"post_id": 29817, "ts": "2026-07-16T23:14:26Z", "hours": 0.8231, "text": "DEVLOG 6 - CONTROL With the final addition of UI and controls, the simulation is now complete. While I could continue to add more detail and more realism, I think this is more than enough for what I set out to do. If you don’t know, I’ve been working on a simulation of a decentralised robot swarm that I plan to build soon. My goal was to recreate every relevant aspect of the real life robots, so I could explore how they would behave in different scenarios. It also allowed me to plan out how the robots are going to communicate in the real world. Changes UI The major addition of this update was the UI. You can now configure different aspects of the simulation to test the robots. Specifically the IR range, the noisiness of IR and UWB, the precision of the motors, the amount of IR receivers and emitters and of course the size of the swarm. As well as settings, you can now send formation commands to the swarm to dynamically change their formation. I also added a new REMOTE state that lets you select a robot and control it directly. Finally, you can toggle on and off different visual elements. Walls The addition of walls was the final piece to test my communication system. As I said in the last devlog, I designed it to accommodate for robots not always being able to see each other. Now, with the ability to block lines of sight, I can finally test it. Communication While messing with the controls I discovered a lot of oversights with the communication. One example is I was only establishing the network once when a new robot joined. This meant that even if the robots moved, they would still read from the old distance values when the formation changed, causing them to choose inefficient paths and in some cases get tangled or stuck. I fixed this by making them reestablish the network whenever the formation is changed. Findings To be completely honest, I didn’t discover that much that I didn’t already know. One thing that stood out was that the IR noise didn’t affect the formations as much as I thought it would. Outside of a few erratic movements, they remain fairly stable. The UWB noise had a much larger effect, as UWB is used to determine distance. The formations also hold with both sliders up to max which was reassuring."}, {"post_id": 29132, "ts": "2026-07-15T20:06:25Z", "hours": 2.3506, "text": "DEVLOG 5 - PERFECTION The simulation is now fully functional and perfect in a sense. The only thing left is adding noise for realism, and UI to make it interactive. Changes + Additions Drivetrain The robots now have simulated drivetrains. They are modeled off 3 wheel omnidrives, and allow them to convert their desired velocity into wheel speeds. This leaves room for me to manipulate the accuracy/precision of the wheels, to see how well the robots can adapt Formations The robots can now form a circle as well as a line. For the circle formation, the robots first find a suitable cyclical path through the swarm, and assign positions in the path. Next, they find where they should be in relation to their 2 neighbours based on a regular polygon of size n . I struggled a bit with this part because the robots couldn’t consistently tell which way to go, and would sometimes bend inwards towards the center of the circle instead of out. I fixed this by making them take all visible robots into account not just the closest 2. This allowed them to find which direction the center of the swarm was in, and they choose the position furthest from that center as their target. Optimization The algorithm the robots used to find the most efficient path through the swarm would was causing the simulation to freeze, or even crash with larger swarms. This is because the robots were checking every possible path , the amount of which grows exponentially as the swarm’s size increases. To solve this, instead of checking every path they now build a chain from each potential starting point and choose the shortest one. They first pick a starting point, A . robot can see B and C , but C is closer so C is added to the chain. Robot C can see A and B , but A is already in the chain, so B is added making the final order ACB . This removes the delay entirely allowing it to run comfortably on ESP32, at the cost of finding slightly worse paths in very rare cases. What’s Next With the core functionality in place, the next Devlog will likely be the last before I ship the project. I want to add UI and controls to the simulation, to make it more interactive. This will allow me to stress test the swarm in lots of different scenarios. A feature I’m particularly looking forward to is walls . The reason designing the communication took so long is because I had to account for cases where all the robots couldn’t see each other. Adding walls will let me see if the system works in practice."}, {"post_id": 24958, "ts": "2026-07-08T20:55:19Z", "hours": 7.1453, "text": "DEVLOG 4 - COMMUNICATION 1 full rewrite later, and the robots can form a line again, but better this time! When I started this project I didn’t have a clear vision of how it was going to work. At a certain point, it became very hard to add improvements to the simulation, because it was built on such a shaky foundation. The new version is cleaner and more organised, as well as being more realistic. Changes Signals Instead of solely relying on IR for angle, distance and communication, it’s now split between IR, UWB and WiFi. IR and UWB now only transmit tiny signals for detecting each other. All the heavy communication and networking is done over WiFi. Communication I overhauled the flow of communication between the robots. When each robot is turned on, it sends out a message attempting to establish a network. This message contains what other robots it can see, and who goes next. The robots take turns, keeping track of who has already spoken and building the network. By the end, they all have a shared map of who can see who, which they use for formations, and the last robot to speak is designated the temporary leader. I had to make the robots take turns to avoid the signals interfering with each other. Next I added a controller class to tell the robots when to change formation. When the robots hear this signal, the leader uses the network to find the most optimal line from the current positions. It then broadcasts this signal to the rest of the swarm, and they enter motion. What’s Next Right now, the robots never fully settle in a line, they continue to oscillate for a long time. The position estimates (magenta dots) are also quite far off from reality. Right now, the simulation is still ‘perfect’ in the sense that there is no noise or interference. When I start adding noise, these problems are only going to get worse. To combat this, in the next update I plan on implementing more techniques to make the estimates accurate. I also want to add more formations, to test how fast they can alternate, as my goal with this whole project is speed and precision. Video: Big circles are robots, red dots are IR LEDs, blue dots are IR receivers. Thin green lines are lines of sight, thick lines represent the intended path. Magenta dots are where the highlighted robot believes other robots are located"}, {"post_id": 22479, "ts": "2026-07-04T23:18:11Z", "hours": 1.7533, "text": "DEVLOG 3 - GRAPHS After a lot of thinking, I decided to base the new line algorithm on graphs. High level process: Robots negotiate shape of the physical network (who can see who). Robots search for a Hamiltonian path through the network. If there is none, they use the path that connects the most robots. Robots at the end of the path move inwards, internal robots move to the midpoint between their two neighbours. Robots outside the path move inwards until they are connected, and the path is reevaluated to include them. I like this method, because it avoids gossiping position information which is susceptible to noise. This also means that once the path is decided, the robots only need to rely on what they can see with their IR receivers. The Problem While I was implementing this solution, I realised how much data I was transmitting. Each packet contained a full JSON representation of the network, alongside IDs, timestamps, etc. Although this could be compressed in the final version, it’s still too much data if I want to reliable real time communication. This means instead of purely IR, I also need to make use of the ESP32’s builtin radio. Despite it seeming more complex at first, it actually makes everything a lot simpler. With the integration of radio, the robots can now hear as well as see. Instead of passing information between robots, they can simply broadcast it globally, making negotiation much faster. I’ll go into more detail about the specific implementation in the next devlog, but that’s the update for now. No visual changes right now because the code doesn’t run, but hopefully by tomorrow they should be able to form lines"}, {"post_id": 21837, "ts": "2026-07-03T23:40:57Z", "hours": 1.1108, "text": "DEVLOG 2 - SENSORS Ok this is a lot harder than I thought it would be. Today I added IR transmitters and receivers to my robot swarm simulation, to bring it closer to reality. Now the robots only receive signals they can actually see, and compare the signal strengths across the receivers to get the direction of the source. This is great, but now I have a big problem. With line-of-sight added, it’s possible for a robot not to be able to see the whole swarm. This means if they try to form a line, they can’t agree on how to do it. Negotiation To solve this, the robots need to distribute information throughout the swarm and agree on a formation, in a process called negotiation. There are a few ways to do this with varying levels of complexity, and I’m still doing research, so I won’t go into detail in this devlog. Whatever method I choose, I need to make sure it will work in real life with imperfect signals, and it can adapt to the swarm losing members. Notes I haven’t changed too much since the last devlog, but I felt like I should post this as context so the next one isn’t super long. AI Declaration: I used AI to help with implementing the emitters/receivers (occlusion, field of view, some helper functions etc.) RED = Emitter BLUE = Receiver"}, {"post_id": 21211, "ts": "2026-07-03T01:04:06Z", "hours": 4.8481, "text": "DEVLOG 1 - LINE My goal is to make a fully decentralized robot swarm, fast and precise enough to form complex patterns, which to my knowledge has never been done before. Before I make the physical robots however, I want to simulate them. How it works Communication All the robots communicate via an external Network class that passes messages between the robots. Because I’m trying to simulate real IR emitters and receivers, the only information the network gives is the distance and direction of the signal. Every tick, the robots emit a heartbeat-like signal to their peers, and use the signals they receive to construct an internal map of the swarm. Formation Once they know where their neighbours are they can start moving in formation. Initially, I had them organise in a line from 0-4. This worked but it was very slow, because they would go to spots that were further away than necessary. After spending some time working it out on a whiteboard (and consulting chatgpt), I decided on a new method. Using their internal map, they find the 2 robots with the largest distance between them and this becomes the line they use. They then compare every robot’s distance from the start of the line to determine the order, and move to their assigned point on the line. With this new algorithm, they can arrange themselves a lot faster with less collisions Notes Right now my goal is to make the simulation fully functional with as much detail as possible, down to the individual motors powering the wheels. Once this is complete, the simulation will be theoretically perfect. After that, the next step is implementing noise to make it a true simulation of real life. This will also be very helpful when I eventually build the real robots. Until then, the next thing I want to add is real sensors. Right now, the robots magically know which direction the signal came from, but real ones will have a ring of IR receivers, and compare the signal strengths to determine the angle of origin."}]...
|
Title: Robot Swarm: The Simulation by @dubbyy | St Title: Robot Swarm: The Simulation by @dubbyy | Stardance
Devlogs:
DEVLOG 1 - LINE My goal is to make a fully decentralized robot swarm, fast and precise enough to form complex patterns, which to my knowledge has never been done before. Before I make the physical robots however, I want to simulate them. How it works Communication All the robots communicate via an external Network class that passes messages between the robots. Because I’m trying to simulate real IR emitters and receivers, the only information the network gives is the distance and direction of the signal. Every tick, the robots emit a heartbeat-like signal to their peers, and use the signals they receive to construct an internal map of the swarm. Formation Once they know where their neighbours are they can start moving in formation. Initially, I had them organise in a line from 0-4. This worked but it was very slow, because they would go to spots that were further away than necessary. After spending some time working it out on a whiteboard (and consulting chatgpt), I decided on a new method. Using their internal map, they find the 2 robots with the largest distance between them and this becomes the line they use. They then compare every robot’s distance from the start of the line to determine the order, and move to their assigned point on the line. With this new algorithm, they can arrange themselves a lot faster with less collisions Notes Right now my goal is to make the simulation fully functional with as much detail as possible, down to the individual motors powering the wheels. Once this is complete, the simulation will be theoretically perfect. After that, the next step is implementing noise to make it a true simulation of real life. This will also be very helpful when I eventually build the real robots. Until then, the next thing I want to add is real sensors. Right now, the robots magically know which direction the signal came from, but real ones will have a ring of IR receivers, and compare the signal strengths to determine the angle of origin.
DEVLOG 2 - SENSORS Ok this is a lot harder than I thought it would be. Today I added IR transmitters and receivers to my robot swarm simulation, to bring it closer to reality. Now the robots only receive signals they can actually see, and compare the signal strengths across the receivers to get the direction of the source. This is great, but now I have a big problem. With line-of-sight added, it’s possible for a robot not to be able to see the whole swarm. This means if they try to form a line, they can’t agree on how to do it. Negotiation To solve this, the robots need to distribute information throughout the swarm and agree on a formation, in a process called negotiation. There are a few ways to do this with varying levels of complexity, and I’m still doing research, so I won’t go into detail in this devlog. Whatever method I choose, I need to make sure it will work in real life with imperfect signals, and it can adapt to the swarm losing members. Notes I haven’t changed too much since the last devlog, but I felt like I should post this as context so the next one isn’t super long. AI Declaration: I used AI to help with implementing the emitters/receivers (occlusion, field of view, some helper functions etc.) RED = Emitter BLUE = Receiver
DEVLOG 3 - GRAPHS After a lot of thinking, I decided to base the new line algorithm on graphs. High level process: Robots negotiate shape of the physical network (who can see who). Robots search for a Hamiltonian path through the network. If there is none, they use the path that connects the most robots. Robots at the end of the path move inwards, internal robots move to the midpoint between their two neighbours. Robots outside the path move inwards until they are connected, and the path is reevaluated to include them. I like this method, because it avoids gossiping position information which is susceptible to noise. This also means that once the path is decided, the robots only need to rely on what they can see with their IR receivers. The Problem While I was implementing this solution, I realised how much data I was transmitting. Each packet contained a full JSON representation of the network, alongside IDs, timestamps, etc. Although this could be compressed in the final version, it’s still too much data if I want to reliable real time communication. This means instead of purely IR, I also need to make use of the ESP32’s builtin radio. Despite it seeming more complex at first, it actually makes everything a lot simpler. With the integration of radio, the robots can now hear as well as see. Instead of passing information between robots, they can simply broadcast it globally, making negotiation much faster. I’ll go into more detail about the specific implementation in the next devlog, but that’s the update for now. No visual changes right now because the code doesn’t run, but hopefully by tomorrow they should be able to form lines
DEVLOG 4 - COMMUNICATION 1 full rewrite later, and the robots can form a line again, but better this time! When I started this project I didn’t have a clear vision of how it was going to work. At a certain point, it became very hard to add improvements to the simulation, because it was built on such a shaky foundation. The new version is cleaner and more organised, as well as being more realistic. Changes Signals Instead of solely relying on IR for angle, distance and communication, it’s now split between IR, UWB and WiFi. IR and UWB now only transmit tiny signals for detecting each other. All the heavy communication and networking is done over WiFi. Communication I overhauled the flow of communication between the robots. When each robot is turned on, it sends out a message attempting to establish a network. This message contains what other robots it can see, and who goes next. The robots take turns, keeping track of who has already spoken and building the network. By the end, they all have a shared map of who can see who, which they use for formations, and the last robot to speak is designated the temporary leader. I had to make the robots take turns to avoid the signals interfering with each other. Next I added a controller class to tell the robots when to change formation. When the robots hear this signal, the leader uses the network to find the most optimal line from the current positions. It then broadcasts this signal to the rest of the swarm, and they enter motion. What’s Next Right now, the robots never fully settle in a line, they continue to oscillate for a long time. The position estimates (magenta dots) are also quite far off from reality. Right now, the simulation is still ‘perfect’ in the sense that there is no noise or interference. When I start adding noise, these problems are only going to get worse. To combat this, in the next update I plan on implementing more techniques to make the estimates accurate. I also want to add more formations, to test how fast they can alternate, as my goal with this whole project is speed and precision. Video: Big circles are robots, red dots are IR LEDs, blue dots are IR receivers. Thin green lines are lines of sight, thick lines represent the intended path. Magenta dots are where the highlighted robot believes other robots are located
DEVLOG 5 - PERFECTION The simulation is now fully functional and perfect in a sense. The only thing left is adding noise for realism, and UI to make it interactive. Changes + Additions Drivetrain The robots now have simulated drivetrains. They are modeled off 3 wheel omnidrives, and allow them to convert their desired velocity into wheel speeds. This leaves room for me to manipulate the accuracy/precision of the wheels, to see how well the robots can adapt Formations The robots can now form a circle as well as a line. For the circle formation, the robots first find a suitable cyclical path through the swarm, and assign positions in the path. Next, they find where they should be in relation to their 2 neighbours based on a regular polygon of size n . I struggled a bit with this part because the robots couldn’t consistently tell which way to go, and would sometimes bend inwards towards the center of the circle instead of out. I fixed this by making them take all visible robots into account not just the closest 2. This allowed them to find which direction the center of the swarm was in, and they choose the position furthest from that center as their target. Optimization The algorithm the robots used to find the most efficient path through the swarm would was causing the simulation to freeze, or even crash with larger swarms. This is because the robots were checking every possible path , the amount of which grows exponentially as the swarm’s size increases. To solve this, instead of checking every path they now build a chain from each potential starting point and choose the shortest one. They first pick a starting point, A . robot can see B and C , but C is closer so C is added to the chain. Robot C can see A and B , but A is already in the chain, so B is added making the final order ACB . This removes the delay entirely allowing it to run comfortably on ESP32, at the cost of finding slightly worse paths in very rare cases. What’s Next With the core functionality in place, the next Devlog will likely be the last before I ship the project. I want to add UI and controls to the simulation, to make it more interactive. This will allow me to stress test the swarm in lots of different scenarios. A feature I’m particularly looking forward to is walls . The reason designing the communication took so long is because I had to account for cases where all the robots couldn’t see each other. Adding walls will let me see if the system works in practice.
DEVLOG 6 - CONTROL With the final addition of UI and controls, the simulation is now complete. While I could continue to add more detail and more realism, I think this is more than enough for what I set out to do. If you don’t know, I’ve been working on a simulation of a decentralised robot swarm that I plan to build soon. My goal was to recreate every relevant aspect of the real life robots, so I could explore how they would behave in different scenarios. It also allowed me to plan out how the robots are going to communicate in the real world. Changes UI The major addition of this update was the UI. You can now configure different aspects of the simulation to test the robots. Specifically the IR range, the noisiness of IR and UWB, the precision of the motors, the amount of IR receivers and emitters and of course the size of the swarm. As well as settings, you can now send formation commands to the swarm to dynamically change their formation. I also added a new REMOTE state that lets you select a robot and control it directly. Finally, you can toggle on and off different visual elements. Walls The addition of walls was the final piece to test my communication system. As I said in the last devlog, I designed it to accommodate for robots not always being able to see each other. Now, with the ability to block lines of sight, I can finally test it. Communication While messing with the controls I discovered a lot of oversights with the communication. One example is I was only establishing the network once when a new robot joined. This meant that even if the robots moved, they would still read from the old distance values when the formation changed, causing them to choose inefficient paths and in some cases get tangled or stuck. I fixed this by making them reestablish the network whenever the formation is changed. Findings To be completely honest, I didn’t discover that much that I didn’t already know. One thing that stood out was that the IR noise didn’t affect the formations as much as I thought it would. Outside of a few erratic movements, they remain fairly stable. The UWB noise had a much larger effect, as UWB is used to determine distance. The formations also hold with both sliders up to max which was reassuring.
Ships:
I made a simulation of a decentralized robot swarm I plan on building. The most fun and challenging part was designing the communication and interaction between the robots. I’d say figuring that out was the biggest benefit from this project and will help a lot with the real thing. Aside from that I tried to make it as realistic as I could with simulated signals and sensors and wheels etc. enjoy :>...
|
1793105293.3134928
|
1793191693.3134928
|
|
26758
|
TL;DW by @cheezball | Stardance
|
cheezball
|
1
|
3.3
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T15:07:46Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a YouTube video summarizer, the name stands for too long didn’t watch, sadly I wasn’t able to set up a working website, so it’s only available through github with self hosting, most youtube video summarizer i found used transcriptions not the actual video, so my goal was to pass the video itself to an llm (gemini 2.5 flash in this case)", "repo": "https://github.com/teabiotic/TL_DW", "demo": "https://github.com/teabiotic/TL_DW/blob/main/README.md"}]...
|
[{"post_id": 17119, "ts": "202 [{"post_id": 17119, "ts": "2026-06-27T20:00:55Z", "hours": 0.2972, "text": "devlog 5: instead of making a website for the demo i decided to just record the program in action"}, {"post_id": 16955, "ts": "2026-06-27T15:03:56Z", "hours": 0.9817, "text": "tried self hosting the website, i don’t know what I’m doing wrong, it works on my phone but for some reason when i paste the link on here it can’t access it, i used cloudflare quick tunnel"}, {"post_id": 16870, "ts": "2026-06-27T11:53:26Z", "hours": 0.5914, "text": "devlog 4: Removed the demo website link and added some decor edit: i will have to add the website again to ship, but it will only be for a visual presentation"}, {"post_id": 16854, "ts": "2026-06-27T11:11:13Z", "hours": 0.4231, "text": "devlog 3: Optimized the promt so it’s much easier to read, it’s a bit messy inside the code, but it works. gonna work on decorations next ig. p.s. Just realized that the online demo isn’t working, so if you want to try it out you’ll have to run it locally."}, {"post_id": 16839, "ts": "2026-06-27T10:37:23Z", "hours": 0.4128, "text": "devlog 2: I have finally made an usable program, but although i am not proud of it, I have to admit that Gemini helped me a lot with it. For now the summaries are a bit hard to read, but I will try to optimize the prompt as much as possible and make it readable. I also plan on adding some decoration to the website."}, {"post_id": 16810, "ts": "2026-06-27T09:20:08Z", "hours": 0.9667, "text": "I am trying to make a video summarizer that won’t use transcriptions but will watch the video as sometimes stuff is shown on the video but isn’t in the transcription. the name TL;DW is an acronym for “Too Long; Didn’t Watch”. This is my first actual big project, and I’m not sure how it’ll come out, but I am trying my best."}]...
|
Title: TL;DW by @cheezball | Stardance
Devlogs:
I Title: TL;DW by @cheezball | Stardance
Devlogs:
I am trying to make a video summarizer that won’t use transcriptions but will watch the video as sometimes stuff is shown on the video but isn’t in the transcription. the name TL;DW is an acronym for “Too Long; Didn’t Watch”. This is my first actual big project, and I’m not sure how it’ll come out, but I am trying my best.
devlog 2: I have finally made an usable program, but although i am not proud of it, I have to admit that Gemini helped me a lot with it. For now the summaries are a bit hard to read, but I will try to optimize the prompt as much as possible and make it readable. I also plan on adding some decoration to the website.
devlog 3: Optimized the promt so it’s much easier to read, it’s a bit messy inside the code, but it works. gonna work on decorations next ig. p.s. Just realized that the online demo isn’t working, so if you want to try it out you’ll have to run it locally.
devlog 4: Removed the demo website link and added some decor edit: i will have to add the website again to ship, but it will only be for a visual presentation
tried self hosting the website, i don’t know what I’m doing wrong, it works on my phone but for some reason when i paste the link on here it can’t access it, i used cloudflare quick tunnel
devlog 5: instead of making a website for the demo i decided to just record the program in action
Ships:
I made a YouTube video summarizer, the name stands for too long didn’t watch, sadly I wasn’t able to set up a working website, so it’s only available through github with self hosting, most youtube video summarizer i found used transcriptions not the actual video, so my goal was to pass the video itself to an llm (gemini 2.5 flash in this case)...
|
1793105294.5129845
|
1793191694.5129845
|
|
23011
|
Scope Cutter by @renanfartes | Stardance
|
renanfartes
|
1
|
4.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T19:41:55Z", "hours": 4.0, "multiplier": 2.49, "payout": 9, "blessing": "neutral", "text": "I made this website so i and other hackers can reduce the scope of their projects. My biggest struggle was making the style actually works. It’s very simple, but my first ever shipped project (yep, i’ve always started but never finished. Hope this was a great start :p)", "repo": "https://github.com/Renan-G-projec/ScopeCutter", "demo": "https://scopecutter.netlify.app/"}]...
|
[{"post_id": 13300, "ts": "202 [{"post_id": 13300, "ts": "2026-06-21T19:37:17Z", "hours": 1.5017, "text": "Style Added! Finally, i added a veryyy simple style. It was just raw css and some fonts taken by Google fonts. The main feature is ready, but i shall add some animations and a more complex reward system. Andd i discovered that is a pain to add style to checkboxes in raw css."}, {"post_id": 12724, "ts": "2026-06-20T19:57:48Z", "hours": 2.175, "text": "Scope Cutter 1st devlog Usually, i want to create big projects and by doing so, i fall into a storm of inifinite unfinished projects. So, i started developing this simple tool so i can focus in one project and in only 3 features of it to prevent overengineering. It is “functional”, but as evident in the video, is the uggliest thing that you will see today. I’ve used a cache to fast data storing and used the localStorage to the V1. I need to add some style ub a while. I also was stuck in some rendering bugs, i learned a lot, and finished the README"}]...
|
Title: Scope Cutter by @renanfartes | Stardance
D Title: Scope Cutter by @renanfartes | Stardance
Devlogs:
Scope Cutter 1st devlog Usually, i want to create big projects and by doing so, i fall into a storm of inifinite unfinished projects. So, i started developing this simple tool so i can focus in one project and in only 3 features of it to prevent overengineering. It is “functional”, but as evident in the video, is the uggliest thing that you will see today. I’ve used a cache to fast data storing and used the localStorage to the V1. I need to add some style ub a while. I also was stuck in some rendering bugs, i learned a lot, and finished the README
Style Added! Finally, i added a veryyy simple style. It was just raw css and some fonts taken by Google fonts. The main feature is ready, but i shall add some animations and a more complex reward system. Andd i discovered that is a pain to add style to checkboxes in raw css.
Ships:
I made this website so i and other hackers can reduce the scope of their projects. My biggest struggle was making the style actually works. It’s very simple, but my first ever shipped project (yep, i’ve always started but never finished. Hope this was a great start :p)...
|
1793105295.6931121
|
1793191695.6931121
|
|
27038
|
CodeKidsIDE by @Nanos | Stardance
|
Nanos
|
4
|
39.0
|
494
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T09:37:04Z", "hours": 14.0, "multiplier": 11.29, "payout": 132, "blessing": "neutral", "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 2, "ts": "2026-07-07T19:34:57Z", "hours": 15.0, "multiplier": 18.32, "payout": 269, "blessing": "neutral", "text": "CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 3, "ts": "2026-07-02T09:31:00Z", "hours": 6.0, "multiplier": 9.08, "payout": 57, "blessing": "neutral", "text": "A web version for CideKidsIde with almost all the features of the app", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 4, "ts": "2026-06-27T22:16:42Z", "hours": 4.0, "multiplier": 8.14, "payout": 36, "blessing": "neutral", "text": "What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}]...
|
[{"post_id": 28800, "ts": "202 [{"post_id": 28800, "ts": "2026-07-15T09:30:25Z", "hours": 12.5333, "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users."}, {"post_id": 28405, "ts": "2026-07-14T17:19:48Z", "hours": 1.6881, "text": "Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized."}, {"post_id": 24261, "ts": "2026-07-07T18:28:17Z", "hours": 3.3, "text": "Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code."}, {"post_id": 24152, "ts": "2026-07-07T15:10:13Z", "hours": 1.8333, "text": "Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers."}, {"post_id": 24097, "ts": "2026-07-07T13:19:40Z", "hours": 5.7517, "text": "Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable."}, {"post_id": 23718, "ts": "2026-07-06T20:35:50Z", "hours": 4.3011, "text": "Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type."}, {"post_id": 20650, "ts": "2026-07-02T09:28:41Z", "hours": 6.2725, "text": "Just finished a web version"}, {"post_id": 17202, "ts": "2026-06-27T22:13:55Z", "hours": 4.3986, "text": "I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support."}]...
|
Title: CodeKidsIDE by @Nanos | Stardance
Devlogs: Title: CodeKidsIDE by @Nanos | Stardance
Devlogs:
I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support.
Just finished a web version
Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type.
Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable.
Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers.
Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code.
Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.
Ships:
What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.
A web version for CideKidsIde with almost all the features of the app
CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users....
|
1793105297.5152445
|
1793191697.5152445
|
|
27525
|
Website by @Zeti_1223 | Stardance
|
Zeti_1223
|
2
|
7.0
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T11:42:53Z", "hours": 6.0, "multiplier": 4.12, "payout": 12, "blessing": "neutral", "text": "Redesigned my whole website. The new design idea came from excalidraw.", "repo": "https://github.com/zeti1223/website", "demo": "https://zeteny.cigoria.eu/"}, {"ship_num": 2, "ts": "2026-06-29T20:38:34Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own website! The only challenging thing was to write about myself.", "repo": "https://github.com/zeti1223/website", "demo": "https://zeteny.cigoria.eu/"}]...
|
[{"post_id": 41267, "ts": "202 [{"post_id": 41267, "ts": "2026-08-05T11:41:48Z", "hours": 0.7211, "text": "Same design everywhere"}, {"post_id": 41244, "ts": "2026-08-05T10:25:02Z", "hours": 1.7358, "text": "Added features: edit Bio from admin dashboard edit links from admin dashboard mobile UI for every sub site"}, {"post_id": 40962, "ts": "2026-08-04T20:38:30Z", "hours": 0.6711, "text": "Working on the weather app styling"}, {"post_id": 40930, "ts": "2026-08-04T19:29:24Z", "hours": 0.7378, "text": "Done with the new design"}, {"post_id": 40873, "ts": "2026-08-04T17:51:18Z", "hours": 0.9381, "text": "Sneak peak of new design"}, {"post_id": 31703, "ts": "2026-07-20T09:59:37Z", "hours": 0.9014, "text": "Note to Reviewers: Just to clarify, I did not use AI to generate this project. I started working on it before the stardance project began, which is clearly visible in the GitHub commit history. I have also checked the corresponding box in the project description."}, {"post_id": 18600, "ts": "2026-06-29T19:52:00Z", "hours": 0.5061, "text": "I’m writing a new Readme"}]...
|
Title: Website by @Zeti_1223 | Stardance
Devlogs: Title: Website by @Zeti_1223 | Stardance
Devlogs:
I’m writing a new Readme
Note to Reviewers: Just to clarify, I did not use AI to generate this project. I started working on it before the stardance project began, which is clearly visible in the GitHub commit history. I have also checked the corresponding box in the project description.
Sneak peak of new design
Done with the new design
Working on the weather app styling
Added features: edit Bio from admin dashboard edit links from admin dashboard mobile UI for every sub site
Same design everywhere
Ships:
I made my own website! The only challenging thing was to write about myself.
Redesigned my whole website. The new design idea came from excalidraw....
|
1793105298.7138684
|
1793191698.7138684
|
|
49383
|
os compiller by @Ggiver | Stardance
|
Ggiver
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:41:18Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my first try at making a fully fledged compiler. My twist on the project is that instead of compiling the source code into an executable, it turns it into a whole operating system (bootloader actually)! I was unfortunately not able to manage the memory nor make loops (that’s because you have to manage memory for that), the instruction set is very limited (you can basically just print, restart the computer, and get keyboard input). Even if the projects does poorly, i will still retain that as a valuable lesson on knowing how computers work. Thank you for trying out my project!", "repo": "https://github.com/supr10/os_compiler", "demo": "https://github.com/supr10/os_compiler/releases/tag/release"}]...
|
[{"post_id": 62981, "ts": "202 [{"post_id": 62981, "ts": "2026-09-06T15:31:58Z", "hours": 1.2494, "text": "This is the final version. I’m very sad that this is, because it is still very buggy and i couldn’t implement what i originally wanted to add. You can still print characters, do infinite loops and get a character to print later (don’t forget that the program compiles your code into an operating system, hence the trouble with memory management) I cannot finish it because my school has a too harsh schedule to keep up. I hope to be able to re join and finish it in later editions… Goodbye world!"}, {"post_id": 52927, "ts": "2026-08-23T09:36:43Z", "hours": 1.6642, "text": "writing operating systems in pure hexadecimal, like the good ol’ days"}, {"post_id": 52238, "ts": "2026-08-22T10:28:35Z", "hours": 1.3447, "text": "I just made the first instruction, it prints a character on the BIOS."}, {"post_id": 48174, "ts": "2026-08-16T13:56:26Z", "hours": 0.5256, "text": "I’m building the initial UI (yes, before the actual compiler part)"}]...
|
Title: os compiller by @Ggiver | Stardance
Devlog Title: os compiller by @Ggiver | Stardance
Devlogs:
I’m building the initial UI (yes, before the actual compiler part)
I just made the first instruction, it prints a character on the BIOS.
writing operating systems in pure hexadecimal, like the good ol’ days
This is the final version. I’m very sad that this is, because it is still very buggy and i couldn’t implement what i originally wanted to add. You can still print characters, do infinite loops and get a character to print later (don’t forget that the program compiles your code into an operating system, hence the trouble with memory management) I cannot finish it because my school has a too harsh schedule to keep up. I hope to be able to re join and finish it in later editions… Goodbye world!
Ships:
This is my first try at making a fully fledged compiler. My twist on the project is that instead of compiling the source code into an executable, it turns it into a whole operating system (bootloader actually)! I was unfortunately not able to manage the memory nor make loops (that’s because you have to manage memory for that), the instruction set is very limited (you can basically just print, restart the computer, and get keyboard input). Even if the projects does poorly, i will still retain that as a valuable lesson on knowing how computers work. Thank you for trying out my project!...
|
1793105299.8864846
|
1793191699.8864846
|
|
48869
|
portfolio by @harshitkataria20 | Stardance
|
harshitkataria20
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T09:17:03Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made an website that gives astro photo of the day it has fetched from nasa’s api and gives information about that image , I ran into many errors like api not responding and api sending wrong format then after 3-4 hours of struggle i completed it even though the website is a little slow i am trying my best to make it fast and will add more features such as seeing the astro photo on your birthdate or any date and random astro photo also . Hope you will enjoy my first project :)", "repo": "https://github.com/hshit2010/nasa-apod", "demo": "https://aboutharshit.info/nasa-apod/"}]...
|
[{"post_id": 48229, "ts": "202 [{"post_id": 48229, "ts": "2026-08-16T15:10:59Z", "hours": 1.6872, "text": "working on a website that gives the astro photo of the day and tells us about it , I will add the feature of searching by date later"}]...
|
Title: portfolio by @harshitkataria20 | Stardance
Title: portfolio by @harshitkataria20 | Stardance
Devlogs:
working on a website that gives the astro photo of the day and tells us about it , I will add the feature of searching by date later
Ships:
i made an website that gives astro photo of the day it has fetched from nasa’s api and gives information about that image , I ran into many errors like api not responding and api sending wrong format then after 3-4 hours of struggle i completed it even though the website is a little slow i am trying my best to make it fast and will add more features such as seeing the astro photo on your birthdate or any date and random astro photo also . Hope you will enjoy my first project :)...
|
1793105300.7767143
|
1793191700.7767143
|
|
5607
|
Ninjapad by @LC | Stardance
|
LC
|
1
|
2.0
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T00:34:01Z", "hours": 2.0, "multiplier": 5.0, "payout": 12, "blessing": "neutral", "text": "Ninjapad is a macropad with 9 keys, 1 rotary encoder, and an 0.91 inch OLED display. It uses a custom PCB, 3D printed case, and QMK firmware. OLED features different animations based on keystroke. Initially, I didn’t know I had to solder every component so I ended up assembling and disassembling the case a number of times.", "repo": "https://github.com/lucaschi2026-code/ninjapad", "demo": ""}]...
|
[{"post_id": 54839, "ts": "202 [{"post_id": 54839, "ts": "2026-08-26T00:27:58Z", "hours": 1.0833, "text": "Soldered keycaps"}, {"post_id": 54792, "ts": "2026-08-25T22:11:45Z", "hours": 1.2833, "text": "Done building!"}, {"post_id": 20437, "ts": "2026-07-02T01:03:20Z", "hours": 0.9814, "text": "Firmware done!"}, {"post_id": 19736, "ts": "2026-07-01T03:56:35Z", "hours": 3.6314, "text": "Case is done! Firmware next!"}, {"post_id": 16490, "ts": "2026-06-26T20:42:20Z", "hours": 1.7669, "text": "PCB is built! I will modify my case accordingly now!"}, {"post_id": 15398, "ts": "2026-06-25T01:08:10Z", "hours": 1.1889, "text": "Built my schematic with 9 keys, a knob, and an OLED connector!"}, {"post_id": 15327, "ts": "2026-06-24T22:01:02Z", "hours": 0.2833, "text": "Added the cutout!"}, {"post_id": 15245, "ts": "2026-06-24T19:09:50Z", "hours": 0.7408, "text": "Finished an early version of my case. Next steps will be to add an USB port and some colour!"}]...
|
Title: Ninjapad by @LC | Stardance
Devlogs:
Finis Title: Ninjapad by @LC | Stardance
Devlogs:
Finished an early version of my case. Next steps will be to add an USB port and some colour!
Added the cutout!
Built my schematic with 9 keys, a knob, and an OLED connector!
PCB is built! I will modify my case accordingly now!
Case is done! Firmware next!
Firmware done!
Done building!
Soldered keycaps
Ships:
Ninjapad is a macropad with 9 keys, 1 rotary encoder, and an 0.91 inch OLED display. It uses a custom PCB, 3D printed case, and QMK firmware. OLED features different animations based on keystroke. Initially, I didn’t know I had to solder every component so I ended up assembling and disassembling the case a number of times....
|
1793105301.6446216
|
1793191701.6446216
|
|
4275
|
Tic Tac Toe by @pizza | Stardance
|
pizza
|
1
|
9.0
|
66
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T18:40:15Z", "hours": 9.0, "multiplier": 8.56, "payout": 66, "blessing": "neutral", "text": "I made a basic Tic-Tac-Toe game. The most challenging part was the Minimax algorithm and designing the interface with ncurse library. I am so proud of myself that i was able to pull it off. Please keep in mind before juding that i am a completely beginner who is new into the space and it’s my first project.", "repo": "https://github.com/emperor47anshu-cmyk/tictactoe", "demo": "https://github.com/emperor47anshu-cmyk/tictactoe/releases/tag/v1.0.0"}]...
|
[{"post_id": 4788, "ts": "2026 [{"post_id": 4788, "ts": "2026-06-08T08:53:30Z", "hours": 1.2769, "text": "Hey Everyone, I made some serious improvement in my project. I used ncurses library to improve the UI and i fixed the repetitive board which before kept coming to a single board to look more asthetic and a premium finished product. what bugs i faced: bracket hell : i stuck because of a unwanted random bracket it has to be solved because it was ruining the rest of the code. fogot to declare: i forget to declare the prototype and update the rest of the code where i was using printBoard(board) to printBoard(board,cursor_row,cursor_col) to use the arrow keys to look more refine."}, {"post_id": 2670, "ts": "2026-06-05T10:45:53Z", "hours": 1.0122, "text": "Added Difficulty bar: Hey Everyone , After struggling to beat AI in my Tic-Tac-toe project i threw some restrictions to beat AI using Difficulty levels. Bugs i encountered: The Bracket: I somehow endup mixing all of the backets here and there and it took me a while to fix the trap and because of the bracket trap everytime user was playing PvP AI was playing instead of player 2 for which everytime player 2 was winnin but at the end somehow i managed to fix it. SETTING up Difficulty Bar: when i was trying to set up the difficulty bar to easy it was taking random guesses but it was looking realistic because the grid has only 9 blocks to move but it was still better although i dropped the idea previously saying it was too dumb but yeah sometimes it makes sense and in Medium difficulty it uses 50% of it brain and the rest random guesses but the game changes at Hard i also call it Unbeatable level here you can rarely beat AI even if you try so hard you will meet draw everytime. i am slowly trying to express myself, Happy Coding hour PIZZA:)"}, {"post_id": 2315, "ts": "2026-06-04T19:00:36Z", "hours": 3.6425, "text": "Implementation of Minimax: Hey everyone, As you know i was trying to build computer vs player, i tried to build the algorithm minimax but failed miserably last time so prepared myself and built the computer vs player so lets talk about what problems i faced during the build. What Bugs i Faced ? The Rage-Quitting AI: Once the AI stopped cheating, it started giving up entirely. I had a bug where I forgot to tell the Minimax algorithm what a “Draw” was. Because it didn’t know how to return a 0 for a tie, it assumed a full board was the worst possible outcome in the universe. If I trapped the AI in a fork where it knew it couldn’t win, it would literally skip its turn and refuse to play! I had to build a fallback block to force it to accept its fate. Over writing issue: there was a time where i made a system where a player couldn’t overwrite ai but AI could and when i saw that it broke me and even after fixing the bug the same error kept coming cause it was stupit of me who didn’t save the new edition. The Silent Fails: At one point, I tried to implement Player vs. Player mode, but when it was Player 2’s turn, the game would just print the board twice and loop back to Player 1. I had completely forgotten to write the scanf input logic for the second player! The code was just reaching that block. Over powered AI: Now one mistake i made and don’t want anyone to repeat is to put a controller over AI so that you can realistically beat AI or u will be lost everytime and even if u try hard it will be draw at max. What to fix THE Controller for AI: as i said before i want to implement a difficulty system to reduce the power of AI. Improving the interface: i want to improve the interface to make it more fun. Thanks for Reading, Happy coding :)"}, {"post_id": 1663, "ts": "2026-06-03T20:01:53Z", "hours": 0.5753, "text": "was trying to improve my project by allowing player to play with the computer but i just couldn’t finish it well so will come back with better solution and the random computer felt so dumb to me i don’t want anyone to experience that ! Yeah that’s it if any want want to share idea am Open to consider any ideas :)"}, {"post_id": 814, "ts": "2026-06-02T14:24:57Z", "hours": 2.4089, "text": "after joining cs50 a month ago am finally able to build a tic tac toe .Now its a basic but i will try to improve it and those semicolon became my greatest obstacle but still somehow i cracked it and will try to make it more interactive with automation and all"}]...
|
Title: Tic Tac Toe by @pizza | Stardance
Devlogs: Title: Tic Tac Toe by @pizza | Stardance
Devlogs:
after joining cs50 a month ago am finally able to build a tic tac toe .Now its a basic but i will try to improve it and those semicolon became my greatest obstacle but still somehow i cracked it and will try to make it more interactive with automation and all
was trying to improve my project by allowing player to play with the computer but i just couldn’t finish it well so will come back with better solution and the random computer felt so dumb to me i don’t want anyone to experience that ! Yeah that’s it if any want want to share idea am Open to consider any ideas :)
Implementation of Minimax: Hey everyone, As you know i was trying to build computer vs player, i tried to build the algorithm minimax but failed miserably last time so prepared myself and built the computer vs player so lets talk about what problems i faced during the build. What Bugs i Faced ? The Rage-Quitting AI: Once the AI stopped cheating, it started giving up entirely. I had a bug where I forgot to tell the Minimax algorithm what a “Draw” was. Because it didn’t know how to return a 0 for a tie, it assumed a full board was the worst possible outcome in the universe. If I trapped the AI in a fork where it knew it couldn’t win, it would literally skip its turn and refuse to play! I had to build a fallback block to force it to accept its fate. Over writing issue: there was a time where i made a system where a player couldn’t overwrite ai but AI could and when i saw that it broke me and even after fixing the bug the same error kept coming cause it was stupit of me who didn’t save the new edition. The Silent Fails: At one point, I tried to implement Player vs. Player mode, but when it was Player 2’s turn, the game would just print the board twice and loop back to Player 1. I had completely forgotten to write the scanf input logic for the second player! The code was just reaching that block. Over powered AI: Now one mistake i made and don’t want anyone to repeat is to put a controller over AI so that you can realistically beat AI or u will be lost everytime and even if u try hard it will be draw at max. What to fix THE Controller for AI: as i said before i want to implement a difficulty system to reduce the power of AI. Improving the interface: i want to improve the interface to make it more fun. Thanks for Reading, Happy coding :)
Added Difficulty bar: Hey Everyone , After struggling to beat AI in my Tic-Tac-toe project i threw some restrictions to beat AI using Difficulty levels. Bugs i encountered: The Bracket: I somehow endup mixing all of the backets here and there and it took me a while to fix the trap and because of the bracket trap everytime user was playing PvP AI was playing instead of player 2 for which everytime player 2 was winnin but at the end somehow i managed to fix it. SETTING up Difficulty Bar: when i was trying to set up the difficulty bar to easy it was taking random guesses but it was looking realistic because the grid has only 9 blocks to move but it was still better although i dropped the idea previously saying it was too dumb but yeah sometimes it makes sense and in Medium difficulty it uses 50% of it brain and the rest random guesses but the game changes at Hard i also call it Unbeatable level here you can rarely beat AI even if you try so hard you will meet draw everytime. i am slowly trying to express myself, Happy Coding hour PIZZA:)
Hey Everyone, I made some serious improvement in my project. I used ncurses library to improve the UI and i fixed the repetitive board which before kept coming to a single board to look more asthetic and a premium finished product. what bugs i faced: bracket hell : i stuck because of a unwanted random bracket it has to be solved because it was ruining the rest of the code. fogot to declare: i forget to declare the prototype and update the rest of the code where i was using printBoard(board) to printBoard(board,cursor_row,cursor_col) to use the arrow keys to look more refine.
Ships:
I made a basic Tic-Tac-Toe game. The most challenging part was the Minimax algorithm and designing the interface with ncurse library. I am so proud of myself that i was able to pull it off. Please keep in mind before juding that i am a completely beginner who is new into the space and it’s my first project....
|
1793105302.8414903
|
1793191702.8414903
|
|
3541
|
Mars by @Federico | Stardance
|
Federico
|
1
|
4.65
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T15:22:43Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Mars is a text-adventure game where you are the commander of a spacecraft on a mission to the planet Mars. It was made with the help of Copilot on VS Code and the lessons I learned from my Principles of IT class. *Note: when typing commands, type them as shown (ex: type “analyze” to analyze samples). Enjoy the game. Feel free to ask questions or concerns.", "repo": "https://github.com/Federico-VGaspi/-Mars-txt-adventure-game", "demo": "https://studio.code.org/projects/pythonlab/328c2c89-5ec9-472a-9816-b0616b3399b1"}]...
|
[{"post_id": 4262, "ts": "2026 [{"post_id": 4262, "ts": "2026-06-07T14:52:30Z", "hours": 2.3114, "text": "I reformatted the code since each path has the same choices."}, {"post_id": 2438, "ts": "2026-06-04T22:42:17Z", "hours": 0.3347, "text": "Had to make some slight fixes and remove the mining choice in the Amazonis Planitia path."}, {"post_id": 2171, "ts": "2026-06-04T14:54:08Z", "hours": 1.8522, "text": "Here is the “main menu” part of the game, where players can type “start” when they’re ready to go to Mars or “exit”/“quit” to quit the game."}, {"post_id": 523, "ts": "2026-06-02T00:15:35Z", "hours": 0.315, "text": "Currently working on the beginning narrative of “Mars”. Players will choose where they will land on the Martian surface."}]...
|
Title: Mars by @Federico | Stardance
Devlogs:
Cur Title: Mars by @Federico | Stardance
Devlogs:
Currently working on the beginning narrative of “Mars”. Players will choose where they will land on the Martian surface.
Here is the “main menu” part of the game, where players can type “start” when they’re ready to go to Mars or “exit”/“quit” to quit the game.
Had to make some slight fixes and remove the mining choice in the Amazonis Planitia path.
I reformatted the code since each path has the same choices.
Ships:
Mars is a text-adventure game where you are the commander of a spacecraft on a mission to the planet Mars. It was made with the help of Copilot on VS Code and the lessons I learned from my Principles of IT class. *Note: when typing commands, type them as shown (ex: type “analyze” to analyze samples). Enjoy the game. Feel free to ask questions or concerns....
|
1793105303.9644544
|
1793191703.9644544
|
|
11388
|
Enclave Messenger by @Pradhya | Stardance
|
Pradhya
|
1
|
54.05
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T12:15:31Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What it is A fully offline, peer-to-peer encrypted messenger that runs over Bluetooth (RFCOMM) and local network — zero internet required, zero servers. Messages are end-to-end encrypted, and the UI runs as a local web app in your browser. What was built Bluetooth node — discovers peers via SDP UUID, connects via RFCOMM Web UI — a polished chat interface with dark/light mode, animated splash screen, message bubbles, peer list with live scan End-to-end encryption — passphrase-based, messages show enc/decrypted badges Multi-transport system — send messages to phone numbers when Bluetooth and LAN isn't available Plugin system — extensible architecture with manifest-based permissions, security watchdog Signed update system — RSA-4096 signed manifests + SHA-256 file hashes so updates can be verified without internet What was challenging Bluetooth peer discovery without internet — SDP/RFCOMM is finicky, BlueZ on Linux requires careful pairing/trust setup Coordinating encryption across peers who may be offline — tokens stored locally, decrypted on-demand when passphrase is entered Plugin security in CPython — no real sandbox exists, so the security model relies on scoped PluginCore objects. What to be proud of The UI is genuinely polished — smooth animations, staggered reveals, real-time WebSocket updates The update system is cryptographically sound for an offline-first app To test it Requirements: Linux (BlueZ), Python 3.11+, Bluetooth adapter pip install -r requirements.txt Setup: python set.py — configure identity + passphrase python main.py — starts the node + web UI (visit localhost:5000) Enter your passphrase in the unlock modal to start the Bluetooth node Click scan network in the peers panel to find other Enclave instances nearby Open a chat, send a message — it'll show enc if stored encrypted, decrypted once unlocked Two-device test: Run on two Linux machines with Bluetooth, make sure they’re paired, both run main.py — they should discover each other automatically.", "repo": "https://github.com/Project-Enclave/Enclave-Messenger", "demo": "https://messenger.projectenclave.dev/"}]...
|
[{"post_id": 78709, "ts": "202 [{"post_id": 78709, "ts": "2026-10-11T11:25:29Z", "hours": 10.2472, "text": "Haiii again! Whats done! Security review of the messenger by Claude and fixes for what it found: the passphrase no longer goes in the URL (it used to end up in logs), it is sent in a header now running with –host lan now needs a one-time access code, and debug mode is forced off there plugins are not run until I explicitly trust them, and the trust is tied to the plugin’s file hash, so editing it cancels the trust addresses that other peers give us are checked before we connect UI/UX Changes Messages now have clear stats if they were delivered(directly), sent via a peer, or unsent/failed Failed messages now have a retry button to attempt to re send it. Settings menu has a copy user-id/enclave-id and a qr code too to add them to their peers User profiles can now be easily backed up and restored through the web ui Ive tried adding plugins, still need to test it and move everything to a plugin based system… Misc but important INSTALLATION: you can now use pip/pipx to install it, but youll need to use pipx install . because i want to fix some bugs before publishing it to pypi. DATA MIGRATION: the way that the messenger stores data and where it stores data has been changed so if the pe-em detects any data in the folders that the messenger prev used, then it will move it but not delete the data from the prev dir, which was ~/.enclave-messenger EXECUTABLES: the exeuatables for windows, linux and mac will still be built, but only the linux one will be properly tested because i only have a ubuntu install, i dont have a mac nor enough system resources to test windows or run a mac vm. CHECKS: Claude added like 200 checks and like a ci job that runs them all. BuGs The lan scanner was looking at the wrong port, ugh The windows executable did not start the bluetooth and sms plugins Profiles were broken on the windows executable. (Ugh i hate windows) set.py (the setup file) did the setup properly, but didnt save the profile stuff like name but that never got noticed because core.py fixed it when either web.py or tui.py was launched. QR Code doesnt render Website I still kinda have to redo it all, Update the info on the website. Etc"}, {"post_id": 73096, "ts": "2026-09-24T11:35:52Z", "hours": 4.8553, "text": "Im finally done with all of the PLANNED docs, i still have to add some docs for stuff like DHT, hosting, etc and i have to make plugins, remove in-built stuff stuff, etc"}, {"post_id": 67969, "ts": "2026-09-14T09:17:27Z", "hours": 1.4697, "text": "Added more stuff for future stuff and plans for the messenger Its sad that this challenge is ending soon…"}, {"post_id": 65316, "ts": "2026-09-10T11:55:12Z", "hours": 1.7658, "text": "So im still not done with all the docs, i have like 5 files left to complete. But, i managed to style my mkdocs site and it looks pretty similar to the messenger site… I like the installation one the most. Yay!"}, {"post_id": 63779, "ts": "2026-09-07T18:54:46Z", "hours": 0.9619, "text": "Yay! I got the guide up and reachable at https://messenger.docs.projectenclave.dev/ hosted on vercel The only issue is that its not complete D: And i cant add this to the projects details because its being reviewed :("}, {"post_id": 63533, "ts": "2026-09-07T13:28:12Z", "hours": 0.8214, "text": "Docs looking pretty good I still have to turn this into a site…."}, {"post_id": 61566, "ts": "2026-09-04T15:23:48Z", "hours": 1.4228, "text": "Got a LOT of assets to finallyyyy make the docs and guide! Yay!"}, {"post_id": 60417, "ts": "2026-09-02T18:35:48Z", "hours": 0.9247, "text": "I finally did the read meeeeee"}, {"post_id": 59750, "ts": "2026-09-01T17:58:49Z", "hours": 7.6833, "text": "I FINALLY GOT IT TO WORK!! i still have to fix the web ui… At least i got the router to get working and the tui HURRAY!"}, {"post_id": 27613, "ts": "2026-07-13T10:59:30Z", "hours": 10.3575, "text": "i somehow broke the web ui while trying to add profiles so im also adding a cli and a tui its not a good idea but its an idea The tui will probably look like this. So, the todo is now to fix the web ui, make the tui and add profiles so the reviewers can check it out The below screenshot is from noterooms cli by me!"}, {"post_id": 12577, "ts": "2026-06-20T15:19:07Z", "hours": 1.3519, "text": "I need to make these test better on my laptop… TADC ep9 kinda made me go off track but it was good. I think that was the most i cried while watching a movie. Well, leave that behind. Also, i think its all in one line because i can’t make a new line on mobile. And i think i messed up my ears. Ouch"}, {"post_id": 11910, "ts": "2026-06-19T12:26:36Z", "hours": 1.1892, "text": "Finally made the installation a one liner! Enclave Messenger"}, {"post_id": 11209, "ts": "2026-06-18T10:50:01Z", "hours": 8.7239, "text": "Dev-log 3 What has been done Made the settings look a bit better Added better plugin support Added a built-in Bluetooth support on Linux(Ubuntu) Fixed a security bug where if the host/core was already unlocked, any password was allowed Made the onbording process easier Added a reset file for development and to delete all chat, config, etc made by any files in the repo. Moved the web page to a file in ./templates from ./web.py . The entire file was just a string… Kinda fixed the message bubbles. Made a tool to verify if the files you have are by me for p2p updates What is in progress as of now Make a plugin manager Create documentations Add cross support for apps like blechat and silence Make the UI/UX better Etc also, for why im doing this, see this"}, {"post_id": 5573, "ts": "2026-06-09T12:19:44Z", "hours": 1.3175, "text": "i fixed the networking and transport and i also ditched the logo sorry for the poor quality. cant do higher without i3/ubuntu crashing."}, {"post_id": 4761, "ts": "2026-06-08T07:11:49Z", "hours": 0.5481, "text": "First devlog Almost done with crypto and networking and the UI Made whatever this is as the logo for now"}]...
|
Title: Enclave Messenger by @Pradhya | Stardance
Title: Enclave Messenger by @Pradhya | Stardance
Devlogs:
First devlog Almost done with crypto and networking and the UI Made whatever this is as the logo for now
i fixed the networking and transport and i also ditched the logo sorry for the poor quality. cant do higher without i3/ubuntu crashing.
Dev-log 3 What has been done Made the settings look a bit better Added better plugin support Added a built-in Bluetooth support on Linux(Ubuntu) Fixed a security bug where if the host/core was already unlocked, any password was allowed Made the onbording process easier Added a reset file for development and to delete all chat, config, etc made by any files in the repo. Moved the web page to a file in ./templates from ./web.py . The entire file was just a string… Kinda fixed the message bubbles. Made a tool to verify if the files you have are by me for p2p updates What is in progress as of now Make a plugin manager Create documentations Add cross support for apps like blechat and silence Make the UI/UX better Etc also, for why im doing this, see this
Finally made the installation a one liner! Enclave Messenger
I need to make these test better on my laptop… TADC ep9 kinda made me go off track but it was good. I think that was the most i cried while watching a movie. Well, leave that behind. Also, i think its all in one line because i can’t make a new line on mobile. And i think i messed up my ears. Ouch
i somehow broke the web ui while trying to add profiles so im also adding a cli and a tui its not a good idea but its an idea The tui will probably look like this. So, the todo is now to fix the web ui, make the tui and add profiles so the reviewers can check it out The below screenshot is from noterooms cli by me!
I FINALLY GOT IT TO WORK!! i still have to fix the web ui… At least i got the router to get working and the tui HURRAY!
I finally did the read meeeeee
Got a LOT of assets to finallyyyy make the docs and guide! Yay!
Docs looking pretty good I still have to turn this into a site….
Yay! I got the guide up and reachable at https://messenger.docs.projectenclave.dev/ hosted on vercel The only issue is that its not complete D: And i cant add this to the projects details because its being reviewed :(
So im still not done with all the docs, i have like 5 files left to complete. But, i managed to style my mkdocs site and it looks pretty similar to the messenger site… I like the installation one the most. Yay!
Added more stuff for future stuff and plans for the messenger Its sad that this challenge is ending soon…
Im finally done with all of the PLANNED docs, i still have to add some docs for stuff like DHT, hosting, etc and i have to make plugins, remove in-built stuff stuff, etc
Haiii again! Whats done! Security review of the messenger by Claude and fixes for what it found: the passphrase no longer goes in the URL (it used to end up in logs), it is sent in a header now running with –host lan now needs a one-time access code, and debug mode is forced off there plugins are not run until I explicitly trust them, and the trust is tied to the plugin’s file hash, so editing it cancels the trust addresses that other peers give us are checked before we connect UI/UX Changes Messages now have clear stats if they were delivered(directly), sent via a peer, or unsent/failed Failed messages now have a retry button to attempt to re send it. Settings menu has a copy user-id/enclave-id and a qr code too to add them to their peers User profiles can now be easily backed up and restored through the web ui Ive tried adding plugins, still need to test it and move everything to a plugin based system… Misc but important INSTALLATION: you can now use pip/pipx to install it, but youll need to use pipx install . because i want to fix some bugs before publishing it to pypi. DATA MIGRATION: the way that the messenger stores data and where it stores data has been changed so if the pe-em detects any data in the folders that the messenger prev used, then it will move it but not delete the data from the prev dir, which was ~/.enclave-messenger EXECUTABLES: the exeuatables for windows, linux and mac will still be built, but only the linux one will be properly tested because i only have a ubuntu install, i dont have a mac nor enough system resources to test windows or run a mac vm. CHECKS: Claude added like 200 checks and like a ci job that runs them all. BuGs The lan scanner was looking at the wrong port, ugh The windows executable did not start the bluetooth and sms plugins Profiles were broken on the windows executable. (Ugh i hate windows) set.py (the setup file) did the setup properly, but didnt save the profile stuff like name but that never got noticed because core.py fixed it when either web.py or tui.py was launched. QR Code doesnt render Website I still kinda have to redo it all, Update the info on the website. Etc
Ships:
What it is A fully offline, peer-to-peer encrypted messenger that runs over Bluetooth (RFCOMM) and local network — zero internet required, zero servers. Messages are end-to-end encrypted, and the UI runs as a local web app in your browser. What was built Bluetooth node — discovers peers via SDP UUID, connects via RFCOMM Web UI — a polished chat interface with dark/light mode, animated splash screen, message bubbles, peer list with live scan End-to-end encryption — passphrase-based, messages show enc/decrypted badges Multi-transport system — send messages to phone numbers when Bluetooth and LAN isn't available Plugin system — extensible architecture with manifest-based permissions, security watchdog Signed update system — RSA-4096 signed manifests + SHA-256 file hashes so updates can be verified without internet What was challenging Bluetooth peer discovery without internet — SDP/RFCOMM is finicky, BlueZ on Linux requires careful pairing/trust setup Coordinating encryption across peers who may be offline — tokens stored locally, decrypted on-demand when passphrase is entered Plugin security in CPython — no real sandbox exists, so the security model relies on scoped PluginCore objects. What to be proud of The UI is genuinely polished — smooth animations, staggered reveals, real-time WebSocket updates The update system is cryptographically sound for an offline-first app To test it Requirements: Linux (BlueZ), Python 3.11+, Bluetooth adapter pip install -r requirements.txt Setup: python set.py — configure identity + passphrase python main.py — starts the node + web UI (visit localhost:5000) Enter your passphrase in the unlock modal to start the Bluetooth node Click scan network in the peers panel to find other Enclave instances nearby Open a chat, send a message — it'll show enc if stored encrypted, decrypted once unlocked Two-device test: Run on two Linux machines with Bluetooth, make sure they’re paired, both run main.py — they should discover each other automatically....
|
1793105304.8366299
|
1793191704.8366299
|
|
26706
|
My very own WebOS by @Astra4 | Stardance
|
Astra4
|
2
|
3.0
|
22
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T02:02:31Z", "hours": 1.0, "multiplier": 15.91, "payout": 22, "blessing": "neutral", "text": "creating my own OS ^-^ built using html, css, and javascript. most challenging part was figuring out the Javascript - my past coding experience was mostly HTML/CSS/Python. proud that i mulled it over, and that it’s comparatively more aesthetic than my old websites that were super blocky. hackatime thought it would be funny to tell me to install and uninstall wakatime - i’m missing probably 6 or 7 hours hours of work that should’ve been logged -_-. you can find the actual devlogs saved as separate files on the github features: any additions you add will save even if you reload or exit the page - it’s stored locally though so others won’t be able to see it cute little loading bar welcome page - simple introduction that pops up when you click “MingOS” on top left corner, first taskbar app, or upon loading diary (star log) - a space for personal journal entries - you can add your own! doodles - a gallery for drawings and artwork - you can add your own! mixtape - a music playlist section, for now i have placeholder audio but i’ll add my own later, maybe even the music that i’m working on right now hehe sketch - draw directly in browser guestbook - leave messages and notes - i don’t have a database so unfortunately all the data will stay local Sunny - a virtual pet and interactive companion to care for while exploring the site - maybe i’ll add an adjustment for need levels later", "repo": "https://github.com/astra-4/mingos", "demo": "https://astra-4.github.io/mingos/"}, {"ship_num": 2, "ts": "2026-06-30T09:00:35Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "creating my own OS ^-^ built using html, css, and javascript. most challenging part was figuring out the Javascript - my past coding experience was mostly HTML/CSS/Python. proud that i mulled it over, and that it’s comparatively more aesthetic than my old websites that were super blocky. also hackaclub had severe issues so i had to re-install - i’m missing probably 6 or 7 hours hours of work that should’ve been logged -_- features: any additions you add will save even if you reload or exit the page - it’s stored locally though so others won’t be able to see it cute little loading bar welcome page - simple introduction that pops up when you click “MingOS” on top left corner, first taskbar app, or upon loading diary (star log) - a space for personal journal entries - you can add your own! doodles - a gallery for drawings and artwork - you can add your own! mixtape - a music playlist section, for now i have placeholder audio but i’ll add my own later, maybe even the music that i’m working on right now hehe sketch - draw directly in browser guestbook - leave messages and notes - i don’t have a database so unfortunately all the data will stay local Sunny - a virtual pet and interactive companion to care for while exploring the site - maybe i’ll add an adjustment for need levels later", "repo": "https://github.com/astra-4/mingos", "demo": "https://astra-4.github.io/mingos/"}]...
|
[{"post_id": 22541, "ts": "202 [{"post_id": 22541, "ts": "2026-07-05T02:00:17Z", "hours": 1.3522, "text": "overhauled css. apparently i messed up git branches so i had to revert to an earlier version -_- now it starts off in dark mode and also changed the color scheme to fit the night sky/star theme more"}, {"post_id": 19082, "ts": "2026-06-30T08:49:25Z", "hours": 0.9947, "text": "finally finished! app icons are draggable, and any user inputs (star log, mixtape, window location, etc.) should be saved. the logged time is inaccurate and i had to fully restart the installation -_- for it to even track properly. try it out here: https://astra-4.github.io/mingos/"}, {"post_id": 18782, "ts": "2026-06-29T23:59:13Z", "hours": 0.2833, "text": "skipped 4 or 5 actual devlogs - you can find them on the github page. around this mark i actually spent around 6 hours. star log is like a mini diary, doodles is like a mini sketch book, mixtape is just like the diary but a songs list. later i’m going to have entries that visitors can add themselves, a sketchpad app, and audio to mixtape."}, {"post_id": 18764, "ts": "2026-06-29T23:23:45Z", "hours": 0.3806, "text": "started part 1 - the main page. also heads up that hackatime wasn’t working for me so the logged time is inaccurate. the time and date wasn’t coded to be updated in real time yet so i put in a six seven joke. har har."}]...
|
Title: My very own WebOS by @Astra4 | Stardance
D Title: My very own WebOS by @Astra4 | Stardance
Devlogs:
started part 1 - the main page. also heads up that hackatime wasn’t working for me so the logged time is inaccurate. the time and date wasn’t coded to be updated in real time yet so i put in a six seven joke. har har.
skipped 4 or 5 actual devlogs - you can find them on the github page. around this mark i actually spent around 6 hours. star log is like a mini diary, doodles is like a mini sketch book, mixtape is just like the diary but a songs list. later i’m going to have entries that visitors can add themselves, a sketchpad app, and audio to mixtape.
finally finished! app icons are draggable, and any user inputs (star log, mixtape, window location, etc.) should be saved. the logged time is inaccurate and i had to fully restart the installation -_- for it to even track properly. try it out here: https://astra-4.github.io/mingos/
overhauled css. apparently i messed up git branches so i had to revert to an earlier version -_- now it starts off in dark mode and also changed the color scheme to fit the night sky/star theme more
Ships:
creating my own OS ^-^ built using html, css, and javascript. most challenging part was figuring out the Javascript - my past coding experience was mostly HTML/CSS/Python. proud that i mulled it over, and that it’s comparatively more aesthetic than my old websites that were super blocky. also hackaclub had severe issues so i had to re-install - i’m missing probably 6 or 7 hours hours of work that should’ve been logged -_- features: any additions you add will save even if you reload or exit the page - it’s stored locally though so others won’t be able to see it cute little loading bar welcome page - simple introduction that pops up when you click “MingOS” on top left corner, first taskbar app, or upon loading diary (star log) - a space for personal journal entries - you can add your own! doodles - a gallery for drawings and artwork - you can add your own! mixtape - a music playlist section, for now i have placeholder audio but i’ll add my own later, maybe even the music that i’m working on right now hehe sketch - draw directly in browser guestbook - leave messages and notes - i don’t have a database so unfortunately all the data will stay local Sunny - a virtual pet and interactive companion to care for while exploring the site - maybe i’ll add an adjustment for need levels later
creating my own OS ^-^ built using html, css, and javascript. most challenging part was figuring out the Javascript - my past coding experience was mostly HTML/CSS/Python. proud that i mulled it over, and that it’s comparatively more aesthetic than my old websites that were super blocky. hackatime thought it would be funny to tell me to install and uninstall wakatime - i’m missing probably 6 or 7 hours hours of work that should’ve been logged -_-. you can find the actual devlogs saved as separate files on the github features: any additions you add will save even if you reload or exit the page - it’s stored locally though so others won’t be able to see it cute little loading bar welcome page - simple introduction that pops up when you click “MingOS” on top left corner, first taskbar app, or upon loading diary (star log) - a space for personal journal entries - you can add your own! doodles - a gallery for drawings and artwork - you can add your own! mixtape - a music playlist section, for now i have placeholder audio but i’ll add my own later, maybe even the music that i’m working on right now hehe sketch - draw directly in browser guestbook - leave messages and notes - i don’t have a database so unfortunately all the data will stay local Sunny - a virtual pet and interactive companion to care for while exploring the site - maybe i’ll add an adjustment for need levels later...
|
1793105306.0650115
|
1793191706.0650115
|
|
70119
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793105307.2668018
|
1793969307.2668018
|
|
41747
|
My own site! by @wxie223 | Stardance
|
wxie223
|
2
|
3.5
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T14:04:53Z", "hours": 0.0, "multiplier": 1.45, "payout": 1, "blessing": "neutral", "text": "I made a personal site about me! It has 3 pages, a main page, a projects page, and an extracurriculars page. I don’t want this website to just be all about me. I also want to include resources for highschoolers just like me, so I’m planning to add a new page with resources for like SAT, or AP, or any other useful website. Hope you like it! I made this in the personal site workshop so it is still a bit simple.", "repo": "https://github.com/WillyX12/PersonalWebsite", "demo": "https://willyx12.github.io/PersonalWebsite/"}, {"ship_num": 2, "ts": "2026-08-19T19:30:17Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I shipped V1 of my personal site. Its really simple, but I hope it makes ur day.", "repo": "https://github.com/WillyX12/PersonalWebsite", "demo": "https://willyx12.github.io/PersonalWebsite/"}]...
|
[{"post_id": 66322, "ts": "202 [{"post_id": 66322, "ts": "2026-09-12T02:52:38Z", "hours": 0.7303, "text": "Havent been working on it a long time cuz of school and all that. Progress: added some gradients and listings based on a tutorial I saw, to make it more aesthetic. Check out the resources page!"}, {"post_id": 56998, "ts": "2026-08-29T02:05:22Z", "hours": 1.0589, "text": "added a contact page and some details now you can reach me by email and insta! (follow me pls) also I have very niche resources"}, {"post_id": 51934, "ts": "2026-08-21T21:19:00Z", "hours": 0.7114, "text": "Added Resources Slide. Said I wasn’t gonna make it all about myself, so I added a resources page (check it out it might be useful). I also added an image for my skyextendo on the project page. Hope yal enjoy it!"}, {"post_id": 50762, "ts": "2026-08-20T03:47:54Z", "hours": 0.4417, "text": "ADDED PAGES. I added an extracurricular page and a projects page. I also plan on adding study materials for sat, ap, and random stuff"}, {"post_id": 50563, "ts": "2026-08-19T19:28:47Z", "hours": 0.5008, "text": "I just made v1 of me personal site!"}]...
|
Title: My own site! by @wxie223 | Stardance
Devlo Title: My own site! by @wxie223 | Stardance
Devlogs:
I just made v1 of me personal site!
ADDED PAGES. I added an extracurricular page and a projects page. I also plan on adding study materials for sat, ap, and random stuff
Added Resources Slide. Said I wasn’t gonna make it all about myself, so I added a resources page (check it out it might be useful). I also added an image for my skyextendo on the project page. Hope yal enjoy it!
added a contact page and some details now you can reach me by email and insta! (follow me pls) also I have very niche resources
Havent been working on it a long time cuz of school and all that. Progress: added some gradients and listings based on a tutorial I saw, to make it more aesthetic. Check out the resources page!
Ships:
I shipped V1 of my personal site. Its really simple, but I hope it makes ur day.
I made a personal site about me! It has 3 pages, a main page, a projects page, and an extracurriculars page. I don’t want this website to just be all about me. I also want to include resources for highschoolers just like me, so I’m planning to add a new page with resources for like SAT, or AP, or any other useful website. Hope you like it! I made this in the personal site workshop so it is still a bit simple....
|
1793105308.0938907
|
1793969308.0938907
|
|
50464
|
WebOS EVAN by @anura | Stardance
|
anura
|
2
|
10.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T05:09:17Z", "hours": 5.0, "multiplier": 6.95, "payout": 36, "blessing": "neutral", "text": "Upgraded my nerv terminal for WebOS 2 added lilith wallpaper, sound effect, pilot log notes that save, classified file system with lore, min/max window control, custom right click menu, aeva launch sequence from terminal, and a magi override vote when you clear the angel alert… the typoss almost killed mee tying to fix itt(ToT)…", "repo": "https://github.com/anuragtamang095-coder/Webos", "demo": "https://anuragtamang095-coder.github.io/Webos/"}, {"ship_num": 2, "ts": "2026-08-18T03:51:01Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my very firsttt OS (TOT).. very proud of my self… did use ai when i waas stuck in debugging.. this was very gud experience and i look forward on the WebOS 2.", "repo": "https://github.com/anuragtamang095-coder/Webos", "demo": "https://anuragtamang095-coder.github.io/Webos/"}]...
|
[{"post_id": 50782, "ts": "202 [{"post_id": 50782, "ts": "2026-08-20T05:05:01Z", "hours": 0.6608, "text": "Finallyyy done withhh ittt(T-T)..this project GOT ME CRYINGG"}, {"post_id": 50768, "ts": "2026-08-20T04:15:35Z", "hours": 0.5917, "text": "Just came back from Tuition and checked my WebOS and found that The terminal commands and there work was so bland so i am trying to add some spice.. lets see how it turns out.."}, {"post_id": 50711, "ts": "2026-08-20T01:23:29Z", "hours": 0.5081, "text": "last night just was not able to finish the minimize and maximize button had to wake up early in a day off.. maybe it works.. i check.."}, {"post_id": 50464, "ts": "2026-08-19T16:58:51Z", "hours": 0.4222, "text": "I think enough for today almost done with the minimize and maximize window buttonnnn.."}, {"post_id": 50435, "ts": "2026-08-19T16:30:57Z", "hours": 1.4847, "text": "Me hitting an error..meanwhile my JS: loda Notes.. LMAOO *Skull-emojii"}, {"post_id": 50327, "ts": "2026-08-19T14:26:57Z", "hours": 0.8247, "text": "Added the boot, click, angel alert sound effectt… right click added(T-T) Finally getting the hang of itt.. feeling like finishing this project in one sittinggg.."}, {"post_id": 50290, "ts": "2026-08-19T13:20:47Z", "hours": 0.7125, "text": "Long day at school and exhaustion is fixed when i see progress of my code(^ w ^).. done with the wallpaper now looks pretty good.. thinking of adding 5 new features on this WebOS as for its mission lets see how much i can.. Que sera sera…"}, {"post_id": 49333, "ts": "2026-08-18T03:00:34Z", "hours": 0.5225, "text": "So, the spaces matter..(-_-)my lazzy aahh didn’t add spaces so now i got another 1/2 hr of debugging maybe.."}, {"post_id": 49314, "ts": "2026-08-18T01:58:32Z", "hours": 0.5042, "text": "Finallyyy Donew with the os.. gonna ship the project after final checking..(TOT)"}, {"post_id": 49302, "ts": "2026-08-18T01:19:37Z", "hours": 0.3039, "text": "just woke up and Started the JS, he time consume is half hour more than i planned (-_-)… IS there anything that can help me code faster???"}, {"post_id": 49019, "ts": "2026-08-17T16:43:38Z", "hours": 3.8872, "text": "Dyaammm!! it’s difficult yet addictive..done with the HTML and CSS now JS needs to be done!! EVANGELION OS on the wayy!!"}]...
|
Title: WebOS EVAN by @anura | Stardance
Devlogs:
Title: WebOS EVAN by @anura | Stardance
Devlogs:
Dyaammm!! it’s difficult yet addictive..done with the HTML and CSS now JS needs to be done!! EVANGELION OS on the wayy!!
just woke up and Started the JS, he time consume is half hour more than i planned (-_-)… IS there anything that can help me code faster???
Finallyyy Donew with the os.. gonna ship the project after final checking..(TOT)
So, the spaces matter..(-_-)my lazzy aahh didn’t add spaces so now i got another 1/2 hr of debugging maybe..
Long day at school and exhaustion is fixed when i see progress of my code(^ w ^).. done with the wallpaper now looks pretty good.. thinking of adding 5 new features on this WebOS as for its mission lets see how much i can.. Que sera sera…
Added the boot, click, angel alert sound effectt… right click added(T-T) Finally getting the hang of itt.. feeling like finishing this project in one sittinggg..
Me hitting an error..meanwhile my JS: loda Notes.. LMAOO *Skull-emojii
I think enough for today almost done with the minimize and maximize window buttonnnn..
last night just was not able to finish the minimize and maximize button had to wake up early in a day off.. maybe it works.. i check..
Just came back from Tuition and checked my WebOS and found that The terminal commands and there work was so bland so i am trying to add some spice.. lets see how it turns out..
Finallyyy done withhh ittt(T-T)..this project GOT ME CRYINGG
Ships:
I made my very firsttt OS (TOT).. very proud of my self… did use ai when i waas stuck in debugging.. this was very gud experience and i look forward on the WebOS 2.
Upgraded my nerv terminal for WebOS 2 added lilith wallpaper, sound effect, pilot log notes that save, classified file system with lore, min/max window control, custom right click menu, aeva launch sequence from terminal, and a magi override vote when you clear the angel alert… the typoss almost killed mee tying to fix itt(ToT)…...
|
1793105308.9277956
|
1793969308.9277956
|
|
39177
|
TripleT-OS by @Bh4v | Stardance
|
Bh4v
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T17:13:19Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created TripleT-OS, a lightweight browser-based operating system centered around the iconic “Tung Tung Tung Sahur” meme aesthetic, built using pure HTML, CSS, and Vanilla JavaScript in VS Code. The most challenging aspect was engineering the window management system completely from scratch—calculating mouse cursor offsets and dynamically updating z-index values using native DOM event listeners so windows drag smoothly and stack correctly when clicked. I am especially proud of achieving a responsive, tactile desktop interface with custom apps without relying on any heavy external frameworks or libraries. To test TripleT-OS, reviewers don’t need to install or configure anything; simply click the live GitHub Pages link in any modern web browser to interact with the welcome screen, drag application windows around, write notes in TUNG Notes, and view the image gallery in TUNG Photos.", "repo": "https://github.com/Bhav531/TripleT-OS.", "demo": "https://bhav531.github.io/TripleT-OS./"}]...
|
[{"post_id": 37714, "ts": "202 [{"post_id": 37714, "ts": "2026-07-30T16:51:43Z", "hours": 0.8569, "text": "Alr guys i finally added tung photo gallery - a bunch of cool-looking tung tung sahur photos. this is pretty much it for v1, but dw im working on v2 and trust me its gonna be a lot better:D."}, {"post_id": 36247, "ts": "2026-07-28T06:52:27Z", "hours": 0.6061, "text": "i made the tung notes app, enabled typing and then reused window closing and header functions from the welcome window."}, {"post_id": 36211, "ts": "2026-07-28T04:34:45Z", "hours": 3.1703, "text": "hi guys! ik this took a lot of time but i was absolutely bamboozled on which theme should be chosen and how should i structure my welcome screen😭😭 but anyways, im done with the home pagee working on a notes/calculator app rn"}]...
|
Title: TripleT-OS by @Bh4v | Stardance
Devlogs:
h Title: TripleT-OS by @Bh4v | Stardance
Devlogs:
hi guys! ik this took a lot of time but i was absolutely bamboozled on which theme should be chosen and how should i structure my welcome screen😭😭 but anyways, im done with the home pagee working on a notes/calculator app rn
i made the tung notes app, enabled typing and then reused window closing and header functions from the welcome window.
Alr guys i finally added tung photo gallery - a bunch of cool-looking tung tung sahur photos. this is pretty much it for v1, but dw im working on v2 and trust me its gonna be a lot better:D.
Ships:
I created TripleT-OS, a lightweight browser-based operating system centered around the iconic “Tung Tung Tung Sahur” meme aesthetic, built using pure HTML, CSS, and Vanilla JavaScript in VS Code. The most challenging aspect was engineering the window management system completely from scratch—calculating mouse cursor offsets and dynamically updating z-index values using native DOM event listeners so windows drag smoothly and stack correctly when clicked. I am especially proud of achieving a responsive, tactile desktop interface with custom apps without relying on any heavy external frameworks or libraries. To test TripleT-OS, reviewers don’t need to install or configure anything; simply click the live GitHub Pages link in any modern web browser to interact with the welcome screen, drag application windows around, write notes in TUNG Notes, and view the image gallery in TUNG Photos....
|
1793105309.7532852
|
1793191709.7532852
|
|
70565
|
Untitled project by @Tati | Stardance
|
Tati
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Tati | Stardance
|
1793105310.6261392
|
1793710110.6261392
|
|
4028
|
Debugr.fun by @jamallyemin | Stardance
|
jamallyemin
|
2
|
25.68
|
270
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T21:22:25Z", "hours": 10.0, "multiplier": 17.57, "payout": 171, "blessing": "neutral", "text": "helo!! shipping this one — it’s the variable game, ranked edition. you write python-like code to satisfy a growing set of rules before a timer starts deleting it from the bottom, one line a second, unless you sync in time. play solo, or host/join a private room and race friends live for the leaderboard. the biggest thing I’m proud of is taskEngine.js — instead of hand-writing 25 fixed rules like the old version, it builds a hidden random solution first and derives every rule from a real fact about it (its actual sum, its actual length, etc), so no matter how many rules stack together they can never contradict each other. infinite non-repeating tasks out of that one trick. hardest part honestly wasn’t the game logic, it was wiring firebase up for real — nicknames, live rooms, race winners decided by firestore transactions so two people submitting at the same millisecond still only lets one through. spent lots of time chasing dumb stuff too. to test it: pick a difficulty and start typing variable assignments, or open two tabs and try hosting + joining a room to see the live race work. note : this project is obviously not perfect but I will try to improve this project and make it an actual kind of web browser game, so feedbacks , bug reports, and suggestions would be really helpful and appreciated", "repo": "https://github.com/jamallyemin/Debugr.fun", "demo": "https://debugr.fun/"}, {"ship_num": 2, "ts": "2026-06-03T23:50:06Z", "hours": 6.0, "multiplier": 15.96, "payout": 99, "blessing": "neutral", "text": "made a browser puzzle where you write Python-like variable assignments to satisfy 25 rules simultaneously - think neal.fun’s password game but for code. rules unlock one by one and start contradicting each other the deeper you go. most proud of the destruction mode. when the 45s timer hits zero the editor gets a red caret and starts deleting your code line by line from the bottom until you hit sync. it creates this genuine panic that felt fun to build. hardest part was making all 25 rules mathematically solvable at the same time. some rules override earlier ones so you keep rewriting the same lines - getting that supersession logic right without breaking the win condition took a while. to test it: just start typing variables. x = 5 will get you past rule 1. it gets weird around rule 7.", "repo": "https://github.com/jamallyemin/Debugr.fun", "demo": "https://debugr.fun/"}]...
|
[{"post_id": 83203, "ts": "202 [{"post_id": 83203, "ts": "2026-10-27T10:04:13Z", "hours": 5.3206, "text": "it’s finally done ( for now), and I finished basically everything I said I’d add last time ^_^ finished : daily challenge: it’s on the main menu now with a countdown, press D to play it. everyone gets the exact same task each day (I seed math.random from the date while taskEngine builds it, so it comes out identical for every player). it alternates between medium and hard, ranked by time, and only your first clear of the day counts, replays are just practice. there’s a copy result button too profile pictures: 5 animals (bug, cat, fox, owl, snake). you unlock them by clearing tasks, doing a daily, and clearing puzzle levels. other players see yours next to your name in lobbies, the leaderboard and the rankings. the pixel art is ai generated btw (chatgpt), I can’t draw I’m sorry keyboard control: esc goes back on every screen, ? shows all the shortcuts, 1/2/3 pick a difficulty. I also added tiny key badges on every button (esc, enter,ctrl+s..) so you can actually see the shortcuts, and there’s a switch in settings to hide them if you hate them sound effects: all web audio api, no audio files, with volume and an on/off in settings also finished cloud save: you can link a google account and your progress (puzzles, stats, avatar, streak) backs up, and signing in on a new device restores it. and the feedback form works now, it saves to firestore and emails me. for some reason I couldn’t set up the logo and change name on log in page but i’ll just do that in the future updates I guess new stuff: the whole page is zoomed a bit on big screens cuz it felt too small tutorial spotlight is fixed for the zoom (it was drawing in the wrong spot) bugs I found: pressing 1 on the menu was handled twice, so it skipped the difficulty screen and instantly started an easy game, and pressing 2 created a room by itself hosting a room a second time showed the old room code game screen was too short on some screens and on phones the puzzle output got pushed off the bottom also I had to use claude to learn coding the mulberry32, math in theme.js, and for debugging it’s finally feeling like an actual game now!! still not perfect so if you find bugs there’s a feedback button in settings, I read all of them :3"}, {"post_id": 80164, "ts": "2026-10-16T14:16:17Z", "hours": 4.3622, "text": "helo again!! it’s been a while, but I finally came back to this and added a bunch of stuff ^_^ the biggest one is puzzles. it’s a roadmap like chess.com’s, with 3 tracks: syntax (fix the broken code), complete (fill in the blanks) and typefix (fix the type errors). levels never run out, just like taskEngine.js. I wrote a tiny python interpreter (pyeval.js) to check the answers instead of loading pyodide, so there’s nothing heavy to download. there’s also a puzzle streak and a top 3 solvers for today / this week. added: themes: light mode, plus a custom theme maker where you pick your own colors (the old amber and cold signal presets are gone) settings: sfx on/off + volume, CRT scanlines on/off, theme, cloud save with an optional google link, and a feedback form will add: daily challenge: one task a day, same for everyone, ranked by time. it sits on the main menu with a countdown, press D to play it profile pictures: you unlock them by clearing puzzles and winning on different difficulties, and other players can see yours next to your name (the pixel art is still placeholder, I’m drawing the real ones later) keyboard control: esc goes back on every screen, and ? shows all the shortcuts sound effects: all made with the web audio api, no audio files most of these are half done, I just have to finish coding some of the javascript files and make sure everything runs perfectly! it’s still not perfect but it feels way more like an actual game now. if you find bugs or have ideas, there’s a feedback button in settings, I will read all of them!! :3 i forgot to add I changed the game’s name from The Variable Game to Debugr.fun cuz kewler.. and I got domain ^-^"}, {"post_id": 63184, "ts": "2026-09-06T21:05:08Z", "hours": 0.81, "text": "helo!! continuing from last time — taskEngine.js is done, and lobby/live-race is actually talking to firebase properly now too. this is it, the project’s finished!! taskEngine.js works backwards instead of using hardcoded rules like the old 25-rule version did: it builds a random hidden “reference solution” first (variable names, numbers, strings, a list), then derives every rule from a real fact about that solution — its actual sum, its actual length, whether one number happens to be prime, etc. since every rule comes from the same solution, they can never contradict each other no matter how many stack together. difficulty just controls how many rules get pulled from the pool (1 easy / 3 medium / 5 hard), and it keeps a history per difficulty so the same combo won’t repeat until the pool’s exhausted. wiring it all together turned up a bunch of small but annoying bugs, mostly not taskEngine’s fault directly: two separate filename casing mismatches (taskEngine.js and firebaseClient.js) — the script tags in index.html didn’t match the actual filenames on disk exactly, fine on windows locally but the dev server (and github pages) treat urls as case-sensitive, so both files were silently 404ing and breaking everything downstream config.js had the firebase config saved under the wrong variable name, so firebase never actually initialized and threw a reference error instead the join-a-room screen was stacking the code input + join button on top of the waiting room instead of hiding them after a successful join, looked broken even when it technically wasn’t rooms never got cleaned up in firestore after cancelling out of one, so an old room code could still say “already started” if you landed on it again later — fixed leaveRoom so the host actually deletes the room on the way out now singleplayer, hosting/joining rooms, live races, the leaderboard, streaks, and the tutorial all work end to end now. and it’s ready to be shipped!!"}, {"post_id": 61742, "ts": "2026-09-04T20:00:37Z", "hours": 3.1894, "text": "helo again!! so after the menu frontend was done last time, spent this session wiring up js to actually make it functional instead of just sitting there as styled html. added: script.js: screen switching between menu/difficulty/lobby/game, the nickname + tutorial onboarding flow, and the actual game loop (timer, save/sync, destruction mode) parser.js : reads whatever gets typed into the editor and pulls out the variables firebaseClient.js: nicknames, scores, streaks, and the room/live-race logic for multiplayer tutorial.js: the spotlight walkthrough for first-time visitors config.js: firebase config + local player state caching taskEngine.js is still on the list, saved it for last since everything else needed to be working first before it made sense to build. tested what’s done so far end to end and caught a handful of small bugs along the way (some css that wasn’t applying, a couple html typos) which I fixed too. next up: taskEngine.js, then getting the lobby/live-race stuff talking to firebase properly ^_^"}, {"post_id": 58238, "ts": "2026-08-30T16:28:08Z", "hours": 3.4475, "text": "helo again!! so quick update on the main menu I mentioned last time: the frontend for it is completely done now!! :Di finished styling the whole thing, here is what’s ready on the screen right now:main buttons for singleplayer, host/join private rooms, and leaderboard ([1] to [4])top bar with day streak tracker and runtime status boxclean footer for how to play & source links now that the main menu frontend is out of the way and not looking like raw HTML anymore, I’m finally moving on to the backend logic for lobbies and real-time multiplayer!! :>"}, {"post_id": 52335, "ts": "2026-08-22T13:20:15Z", "hours": 2.2828, "text": "helo!! so I kinda decided to start all over and improve this game because I like torturing myself, I wanted to make the game multiplayer, less boring, so I removed the old simple looking single editor page and now replacing it with a main menu screen!! here players will be able to: host and join private lobbies and play with their friends; play by themselves or play online!! :D so with these new features I decided to add a leaderboard too in order to make it more competitive, leaderboard will consist win streak , best times!! and wins !! also added diff levels so easy, medium, hard are a thing now :>"}, {"post_id": 1777, "ts": "2026-06-03T23:41:41Z", "hours": 2.6764, "text": "script.js is done. parser reads whatever you type and pulls out strings, numbers, and lists - inline and multiline. 25 rules with a supersession system so later rules can step on earlier ones without creating impossible states. progressive unlock, 45s countdown, sync button, destruction mode that eats your code line by line from the bottom when the timer runs out."}, {"post_id": 929, "ts": "2026-06-02T17:59:06Z", "hours": 3.0431, "text": "the layout skeleton is officially complete now that style.css is implemented. i went for a dark, high-contrast, brutalist terminal look to match the puzzle theme. here are the key UI updates: custom scrollbar: added a minimal 4px scrollbar to the rules list so it blends perfectly into the sidebar unlock animations: handled the transitions for .rule-item. when a rule becomes visible, it smoothly fades in and slides up into place using transform: translateY(6px) to 0. editor grid algnment: synced the code canvas layout, line numbers, and preview panels so the split-view remains perfectly aligned across different workspace sizes. the interface looks clean now, so next up i’m wiring the actual parser and the rule engine in script.js to make it work. :3"}, {"post_id": 615, "ts": "2026-06-02T03:36:14Z", "hours": 0.4664, "text": "just finished the index.html skeleton. as you can see on the right panel, the embedded preview is currently completely raw and unstyled because style.css is literally a blank file right now. looks like a broken 90s blog. now I’ll move on to style.css so my eyes don’t bleed from this ugly white screen… but I think the structure of .html is fine"}]...
|
Title: Debugr.fun by @jamallyemin | Stardance
Dev Title: Debugr.fun by @jamallyemin | Stardance
Devlogs:
just finished the index.html skeleton. as you can see on the right panel, the embedded preview is currently completely raw and unstyled because style.css is literally a blank file right now. looks like a broken 90s blog. now I’ll move on to style.css so my eyes don’t bleed from this ugly white screen… but I think the structure of .html is fine
the layout skeleton is officially complete now that style.css is implemented. i went for a dark, high-contrast, brutalist terminal look to match the puzzle theme. here are the key UI updates: custom scrollbar: added a minimal 4px scrollbar to the rules list so it blends perfectly into the sidebar unlock animations: handled the transitions for .rule-item. when a rule becomes visible, it smoothly fades in and slides up into place using transform: translateY(6px) to 0. editor grid algnment: synced the code canvas layout, line numbers, and preview panels so the split-view remains perfectly aligned across different workspace sizes. the interface looks clean now, so next up i’m wiring the actual parser and the rule engine in script.js to make it work. :3
script.js is done. parser reads whatever you type and pulls out strings, numbers, and lists - inline and multiline. 25 rules with a supersession system so later rules can step on earlier ones without creating impossible states. progressive unlock, 45s countdown, sync button, destruction mode that eats your code line by line from the bottom when the timer runs out.
helo!! so I kinda decided to start all over and improve this game because I like torturing myself, I wanted to make the game multiplayer, less boring, so I removed the old simple looking single editor page and now replacing it with a main menu screen!! here players will be able to: host and join private lobbies and play with their friends; play by themselves or play online!! :D so with these new features I decided to add a leaderboard too in order to make it more competitive, leaderboard will consist win streak , best times!! and wins !! also added diff levels so easy, medium, hard are a thing now :>
helo again!! so quick update on the main menu I mentioned last time: the frontend for it is completely done now!! :Di finished styling the whole thing, here is what’s ready on the screen right now:main buttons for singleplayer, host/join private rooms, and leaderboard ([1] to [4])top bar with day streak tracker and runtime status boxclean footer for how to play & source links now that the main menu frontend is out of the way and not looking like raw HTML anymore, I’m finally moving on to the backend logic for lobbies and real-time multiplayer!! :>
helo again!! so after the menu frontend was done last time, spent this session wiring up js to actually make it functional instead of just sitting there as styled html. added: script.js: screen switching between menu/difficulty/lobby/game, the nickname + tutorial onboarding flow, and the actual game loop (timer, save/sync, destruction mode) parser.js : reads whatever gets typed into the editor and pulls out the variables firebaseClient.js: nicknames, scores, streaks, and the room/live-race logic for multiplayer tutorial.js: the spotlight walkthrough for first-time visitors config.js: firebase config + local player state caching taskEngine.js is still on the list, saved it for last since everything else needed to be working first before it made sense to build. tested what’s done so far end to end and caught a handful of small bugs along the way (some css that wasn’t applying, a couple html typos) which I fixed too. next up: taskEngine.js, then getting the lobby/live-race stuff talking to firebase properly ^_^
helo!! continuing from last time — taskEngine.js is done, and lobby/live-race is actually talking to firebase properly now too. this is it, the project’s finished!! taskEngine.js works backwards instead of using hardcoded rules like the old 25-rule version did: it builds a random hidden “reference solution” first (variable names, numbers, strings, a list), then derives every rule from a real fact about that solution — its actual sum, its actual length, whether one number happens to be prime, etc. since every rule comes from the same solution, they can never contradict each other no matter how many stack together. difficulty just controls how many rules get pulled from the pool (1 easy / 3 medium / 5 hard), and it keeps a history per difficulty so the same combo won’t repeat until the pool’s exhausted. wiring it all together turned up a bunch of small but annoying bugs, mostly not taskEngine’s fault directly: two separate filename casing mismatches (taskEngine.js and firebaseClient.js) — the script tags in index.html didn’t match the actual filenames on disk exactly, fine on windows locally but the dev server (and github pages) treat urls as case-sensitive, so both files were silently 404ing and breaking everything downstream config.js had the firebase config saved under the wrong variable name, so firebase never actually initialized and threw a reference error instead the join-a-room screen was stacking the code input + join button on top of the waiting room instead of hiding them after a successful join, looked broken even when it technically wasn’t rooms never got cleaned up in firestore after cancelling out of one, so an old room code could still say “already started” if you landed on it again later — fixed leaveRoom so the host actually deletes the room on the way out now singleplayer, hosting/joining rooms, live races, the leaderboard, streaks, and the tutorial all work end to end now. and it’s ready to be shipped!!
helo again!! it’s been a while, but I finally came back to this and added a bunch of stuff ^_^ the biggest one is puzzles. it’s a roadmap like chess.com’s, with 3 tracks: syntax (fix the broken code), complete (fill in the blanks) and typefix (fix the type errors). levels never run out, just like taskEngine.js. I wrote a tiny python interpreter (pyeval.js) to check the answers instead of loading pyodide, so there’s nothing heavy to download. there’s also a puzzle streak and a top 3 solvers for today / this week. added: themes: light mode, plus a custom theme maker where you pick your own colors (the old amber and cold signal presets are gone) settings: sfx on/off + volume, CRT scanlines on/off, theme, cloud save with an optional google link, and a feedback form will add: daily challenge: one task a day, same for everyone, ranked by time. it sits on the main menu with a countdown, press D to play it profile pictures: you unlock them by clearing puzzles and winning on different difficulties, and other players can see yours next to your name (the pixel art is still placeholder, I’m drawing the real ones later) keyboard control: esc goes back on every screen, and ? shows all the shortcuts sound effects: all made with the web audio api, no audio files most of these are half done, I just have to finish coding some of the javascript files and make sure everything runs perfectly! it’s still not perfect but it feels way more like an actual game now. if you find bugs or have ideas, there’s a feedback button in settings, I will read all of them!! :3 i forgot to add I changed the game’s name from The Variable Game to Debugr.fun cuz kewler.. and I got domain ^-^
it’s finally done ( for now), and I finished basically everything I said I’d add last time ^_^ finished : daily challenge: it’s on the main menu now with a countdown, press D to play it. everyone gets the exact same task each day (I seed math.random from the date while taskEngine builds it, so it comes out identical for every player). it alternates between medium and hard, ranked by time, and only your first clear of the day counts, replays are just practice. there’s a copy result button too profile pictures: 5 animals (bug, cat, fox, owl, snake). you unlock them by clearing tasks, doing a daily, and clearing puzzle levels. other players see yours next to your name in lobbies, the leaderboard and the rankings. the pixel art is ai generated btw (chatgpt), I can’t draw I’m sorry keyboard control: esc goes back on every screen, ? shows all the shortcuts, 1/2/3 pick a difficulty. I also added tiny key badges on every button (esc, enter,ctrl+s..) so you can actually see the shortcuts, and there’s a switch in settings to hide them if you hate them sound effects: all web audio api, no audio files, with volume and an on/off in settings also finished cloud save: you can link a google account and your progress (puzzles, stats, avatar, streak) backs up, and signing in on a new device restores it. and the feedback form works now, it saves to firestore and emails me. for some reason I couldn’t set up the logo and change name on log in page but i’ll just do that in the future updates I guess new stuff: the whole page is zoomed a bit on big screens cuz it felt too small tutorial spotlight is fixed for the zoom (it was drawing in the wrong spot) bugs I found: pressing 1 on the menu was handled twice, so it skipped the difficulty screen and instantly started an easy game, and pressing 2 created a room by itself hosting a room a second time showed the old room code game screen was too short on some screens and on phones the puzzle output got pushed off the bottom also I had to use claude to learn coding the mulberry32, math in theme.js, and for debugging it’s finally feeling like an actual game now!! still not perfect so if you find bugs there’s a feedback button in settings, I read all of them :3
Ships:
made a browser puzzle where you write Python-like variable assignments to satisfy 25 rules simultaneously - think neal.fun’s password game but for code. rules unlock one by one and start contradicting each other the deeper you go. most proud of the destruction mode. when the 45s timer hits zero the editor gets a red caret and starts deleting your code line by line from the bottom until you hit sync. it creates this genuine panic that felt fun to build. hardest part was making all 25 rules mathematically solvable at the same time. some rules override earlier ones so you keep rewriting the same lines - getting that supersession logic right without breaking the win condition took a while. to test it: just start typing variables. x = 5 will get you past rule 1. it gets weird around rule 7.
helo!! shipping this one — it’s the variable game, ranked edition. you write python-like code to satisfy a growing set of rules before a timer starts deleting it from the bottom, one line a second, unless you sync in time. play solo, or host/join a private room and race friends live for the leaderboard. the biggest thing I’m proud of is taskEngine.js — instead of hand-writing 25 fixed rules like the old version, it builds a hidden random solution first and derives every rule from a real fact about it (its actual sum, its actual length, etc), so no matter how many rules stack together they can never contradict each other. infinite non-repeating tasks out of that one trick. hardest part honestly wasn’t the game logic, it was wiring firebase up for real — nicknames, live rooms, race winners decided by firestore transactions so two people submitting at the same millisecond still only lets one through. spent lots of time chasing dumb stuff too. to test it: pick a difficulty and start typing variable assignments, or open two tabs and try hosting + joining a room to see the live race work. note : this project is obviously not perfect but I will try to improve this project and make it an actual kind of web browser game, so feedbacks , bug reports, and suggestions would be really helpful and appreciated...
|
1793105311.4815369
|
1793191711.4815369
|
|
70566
|
Simple Simulator by @IamDarsh | Stardance
|
IamDarsh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Simple Simulator by @IamDarsh | Stardance
|
1793105312.693943
|
1793710112.693943
|
|
70567
|
Quiz by @syedakhter | Stardance
|
syedakhter
|
2
|
3.0
|
1
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T14:48:00Z", "hours": 2.0, "multiplier": 1.0, "payout": 0, "blessing": "neutral", "text": "i ADDED MORE QUESTIONS", "repo": "https://github.com/8051987-eng/quiz", "demo": "https://8051987-eng.github.io/quiz/"}, {"ship_num": 2, "ts": "2026-10-21T01:53:20Z", "hours": 1.0, "multiplier": 1.0, "payout": 1, "blessing": "neutral", "text": "This project is a quiz", "repo": "https://github.com/8051987-eng/quiz", "demo": "https://8051987-eng.github.io/quiz/"}]...
|
[{"post_id": 82129, "ts": "202 [{"post_id": 82129, "ts": "2026-10-24T01:21:18Z", "hours": 2.045, "text": "Quiz"}, {"post_id": 81144, "ts": "2026-10-20T02:16:31Z", "hours": 1.0067, "text": "A quiz only spent 1hr on this because im busy"}]...
|
Title: Quiz by @syedakhter | Stardance
Devlogs:
A Title: Quiz by @syedakhter | Stardance
Devlogs:
A quiz only spent 1hr on this because im busy
Quiz
Ships:
This project is a quiz
i ADDED MORE QUESTIONS...
|
1793105313.5576465
|
1793191713.5576465
|
|
17474
|
flex-ai by @utilisateur_richard | Stardance
|
utilisateur_richard
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T15:27:00Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made an LLM agregator that is supposed to have a smart selection (but because i don’t have the models, i cannot train anything on them) due to the cost of the API, I don’t have enough fundings to continue it I think it was a good training in for the frontend and even if i can’t continue it, i zm proud of what I have done ! some text might be in french, some api might work (I have found some free API) and the plan aren’t real (if you try to create an account with a paid plan, an error will appear)", "repo": "https://github.com/utilisateursrichard/flex.ai", "demo": "https://flex-ai.duckdns.org/"}]...
|
[{"post_id": 26612, "ts": "202 [{"post_id": 26612, "ts": "2026-07-11T15:19:49Z", "hours": 4.7381, "text": "Today is the day when the flex.ai project is discontinuated because of the API pricing that are too high and the fact that without any user-base, the project can’t continue feel free to use the code if you want"}, {"post_id": 7732, "ts": "2026-06-12T22:04:19Z", "hours": 0.925, "text": "Log: flex.ai is officially deployed to the internet! Ran into a classic cloud networking headache during the setup. Every time I launched the Caddy Docker container, the logs showed a connection timeout while trying to provision the SSL certificate. At first, I was convinced my subnet security rules were the issue. But after digging through OCI’s notoriously confusing interface, I finally found the real culprit: a hidden option to “Connect public subnet to internet.” It turns out the subnet wasn’t properly routed to the internet gateway. Once that was enabled, everything clicked instantly. Let’s Encrypt passed, Caddy secured the domain, and the API is now fully live over HTTPS."}, {"post_id": 7637, "ts": "2026-06-12T19:15:45Z", "hours": 0.6914, "text": "beginning of the project ! for now i just created the auth functionality (I tried my best to make it as secure as possible) for now, I didn’t started the LLM part but I will soon ! (for now it is in french but I will make all the translation when I will publish the project on my servers)"}]...
|
Title: flex-ai by @utilisateur_richard | Stardance Title: flex-ai by @utilisateur_richard | Stardance
Devlogs:
beginning of the project ! for now i just created the auth functionality (I tried my best to make it as secure as possible) for now, I didn’t started the LLM part but I will soon ! (for now it is in french but I will make all the translation when I will publish the project on my servers)
Log: flex.ai is officially deployed to the internet! Ran into a classic cloud networking headache during the setup. Every time I launched the Caddy Docker container, the logs showed a connection timeout while trying to provision the SSL certificate. At first, I was convinced my subnet security rules were the issue. But after digging through OCI’s notoriously confusing interface, I finally found the real culprit: a hidden option to “Connect public subnet to internet.” It turns out the subnet wasn’t properly routed to the internet gateway. Once that was enabled, everything clicked instantly. Let’s Encrypt passed, Caddy secured the domain, and the API is now fully live over HTTPS.
Today is the day when the flex.ai project is discontinuated because of the API pricing that are too high and the fact that without any user-base, the project can’t continue feel free to use the code if you want
Ships:
I have made an LLM agregator that is supposed to have a smart selection (but because i don’t have the models, i cannot train anything on them) due to the cost of the API, I don’t have enough fundings to continue it I think it was a good training in for the frontend and even if i can’t continue it, i zm proud of what I have done ! some text might be in french, some api might work (I have found some free API) and the plan aren’t real (if you try to create an account with a paid plan, an error will appear)...
|
1793105314.439243
|
1793191714.439243
|