|
42137
|
www.seti.com by @seti | Stardance
|
seti
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T22:09:10Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my personal website, and my second time building a website from scratch! I had so much fun making it. -the html+css is by me, but the javascript for the music player is from a tutorial. This was my first time using javascript. -the site originally had a message box, which I spent a lot of time trying to create but eventually scratched since I don’t know php. But once I learn it, this will definitely be a future update Overall, I learned soo much from this project. It was my first project in visual studio code and before starting it, I had no idea how to use vsc, connect github + vsc, publish to github, and so on … I wonder if it’ll be possible to learn this much in a future project? :)", "repo": "https://github.com/voyage-sans-retour/seti.com", "demo": "https://voyage-sans-retour.github.io/seti.com/"}]...
|
[{"post_id": 47732, "ts": "202 [{"post_id": 47732, "ts": "2026-08-15T20:56:14Z", "hours": 0.6042, "text": "Devlog #5: Made a ReadMe. Also moved the music player upward to make the play button accessible after discovering chrome blocks autoplay."}, {"post_id": 47011, "ts": "2026-08-14T16:19:39Z", "hours": 2.6389, "text": "Devlog #4: Almost done… spent hours trying to figure out how to make the message box work, just to delete it in the end. I need to learn more before I try it :’)"}, {"post_id": 42758, "ts": "2026-08-07T17:13:08Z", "hours": 3.1431, "text": "Devlog #3: Added a music player to my website by following a javascript tutorial. it was my first time using javascript for a project, so it took a while to figure out and debug. i also learned how to add assets in visual studio code which i’d never tried before"}, {"post_id": 41099, "ts": "2026-08-05T02:42:19Z", "hours": 2.0147, "text": "Devlog #2 Completely changed the layout i was going for after seeing an inspiring website today. im also playing around with :hover and dropdowns to make my site somewhat interactive without javascript ^^"}, {"post_id": 40326, "ts": "2026-08-03T19:25:04Z", "hours": 1.2108, "text": "Todays work: figured out how to open github repository in vsc (╺﹏╺) , laid the backbones of my site!"}]...
|
Title: www.seti.com by @seti | Stardance
Devlogs: Title: www.seti.com by @seti | Stardance
Devlogs:
Todays work: figured out how to open github repository in vsc (╺﹏╺) , laid the backbones of my site!
Devlog #2 Completely changed the layout i was going for after seeing an inspiring website today. im also playing around with :hover and dropdowns to make my site somewhat interactive without javascript ^^
Devlog #3: Added a music player to my website by following a javascript tutorial. it was my first time using javascript for a project, so it took a while to figure out and debug. i also learned how to add assets in visual studio code which i’d never tried before
Devlog #4: Almost done… spent hours trying to figure out how to make the message box work, just to delete it in the end. I need to learn more before I try it :’)
Devlog #5: Made a ReadMe. Also moved the music player upward to make the play button accessible after discovering chrome blocks autoplay.
Ships:
This is my personal website, and my second time building a website from scratch! I had so much fun making it. -the html+css is by me, but the javascript for the music player is from a tutorial. This was my first time using javascript. -the site originally had a message box, which I spent a lot of time trying to create but eventually scratched since I don’t know php. But once I learn it, this will definitely be a future update Overall, I learned soo much from this project. It was my first project in visual studio code and before starting it, I had no idea how to use vsc, connect github + vsc, publish to github, and so on … I wonder if it’ll be possible to learn this much in a future project? :)...
|
1793573771.2454038
|
1793660171.2454038
|
|
42127
|
VERTEX website by @vertex | Stardance
|
vertex
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T21:19:13Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my website! It took a long time and I’m proud that I learned so much in a short period of time as I have never worked with HTML and CSS before. I really wanted a unique website that wasn’t built off of a basic template and so I decided to build something that both looked nice and unique but was still easy to navigate. I’m really happy with how it turned out!", "repo": "https://github.com/vert-exium/vert-exium.github.io", "demo": "https://vert-exium.github.io"}]...
|
[{"post_id": 49205, "ts": "202 [{"post_id": 49205, "ts": "2026-08-17T21:14:49Z", "hours": 3.6989, "text": "Worked on the website! I laid everything out and styled it, I also added a music player for a few songs I made myself."}]...
|
Title: VERTEX website by @vertex | Stardance
Devl Title: VERTEX website by @vertex | Stardance
Devlogs:
Worked on the website! I laid everything out and styled it, I also added a music player for a few songs I made myself.
Ships:
This is my website! It took a long time and I’m proud that I learned so much in a short period of time as I have never worked with HTML and CSS before. I really wanted a unique website that wasn’t built off of a basic template and so I decided to build something that both looked nice and unique but was still easy to navigate. I’m really happy with how it turned out!...
|
1793573769.173295
|
1793660169.173295
|
|
29760
|
Hubble graze by @sanjaybinayak778 | Stardance
|
sanjaybinayak778
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T13:24:21Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "In this website you can browse Daily Images uploaded by NASA and explore the universe. I used html, CSS and JavaScript to show data and api.nasa.gov to fetch data in this project. I also created custom CSS animation to make it look interactive. the only tough part was to add custom animation because I don’t have any expertise in that, but google backed me up and I applied what I learned from google in this project. And I am very proud of this fact. You can go visit and browse image uploaded by NASA of any date you wish.", "repo": "https://github.com/SanjayBinayak/Hubble-Graze", "demo": "https://sanjaybinayak.github.io/Hubble-Graze/"}]...
|
[{"post_id": 21462, "ts": "202 [{"post_id": 21462, "ts": "2026-07-03T12:48:54Z", "hours": 0.3378, "text": "I also added a background animation to my website."}, {"post_id": 21436, "ts": "2026-07-03T11:59:18Z", "hours": 1.6986, "text": "I created animation and added new features to my website. well today went smoothly apart from deciding which animation to apply."}, {"post_id": 20960, "ts": "2026-07-02T18:10:11Z", "hours": 1.4822, "text": "I finished Guide work of my project. Next I am gonna add some custom UI and some animations to this website. I will also add some new APIs and feature using NASA’a API’s. try it now https://github.com/SanjayBinayak/Hubble-Graze"}]...
|
Title: Hubble graze by @sanjaybinayak778 | Stardan Title: Hubble graze by @sanjaybinayak778 | Stardance
Devlogs:
I finished Guide work of my project. Next I am gonna add some custom UI and some animations to this website. I will also add some new APIs and feature using NASA’a API’s. try it now https://github.com/SanjayBinayak/Hubble-Graze
I created animation and added new features to my website. well today went smoothly apart from deciding which animation to apply.
I also added a background animation to my website.
Ships:
In this website you can browse Daily Images uploaded by NASA and explore the universe. I used html, CSS and JavaScript to show data and api.nasa.gov to fetch data in this project. I also created custom CSS animation to make it look interactive. the only tough part was to add custom animation because I don’t have any expertise in that, but google backed me up and I applied what I learned from google in this project. And I am very proud of this fact. You can go visit and browse image uploaded by NASA of any date you wish....
|
1793573766.1446502
|
1793660166.1446502
|
|
14177
|
yahtzee web game by @Camc | Stardance
|
Camc
|
1
|
3.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T15:54:52Z", "hours": 3.0, "multiplier": 1.27, "payout": 4, "blessing": "neutral", "text": "I was trying to make a yahtzee game as i have been playing yahtzee. I was really struggling with the scoring system.", "repo": "https://github.com/clownoftheweekcode/yahtzee-game", "demo": "https://clownoftheweekcode.github.io/yahtzee-game/"}]...
|
[{"post_id": 15712, "ts": "202 [{"post_id": 15712, "ts": "2026-06-25T15:50:24Z", "hours": 1.5161, "text": "tried to finish this… Hopefully i can work on it without ai in the future."}, {"post_id": 12698, "ts": "2026-06-20T18:53:44Z", "hours": 0.6386, "text": "added the ability to hold rolled dice and gave a limit to how many rolls you can roll"}, {"post_id": 9449, "ts": "2026-06-15T20:18:21Z", "hours": 0.6294, "text": "created the elements and styled them a bit"}]...
|
Title: yahtzee web game by @Camc | Stardance
Devl Title: yahtzee web game by @Camc | Stardance
Devlogs:
created the elements and styled them a bit
added the ability to hold rolled dice and gave a limit to how many rolls you can roll
tried to finish this… Hopefully i can work on it without ai in the future.
Ships:
I was trying to make a yahtzee game as i have been playing yahtzee. I was really struggling with the scoring system....
|
1793573764.4335873
|
1793660164.4335873
|
|
7025
|
fun game yay by @lazerkat | Stardance
|
lazerkat
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T04:25:49Z", "hours": 2.0, "multiplier": 1.11, "payout": 3, "blessing": "neutral", "text": "This is a really dumb game.. why did i make this?", "repo": "https://github.com/betelguesestudios/fun-game-yay", "demo": "https://betelguesestudios.github.io/fun-game-yay/"}]...
|
[{"post_id": 4593, "ts": "2026 [{"post_id": 4593, "ts": "2026-06-07T22:59:00Z", "hours": 0.7008, "text": "more logic ig"}, {"post_id": 2567, "ts": "2026-06-05T04:14:29Z", "hours": 0.9606, "text": "now when you click on the text a bit, it shows this"}, {"post_id": 2464, "ts": "2026-06-04T23:39:51Z", "hours": 0.4158, "text": "i made it hit the floor and bounce yaya"}, {"post_id": 1936, "ts": "2026-06-04T05:40:43Z", "hours": 0.3011, "text": "added a falling effect when you click the text! now to make it hit the bottom."}]...
|
Title: fun game yay by @lazerkat | Stardance
Devl Title: fun game yay by @lazerkat | Stardance
Devlogs:
added a falling effect when you click the text! now to make it hit the bottom.
i made it hit the floor and bounce yaya
now when you click on the text a bit, it shows this
more logic ig
Ships:
This is a really dumb game.. why did i make this?...
|
1793573762.5924778
|
1793660162.5924778
|
|
369
|
Macro | Self hosting for beginners! by @sudo | Sta Macro | Self hosting for beginners! by @sudo | Stardance...
|
sudo
|
1
|
74.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T21:15:58Z", "hours": 74.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I got to admit, I did get kind of lazy in the end when I used AI to finish it, but I thought it was a cool project.", "repo": "https://github.com/blueprintnerd/Macro", "demo": "https://github.com/blueprintnerd/Macro/releases"}]...
|
[{"post_id": 19504, "ts": "202 [{"post_id": 19504, "ts": "2026-06-30T20:36:00Z", "hours": 0.4108, "text": "finished. shipping"}, {"post_id": 19272, "ts": "2026-06-30T15:18:17Z", "hours": 14.9336, "text": "Finally almost finished. It’s june 30th, and new month new project so I’m going to put this project on hold and work on my other one. I designed a new logo for Macro, but I need to refine it (Currently kind of chopped)"}, {"post_id": 14790, "ts": "2026-06-24T01:01:33Z", "hours": 8.1036, "text": "I finished with the setup for my app. it took forever, but here’s what i did: First, you enter an IP address (to manage another comptuer). I’ve made the app automatically scan all of the computer’s ports to find the ports that Macro are on. For the setup, I’ve basically implemented changed the entire thing. it installs prerequisites, and then after that, you add your filepaths, choose a search backend, and then it automatically create a background process"}, {"post_id": 13387, "ts": "2026-06-21T22:41:40Z", "hours": 10.4611, "text": "I deleted everything and started over. I used Gemini CLI once and then it’s like the first time you use AI it starts snowballing. I got rid of everything and I started by focusing on the setup. I proudly spent 5 hours working on a welcome screen. I used a textual UI, which was somewhat easy y implement. The hard part was implementing the connections to the server. I created a somewhat user friendly UI and I unified everything into one platform. The manager is now used to manage macro servers and create one, and all of the clients are now web hosted"}, {"post_id": 11003, "ts": "2026-06-18T00:57:40Z", "hours": 10.2319, "text": "Today I implemented a new website and Ive restructured the entire thing to be half web based so you don’t have to only have another laptop to use it. I was going to test it but I’ll have to make time for it. as it turns out there is a huge difference between the iPad Pro and base iPad, so my browser froze as soon as I tried opening live preview. I’ll do all this again tomorrow lol ✌️"}, {"post_id": 7121, "ts": "2026-06-11T22:02:41Z", "hours": 5.0997, "text": "I learned I was nowhere near done at all. I basically need to switch the UI library to be compatible with the system I’m using, and I still have to write the clients for the server. I only have one app that’s halfway done, and that’s the music client. I still have a lot to do, along with that, Google is going to discontinue firebase spark for no reason except that anytime they realize that users like an app, they either discontinue it or make it worse with ads"}, {"post_id": 6525, "ts": "2026-06-10T23:35:44Z", "hours": 5.0561, "text": "Ididntget much done because my laptop was broken and I didn’t have a way to test my apps in firebase studio but i a tried to add an authentication system that uses the client API to automatically authenticate users"}, {"post_id": 6125, "ts": "2026-06-10T09:30:54Z", "hours": 2.2461, "text": "So I kind of broke my only laptop but it’s all chill because I have an iPad."}, {"post_id": 5628, "ts": "2026-06-09T14:36:19Z", "hours": 4.1578, "text": "I started working on the music client (there are 4) and I decided to go with a unconventional architecture for this one this time. Instead of having the now playing screen link with the app like a normal person, I have a API to handle it. I have multiple endpoints to play/pause/otherwise control music and the API can provide the song progress and name. As you can see, the UI is quite ugly. I’ll have to start theming the screens today"}, {"post_id": 4227, "ts": "2026-06-07T13:53:12Z", "hours": 5.3772, "text": "I created a basic client to test out the API with, I don’t mean for it to ship with this client. I’m just doing it. I’ve decided on a file numbering system, where each file gets its own number. if a file is deleted, it’s number is kept and marked as deleted until a file with the same metadata returns. I got some errors when I was going to screenshot my code, but since I don’t work on sundays, I can’t fix it until monday. I got rid of the splash screen because I realized people don’t want to see it."}, {"post_id": 2672, "ts": "2026-06-05T10:51:00Z", "hours": 6.9425, "text": "I’m creating a free plex alternative. I’ve always wanted to get into self hosting and stuff, and now that stardance is starting, now is my chance to create my app and ditch streaming like I’ve wanted to do. I’m thinking like one app can be photos, another for videos, one for music, and one for storage. it sounds like a good idea in theory but it might be hard to implement. Anyway, with flavortown I had good project ideas but the implementation and design weren’t all there, so this time around I’m going to focus only on that. This will likely be my only project this time around so I’m going to make it my best one. I haven’t got much done, because I’ve been studying topics and stuff but here I have the setup screen. I’m taking inspiration from Google’s material design 3 for the aesthetic."}, {"post_id": 332, "ts": "2026-06-01T17:05:33Z", "hours": 1.0647, "text": "I designed a splash screen for my app’s server counterpart"}]...
|
Title: Macro | Self hosting for beginners! by @sud Title: Macro | Self hosting for beginners! by @sudo | Stardance
Devlogs:
I designed a splash screen for my app’s server counterpart
I’m creating a free plex alternative. I’ve always wanted to get into self hosting and stuff, and now that stardance is starting, now is my chance to create my app and ditch streaming like I’ve wanted to do. I’m thinking like one app can be photos, another for videos, one for music, and one for storage. it sounds like a good idea in theory but it might be hard to implement. Anyway, with flavortown I had good project ideas but the implementation and design weren’t all there, so this time around I’m going to focus only on that. This will likely be my only project this time around so I’m going to make it my best one. I haven’t got much done, because I’ve been studying topics and stuff but here I have the setup screen. I’m taking inspiration from Google’s material design 3 for the aesthetic.
I created a basic client to test out the API with, I don’t mean for it to ship with this client. I’m just doing it. I’ve decided on a file numbering system, where each file gets its own number. if a file is deleted, it’s number is kept and marked as deleted until a file with the same metadata returns. I got some errors when I was going to screenshot my code, but since I don’t work on sundays, I can’t fix it until monday. I got rid of the splash screen because I realized people don’t want to see it.
I started working on the music client (there are 4) and I decided to go with a unconventional architecture for this one this time. Instead of having the now playing screen link with the app like a normal person, I have a API to handle it. I have multiple endpoints to play/pause/otherwise control music and the API can provide the song progress and name. As you can see, the UI is quite ugly. I’ll have to start theming the screens today
So I kind of broke my only laptop but it’s all chill because I have an iPad.
Ididntget much done because my laptop was broken and I didn’t have a way to test my apps in firebase studio but i a tried to add an authentication system that uses the client API to automatically authenticate users
I learned I was nowhere near done at all. I basically need to switch the UI library to be compatible with the system I’m using, and I still have to write the clients for the server. I only have one app that’s halfway done, and that’s the music client. I still have a lot to do, along with that, Google is going to discontinue firebase spark for no reason except that anytime they realize that users like an app, they either discontinue it or make it worse with ads
Today I implemented a new website and Ive restructured the entire thing to be half web based so you don’t have to only have another laptop to use it. I was going to test it but I’ll have to make time for it. as it turns out there is a huge difference between the iPad Pro and base iPad, so my browser froze as soon as I tried opening live preview. I’ll do all this again tomorrow lol ✌️
I deleted everything and started over. I used Gemini CLI once and then it’s like the first time you use AI it starts snowballing. I got rid of everything and I started by focusing on the setup. I proudly spent 5 hours working on a welcome screen. I used a textual UI, which was somewhat easy y implement. The hard part was implementing the connections to the server. I created a somewhat user friendly UI and I unified everything into one platform. The manager is now used to manage macro servers and create one, and all of the clients are now web hosted
I finished with the setup for my app. it took forever, but here’s what i did: First, you enter an IP address (to manage another comptuer). I’ve made the app automatically scan all of the computer’s ports to find the ports that Macro are on. For the setup, I’ve basically implemented changed the entire thing. it installs prerequisites, and then after that, you add your filepaths, choose a search backend, and then it automatically create a background process
Finally almost finished. It’s june 30th, and new month new project so I’m going to put this project on hold and work on my other one. I designed a new logo for Macro, but I need to refine it (Currently kind of chopped)
finished. shipping
Ships:
I got to admit, I did get kind of lazy in the end when I used AI to finish it, but I thought it was a cool project....
|
1793573759.6412036
|
1793660159.6412036
|
|
32634
|
BrickOS by @shashank_sd | Stardance
|
shashank_sd
|
2
|
15.98
|
19
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T14:09:27Z", "hours": 6.0, "multiplier": 3.44, "payout": 19, "blessing": "neutral", "text": "Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. Calendar There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor. ========================================= Desktop Apps - New snake game which is fully playable with a green square that grows (snake) and a red square (apple). There is score tracking, including a saved high score, and a game-over and a way to restart by clicking the board and pressing any key. ======================================= Windows - There is a new resizable window where if you drag on the bottom right corner, you can make the window bigger until the screen size it met but does not overlap with the taskbar. It has the size limits so that it doesn’t spill off of the screen. Windows can also not be clicked to be shown on top of the other window. By clicking a window of an app that is under another app window, the window clicked will show up on top. ======================================== Images App - I added an image uploading feature to the Images app where you can add images from your computer by uploading it or you can take a picture with your camera and upload it there and get saved in the app. Along with this, there is also a feature to delete the images if you don’t want it there, asking you for confirmation to delete the picture in case it was by accident. ======================================== Window Minimization - Apps can now be minimized instead of fully closed where if you minimize the app, it will stay in the taskbar but dim out to show that the app is open but not visibly on the screen and can be reopened by clicking the app again or clicking the app on the taskbar.", "repo": "https://github.com/WieghtedTuna473/OS-Project", "demo": "https://wieghtedtuna473.github.io/OS-Project/"}, {"ship_num": 2, "ts": "2026-07-15T16:14:24Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. Calendar (My Extra Feature) There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor.", "repo": "https://github.com/WieghtedTuna473/OS-Project", "demo": "https://wieghtedtuna473.github.io/OS-Project/"}]...
|
[{"post_id": 63690, "ts": "202 [{"post_id": 63690, "ts": "2026-09-07T16:59:52Z", "hours": 1.2847, "text": "Terminal App - This app lets you see what each app is about including the calendar app. You can also see you notes and what are in them through this app. Typing help gives the list of commands that you could use as well! Setting App Update - The settings app not has multiple different features including changing your color scheme. You can also change the clock from 23 hours to the 12 hours version and also switch on and off sound for the future music app. Finally, you can also reset all your settings if you want a fresh start."}, {"post_id": 44278, "ts": "2026-08-09T22:31:47Z", "hours": 1.6944, "text": "I added 2 new apps: The settings app - This app allows you change your background by choosing one of the default backgrounds already available or you can also just upload your own image and use that as a background. I will add more things as part of the settings, but i made the base of the app today. Calculator App- This app follows the theme and does actually work. You can put in math problems and it will solve it. Obviously it’s not a graphing calculator and is just a basic calculator. Both these apps can be resized and will be shown in the taskbar. Right now, these apps have a placeholder icon and that will change after I create my other apps that I am planning. These apps include the Terminal app, music app, and lego fun facts app, and maybe more!"}, {"post_id": 40090, "ts": "2026-08-03T14:04:31Z", "hours": 5.6325, "text": "Desktop Apps - New snake game which is fully playable with a green square that grows (snake) and a red square (apple). There is score tracking, including a saved high score, and a game-over and a way to restart by clicking the board and pressing any key. ======================================= Windows - There is a new resizable window where if you drag on the bottom right corner, you can make the window bigger until the screen size it met but does not overlap with the taskbar. It has the size limits so that it doesn’t spill off of the screen. Windows can also not be clicked to be shown on top of the other window. By clicking a window of an app that is under another app window, the window clicked will show up on top. ======================================== Images App - I added an image uploading feature to the Images app where you can add images from your computer by uploading it or you can take a picture with your camera and upload it there and get saved in the app. Along with this, there is also a feature to delete the images if you don’t want it there, asking you for confirmation to delete the picture in case it was by accident. ======================================== Window Minimization - Apps can now be minimized instead of fully closed where if you minimize the app, it will stay in the taskbar but dim out to show that the app is open but not visibly on the screen and can be reopened by clicking the app again or clicking the app on the taskbar."}, {"post_id": 28963, "ts": "2026-07-15T16:09:30Z", "hours": 3.3767, "text": "Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. ======================================== Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. ======================================== Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. ======================================== Calendar There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. ======================================== Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor."}, {"post_id": 27409, "ts": "2026-07-12T23:27:09Z", "hours": 0.61, "text": "I added a new OS.css where now all the CSS styling is moved to to this file instead of being cramped in the HTML page. Along with this there was a problem where when I wanted to close out of a window, where I could close the window anywhere in between the top in between and and X of the window which interfered with the dragging of the window, since if I dragged on that side it would drag and as soon as I let go, it would close out of that window. I was trying to change th4e JavaScript to see if it was the problem, but I saw that in the CSS, there was an element to make the X flex: 1, so as soon as I took that out, it started working. Overall, I fixed a crucial error in the OS making it work properly and better and made the code more readable by adding a CSS page."}, {"post_id": 26848, "ts": "2026-07-11T21:27:19Z", "hours": 1.06, "text": "I made BrickOS start to feel more like an operating system by adding a new features such as window dragging. I made the welcome screen more like a window by changing the colors a little to make it look better by adding a title bar, a close button, a border, and a shadow as well. I also added draggable windows where the welcome window can be clicked and dragged around by the title bar using mouse functions to track where the mouse is going and also update the windows position. Clicking the X button hides the window and clicking the BrickOS on the bottom taskbar brings it back. I also added a new OSscript.js to make the JavaScript loof better instead of making it all be in the HTML. Overall, now it is starting to function more like a OS with windows that can move and can be gotten out of, with now the goal in mind being adding applications that can be clicked."}, {"post_id": 26598, "ts": "2026-07-11T14:56:48Z", "hours": 1.0622, "text": "I continued to develop the welcome home screen for my BrickOS by making it look more like an interface of an operating system instead of just making it look like a webpage. I added a simple taskbar to the bottom of my screen with the OS name and a date and time that works. I also improved the layout by centering the welcome window which is a basic information screen about the OS. I also added a background image from the LEGO movie that fits my OS. I wrote my first JavaScript function for the project, helping me create a live clock using Date() and setInterval(). I overall improved the desktop to look more like a desktop instead of just a webpage and learned to have more dynamic elements such as the time."}, {"post_id": 26190, "ts": "2026-07-10T20:58:05Z", "hours": 0.3922, "text": "I built the welcome screen for my operating system, BrickOS, which is inspired by my passion for LEGO’s. I created a basic HTML structure for the homepage and added heading, paragraphs, images, and a link to the official LEGO website. I also added a list of my favorite type of LEGO’s to build to make the ppage more personalized towards me. Then I learned to style the elements with inline CSS. I just started by trying to match the LEGO themes by adding a font and a background color along with a red “Welcome to BrickOS.”"}]...
|
Title: BrickOS by @shashank_sd | Stardance
Devlog Title: BrickOS by @shashank_sd | Stardance
Devlogs:
I built the welcome screen for my operating system, BrickOS, which is inspired by my passion for LEGO’s. I created a basic HTML structure for the homepage and added heading, paragraphs, images, and a link to the official LEGO website. I also added a list of my favorite type of LEGO’s to build to make the ppage more personalized towards me. Then I learned to style the elements with inline CSS. I just started by trying to match the LEGO themes by adding a font and a background color along with a red “Welcome to BrickOS.”
I continued to develop the welcome home screen for my BrickOS by making it look more like an interface of an operating system instead of just making it look like a webpage. I added a simple taskbar to the bottom of my screen with the OS name and a date and time that works. I also improved the layout by centering the welcome window which is a basic information screen about the OS. I also added a background image from the LEGO movie that fits my OS. I wrote my first JavaScript function for the project, helping me create a live clock using Date() and setInterval(). I overall improved the desktop to look more like a desktop instead of just a webpage and learned to have more dynamic elements such as the time.
I made BrickOS start to feel more like an operating system by adding a new features such as window dragging. I made the welcome screen more like a window by changing the colors a little to make it look better by adding a title bar, a close button, a border, and a shadow as well. I also added draggable windows where the welcome window can be clicked and dragged around by the title bar using mouse functions to track where the mouse is going and also update the windows position. Clicking the X button hides the window and clicking the BrickOS on the bottom taskbar brings it back. I also added a new OSscript.js to make the JavaScript loof better instead of making it all be in the HTML. Overall, now it is starting to function more like a OS with windows that can move and can be gotten out of, with now the goal in mind being adding applications that can be clicked.
I added a new OS.css where now all the CSS styling is moved to to this file instead of being cramped in the HTML page. Along with this there was a problem where when I wanted to close out of a window, where I could close the window anywhere in between the top in between and and X of the window which interfered with the dragging of the window, since if I dragged on that side it would drag and as soon as I let go, it would close out of that window. I was trying to change th4e JavaScript to see if it was the problem, but I saw that in the CSS, there was an element to make the X flex: 1, so as soon as I took that out, it started working. Overall, I fixed a crucial error in the OS making it work properly and better and made the code more readable by adding a CSS page.
Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. ======================================== Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. ======================================== Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. ======================================== Calendar There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. ======================================== Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor.
Desktop Apps - New snake game which is fully playable with a green square that grows (snake) and a red square (apple). There is score tracking, including a saved high score, and a game-over and a way to restart by clicking the board and pressing any key. ======================================= Windows - There is a new resizable window where if you drag on the bottom right corner, you can make the window bigger until the screen size it met but does not overlap with the taskbar. It has the size limits so that it doesn’t spill off of the screen. Windows can also not be clicked to be shown on top of the other window. By clicking a window of an app that is under another app window, the window clicked will show up on top. ======================================== Images App - I added an image uploading feature to the Images app where you can add images from your computer by uploading it or you can take a picture with your camera and upload it there and get saved in the app. Along with this, there is also a feature to delete the images if you don’t want it there, asking you for confirmation to delete the picture in case it was by accident. ======================================== Window Minimization - Apps can now be minimized instead of fully closed where if you minimize the app, it will stay in the taskbar but dim out to show that the app is open but not visibly on the screen and can be reopened by clicking the app again or clicking the app on the taskbar.
I added 2 new apps: The settings app - This app allows you change your background by choosing one of the default backgrounds already available or you can also just upload your own image and use that as a background. I will add more things as part of the settings, but i made the base of the app today. Calculator App- This app follows the theme and does actually work. You can put in math problems and it will solve it. Obviously it’s not a graphing calculator and is just a basic calculator. Both these apps can be resized and will be shown in the taskbar. Right now, these apps have a placeholder icon and that will change after I create my other apps that I am planning. These apps include the Terminal app, music app, and lego fun facts app, and maybe more!
Terminal App - This app lets you see what each app is about including the calendar app. You can also see you notes and what are in them through this app. Typing help gives the list of commands that you could use as well! Setting App Update - The settings app not has multiple different features including changing your color scheme. You can also change the clock from 23 hours to the 12 hours version and also switch on and off sound for the future music app. Finally, you can also reset all your settings if you want a fresh start.
Ships:
Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. Calendar (My Extra Feature) There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor.
Windows - Starting here, I made the windows more block shaped to fit the LEGO themes instead of having rounded corners. They now have a better looking design with the Images Window having a custom scrolling wheel and a clean darker line separating the header and actual content instead of a black line. Images App I added this new app with a a similar design to the Welcome Window but the content is completely different. This app has 3 images and a custom scroll wheel to fit the LEGO theme. Notes App This new notes app has a clean sidebar as well with all the notes that a user can create. A add new note button is created where when you click it, a popup will come and will ask for the name of the new note. Everything on the notes content side is editable and is saved to local storage. Calendar There is a new Calendar that pops up in the bottom right corner when the date/time is clocked. This calendar shows the month and year on the top and shows the days of the money with the days at the top as well as highlights todays date. Desktop Icons Finally the desktop icons have a clean image layout and design. When you hover over the apps, they will outline a faint yellow to show you are hovering over them and will turn to the pointer cursor. ========================================= Desktop Apps - New snake game which is fully playable with a green square that grows (snake) and a red square (apple). There is score tracking, including a saved high score, and a game-over and a way to restart by clicking the board and pressing any key. ======================================= Windows - There is a new resizable window where if you drag on the bottom right corner, you can make the window bigger until the screen size it met but does not overlap with the taskbar. It has the size limits so that it doesn’t spill off of the screen. Windows can also not be clicked to be shown on top of the other window. By clicking a window of an app that is under another app window, the window clicked will show up on top. ======================================== Images App - I added an image uploading feature to the Images app where you can add images from your computer by uploading it or you can take a picture with your camera and upload it there and get saved in the app. Along with this, there is also a feature to delete the images if you don’t want it there, asking you for confirmation to delete the picture in case it was by accident. ======================================== Window Minimization - Apps can now be minimized instead of fully closed where if you minimize the app, it will stay in the taskbar but dim out to show that the app is open but not visibly on the screen and can be reopened by clicking the app again or clicking the app on the taskbar....
|
1793573755.1034744
|
1793660155.1034744
|
|
22208
|
Personal Site by @secret | Stardance
|
secret
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T17:27:38Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The site is finished. I tried to make it look as good as possible, only using HTML and CSS. I learned new things because I used AI much less than before, only using it when I got stuck on a small problem. I am satisfied with the results.", "repo": "https://github.com/dominik-vrg/personal-site", "demo": "https://dominik-vrg.github.io/personal-site/"}]...
|
[{"post_id": 21607, "ts": "202 [{"post_id": 21607, "ts": "2026-07-03T17:26:01Z", "hours": 2.0078, "text": "My Personal Site - devlog #1 I created a simple website using HTML and CSS only. It features 5 sections: a welcome header an “about me” section a “my team” section a “my favorite games” section and a copyright footer"}]...
|
Title: Personal Site by @secret | Stardance
Devlo Title: Personal Site by @secret | Stardance
Devlogs:
My Personal Site - devlog #1 I created a simple website using HTML and CSS only. It features 5 sections: a welcome header an “about me” section a “my team” section a “my favorite games” section and a copyright footer
Ships:
The site is finished. I tried to make it look as good as possible, only using HTML and CSS. I learned new things because I used AI much less than before, only using it when I got stuck on a small problem. I am satisfied with the results....
|
1793573753.6265323
|
1793660153.6265323
|
|
35796
|
ZooBot by @anaskilled | Stardance
|
anaskilled
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T22:08:45Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made this zoo slack bot that’s gives you some random animals facts and pictures also can give you some jokes. There was some challenge in understanding nest, ssh and how they work. I’m proud of learning another programming skill which is slack bot making. To test my bot you just want to join the bot channel and try the slash commands.", "repo": "https://github.com/Anas-hessein/Zoo-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BHG08H3D5"}]...
|
[{"post_id": 29255, "ts": "202 [{"post_id": 29255, "ts": "2026-07-16T01:41:20Z", "hours": 1.6806, "text": "I made all slash commands and waiting for nest approve to get it 24/7"}]...
|
Title: ZooBot by @anaskilled | Stardance
Devlogs: Title: ZooBot by @anaskilled | Stardance
Devlogs:
I made all slash commands and waiting for nest approve to get it 24/7
Ships:
i made this zoo slack bot that’s gives you some random animals facts and pictures also can give you some jokes. There was some challenge in understanding nest, ssh and how they work. I’m proud of learning another programming skill which is slack bot making. To test my bot you just want to join the bot channel and try the slash commands....
|
1793573752.457884
|
1793660152.457884
|
|
30151
|
Macroquad 9x UI by @Nolan-L-from-Milorad | Stardan Macroquad 9x UI by @Nolan-L-from-Milorad | Stardance...
|
Nolan-L-from-Milorad
|
1
|
11.63
|
70
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T06:22:51Z", "hours": 11.0, "multiplier": 6.51, "payout": 70, "blessing": "neutral", "text": "I have made a windows 9x (95 / 98) style UI for macroquad, a graphics library for rust. I wanted to make this to add to my other projects to have a simple to implement library that can simply be added as a cargo library! I’m quite proud of how accurate it looks there are a few minor things (selected tabs, end of sliders, text somtimes going over the box) but overall it’s pretty nice to use and code for, there is an interactive web demo at: http://powerslide2.win/ninexui/src/index.html that showcases all UI elements. enjoy!", "repo": "https://gitlab.com/miloradceo/ninexui", "demo": "http://powerslide2.win/ninexui/src/index.html"}]...
|
[{"post_id": 26161, "ts": "202 [{"post_id": 26161, "ts": "2026-07-10T19:56:09Z", "hours": 0.6314, "text": "I got everything up on crates.io so now it works as a publicly downloadable rust library through cargo and I fixed up the barren wasteland that was my README.md"}, {"post_id": 25628, "ts": "2026-07-10T01:07:49Z", "hours": 1.5175, "text": "I have added a tab bar for switching between different menus and stuff works well enough like most stuff in this lib it’s just for basic use"}, {"post_id": 22549, "ts": "2026-07-05T02:16:38Z", "hours": 2.1836, "text": "I’ve now done a text input box, it uses macroquad’s default UI input box and wraps it up nicely"}, {"post_id": 21945, "ts": "2026-07-04T04:27:01Z", "hours": 0.4192, "text": "I’ve now added a slider, it was fairly easy to do as I’ve written similar already for the list."}, {"post_id": 21890, "ts": "2026-07-04T02:10:42Z", "hours": 3.4069, "text": "after a bit more work than the other UI elements have been I have made a list! you give the function a Vec X pos Y pos width height and then you’re done! also the UI element has a scroll bar and buttons to move through longer lists."}, {"post_id": 21347, "ts": "2026-07-03T07:27:05Z", "hours": 0.9664, "text": "I have now done a loading bar, a cool thing to note is that this bar can actually be any width you like! I wanted to make this as a library to make simple and effective UIs that can easily and quickly be implemented without hastle of setting up many variables, most buttons / UI elements just return a boolean of if they are triggered"}, {"post_id": 21318, "ts": "2026-07-03T05:40:55Z", "hours": 0.9258, "text": "Introducing the checkbox! the tick is kinda wonky but I’ll make it look better later, the functionality is still there"}, {"post_id": 21258, "ts": "2026-07-03T03:00:12Z", "hours": 1.3272, "text": "I have made a working button click and all, I am now going to start doing a checkbox"}]...
|
Title: Macroquad 9x UI by @Nolan-L-from-Milorad | Title: Macroquad 9x UI by @Nolan-L-from-Milorad | Stardance
Devlogs:
I have made a working button click and all, I am now going to start doing a checkbox
Introducing the checkbox! the tick is kinda wonky but I’ll make it look better later, the functionality is still there
I have now done a loading bar, a cool thing to note is that this bar can actually be any width you like! I wanted to make this as a library to make simple and effective UIs that can easily and quickly be implemented without hastle of setting up many variables, most buttons / UI elements just return a boolean of if they are triggered
after a bit more work than the other UI elements have been I have made a list! you give the function a Vec X pos Y pos width height and then you’re done! also the UI element has a scroll bar and buttons to move through longer lists.
I’ve now added a slider, it was fairly easy to do as I’ve written similar already for the list.
I’ve now done a text input box, it uses macroquad’s default UI input box and wraps it up nicely
I have added a tab bar for switching between different menus and stuff works well enough like most stuff in this lib it’s just for basic use
I got everything up on crates.io so now it works as a publicly downloadable rust library through cargo and I fixed up the barren wasteland that was my README.md
Ships:
I have made a windows 9x (95 / 98) style UI for macroquad, a graphics library for rust. I wanted to make this to add to my other projects to have a simple to implement library that can simply be added as a cargo library! I’m quite proud of how accurate it looks there are a few minor things (selected tabs, end of sliders, text somtimes going over the box) but overall it’s pretty nice to use and code for, there is an interactive web demo at: http://powerslide2.win/ninexui/src/index.html that showcases all UI elements. enjoy!...
|
1793573748.254118
|
1793660148.254118
|
|
18954
|
Smart Garden Probe by @percentchunk376 | Stardance
|
percentchunk376
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T21:19:42Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a smart garden probe, which has the ability to select plant profiles, and give recommendations through the oled screen on what you should do based on the soil moisture, and soil temp. What was challenging was writing firmware, and cading, as those are my weak areas compared to my hardware building experience. I had to learn a new language of coding(which I am still learning). I am really proud of being able to complete the project which I created, and aligning the pcb. and cad so that everything is flush and requieres minimal wiring. To test this, just make sure you have your plant profile file downlaoded, then you can run the demo file, which takes from the plant file and gives recoemendations first. (REMEMBER TO BASH FIRST).", "repo": "https://github.com/percentchunk/Smart-Garden-Probe", "demo": ""}]...
|
[{"post_id": 11387, "ts": "202 [{"post_id": 11387, "ts": "2026-06-18T17:04:27Z", "hours": 0.695, "text": "This will be my last devlog for this project until I get the parts to make the physical hardware for this. :) This project was so much fun, and all the code, cad, pcb routing, I have learned through this was crazy. Also getting to see other people who are in the same position as me is also really really cool. Also I added some writing onto my case for the love of the game. (╯°□°)╯︵ ┻━┻"}, {"post_id": 11303, "ts": "2026-06-18T14:26:11Z", "hours": 0.5192, "text": "So quick update….. WEE HAVE FINISHED THE FIRMWARE. There can’t be much testing to do till the hardware arrives. We are pretty much set with the design, pcb, and now the code. Only thing left is to clean up the repo, and polish that github. This python is fun though, its like a lazy verison of java which is making life so much easier. next update will most likely be the submission! This code was mainly finishing up the loop, and integrating all the libraries needed for the OLED, and the garden probe."}, {"post_id": 11269, "ts": "2026-06-18T13:02:38Z", "hours": 0.6519, "text": "Taking a quick break from coding, and oh my days. I’ve only learned coding on java at a basic level and this python langauge is like a whole new world. I started coding in the OLED display, and the I2C garden probe. I am using AI to help me with some of the python because even though its a way easier langauge to know, I still barely know it, and keep adding semi colons on accident cause of java. Though all the logic is mine just to clarify, AI is just to help me translate the more complex code."}, {"post_id": 10851, "ts": "2026-06-17T19:56:02Z", "hours": 1.3856, "text": "Today we had a really good, and productive day. We were able to finish our PCB, and Gerber files, we added mounting holes(Almost forget this). I started working on the firmware, and added a new function where the smart garden has the ability to change plant profiles so that it can give you recommendations on how to improve your plants health. soon there should be a plant database, but in the picture is what I added so far just as a tester class. Next steps are for the hardware library integration, and some last minute polishing."}, {"post_id": 10667, "ts": "2026-06-17T15:06:45Z", "hours": 1.4542, "text": "Almost done with polishing our smart garden device. the majority of this project will be in firmware. The pcb, and the case are done, it just needs the finishing touches. I started adding fillets everywhere because I did not at all like the square edges."}, {"post_id": 9656, "ts": "2026-06-16T02:05:49Z", "hours": 1.1047, "text": "First devlog for this project. Our software skills are highly underdeveloped, so hopefully the hardware side will make up for it. This is a hackpad with the ability to detect the mositure levels, and air temp.(Mainly for plants). Right now i am in the process of creating the box for the hackpad. The rough print will be running on prayers. :)"}]...
|
Title: Smart Garden Probe by @percentchunk376 | St Title: Smart Garden Probe by @percentchunk376 | Stardance
Devlogs:
First devlog for this project. Our software skills are highly underdeveloped, so hopefully the hardware side will make up for it. This is a hackpad with the ability to detect the mositure levels, and air temp.(Mainly for plants). Right now i am in the process of creating the box for the hackpad. The rough print will be running on prayers. :)
Almost done with polishing our smart garden device. the majority of this project will be in firmware. The pcb, and the case are done, it just needs the finishing touches. I started adding fillets everywhere because I did not at all like the square edges.
Today we had a really good, and productive day. We were able to finish our PCB, and Gerber files, we added mounting holes(Almost forget this). I started working on the firmware, and added a new function where the smart garden has the ability to change plant profiles so that it can give you recommendations on how to improve your plants health. soon there should be a plant database, but in the picture is what I added so far just as a tester class. Next steps are for the hardware library integration, and some last minute polishing.
Taking a quick break from coding, and oh my days. I’ve only learned coding on java at a basic level and this python langauge is like a whole new world. I started coding in the OLED display, and the I2C garden probe. I am using AI to help me with some of the python because even though its a way easier langauge to know, I still barely know it, and keep adding semi colons on accident cause of java. Though all the logic is mine just to clarify, AI is just to help me translate the more complex code.
So quick update….. WEE HAVE FINISHED THE FIRMWARE. There can’t be much testing to do till the hardware arrives. We are pretty much set with the design, pcb, and now the code. Only thing left is to clean up the repo, and polish that github. This python is fun though, its like a lazy verison of java which is making life so much easier. next update will most likely be the submission! This code was mainly finishing up the loop, and integrating all the libraries needed for the OLED, and the garden probe.
This will be my last devlog for this project until I get the parts to make the physical hardware for this. :) This project was so much fun, and all the code, cad, pcb routing, I have learned through this was crazy. Also getting to see other people who are in the same position as me is also really really cool. Also I added some writing onto my case for the love of the game. (╯°□°)╯︵ ┻━┻
Ships:
I made a smart garden probe, which has the ability to select plant profiles, and give recommendations through the oled screen on what you should do based on the soil moisture, and soil temp. What was challenging was writing firmware, and cading, as those are my weak areas compared to my hardware building experience. I had to learn a new language of coding(which I am still learning). I am really proud of being able to complete the project which I created, and aligning the pcb. and cad so that everything is flush and requieres minimal wiring. To test this, just make sure you have your plant profile file downlaoded, then you can run the demo file, which takes from the plant file and gives recoemendations first. (REMEMBER TO BASH FIRST)....
|
1793573747.03673
|
1793660147.03673
|
|
40406
|
part-of.my.id revived by @satr14 | Stardance
|
satr14
|
4
|
51.0
|
767
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-26T14:33:47Z", "hours": 18.0, "multiplier": 18.4, "payout": 337, "blessing": "neutral", "text": "NOTE: (please read before reviewing) please do your research on what DNS is and how it works before ratting. the docs will explain it for you but PLEASE dont just say “idk what it does so i give low ratting”. BOOM!!! final version. 52 hours, a milestone i never thought i reached. this was truly a journey. stardance got me from burnt out back to enjoying coding again surprisingly. i deff learned a lot, especially during rewrites using a lot of language features like typescript’s non-null assertion, svelte 5’s snippet templates, and tailwind’s important css operator. anyways, here’s whats new: more docs to explain to newbies on what DNS is and introduction to the service improved doc browsing navigation with table of contents and next/prev buttons editing for existing subdomains (that you own of course) code rewrite (again), extra strict subdomain editor added contact email for support and issue reports moved a lot of pages to ssr based rendering (lightning speed performance!!!) performance and SEO enchancements ci addition for auto format and labeling ci checks for emails thats it for this project. cya in the next ysws hackclubbers ;)", "repo": "https://github.com/partofmyid/register", "demo": "https://part-of.my.id/docs/domains101"}, {"ship_num": 2, "ts": "2026-10-10T03:56:39Z", "hours": 15.0, "multiplier": 10.93, "payout": 165, "blessing": "neutral", "text": "okay a LOT OF NEW FEATURES and improvements from last devlog feedback: subdomain service: NEW record: REDIRECT, a CloudFlare Single Redirect Rule powered robust tests using bun’s built in jest compatible testing API website & docs: NEW docs: /services, listing all known tested and working services tldr in the docs and README for quick registration support for REDIRECT records in webui editor short consice guide for registering", "repo": "https://github.com/partofmyid/register", "demo": "https://part-of.my.id/docs/domains101"}, {"ship_num": 3, "ts": "2026-09-15T09:35:30Z", "hours": 4.0, "multiplier": 13.65, "payout": 60, "blessing": "neutral", "text": "this should have improvements from last ship’s suggestions and feedback /record and /success page for generating json fixed broken links (no /d or /q anymore) added background elements to make website feel more alive", "repo": "https://github.com/partofmyid/register", "demo": "https://part-of.my.id/docs/domains101"}, {"ship_num": 4, "ts": "2026-08-16T05:45:34Z", "hours": 14.0, "multiplier": 14.89, "payout": 205, "blessing": "neutral", "text": "VERSION 2.0 IS LIVE Registration instructions are available on the website. part-of.my.id is a free subdomain service that allows you to get a sleek lookin your-name.part-of.my.id domain instead of a the boring old one that hosting providers provide like pages.dev, github.io, etc. This rewrite brings to you: Multi apex domain support for the new domain: is-my.id A sleek redesigned main website and documentation", "repo": "https://github.com/partofmyid/register", "demo": "https://part-of.my.id/docs/domains101"}]...
|
[{"post_id": 82997, "ts": "202 [{"post_id": 82997, "ts": "2026-10-26T14:22:00Z", "hours": 4.1103, "text": "damn, i was obsessed after loosing a streak to recover it that i forgot to devlog :p last commit hashes: website: cdc095290ad6e1cef4555ed497ab358a6fbb9608 nothing much for user side, this was mainly code cleanup and a bit of logic rewrite. this makes sure that in the future adding more record type support is as easy as adding 1 line to the SUPPORTED_RECORDS field. cleaned up duplicate Object.entries() calls moved record rules handling to separate library file(s) rewrite records page to be more modular and scalable when adding more record types in the future created regex constants in a separate library file due to sheer sizes of these regexes (copied from ajv-formats, same regexes used in ci) simplify duplicate row table creation into a svelte snippet fixed a lot of deprecated imports code cleanup, remove unused imports, exports, variables, and type declarations again, last devlog for this project. its been a good run"}, {"post_id": 82051, "ts": "2026-10-23T16:39:48Z", "hours": 2.9956, "text": "well more time without devlogs, but i didnt work on anything massive anyways so should be fine. last commit hashes: website: 6fee809e77174f42e3ece9c71d2d8b6a95120d69 register: 4c1860c68904c5378a761a100013ce3da8836771 this is gonna be the last devlog before i ship for the last time. or not, but ill most likely work on other projects. i do still have 1 more thing to do which i might or might not do. depending on how hard it ends up being. then again i am paid by the hour sooo….. but school is starting to get busy again so ig we’ll see register: completed the draft /docs/domains101.md doc for introduction to the service website: add handler for /docs/[empty] to redirect to first in line defined doc moved loadDoc helper function to $lib added a loading bar for indicating page load in progress add previous and next buttons to the bottom of docs page added domains101 doc entry"}, {"post_id": 80984, "ts": "2026-10-19T14:46:48Z", "hours": 1.7822, "text": "this is when im starting to head bang a lot, because of an undocumented github feature ive been relying on for web ui editor. last commit hashes: website: f1e3a4387e6780d61bc55feeead37ead03ec3b0a register: 5625239d30e691ace298336953d663b6e396c0e3 so ive been using github’s REPO/new/branch/PATH?filenam=A&value=B query params for prefilling records in the web ui editor form. during testing, i noticed that for some reason JSON.stringify isnt formatting the json when i open it on github. after a bit of testing, turns out github minifies valid json input. when i tried some string concats with JSON.stringify output that produced invalid json then the indentation returns. this is rather confusing and frustrating. even tho the ci now handles formatting, its still a pain for pr reviewing to review unformatted, one-line json files. due to github not really documenting this feature well, i suppose we have to live with it. i do have plans later to possibly use octokit instead for pr generation, but thats a lot more work i dont have time for. anyways, i didnt feel like writing changelog so ill just say it in brief. i added email regex checks to the ci as well as formatting warnings. and for the web ui, i made an advanced view to show raw json and the file path in case someone is willing to do it themselves. i also fixed a lot of the unserious things i threw around the success page like the ??? step"}, {"post_id": 80413, "ts": "2026-10-17T15:47:36Z", "hours": 0.7022, "text": "genuinely so tired for some reason. prob from playing mc recently and dying and lossing my stuff to despawn timer. OKAY! enough trauma dumping. we got work to do last commit hashes: website: e4e59479ec953dcfb63e0965518d35906ab625e8 register: mostly a lot of janitor work: code cleanup and directory reordering. but theres also an auto formatter in the workflow now! website: fix heading centering from last devlog, found bug after testing mobile view register: move dnsconfig.js to /scripts/bin for organization installed oxfmt for formatting files added bun fmt script to package.json added oxfmt config file with exclusion rule on everything but /domains formatted every domain file using oxfmt added notes for cf tunnels in /docs/services.md (unsupported services) add prettify/formatting workflow for every push code cleanup: remove unused nodejs step in workflow file, were using bun anyways code cleanup: whitespace and newline removal add tip and caution alerts in quickstart guide regarding pr checklist and prettify formatting"}, {"post_id": 80168, "ts": "2026-10-16T15:08:22Z", "hours": 1.3353, "text": "all my energy went into working at the weekdays 😭 now im hella tired. either that or im procrastinating more. last commit hashes: website: e4e59479ec953dcfb63e0965518d35906ab625e8 im still hopping i can at least reach 11h a week for my goal. training before i switch to another ysws when stardance ends fr website: code cleanup, add missing semicolons and remove unused imports added common issues help guides with screenshots to next steps page added back to query link for record editor page unified box styling across the site for consistent design made edit button in record editor yellow if subdomain taken grammar fix to landing page paragraph :p query page: moved announcement to the bottom of the page minor styling changes to borders, seperators, text selection, and cursors"}, {"post_id": 79810, "ts": "2026-10-15T14:39:47Z", "hours": 2.6617, "text": "i forgot to devlog yesterday ;-; also i was supposed to work on other important aspects like the tutorial and barely finished pages. but ngl looking at the existing pages and adding small improvements and tiny details just feels more relaxing for me. but i still need to do that tutorial because stardance said so ;-; last commit hashes: website: 2de11547f2cc7e0b8ad3c107fbee8d44e0a97682 register: 2e183b224fdce4811b05c89b9f594551c13a7dad lowk idk when but i got mystery motivation and im racking up good amount of hours/day. i do have a goal rn to try and buy an bambu lab 3d printer so thats prob a contributor to my motivation. website: code cleanup, remove unused typescript code import use tables in record forum page for consistent spacing fix hover confusion on disabled inputs by disabling hover background color change remove unnecesarry label (just please research about dns 😭 ) added more dividers to records form page add clarification that subdomain descriptions are optional make pfp previews link to github profiles bug fix to REDIRECT records on read only mode improve table of contents styling to tree like stem made toc and md parser function also generate heading numbering (e.g. 1.2.3) (unused for now) code cleanup, remove empty new lines to compact code made table of contents entry highlight depending on view (js required) close table of contents in docs by default tweaked query page styles for showing borders set disabled state as default in records form hide checkmark if input is disabled added fork warning in records page added the ability to edit registered subdomain hide table inputs if empty register: clarity to reference docs regarding CNAME and REDIRECT changed heading level in Terms of Service AI section"}, {"post_id": 79335, "ts": "2026-10-13T15:29:43Z", "hours": 1.45, "text": "a bit of a rant before anything, PLEASE JUST DO YOUR RESEARCH BEFORE RATTING MY PROJECT. may come off as mean but please. yall asked for detailed and concrete docs and end up saying its “too long” like bro 😭. i do have one more plan for tutorials to make it easy. but if this doesnt help then go rtfm last commit hashes: website: 122e3777c7c52e7bf05a8a32f7e4f91b11d09ada register: d7ac98d86913daad3c18260120e41dda2873f8ef got stacks of homework today so i cant really do my 2 hour daily goal rn unfortunately :( but trust me, i will get that 11 hour weekly website: rename doc link “requirements” to “terms” new favicon of indonesian flag (using emoji variation from discord/twitter) might use this for a logo later code cleanup and simplification remove unused variables in code query page with ssr optimizations moved /query/[query] to /query handled passing subdomain query to form body changed landing and query page to use sveltekit form actions made readme announcement fetching ssr hide subdomains when query is empty made apex listing ssr register: fixed github actions workflow labeler created issue templates for bug report, abuse report, and support questions added abuse report information and email to main readme changed query url to match website"}, {"post_id": 79068, "ts": "2026-10-12T15:48:11Z", "hours": 2.2858, "text": "last commit hashes: website: d27e3b5f90cfcb4a59d39a6fe507c45388a323ec register: 24080879b4fbb1bb8c9e436dc8f2bdefce64af4f energy on mondays to work on this phew website: added doc entry for faq page added support email in website footer adjusted spacing and sizing on containers to make other elements visible handle disabled js for forum and counter integrate lavender theme throughout landing page added table of contents to docs page via marked plugin for gfm heading ids mobile input layout fixes for records web ui page register: added domain configurations for google search console and cloudflare email routing for support email added ignore directive to dnscontrol for cloudflare managed records added extra rules against vibe coded websites github workflow file fix causing some checks to skip grammar fix across markdown files (thank you claude copilot) added pr labeling automation for detecting non domain changes in a pr quickly modified dnscontrol script to add incrementing mx priorities based on order of entry clarify rough points within documentations added draft beginner guide docs added new documentation for frequently asked questions code cleanup: remove comments, fix indentation reorganizing files and directories to put images in appropriate locations fix gfm blockquote alert usages added all full records to example file contents in reference documentation"}, {"post_id": 78696, "ts": "2026-10-11T10:29:20Z", "hours": 0.9756, "text": "last commit hashes: website: a4917bbdf5899623b6dfcae356e01572dfbceb05 realized there were some issues after shipping so im fixing them now. got a near perfect lighthouse score :D fix responsive size on landing page cards added missing meta tags for SEO added banner for meta tags handle github rate limiting on landing page fix accessibility on landing page buttons optimized github avatar images fetching to fixed size fix document heading hierarchy code cleanup removing unused comments font optimizations with preconnect hints and preload tricks"}, {"post_id": 78247, "ts": "2026-10-10T03:53:00Z", "hours": 1.5075, "text": "last commit hashes: website: f04e761e0557d7c5c7bfd6a680bec5a6cfbca44a register: 154bfb712857b9000d00ba0e6ea613064f367246 last devlog before shipping :D website: added REDIRECT record support to web ui editor (thanks claude) minor ux and styling fixes with labels and lists purely and only server side render docs page reworked steps section to be more appealing register: added small note to docs in the supported services section for when you want to add a supported service thats not listed"}, {"post_id": 78113, "ts": "2026-10-09T16:25:13Z", "hours": 2.5431, "text": "last commit hashes: website: 8410efa3debca260451e80b206b2ec8923a45c7c register: a1aefd289360a874e40e09c9b2817501d3b2590f i again forgot to devlog so heres more category based changelogs. after this im gonna add support for redirect record in the web ui website: added table of supported services docs added styling for article tables adjust minor ux tweaks for a better experience maintenance: run bun update to update deps and lockfile add a short 4 step tldr on the website landing page add a short tldr in the quickstart guide register: added new record type: REDIRECT, a cloudflare single redirect rule powered 302 redirect implemented tests for redirect wrote docs in references.md about new REDIRECT record migrate hardcoded extracommits into their own domain files added brief registration guide in README wrote new docs for supported services table add tldr for quickstart guide adapted from brief guide in main README register misc: fixed some names in github actions workflow files"}, {"post_id": 78022, "ts": "2026-10-09T07:10:39Z", "hours": 3.5436, "text": "last commit hash: 72f864ff282701585c5d43d5818a5ee22c29e168 supposed to be 3 separate devlogs but i genuinely forgot to. so im gonna split this changelog to categories. bun test validation: add github helpers for fetching diff and raw files from commit and raw urls implemented tests for checking changed file owners against pr author added a bypass label for ownership transfer extra types and functiong tweaks to existing library apis skipped pr author check if pr number for checking isnt present remove uneeded exports in some files as most are internal use optional chaining for clearer error messages in ci project structuring: split deep.test.ts to multiple focused files instead of relying on describe() grouping split helpers, constants, and types into a their own library file move tests and shared libs into /scripts/lib and /script/tests respectively github actions: wire bun tests into ci updated ci triggers for prs, manual, and push settings removed step for validating with json schema in favor of bun tests rename a couple of step and job names for clarity misc: add some missing semicolons tab space consistency fix a couple of variable names"}, {"post_id": 76291, "ts": "2026-10-03T03:10:53Z", "hours": 1.1539, "text": "last commit hash: 2d191fa190db7b3904256e96b27dd6608d42af56 fix existing record files failing the test fix test to exclude .json extension during name length test add a check for unknown and typoed keys added draft tests for website reachability made draft/empty tests fail on purpose check subdomain if containing any apexes minify some parts of the code to one liners made ownership checks per level (a.b.c.json checks for b.c.json and c.json instead of just c.json) added safeguards to not print multiple failures if root cause is erroring out to make sure errors are readable reorder some tests to run first than others used node:path’s path.join for path handling moved json parsing expect calls to helper function for reading json to eliminate repeated code made most of the error messages clearer to follow"}, {"post_id": 75789, "ts": "2026-10-01T04:41:44Z", "hours": 1.0119, "text": "made a new field in the getDomainRecords helper function to check for file existance and handle json parse fails made a new helper function to generate subdomain file path based of apex and subdomain changed tests to use the new implementation of getDomainRecords implemented tests for cloudflare proxied rules implemented tests for dns limitation rules implemented tests for root and nested subdomain ownership"}, {"post_id": 75593, "ts": "2026-09-30T14:57:47Z", "hours": 1.2486, "text": "ts is me with random lock in phases: still not fully implemented to be included with the testing workflow, i have a lot of features planned but i prefer to finish this first. better error messages for expect fails extra checks for empty objects, arrays, and strings made most/all tests use testing api specifics rather than a conditional check if expression is true (for better error messages) add a check for capping filenames to less than 245 characters (as per dns hostname rules) checks for nested apex in filenames (example: steve.is-my.id.json is invalid) reorder some tests add a check for uppercase letters (one of the existing subdomains violated this rule so i fixed it manually) add a check for repeated dashes (–) as the current regex doesnt catch this and i didnt feel like changing it created empty tests as drafts for later to be implemented remove unused ALIAS record handling as it was used internally but not needed anymore"}, {"post_id": 75220, "ts": "2026-09-29T14:41:31Z", "hours": 1.475, "text": "so mostly focused on improving the register repo and docs experience as i feel like the website is established and complete at this point. i am still learning the bun/jest api on writing test code so this may not be perfect, but its a start! made a wrapper function for looping through subdomain files using callbacks and bun fs api improve regex checks for ipv4, ipv6, and fqdns based on ajv-formats npm package (regex is copied pasted from source code rather than installing the package directly as that introduces bloat and dependency management) slight fixed to tests handling promises (still rather broken but ill fix that later) add new constants for looping though records made a helper function to read subdomain file and parse the json. both using bun fs api update all test fail messages to print file paths for easy tracing new test to check schema structure and record values using ip and domain regexes"}, {"post_id": 74331, "ts": "2026-09-27T05:47:48Z", "hours": 1.6714, "text": "split time between writing docs (uncommited, might be discarded due to low quality) and writing tests leveraging bun apis. these tests are not completed, therefore they wont be used for github actions pr check workflows (yet). wrote docs: beginners guide (partial) and unsupported services (empty) extracted typescript types and constant to schema.ts for use in test units initialized bun for package management in the future if needed created deep.test.ts wrote test for checking unknown files outside of the /domains/[apex] directories wrote test for checking file names valid subdomain fqdns wrote test for checking if json is valid and parse-able"}, {"post_id": 69643, "ts": "2026-09-17T14:04:10Z", "hours": 0.9692, "text": "okay well ships on this project isnt really doing the best in terms of stardance output, so i really need to address a lot of these critics if i want good multipliers. anyways so most of the time here is spent on writing ci tests for the register repo. however, i decided to scratch the majority of this code due to poor implementation execution. so this devlog will only have commits resolving some critics. website: fix z-index header bug where some elements would appear above the bar add a warning tip to the website repo readme for anyone who ends up there instead of the register repo changed the view source link for this project on stardance to redirect to the register repo updated the readme (adapted from my personal website repo readme) register: (scratched) test framework with raw js and bun add a tip for registering via web ui last commits from git repos (pinpoint for writing the next devlogs): register: 1564638a6d7eccc495a89948145898d0e4a1ddfc a1e2b4e4cf511f921ffc6b78bca260133afe4e7d okay a bit of a rant but school is starting to burn me out again. honestly i already got my certificate but now my motivator is gonna be the shop items. (i havent spent anything yet, not even for domain grants) im saving up and will spend after stardance ends. i am planning to hopefully do at least 1 - 1.5 hours on weekdays and hopefully overtime on weekends. we’ll see how that turns out i guess."}, {"post_id": 68541, "ts": "2026-09-15T09:17:00Z", "hours": 1.2439, "text": "edit: okay so i forgot some other changes but i cant really add those minutes to this devlog so ill just put the change here: added a character limit to the homepage search input (register repo) add a tip in quickstart doc about webui registering end of edit add warning texts for empty records and submit button pretty format resulting json enforced populated records instead of allowing empty domain registration form layout styling tweaks and fixes to inconsistency spacing add a success page that waits 5 seconds before opening github and displays next steps change submit functionality to redirect to success page code cleanup from unused variables and inconsistent spacings"}, {"post_id": 67994, "ts": "2026-09-14T10:36:43Z", "hours": 1.8175, "text": "almost forgot to devlog! anyways website: made a draft object for the form, should make interactivity easier to implement styling for checkbox, hr, and disabled input elements made an ARRAY_RECORDS string for supported records in type of string[] implemented form for registering subdomain records made readonly if subdomain is taken"}, {"post_id": 66670, "ts": "2026-09-12T15:11:06Z", "hours": 1.3625, "text": "changes are half complete but i decided to devlog rn to keep things short. please note these changes arent pushed yet as im writing this website: rename /q and /d to /query and /docs change redirect links to the new routes add background stars from my personal website made a records page for creating subdomains and editing existing records (incomplete) implemented fetch function for getting records change query link to redirect to record page register: replace /docs/*.md code blocks to actual doc links only resolvable when viewed from the main website"}, {"post_id": 47895, "ts": "2026-08-16T05:16:20Z", "hours": 0.5, "text": "added important links polished org readme added a profile picture for the org and website add a nametag gimmick on the website (desktop only)"}, {"post_id": 47881, "ts": "2026-08-16T04:27:20Z", "hours": 1.2019, "text": "fix wrong key on website add discord domain verification record for is-my.id wrote website requirement docs fixed grammar errors and typos (thanks claude) remove outdated docs notice replaced part-of.my.id’s v1 website with placeholder for v2 last final touch ups v2 website should be live now"}, {"post_id": 47536, "ts": "2026-08-15T14:44:42Z", "hours": 2.2581, "text": "mostly spent fiddling with a bit of ai and doing finishing touches before deployment. this was supposed to be 2 devlogs but i forgot to post and just continued coding but oh well. a lot of styling tweaks for markdown displays and forms install marked alert plugin for gfm alert blockquotes scrollbar, article, disabled button, and other element styling made footer stick to the bottom regardless of content height move loaddoc function to lib for use in other pages such as query function to remove apex domains from query if present implement subdomain suggestions html structure readme display for announcements loading indicator texts change nav link from config to query after this im gonna write docs/requirement.md and polish the github org a bit before shipping (hopefully) tomorrow"}, {"post_id": 47253, "ts": "2026-08-15T01:50:28Z", "hours": 1.3742, "text": "split time between website and register docs, bc i keep going back and forth and cant decide whether the website or the docs are more important. anyways register: create base doc files for quickstart and requirements write docs for quickstart guide remove cringy line on the register repo readme website-v2: made a base domain query page (unfinished) new page-container class in global styles used for consistent margin and padding fix link styles in docs handle form submission for homepage subdomain search better query param handling for docs loaddoc function tweaks for handling input styling changes to docs"}, {"post_id": 45763, "ts": "2026-08-12T13:47:31Z", "hours": 1.5139, "text": "felt productive again somehow during a school night made docs page under /d/[document name] implement markdown fetching from github raw api implement docs nav via hardcoded object for paths installed marked styled docs markdown render using tailwind typography plugin updated whole website to use lora font fixed some homepage paragraph wordings fixed some elements to use correct cursor move some styles to global app.css fixed mobile spacing for header and footer"}, {"post_id": 43670, "ts": "2026-08-09T02:03:31Z", "hours": 1.1919, "text": "thats a pretty good amount of time accumulated purely writing docs new markdown files under /docs for documentation and usage guides wrote raw references for filesystem structure and json schemas"}, {"post_id": 43375, "ts": "2026-08-08T16:04:06Z", "hours": 0.6681, "text": "small devlog but prob worth mentioning well the actions script failed due to worker routes being read only. i decided to use dnscontrol’s built in CF_REDIRECT record for this instead and also update it due to missmatch TTL from dev with prod. apparently this caused an error because actions kept failing to deploy due to missing creds. after a while of debugging and headbanging, i folded and attempted to use github copilot agent to try and fix it (hehe pr number 67) but that didnt do the trick. it was only when i checked the repo secrets that i realized the env variable is called CF_API_TOKEN and not CLOUDFLARE_API_TOKEN. that was like hours of my time spent away debugging instead of working on the website like i planned but oh well no changelog list because im gen tired rn like its 11.00pm wiuriuhewuhfiuwhfihewiuhih"}, {"post_id": 43319, "ts": "2026-08-08T14:49:31Z", "hours": 1.8528, "text": "took longer than expected, now im rewriting the dnscontrol script for deploying dns records to support multiple apex domains. this was rather challenging due to dnscontrol’s heavily limited dsl and language features, but eventually it works and now i just need to add documentation in markdown. fix type errors and cleanup code in dnscontrol.js before rewrite cleanup unused scripts and nix files remove nix branch (previous plan but support was too limited to be reliable) modified json schema so now “record” key is “records” (plural) update github action yaml files as well as fix old file paths"}, {"post_id": 43146, "ts": "2026-08-08T07:52:31Z", "hours": 1.4406, "text": "mhm not bad so to say reordered fetch function calls for stats display adjusted the typing and count functions for smootheness use lavender as the primary color complete homepage sections (mostly copied from the old site) add a footer and yes i made the github logo cyan but cmon we need some colors here"}, {"post_id": 41933, "ts": "2026-08-06T13:42:52Z", "hours": 1.1564, "text": "back after a long procrastination and burn out period. made stats counter increment one by one when loaded using js function by copilot made main title typing using js function by copilot added a little info bar indicating new subdomain available for registration added forum/search bar for registering new domains added grid dot background from my personal site added a nav bar added small about me, wip for continuation on the main landing page"}, {"post_id": 35748, "ts": "2026-07-27T11:57:51Z", "hours": 0.595, "text": "humble beginnings :D init sveltekit with tailwind installed tailwind typography and forums plugins installed catppuccin color theme made initial base home page design"}]...
|
Title: part-of.my.id revived by @satr14 | Stardanc Title: part-of.my.id revived by @satr14 | Stardance
Devlogs:
humble beginnings :D init sveltekit with tailwind installed tailwind typography and forums plugins installed catppuccin color theme made initial base home page design
back after a long procrastination and burn out period. made stats counter increment one by one when loaded using js function by copilot made main title typing using js function by copilot added a little info bar indicating new subdomain available for registration added forum/search bar for registering new domains added grid dot background from my personal site added a nav bar added small about me, wip for continuation on the main landing page
mhm not bad so to say reordered fetch function calls for stats display adjusted the typing and count functions for smootheness use lavender as the primary color complete homepage sections (mostly copied from the old site) add a footer and yes i made the github logo cyan but cmon we need some colors here
took longer than expected, now im rewriting the dnscontrol script for deploying dns records to support multiple apex domains. this was rather challenging due to dnscontrol’s heavily limited dsl and language features, but eventually it works and now i just need to add documentation in markdown. fix type errors and cleanup code in dnscontrol.js before rewrite cleanup unused scripts and nix files remove nix branch (previous plan but support was too limited to be reliable) modified json schema so now “record” key is “records” (plural) update github action yaml files as well as fix old file paths
small devlog but prob worth mentioning well the actions script failed due to worker routes being read only. i decided to use dnscontrol’s built in CF_REDIRECT record for this instead and also update it due to missmatch TTL from dev with prod. apparently this caused an error because actions kept failing to deploy due to missing creds. after a while of debugging and headbanging, i folded and attempted to use github copilot agent to try and fix it (hehe pr number 67) but that didnt do the trick. it was only when i checked the repo secrets that i realized the env variable is called CF_API_TOKEN and not CLOUDFLARE_API_TOKEN. that was like hours of my time spent away debugging instead of working on the website like i planned but oh well no changelog list because im gen tired rn like its 11.00pm wiuriuhewuhfiuwhfihewiuhih
thats a pretty good amount of time accumulated purely writing docs new markdown files under /docs for documentation and usage guides wrote raw references for filesystem structure and json schemas
felt productive again somehow during a school night made docs page under /d/[document name] implement markdown fetching from github raw api implement docs nav via hardcoded object for paths installed marked styled docs markdown render using tailwind typography plugin updated whole website to use lora font fixed some homepage paragraph wordings fixed some elements to use correct cursor move some styles to global app.css fixed mobile spacing for header and footer
split time between website and register docs, bc i keep going back and forth and cant decide whether the website or the docs are more important. anyways register: create base doc files for quickstart and requirements write docs for quickstart guide remove cringy line on the register repo readme website-v2: made a base domain query page (unfinished) new page-container class in global styles used for consistent margin and padding fix link styles in docs handle form submission for homepage subdomain search better query param handling for docs loaddoc function tweaks for handling input styling changes to docs
mostly spent fiddling with a bit of ai and doing finishing touches before deployment. this was supposed to be 2 devlogs but i forgot to post and just continued coding but oh well. a lot of styling tweaks for markdown displays and forms install marked alert plugin for gfm alert blockquotes scrollbar, article, disabled button, and other element styling made footer stick to the bottom regardless of content height move loaddoc function to lib for use in other pages such as query function to remove apex domains from query if present implement subdomain suggestions html structure readme display for announcements loading indicator texts change nav link from config to query after this im gonna write docs/requirement.md and polish the github org a bit before shipping (hopefully) tomorrow
fix wrong key on website add discord domain verification record for is-my.id wrote website requirement docs fixed grammar errors and typos (thanks claude) remove outdated docs notice replaced part-of.my.id’s v1 website with placeholder for v2 last final touch ups v2 website should be live now
added important links polished org readme added a profile picture for the org and website add a nametag gimmick on the website (desktop only)
changes are half complete but i decided to devlog rn to keep things short. please note these changes arent pushed yet as im writing this website: rename /q and /d to /query and /docs change redirect links to the new routes add background stars from my personal website made a records page for creating subdomains and editing existing records (incomplete) implemented fetch function for getting records change query link to redirect to record page register: replace /docs/*.md code blocks to actual doc links only resolvable when viewed from the main website
almost forgot to devlog! anyways website: made a draft object for the form, should make interactivity easier to implement styling for checkbox, hr, and disabled input elements made an ARRAY_RECORDS string for supported records in type of string[] implemented form for registering subdomain records made readonly if subdomain is taken
edit: okay so i forgot some other changes but i cant really add those minutes to this devlog so ill just put the change here: added a character limit to the homepage search input (register repo) add a tip in quickstart doc about webui registering end of edit add warning texts for empty records and submit button pretty format resulting json enforced populated records instead of allowing empty domain registration form layout styling tweaks and fixes to inconsistency spacing add a success page that waits 5 seconds before opening github and displays next steps change submit functionality to redirect to success page code cleanup from unused variables and inconsistent spacings
okay well ships on this project isnt really doing the best in terms of stardance output, so i really need to address a lot of these critics if i want good multipliers. anyways so most of the time here is spent on writing ci tests for the register repo. however, i decided to scratch the majority of this code due to poor implementation execution. so this devlog will only have commits resolving some critics. website: fix z-index header bug where some elements would appear above the bar add a warning tip to the website repo readme for anyone who ends up there instead of the register repo changed the view source link for this project on stardance to redirect to the register repo updated the readme (adapted from my personal website repo readme) register: (scratched) test framework with raw js and bun add a tip for registering via web ui last commits from git repos (pinpoint for writing the next devlogs): register: 1564638a6d7eccc495a89948145898d0e4a1ddfc a1e2b4e4cf511f921ffc6b78bca260133afe4e7d okay a bit of a rant but school is starting to burn me out again. honestly i already got my certificate but now my motivator is gonna be the shop items. (i havent spent anything yet, not even for domain grants) im saving up and will spend after stardance ends. i am planning to hopefully do at least 1 - 1.5 hours on weekdays and hopefully overtime on weekends. we’ll see how that turns out i guess.
split time between writing docs (uncommited, might be discarded due to low quality) and writing tests leveraging bun apis. these tests are not completed, therefore they wont be used for github actions pr check workflows (yet). wrote docs: beginners guide (partial) and unsupported services (empty) extracted typescript types and constant to schema.ts for use in test units initialized bun for package management in the future if needed created deep.test.ts wrote test for checking unknown files outside of the /domains/[apex] directories wrote test for checking file names valid subdomain fqdns wrote test for checking if json is valid and parse-able
so mostly focused on improving the register repo and docs experience as i feel like the website is established and complete at this point. i am still learning the bun/jest api on writing test code so this may not be perfect, but its a start! made a wrapper function for looping through subdomain files using callbacks and bun fs api improve regex checks for ipv4, ipv6, and fqdns based on ajv-formats npm package (regex is copied pasted from source code rather than installing the package directly as that introduces bloat and dependency management) slight fixed to tests handling promises (still rather broken but ill fix that later) add new constants for looping though records made a helper function to read subdomain file and parse the json. both using bun fs api update all test fail messages to print file paths for easy tracing new test to check schema structure and record values using ip and domain regexes
ts is me with random lock in phases: still not fully implemented to be included with the testing workflow, i have a lot of features planned but i prefer to finish this first. better error messages for expect fails extra checks for empty objects, arrays, and strings made most/all tests use testing api specifics rather than a conditional check if expression is true (for better error messages) add a check for capping filenames to less than 245 characters (as per dns hostname rules) checks for nested apex in filenames (example: steve.is-my.id.json is invalid) reorder some tests add a check for uppercase letters (one of the existing subdomains violated this rule so i fixed it manually) add a check for repeated dashes (–) as the current regex doesnt catch this and i didnt feel like changing it created empty tests as drafts for later to be implemented remove unused ALIAS record handling as it was used internally but not needed anymore
made a new field in the getDomainRecords helper function to check for file existance and handle json parse fails made a new helper function to generate subdomain file path based of apex and subdomain changed tests to use the new implementation of getDomainRecords implemented tests for cloudflare proxied rules implemented tests for dns limitation rules implemented tests for root and nested subdomain ownership
last commit hash: 2d191fa190db7b3904256e96b27dd6608d42af56 fix existing record files failing the test fix test to exclude .json extension during name length test add a check for unknown and typoed keys added draft tests for website reachability made draft/empty tests fail on purpose check subdomain if containing any apexes minify some parts of the code to one liners made ownership checks per level (a.b.c.json checks for b.c.json and c.json instead of just c.json) added safeguards to not print multiple failures if root cause is erroring out to make sure errors are readable reorder some tests to run first than others used node:path’s path.join for path handling moved json parsing expect calls to helper function for reading json to eliminate repeated code made most of the error messages clearer to follow
last commit hash: 72f864ff282701585c5d43d5818a5ee22c29e168 supposed to be 3 separate devlogs but i genuinely forgot to. so im gonna split this changelog to categories. bun test validation: add github helpers for fetching diff and raw files from commit and raw urls implemented tests for checking changed file owners against pr author added a bypass label for ownership transfer extra types and functiong tweaks to existing library apis skipped pr author check if pr number for checking isnt present remove uneeded exports in some files as most are internal use optional chaining for clearer error messages in ci project structuring: split deep.test.ts to multiple focused files instead of relying on describe() grouping split helpers, constants, and types into a their own library file move tests and shared libs into /scripts/lib and /script/tests respectively github actions: wire bun tests into ci updated ci triggers for prs, manual, and push settings removed step for validating with json schema in favor of bun tests rename a couple of step and job names for clarity misc: add some missing semicolons tab space consistency fix a couple of variable names
last commit hashes: website: 8410efa3debca260451e80b206b2ec8923a45c7c register: a1aefd289360a874e40e09c9b2817501d3b2590f i again forgot to devlog so heres more category based changelogs. after this im gonna add support for redirect record in the web ui website: added table of supported services docs added styling for article tables adjust minor ux tweaks for a better experience maintenance: run bun update to update deps and lockfile add a short 4 step tldr on the website landing page add a short tldr in the quickstart guide register: added new record type: REDIRECT, a cloudflare single redirect rule powered 302 redirect implemented tests for redirect wrote docs in references.md about new REDIRECT record migrate hardcoded extracommits into their own domain files added brief registration guide in README wrote new docs for supported services table add tldr for quickstart guide adapted from brief guide in main README register misc: fixed some names in github actions workflow files
last commit hashes: website: f04e761e0557d7c5c7bfd6a680bec5a6cfbca44a register: 154bfb712857b9000d00ba0e6ea613064f367246 last devlog before shipping :D website: added REDIRECT record support to web ui editor (thanks claude) minor ux and styling fixes with labels and lists purely and only server side render docs page reworked steps section to be more appealing register: added small note to docs in the supported services section for when you want to add a supported service thats not listed
last commit hashes: website: a4917bbdf5899623b6dfcae356e01572dfbceb05 realized there were some issues after shipping so im fixing them now. got a near perfect lighthouse score :D fix responsive size on landing page cards added missing meta tags for SEO added banner for meta tags handle github rate limiting on landing page fix accessibility on landing page buttons optimized github avatar images fetching to fixed size fix document heading hierarchy code cleanup removing unused comments font optimizations with preconnect hints and preload tricks
last commit hashes: website: d27e3b5f90cfcb4a59d39a6fe507c45388a323ec register: 24080879b4fbb1bb8c9e436dc8f2bdefce64af4f energy on mondays to work on this phew website: added doc entry for faq page added support email in website footer adjusted spacing and sizing on containers to make other elements visible handle disabled js for forum and counter integrate lavender theme throughout landing page added table of contents to docs page via marked plugin for gfm heading ids mobile input layout fixes for records web ui page register: added domain configurations for google search console and cloudflare email routing for support email added ignore directive to dnscontrol for cloudflare managed records added extra rules against vibe coded websites github workflow file fix causing some checks to skip grammar fix across markdown files (thank you claude copilot) added pr labeling automation for detecting non domain changes in a pr quickly modified dnscontrol script to add incrementing mx priorities based on order of entry clarify rough points within documentations added draft beginner guide docs added new documentation for frequently asked questions code cleanup: remove comments, fix indentation reorganizing files and directories to put images in appropriate locations fix gfm blockquote alert usages added all full records to example file contents in reference documentation
a bit of a rant before anything, PLEASE JUST DO YOUR RESEARCH BEFORE RATTING MY PROJECT. may come off as mean but please. yall asked for detailed and concrete docs and end up saying its “too long” like bro 😭. i do have one more plan for tutorials to make it easy. but if this doesnt help then go rtfm last commit hashes: website: 122e3777c7c52e7bf05a8a32f7e4f91b11d09ada register: d7ac98d86913daad3c18260120e41dda2873f8ef got stacks of homework today so i cant really do my 2 hour daily goal rn unfortunately :( but trust me, i will get that 11 hour weekly website: rename doc link “requirements” to “terms” new favicon of indonesian flag (using emoji variation from discord/twitter) might use this for a logo later code cleanup and simplification remove unused variables in code query page with ssr optimizations moved /query/[query] to /query handled passing subdomain query to form body changed landing and query page to use sveltekit form actions made readme announcement fetching ssr hide subdomains when query is empty made apex listing ssr register: fixed github actions workflow labeler created issue templates for bug report, abuse report, and support questions added abuse report information and email to main readme changed query url to match website
i forgot to devlog yesterday ;-; also i was supposed to work on other important aspects like the tutorial and barely finished pages. but ngl looking at the existing pages and adding small improvements and tiny details just feels more relaxing for me. but i still need to do that tutorial because stardance said so ;-; last commit hashes: website: 2de11547f2cc7e0b8ad3c107fbee8d44e0a97682 register: 2e183b224fdce4811b05c89b9f594551c13a7dad lowk idk when but i got mystery motivation and im racking up good amount of hours/day. i do have a goal rn to try and buy an bambu lab 3d printer so thats prob a contributor to my motivation. website: code cleanup, remove unused typescript code import use tables in record forum page for consistent spacing fix hover confusion on disabled inputs by disabling hover background color change remove unnecesarry label (just please research about dns 😭 ) added more dividers to records form page add clarification that subdomain descriptions are optional make pfp previews link to github profiles bug fix to REDIRECT records on read only mode improve table of contents styling to tree like stem made toc and md parser function also generate heading numbering (e.g. 1.2.3) (unused for now) code cleanup, remove empty new lines to compact code made table of contents entry highlight depending on view (js required) close table of contents in docs by default tweaked query page styles for showing borders set disabled state as default in records form hide checkmark if input is disabled added fork warning in records page added the ability to edit registered subdomain hide table inputs if empty register: clarity to reference docs regarding CNAME and REDIRECT changed heading level in Terms of Service AI section
all my energy went into working at the weekdays 😭 now im hella tired. either that or im procrastinating more. last commit hashes: website: e4e59479ec953dcfb63e0965518d35906ab625e8 im still hopping i can at least reach 11h a week for my goal. training before i switch to another ysws when stardance ends fr website: code cleanup, add missing semicolons and remove unused imports added common issues help guides with screenshots to next steps page added back to query link for record editor page unified box styling across the site for consistent design made edit button in record editor yellow if subdomain taken grammar fix to landing page paragraph :p query page: moved announcement to the bottom of the page minor styling changes to borders, seperators, text selection, and cursors
genuinely so tired for some reason. prob from playing mc recently and dying and lossing my stuff to despawn timer. OKAY! enough trauma dumping. we got work to do last commit hashes: website: e4e59479ec953dcfb63e0965518d35906ab625e8 register: mostly a lot of janitor work: code cleanup and directory reordering. but theres also an auto formatter in the workflow now! website: fix heading centering from last devlog, found bug after testing mobile view register: move dnsconfig.js to /scripts/bin for organization installed oxfmt for formatting files added bun fmt script to package.json added oxfmt config file with exclusion rule on everything but /domains formatted every domain file using oxfmt added notes for cf tunnels in /docs/services.md (unsupported services) add prettify/formatting workflow for every push code cleanup: remove unused nodejs step in workflow file, were using bun anyways code cleanup: whitespace and newline removal add tip and caution alerts in quickstart guide regarding pr checklist and prettify formatting
this is when im starting to head bang a lot, because of an undocumented github feature ive been relying on for web ui editor. last commit hashes: website: f1e3a4387e6780d61bc55feeead37ead03ec3b0a register: 5625239d30e691ace298336953d663b6e396c0e3 so ive been using github’s REPO/new/branch/PATH?filenam=A&value=B query params for prefilling records in the web ui editor form. during testing, i noticed that for some reason JSON.stringify isnt formatting the json when i open it on github. after a bit of testing, turns out github minifies valid json input. when i tried some string concats with JSON.stringify output that produced invalid json then the indentation returns. this is rather confusing and frustrating. even tho the ci now handles formatting, its still a pain for pr reviewing to review unformatted, one-line json files. due to github not really documenting this feature well, i suppose we have to live with it. i do have plans later to possibly use octokit instead for pr generation, but thats a lot more work i dont have time for. anyways, i didnt feel like writing changelog so ill just say it in brief. i added email regex checks to the ci as well as formatting warnings. and for the web ui, i made an advanced view to show raw json and the file path in case someone is willing to do it themselves. i also fixed a lot of the unserious things i threw around the success page like the ??? step
well more time without devlogs, but i didnt work on anything massive anyways so should be fine. last commit hashes: website: 6fee809e77174f42e3ece9c71d2d8b6a95120d69 register: 4c1860c68904c5378a761a100013ce3da8836771 this is gonna be the last devlog before i ship for the last time. or not, but ill most likely work on other projects. i do still have 1 more thing to do which i might or might not do. depending on how hard it ends up being. then again i am paid by the hour sooo….. but school is starting to get busy again so ig we’ll see register: completed the draft /docs/domains101.md doc for introduction to the service website: add handler for /docs/[empty] to redirect to first in line defined doc moved loadDoc helper function to $lib added a loading bar for indicating page load in progress add previous and next buttons to the bottom of docs page added domains101 doc entry
damn, i was obsessed after loosing a streak to recover it that i forgot to devlog :p last commit hashes: website: cdc095290ad6e1cef4555ed497ab358a6fbb9608 nothing much for user side, this was mainly code cleanup and a bit of logic rewrite. this makes sure that in the future adding more record type support is as easy as adding 1 line to the SUPPORTED_RECORDS field. cleaned up duplicate Object.entries() calls moved record rules handling to separate library file(s) rewrite records page to be more modular and scalable when adding more record types in the future created regex constants in a separate library file due to sheer sizes of these regexes (copied from ajv-formats, same regexes used in ci) simplify duplicate row table creation into a svelte snippet fixed a lot of deprecated imports code cleanup, remove unused imports, exports, variables, and type declarations again, last devlog for this project. its been a good run
Ships:
VERSION 2.0 IS LIVE Registration instructions are available on the website. part-of.my.id is a free subdomain service that allows you to get a sleek lookin your-name.part-of.my.id domain instead of a the boring old one that hosting providers provide like pages.dev, github.io, etc. This rewrite brings to you: Multi apex domain support for the new domain: is-my.id A sleek redesigned main website and documentation
this should have improvements from last ship’s suggestions and feedback /record and /success page for generating json fixed broken links (no /d or /q anymore) added background elements to make website feel more alive
okay a LOT OF NEW FEATURES and improvements from last devlog feedback: subdomain service: NEW record: REDIRECT, a CloudFlare Single Redirect Rule powered robust tests using bun’s built in jest compatible testing API website & docs: NEW docs: /services, listing all known tested and working services tldr in the docs and README for quick registration support for REDIRECT records in webui editor short consice guide for registering
NOTE: (please read before reviewing) please do your research on what DNS is and how it works before ratting. the docs will explain it for you but PLEASE dont just say “idk what it does so i give low ratting”. BOOM!!! final version. 52 hours, a milestone i never thought i reached. this was truly a journey. stardance got me from burnt out back to enjoying coding again surprisingly. i deff learned a lot, especially during rewrites using a lot of language features like typescript’s non-null assertion, svelte 5’s snippet templates, and tailwind’s important css operator. anyways, here’s whats new: more docs to explain to newbies on what DNS is and introduction to the service improved doc browsing navigation with table of contents and next/prev buttons editing for existing subdomains (that you own of course) code rewrite (again), extra strict subdomain editor added contact email for support and issue reports moved a lot of pages to ssr based rendering (lightning speed performance!!!) performance and SEO enchancements ci addition for auto format and labeling ci checks for emails thats it for this project. cya in the next ysws hackclubbers ;)...
|
1793573745.4144466
|
1793660145.4144466
|
|
46964
|
slack bot by @krupa_pramod | Stardance
|
krupa_pramod
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-13T16:08:15Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a study bot that allows you to add, view homework, remind you to do your homework, do fun facts, and a help command. This was my firstish time working with a lot of Javascript so it was kind of difficult but it turned out to kind of be like Java (I should’ve known), so that was good. The guide was also super helpful. Very fun and unique project! I enjoyed this.", "repo": "https://github.com/krupa-pramod/slack-study-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}]...
|
[{"post_id": 46165, "ts": "202 [{"post_id": 46165, "ts": "2026-08-13T06:03:55Z", "hours": 0.6261, "text": "made homework list, view homewokr, and timed reminder"}, {"post_id": 46152, "ts": "2026-08-13T05:10:16Z", "hours": 0.7594, "text": "Created a fun fact api command and also the help command"}]...
|
Title: slack bot by @krupa_pramod | Stardance
Dev Title: slack bot by @krupa_pramod | Stardance
Devlogs:
Created a fun fact api command and also the help command
made homework list, view homewokr, and timed reminder
Ships:
I made a study bot that allows you to add, view homework, remind you to do your homework, do fun facts, and a help command. This was my firstish time working with a lot of Javascript so it was kind of difficult but it turned out to kind of be like Java (I should’ve known), so that was good. The guide was also super helpful. Very fun and unique project! I enjoyed this....
|
1793573744.2290564
|
1793660144.2290564
|
|
44326
|
pancakeJr by @pancakse | Stardance
|
pancakse
|
1
|
7.0
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T07:36:18Z", "hours": 7.0, "multiplier": 3.99, "payout": 28, "blessing": "neutral", "text": "its a discord bot! Working with SQLite3 since i hate db’s", "repo": "https://github.com/ItzPancakse/pancakeJunior", "demo": "https://discord.gg/xM2pg6nK8n"}]...
|
[{"post_id": 44462, "ts": "202 [{"post_id": 44462, "ts": "2026-08-10T07:09:59Z", "hours": 0.7125, "text": "Ive added a system so you get dmed if you get punished"}, {"post_id": 43643, "ts": "2026-08-09T01:01:41Z", "hours": 0.5325, "text": "DEVLOG 8: I’ve added a 8ball command, a command that lets the bot confess something and totally legit breaking news!"}, {"post_id": 43603, "ts": "2026-08-08T23:22:22Z", "hours": 0.4803, "text": "DEVLOG 7: We added a diagnosis command totally real diagnoses"}, {"post_id": 43573, "ts": "2026-08-08T22:02:59Z", "hours": 0.5169, "text": "DEVLOG 6: You can roast yourself or your worst enemies by pinging them. You can also give yourself or your friends bad compliments. My discord bot can now “mrrp mrrp meowww”. Btw dont try to roast Gabe Newell 😉"}, {"post_id": 42328, "ts": "2026-08-07T00:26:50Z", "hours": 0.6036, "text": "DEVLOG 5: You can now ratio your friends and we added a afk feature"}, {"post_id": 42265, "ts": "2026-08-06T21:53:13Z", "hours": 0.6503, "text": "DEVLOG 4: We added triggers for Try it and see and dont ask to ask"}, {"post_id": 41751, "ts": "2026-08-06T04:36:22Z", "hours": 1.8733, "text": "DEVLOG 3: We added alot more commands mostly in the catagories of moderation and a auto punishment system like if you get 3 warnings you get a 1 day timout"}, {"post_id": 41604, "ts": "2026-08-05T22:10:30Z", "hours": 1.1036, "text": "DEVLOG 2: We got commands and we got the bot online unfortunately we tried to get slash commands but Discordia-Slash decided to not work so we are using a prefix"}, {"post_id": 41529, "ts": "2026-08-05T19:56:23Z", "hours": 0.4658, "text": "DEVLOG 1: Were making a discord bot so we got luvit setup and we setup a system to read a .env file because its more convenient"}]...
|
Title: pancakeJr by @pancakse | Stardance
Devlogs Title: pancakeJr by @pancakse | Stardance
Devlogs:
DEVLOG 1: Were making a discord bot so we got luvit setup and we setup a system to read a .env file because its more convenient
DEVLOG 2: We got commands and we got the bot online unfortunately we tried to get slash commands but Discordia-Slash decided to not work so we are using a prefix
DEVLOG 3: We added alot more commands mostly in the catagories of moderation and a auto punishment system like if you get 3 warnings you get a 1 day timout
DEVLOG 4: We added triggers for Try it and see and dont ask to ask
DEVLOG 5: You can now ratio your friends and we added a afk feature
DEVLOG 6: You can roast yourself or your worst enemies by pinging them. You can also give yourself or your friends bad compliments. My discord bot can now “mrrp mrrp meowww”. Btw dont try to roast Gabe Newell 😉
DEVLOG 7: We added a diagnosis command totally real diagnoses
DEVLOG 8: I’ve added a 8ball command, a command that lets the bot confess something and totally legit breaking news!
Ive added a system so you get dmed if you get punished
Ships:
its a discord bot! Working with SQLite3 since i hate db’s...
|
1793573743.0252101
|
1793660143.0252101
|
|
40515
|
Project 1 by @FR4NC3SC0S0 | Stardance
|
FR4NC3SC0S0
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-28T09:56:10Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a simple presentation site with a classic, easily replicable design. I made the site responsive, so it can be accessed from any device.", "repo": "https://github.com/francesco09p/Project-1/", "demo": "https://francesco09p.github.io/Project-1/page3.html"}]...
|
[{"post_id": 35861, "ts": "202 [{"post_id": 35861, "ts": "2026-07-27T16:00:32Z", "hours": 2.785, "text": "I built the entire website from scratch."}]...
|
Title: Project 1 by @FR4NC3SC0S0 | Stardance
Devl Title: Project 1 by @FR4NC3SC0S0 | Stardance
Devlogs:
I built the entire website from scratch.
Ships:
I created a simple presentation site with a classic, easily replicable design. I made the site responsive, so it can be accessed from any device....
|
1793573741.821429
|
1793660141.821429
|
|
44314
|
Cami by @barfpile | Stardance
|
barfpile
|
3
|
36.0
|
530
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T10:41:56Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i, as a buku buku, must say i hate the beans! so basically this is an account and social system it’s taken a decent amount of time to get here, and has been used in other projects by me! Flask - TinyDB", "repo": "https://github.com/fries-git/Cami", "demo": "https://fries.hackclub.app/demo"}, {"ship_num": 2, "ts": "2026-09-22T22:22:29Z", "hours": 23.0, "multiplier": 17.33, "payout": 392, "blessing": "neutral", "text": "Welcome to Cami! It’s been a difficult 30 hour journey and I’m tryna get me Factorio to wrap up this awesome summer. :P Warning: The client is AI-Generated, it is not the project, simply a tool so you guys don’t have to make raw http requests with python. None of the rest of the project is AI-Generated.", "repo": "https://github.com/fries-git/Cami", "demo": "https://fries.hackclub.app/demo"}, {"ship_num": 3, "ts": "2026-08-11T05:46:34Z", "hours": 10.0, "multiplier": 14.13, "payout": 138, "blessing": "neutral", "text": "Cami is a full authentication backend. I made this for use in my own projects, and as a way to learn web stuff with flask. It was challenging just getting it all working. Combining Flask and TinyDB (things I’m not too familiar with) to make this come together. To use, register an account on the homepage, then click around and see what you can do! THE CLIENT USED IS AI: I do not know how to do frontend html work, and that is not the project. The project is the backend python.", "repo": "https://github.com/fries-git/Cami", "demo": "https://fries.hackclub.app/demo"}]...
|
[{"post_id": 84249, "ts": "202 [{"post_id": 84249, "ts": "2026-10-29T10:39:44Z", "hours": 0.9403, "text": "The Final Ship I’m sitting here at 6:38 am and I’ve realized today is the last day. Drop a comment down there because after this… It’s gone. (I’ve been working on a few various functions to get live chat working really nothing worth talking about, as well as fixing files, and making it so the server can list all pfp decor.) https://fries.hackclub.app/demo"}, {"post_id": 76876, "ts": "2026-10-04T22:06:07Z", "hours": 1.0306, "text": "Fixes/Tweaks Might as well just get some time out here, I’ve literally been working on livechatting and misc fixes. I’ve been so stressed and tired and distracted I don’t remember working on this at all. I’ve moved primarily to working on Phantom, tryna get me a blahaj and balatroooooooo also its been 12 days please ship me my items 😭 Live Chatting Decentralized? Check Ability to change servername dynamically? Check Editing/Deleting messages? Check we’re so goated :)"}, {"post_id": 75357, "ts": "2026-09-29T20:49:47Z", "hours": 1.46, "text": "Well it was fun! (Its going for another week after i blow all my stardust.) Hello stardancers. Its 9-29-26. I’m not going to be able to make another ship and get it rated. Thank you everyone so much for the support on this project, and thanks for running Stardance! Mainly just working on live chatting, a decentralizable chatting service similar to discord, which will be picked up on phantom.hackclub.com. For anyone wondering what I got out of Stardance: 1 domain Outpost Badge (will make a project with that too!) Factorio Pico-8"}, {"post_id": 72426, "ts": "2026-09-22T22:21:17Z", "hours": 0.2506, "text": "AI generated a client so people can actually use it. Once again, I truthfully, have not used AI in this project for anything but front end, which I do not know how to do. Over the course of testing I have mainly used raw HTTP requests."}, {"post_id": 72420, "ts": "2026-09-22T22:02:45Z", "hours": 2.6606, "text": "A lot… I JUST BROKE 30 HOURS ON THIS PROJECT SERVER-SIDE CODING OMG!!! :D Well Cami has been rolling along reallllllllly quickly. Things I’ve added/worked on: Playlists/More Music Stuff Fixing up the post search api Remake of ws chat server Fries have been implemented Fries transfer is working Fries daily claiming is working So many fixes (many things didnt quite properly handle errors and so they have been fixed) Changes to your user info are being locked behind fries. (PFP Decor is locked but pfp, bio, and more will be locked, basically everything but password changes) Image/Music uploading will likely be locked behind fries, or you will have to pay fries to upgrade the amount of stuff you can store. More PFP Decor has been added to my personal instance but that doesnt affect here. Server logs are prettier. More info attached to the user queries. Thanks for reading and sticking with this shitshow of a project."}, {"post_id": 71293, "ts": "2026-09-20T16:11:07Z", "hours": 1.9511, "text": "Music Server/New Chat Server Hello! I’ve lately been working on a music server. Users can upload any sort of audio file, mp3, ogg, it should support mp4 but i haven’t tested, and it converts it to an ogg file. The ogg file has a roughly 75% file size to the original MP3 while keeping the same quality. I’ve also been working on things like metadata storage, playlists, and more. On top of music, I’ve started a full rework of the live chatting system. It’s been going well so far, but I’m changing up how it works a little. It’s going to be closer to IRC + DMs, there will be no locked channels, no way to create custom channels anymore. Hopefully I can also drag some more people in, and make it much simpler to use, and on top of this make it super easy to link to Discord and such. So yeah! It’s been going well, I’m still alive, I’m running out of time to ship… and uh yeah! Have fun coding!"}, {"post_id": 69922, "ts": "2026-09-18T02:21:37Z", "hours": 1.1539, "text": "Fixes, Simultaneous DB Editing, and JSONifying. Quick one since its like 11pm, I’ve been working on a lot of fixes. I, since the start of this project, haven’t closed DBs. Think about that. I am an intelligent human being. I’ve also been working on getting searching working (image) for the social api, and making sure everything works with that. On top of this, everything is still getting organized, and made to have very similar responses, so as a dev less work has to be done for you to support it. I also kinda started on a python library, but eh, we’ll see how it goes I suppose. Also have been working on some security, nothing commited, to try to make it harder to hack ig. Gn stardance! (im sick)"}, {"post_id": 68332, "ts": "2026-09-14T23:16:24Z", "hours": 0.4742, "text": "Multiplayer Im in the midst of making an extendable WS based multiplayer server, and figured I’d test it with a cool game somebody I know made! It’s a W.I.P. but works pretty well and everything server side is done lol."}, {"post_id": 66929, "ts": "2026-09-12T22:02:14Z", "hours": 0.4564, "text": "Im back Been working on the project a bit. Mainly just working on docs and helping people understand the API in a more sort of private environment. Should push a ship eventually, and its gonna be super awesome for everyone! :D Also maybe I did a devlog but i added timestamps to posts and stuff and made the total requests needed to do everything muuuuuuuch smaller, and made a smaller cache of data needed."}, {"post_id": 62232, "ts": "2026-09-05T14:31:16Z", "hours": 0.9633, "text": "LATEST UPDATES Auth Securely, Auth Silly <3 Normalizing Returns I’ve been doing a lot of work on simply normalizing some returns. Some of them were just slightly different like “The token is invalid” vs. “Invalid Token”, so those were condensed into “invalid token”, on top of this whenever i return a message i wrap it like: {\"cmd\":\"success\",\"message\":\"<original message>\" . On top of this I also went through and changed some of the codes. DB Fixes Next thing I need to fix is any DB access needs to be routed through the helper funcs and properly closed. If you change your name, half the project still thinks only the original exists, while the other half, the correct half, only sees the new name. The reason is I have broken the project up into like 5 python files, 2 of which are both trying to simultaneously access the DB. Which, in-case you were wondering, is not good. Less Requests Something else I’ve been working on to prevent clients having to make like 3 requests for one thing, and to prevent the server from having to handle those, is to whenever a message is saved to the DB say from the social endpoint, when I send it back down, I attach the username and display name to it. This takes >2 http requests, get the messages then the usernames and user info, down to just 1. (Until you grab user pfps, which should be just grabbed once and cached.) Because this is really all I did I like… don’t have pictures? So… Enjoy the little 88x31 I made Also this is probably the longest devlog I’ve ever made, but I’m bored, and since I just got 6 months of Spotify premium as a gift, I’m letting the weird AI DJ thing just play whatever it feels like. It does, however, keep going back to the dark ages of 2024. Let me forget that year of music listening…"}, {"post_id": 60382, "ts": "2026-09-02T17:53:50Z", "hours": 1.9931, "text": "Fixes and Usage Well hey! It’s been a hot minute right? Lately I have been working on a lot more fixes, mainly on things like the social endpoint, and the image endpoint. Not terribly visible portions right now, but majorly important! I also got a used RPI5 which is now hosting it. That means, no more Nest downtime issues resetting my code! Yay! Notable Changes: The social posting endpoint returns the whole message object instead of just the ID. Files have been reorganized to be much cleaner Tons of little crashes and issues have been cleaned up, there are still more. I’ve started in on beautifying the logs!"}, {"post_id": 55320, "ts": "2026-08-27T02:04:33Z", "hours": 0.3108, "text": "Quick Devlog for the reroll Started just adding more pfp decor, had some people make me some. Yippee! Quick update: that’s not mine and I didnt get permission to use it, its the one i had for testing first because I got it from somewhere else real easily. It has since been removed, in favor for other ones I do have permission to use."}, {"post_id": 54861, "ts": "2026-08-26T01:43:17Z", "hours": 0.7211, "text": "Fixes and Continuity So basically this was just fixing a lot of weird things. For example, this being the main thing, the pfps stored whenever a user uploads them, get stored as 128x128. But the empty pfp, was 256x256. On top of this in some websocket things i was using \"msg\":\"content\" or \"message\":\"content\" interchangeably, but this has since been normalized. In all its just been a productive time, I’ve added a bunch, started working on a python library, and just gotten ready for ship 2!"}, {"post_id": 53675, "ts": "2026-08-24T10:50:24Z", "hours": 0.9739, "text": "Fixes and new paint Pretty much everything I have worked on this devlog simply involves fixes. “Oh, I’m not handling invalid json on a route, oops!” Or: “Oh usernames can be >32 chars because i messed up my if statement.” (I learned this one when someone with the entire bee movie script as their name appeared on my users route.) While it was all fixes I worked on, on top of this, due to wanting to commit roughly once every hour to keep people updated, I rewrote the empty path so it looks better. Link still points to the github repo. Auth Securely, Auth Silly."}, {"post_id": 53089, "ts": "2026-08-23T14:50:20Z", "hours": 1.5633, "text": "PFP Decor / Display Names ALSO I HIT 20 HOURS These have been wip and were quite simple to implement, display name is just another value in the TINYDB database for users, and so is the profile decor. I got it from another app so I can’t really commit it because its not mine, however it works! There’s no way to set it yourself I just hand edited the DB. Also, users can now edit their username! I know that was a massive complaint in the first ship. Past that really all I changed was paths. Before i had paths like /getuser?user=fries which was dumb. I figured out how to, with flask, make it /user/fries and it gives the same information. Much cleaner."}, {"post_id": 50019, "ts": "2026-08-19T01:27:36Z", "hours": 2.4608, "text": "More Livechat and Currency Livechat: So I’ve done a lot more on livechat, you can create channels now (properly,) delete messages, almost have it so you can edit them, and typing indicators are almost done. Currency: I’ve started figuring out how users should get currency, and what it should go towards. Right now, the main idea is get it daily by posting/using livechat, then spend it on customization like user color, or upgrading max bio length."}, {"post_id": 49218, "ts": "2026-08-17T21:28:23Z", "hours": 0.6536, "text": "More public channels and locking!"}, {"post_id": 48867, "ts": "2026-08-17T13:00:31Z", "hours": 2.4442, "text": "Live Chat Fixed! I fully fixed and implemented the livechat. It supports the creation of channels with passwords, message history, joining channels, sending to channels you’ve joined. If all users leave the channel, unless its a keep-alive channel, mostly predefined channels with no passwords like general and off-topic, the database for message history gets wiped, and the channel is up for grabs again! I dont have any pictures really, I did it last night on a different PC, so enjoy an 88x31!"}, {"post_id": 48487, "ts": "2026-08-16T21:10:31Z", "hours": 0.4981, "text": "Live Chat Live chat is working in its most basic form! I did censor the usernames, solely because they used their real name lol. Color coding different users, the same person is censored with the same color across pics."}, {"post_id": 47555, "ts": "2026-08-15T15:07:11Z", "hours": 1.2475, "text": "GIFS Gifs have been added to the image api. (I can finally new line again!) Images you go: https://images.barfpile.dev/getimage/filename gifs you go: https://images.barfpile.dev/getgif/filename.gif (you can remove the .gif at the end and it will work fine everywhere but discord. You can also use getimage on a gif, but again, will work anywhere but discord.) (Attached gif was added by someone, idk who, while I was testing gifs lol. I am going to add basically metadata so you can get https://images.barfpile.dev/getmeta/filename and retrieve things like timestamp uploaded, filename, and who uploaded it.)"}, {"post_id": 47174, "ts": "2026-08-14T21:26:35Z", "hours": 1.8294, "text": "Images and livechat - I made an image api! You can upload infinite files, compressed to be 1/3 of their size ofc. Also started implementing live ws chatting with infinite channels that can be password locked. https://server/getimage?filename=testimage"}, {"post_id": 45027, "ts": "2026-08-11T05:44:27Z", "hours": 0.6342, "text": "Ship Time! I just added an AI test client, I am not disclosing this as AI usage in the project, as this really isnt the project, and is only meant so users (like me) with virtually 0 front end design knowledge, can just use this, now, in the web. THE CLIENT YOU SEE IS AI PLEASE DO NOT JUDGE AGAINST THIS AS NONE OF THE SERVER CODE (the true project) IS AI"}, {"post_id": 44750, "ts": "2026-08-10T18:39:05Z", "hours": 0.6975, "text": "PFPS Got a little sidetracked ya know just casually implemented pfps. no big deal. https://fries.hackclub.app/userpfp?user=fries"}, {"post_id": 44453, "ts": "2026-08-10T06:37:50Z", "hours": 0.6025, "text": "#SSE Approach - This took so long, its not done, and quite frankly I’m so tired. Why did I chose sse? Compatibility with old hardware and, like most of my projects, learning and goofing around. This has the added benefit of making this all exclusively http, and being able to get integrated into my system of endpoints i already have."}, {"post_id": 44433, "ts": "2026-08-10T05:52:03Z", "hours": 0.8692, "text": "Rewrites and Backtracking Really nothing has been done. I spent a decent chunk of time trying to work with WS and just toughing it out, but I couldn’t get done what I wanted to get done. So I’ve made the bold, stupid, late-night decision, to switch to using SSE for the live chat. Partially so it can be more integrated into my already made systems, however, mainly just because I wanna learn something new. Enjoy this picture of timestamps from me trying to learn Flask’s SSE."}, {"post_id": 44373, "ts": "2026-08-10T02:48:38Z", "hours": 0.325, "text": "quick one, added some more info to the live chat object, namely cmd and channel, this is in preparation for the channels system."}, {"post_id": 44359, "ts": "2026-08-10T02:05:52Z", "hours": 1.9847, "text": "Live Chat and More Worked on quite a bit this devlog. I finished up all the endpoints I would need, cleaned up the server code, made an init file to run it, and started on a live chatting system using websockets. It’s going to support an infinite amount of channels each able to be locked behind a password. However, except for maybe one general chat, no chat history is likely to be stored at this time, simply because infinite chats with no restrictions being stored, is going to eat through storage like mad. However for now it works. I was originally debating that each channel would basically have its own encryption, and then i realized… that’s dumb. I don’t need to do that, and here we are."}, {"post_id": 42866, "ts": "2026-08-07T20:28:48Z", "hours": 0.3258, "text": "Social I worked on the social endpoint, and the reason it says it only took 17 minutes, is I switched to Zed, realized it doesn’t have Hackatime support, and switched back when already basically done lol. I made a little slop coded tool before I actually attempt to make something, even though any sort of interface to use it isn’t part of the project really. Basically, its just a simple endpoint you can post to and get to post and read messages in a sort of twitter-esque environment."}, {"post_id": 42291, "ts": "2026-08-06T22:36:37Z", "hours": 0.345, "text": "Added a little thing telling you what port it was on, and then started it up! https://fries.hackclub.app/"}, {"post_id": 41943, "ts": "2026-08-06T14:02:19Z", "hours": 1.3444, "text": "It works! (Also I learned you can do markdown here) https://fries.hackclub.app/ Yesterday I did a good bit of work on actually making it work lol. I did a lot of work out and about just on GitHub’s website, so when I came back there was a lot needed to get everything working. Mainly when I refactored some of the code into functions in a different file, I completely broke the login. But a little more in-depth about Cami. When you post {\"username\":\"<str>\",\"password\":\"<str>\"} to either register or login, you get back a token. This token is based off your user-id and gets refreshed every time you login (also supposed to be after a day just unimplemented right now.) You then use this to authenticate with (the only commands that need it right now) /changepass or /updatebio. You can also, as shown in the image below, run /GET on /user?user=(username or user id). That’s pretty much the full run down honestly. Passwords are currently hashed with SHA256, although I need to find a better option as I was able to brute force reverse my 8 letter password on the web in <1 minute. :("}, {"post_id": 41495, "ts": "2026-08-05T18:53:11Z", "hours": 2.6375, "text": "Cami - Cami is a silly goofy authentication program for use in my other projects. It currently supports: POST/register - Registering an Account POST/login - Logging in to get a token POST/updatebio - Updating your bio GET/getuser - Getting user information from name or ID (returns fries [currency] bio and account #) I am currently working on: POST/changepass - Changing password Implementing this into a chat system that’s websocket based Adding little games and things This was all done with primarily Flask (for the server), hashlib (for hashing passwords), and tinydb (for storage). It is meant to be lightweight, easy to integrate into other systems, and a fun project in general!"}]...
|
Title: Cami by @barfpile | Stardance
Devlogs:
Cam Title: Cami by @barfpile | Stardance
Devlogs:
Cami - Cami is a silly goofy authentication program for use in my other projects. It currently supports: POST/register - Registering an Account POST/login - Logging in to get a token POST/updatebio - Updating your bio GET/getuser - Getting user information from name or ID (returns fries [currency] bio and account #) I am currently working on: POST/changepass - Changing password Implementing this into a chat system that’s websocket based Adding little games and things This was all done with primarily Flask (for the server), hashlib (for hashing passwords), and tinydb (for storage). It is meant to be lightweight, easy to integrate into other systems, and a fun project in general!
It works! (Also I learned you can do markdown here) https://fries.hackclub.app/ Yesterday I did a good bit of work on actually making it work lol. I did a lot of work out and about just on GitHub’s website, so when I came back there was a lot needed to get everything working. Mainly when I refactored some of the code into functions in a different file, I completely broke the login. But a little more in-depth about Cami. When you post {"username":"<str>","password":"<str>"} to either register or login, you get back a token. This token is based off your user-id and gets refreshed every time you login (also supposed to be after a day just unimplemented right now.) You then use this to authenticate with (the only commands that need it right now) /changepass or /updatebio. You can also, as shown in the image below, run /GET on /user?user=(username or user id). That’s pretty much the full run down honestly. Passwords are currently hashed with SHA256, although I need to find a better option as I was able to brute force reverse my 8 letter password on the web in <1 minute. :(
Added a little thing telling you what port it was on, and then started it up! https://fries.hackclub.app/
Social I worked on the social endpoint, and the reason it says it only took 17 minutes, is I switched to Zed, realized it doesn’t have Hackatime support, and switched back when already basically done lol. I made a little slop coded tool before I actually attempt to make something, even though any sort of interface to use it isn’t part of the project really. Basically, its just a simple endpoint you can post to and get to post and read messages in a sort of twitter-esque environment.
Live Chat and More Worked on quite a bit this devlog. I finished up all the endpoints I would need, cleaned up the server code, made an init file to run it, and started on a live chatting system using websockets. It’s going to support an infinite amount of channels each able to be locked behind a password. However, except for maybe one general chat, no chat history is likely to be stored at this time, simply because infinite chats with no restrictions being stored, is going to eat through storage like mad. However for now it works. I was originally debating that each channel would basically have its own encryption, and then i realized… that’s dumb. I don’t need to do that, and here we are.
quick one, added some more info to the live chat object, namely cmd and channel, this is in preparation for the channels system.
Rewrites and Backtracking Really nothing has been done. I spent a decent chunk of time trying to work with WS and just toughing it out, but I couldn’t get done what I wanted to get done. So I’ve made the bold, stupid, late-night decision, to switch to using SSE for the live chat. Partially so it can be more integrated into my already made systems, however, mainly just because I wanna learn something new. Enjoy this picture of timestamps from me trying to learn Flask’s SSE.
#SSE Approach - This took so long, its not done, and quite frankly I’m so tired. Why did I chose sse? Compatibility with old hardware and, like most of my projects, learning and goofing around. This has the added benefit of making this all exclusively http, and being able to get integrated into my system of endpoints i already have.
PFPS Got a little sidetracked ya know just casually implemented pfps. no big deal. https://fries.hackclub.app/userpfp?user=fries
Ship Time! I just added an AI test client, I am not disclosing this as AI usage in the project, as this really isnt the project, and is only meant so users (like me) with virtually 0 front end design knowledge, can just use this, now, in the web. THE CLIENT YOU SEE IS AI PLEASE DO NOT JUDGE AGAINST THIS AS NONE OF THE SERVER CODE (the true project) IS AI
Images and livechat - I made an image api! You can upload infinite files, compressed to be 1/3 of their size ofc. Also started implementing live ws chatting with infinite channels that can be password locked. https://server/getimage?filename=testimage
GIFS Gifs have been added to the image api. (I can finally new line again!) Images you go: https://images.barfpile.dev/getimage/filename gifs you go: https://images.barfpile.dev/getgif/filename.gif (you can remove the .gif at the end and it will work fine everywhere but discord. You can also use getimage on a gif, but again, will work anywhere but discord.) (Attached gif was added by someone, idk who, while I was testing gifs lol. I am going to add basically metadata so you can get https://images.barfpile.dev/getmeta/filename and retrieve things like timestamp uploaded, filename, and who uploaded it.)
Live Chat Live chat is working in its most basic form! I did censor the usernames, solely because they used their real name lol. Color coding different users, the same person is censored with the same color across pics.
Live Chat Fixed! I fully fixed and implemented the livechat. It supports the creation of channels with passwords, message history, joining channels, sending to channels you’ve joined. If all users leave the channel, unless its a keep-alive channel, mostly predefined channels with no passwords like general and off-topic, the database for message history gets wiped, and the channel is up for grabs again! I dont have any pictures really, I did it last night on a different PC, so enjoy an 88x31!
More public channels and locking!
More Livechat and Currency Livechat: So I’ve done a lot more on livechat, you can create channels now (properly,) delete messages, almost have it so you can edit them, and typing indicators are almost done. Currency: I’ve started figuring out how users should get currency, and what it should go towards. Right now, the main idea is get it daily by posting/using livechat, then spend it on customization like user color, or upgrading max bio length.
PFP Decor / Display Names ALSO I HIT 20 HOURS These have been wip and were quite simple to implement, display name is just another value in the TINYDB database for users, and so is the profile decor. I got it from another app so I can’t really commit it because its not mine, however it works! There’s no way to set it yourself I just hand edited the DB. Also, users can now edit their username! I know that was a massive complaint in the first ship. Past that really all I changed was paths. Before i had paths like /getuser?user=fries which was dumb. I figured out how to, with flask, make it /user/fries and it gives the same information. Much cleaner.
Fixes and new paint Pretty much everything I have worked on this devlog simply involves fixes. “Oh, I’m not handling invalid json on a route, oops!” Or: “Oh usernames can be >32 chars because i messed up my if statement.” (I learned this one when someone with the entire bee movie script as their name appeared on my users route.) While it was all fixes I worked on, on top of this, due to wanting to commit roughly once every hour to keep people updated, I rewrote the empty path so it looks better. Link still points to the github repo. Auth Securely, Auth Silly.
Fixes and Continuity So basically this was just fixing a lot of weird things. For example, this being the main thing, the pfps stored whenever a user uploads them, get stored as 128x128. But the empty pfp, was 256x256. On top of this in some websocket things i was using "msg":"content" or "message":"content" interchangeably, but this has since been normalized. In all its just been a productive time, I’ve added a bunch, started working on a python library, and just gotten ready for ship 2!
Quick Devlog for the reroll Started just adding more pfp decor, had some people make me some. Yippee! Quick update: that’s not mine and I didnt get permission to use it, its the one i had for testing first because I got it from somewhere else real easily. It has since been removed, in favor for other ones I do have permission to use.
Fixes and Usage Well hey! It’s been a hot minute right? Lately I have been working on a lot more fixes, mainly on things like the social endpoint, and the image endpoint. Not terribly visible portions right now, but majorly important! I also got a used RPI5 which is now hosting it. That means, no more Nest downtime issues resetting my code! Yay! Notable Changes: The social posting endpoint returns the whole message object instead of just the ID. Files have been reorganized to be much cleaner Tons of little crashes and issues have been cleaned up, there are still more. I’ve started in on beautifying the logs!
LATEST UPDATES Auth Securely, Auth Silly <3 Normalizing Returns I’ve been doing a lot of work on simply normalizing some returns. Some of them were just slightly different like “The token is invalid” vs. “Invalid Token”, so those were condensed into “invalid token”, on top of this whenever i return a message i wrap it like: {"cmd":"success","message":"<original message>" . On top of this I also went through and changed some of the codes. DB Fixes Next thing I need to fix is any DB access needs to be routed through the helper funcs and properly closed. If you change your name, half the project still thinks only the original exists, while the other half, the correct half, only sees the new name. The reason is I have broken the project up into like 5 python files, 2 of which are both trying to simultaneously access the DB. Which, in-case you were wondering, is not good. Less Requests Something else I’ve been working on to prevent clients having to make like 3 requests for one thing, and to prevent the server from having to handle those, is to whenever a message is saved to the DB say from the social endpoint, when I send it back down, I attach the username and display name to it. This takes >2 http requests, get the messages then the usernames and user info, down to just 1. (Until you grab user pfps, which should be just grabbed once and cached.) Because this is really all I did I like… don’t have pictures? So… Enjoy the little 88x31 I made Also this is probably the longest devlog I’ve ever made, but I’m bored, and since I just got 6 months of Spotify premium as a gift, I’m letting the weird AI DJ thing just play whatever it feels like. It does, however, keep going back to the dark ages of 2024. Let me forget that year of music listening…
Im back Been working on the project a bit. Mainly just working on docs and helping people understand the API in a more sort of private environment. Should push a ship eventually, and its gonna be super awesome for everyone! :D Also maybe I did a devlog but i added timestamps to posts and stuff and made the total requests needed to do everything muuuuuuuch smaller, and made a smaller cache of data needed.
Multiplayer Im in the midst of making an extendable WS based multiplayer server, and figured I’d test it with a cool game somebody I know made! It’s a W.I.P. but works pretty well and everything server side is done lol.
Fixes, Simultaneous DB Editing, and JSONifying. Quick one since its like 11pm, I’ve been working on a lot of fixes. I, since the start of this project, haven’t closed DBs. Think about that. I am an intelligent human being. I’ve also been working on getting searching working (image) for the social api, and making sure everything works with that. On top of this, everything is still getting organized, and made to have very similar responses, so as a dev less work has to be done for you to support it. I also kinda started on a python library, but eh, we’ll see how it goes I suppose. Also have been working on some security, nothing commited, to try to make it harder to hack ig. Gn stardance! (im sick)
Music Server/New Chat Server Hello! I’ve lately been working on a music server. Users can upload any sort of audio file, mp3, ogg, it should support mp4 but i haven’t tested, and it converts it to an ogg file. The ogg file has a roughly 75% file size to the original MP3 while keeping the same quality. I’ve also been working on things like metadata storage, playlists, and more. On top of music, I’ve started a full rework of the live chatting system. It’s been going well so far, but I’m changing up how it works a little. It’s going to be closer to IRC + DMs, there will be no locked channels, no way to create custom channels anymore. Hopefully I can also drag some more people in, and make it much simpler to use, and on top of this make it super easy to link to Discord and such. So yeah! It’s been going well, I’m still alive, I’m running out of time to ship… and uh yeah! Have fun coding!
A lot… I JUST BROKE 30 HOURS ON THIS PROJECT SERVER-SIDE CODING OMG!!! :D Well Cami has been rolling along reallllllllly quickly. Things I’ve added/worked on: Playlists/More Music Stuff Fixing up the post search api Remake of ws chat server Fries have been implemented Fries transfer is working Fries daily claiming is working So many fixes (many things didnt quite properly handle errors and so they have been fixed) Changes to your user info are being locked behind fries. (PFP Decor is locked but pfp, bio, and more will be locked, basically everything but password changes) Image/Music uploading will likely be locked behind fries, or you will have to pay fries to upgrade the amount of stuff you can store. More PFP Decor has been added to my personal instance but that doesnt affect here. Server logs are prettier. More info attached to the user queries. Thanks for reading and sticking with this shitshow of a project.
AI generated a client so people can actually use it. Once again, I truthfully, have not used AI in this project for anything but front end, which I do not know how to do. Over the course of testing I have mainly used raw HTTP requests.
Well it was fun! (Its going for another week after i blow all my stardust.) Hello stardancers. Its 9-29-26. I’m not going to be able to make another ship and get it rated. Thank you everyone so much for the support on this project, and thanks for running Stardance! Mainly just working on live chatting, a decentralizable chatting service similar to discord, which will be picked up on phantom.hackclub.com. For anyone wondering what I got out of Stardance: 1 domain Outpost Badge (will make a project with that too!) Factorio Pico-8
Fixes/Tweaks Might as well just get some time out here, I’ve literally been working on livechatting and misc fixes. I’ve been so stressed and tired and distracted I don’t remember working on this at all. I’ve moved primarily to working on Phantom, tryna get me a blahaj and balatroooooooo also its been 12 days please ship me my items 😭 Live Chatting Decentralized? Check Ability to change servername dynamically? Check Editing/Deleting messages? Check we’re so goated :)
The Final Ship I’m sitting here at 6:38 am and I’ve realized today is the last day. Drop a comment down there because after this… It’s gone. (I’ve been working on a few various functions to get live chat working really nothing worth talking about, as well as fixing files, and making it so the server can list all pfp decor.) https://fries.hackclub.app/demo
Ships:
Cami is a full authentication backend. I made this for use in my own projects, and as a way to learn web stuff with flask. It was challenging just getting it all working. Combining Flask and TinyDB (things I’m not too familiar with) to make this come together. To use, register an account on the homepage, then click around and see what you can do! THE CLIENT USED IS AI: I do not know how to do frontend html work, and that is not the project. The project is the backend python.
Welcome to Cami! It’s been a difficult 30 hour journey and I’m tryna get me Factorio to wrap up this awesome summer. :P Warning: The client is AI-Generated, it is not the project, simply a tool so you guys don’t have to make raw http requests with python. None of the rest of the project is AI-Generated.
i, as a buku buku, must say i hate the beans! so basically this is an account and social system it’s taken a decent amount of time to get here, and has been used in other projects by me! Flask - TinyDB...
|
1793573740.5009787
|
1793660140.5009787
|
|
16851
|
DukeOS by @Lauren_hackalicious | Stardance
|
Lauren_hackalicious
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T22:19:40Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality.", "repo": "https://github.com/example0d1n/DukeOS", "demo": "https://example0d1n.github.io/DukeOS/"}]...
|
[{"post_id": 11612, "ts": "202 [{"post_id": 11612, "ts": "2026-06-18T22:12:27Z", "hours": 2.8869, "text": "FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable."}, {"post_id": 11012, "ts": "2026-06-18T01:18:15Z", "hours": 1.6011, "text": "UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS"}, {"post_id": 10884, "ts": "2026-06-17T20:52:28Z", "hours": 2.8267, "text": "i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer."}, {"post_id": 9554, "ts": "2026-06-15T22:39:36Z", "hours": 1.7125, "text": "smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about."}, {"post_id": 9066, "ts": "2026-06-15T04:19:40Z", "hours": 1.5697, "text": "GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D"}, {"post_id": 8869, "ts": "2026-06-14T19:22:16Z", "hours": 1.705, "text": "I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/."}, {"post_id": 8516, "ts": "2026-06-14T05:05:44Z", "hours": 0.9647, "text": "Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for."}, {"post_id": 8449, "ts": "2026-06-14T01:27:50Z", "hours": 3.1067, "text": "COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!"}, {"post_id": 7567, "ts": "2026-06-12T17:28:28Z", "hours": 0.9061, "text": "The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS"}, {"post_id": 7266, "ts": "2026-06-12T03:44:27Z", "hours": 1.3033, "text": "Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog."}, {"post_id": 7054, "ts": "2026-06-11T20:24:53Z", "hours": 0.6961, "text": "Started working on the webOS project! I just inserted the window on the start screen :D"}]...
|
Title: DukeOS by @Lauren_hackalicious | Stardance
Title: DukeOS by @Lauren_hackalicious | Stardance
Devlogs:
Started working on the webOS project! I just inserted the window on the start screen :D
Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog.
The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS
COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!
Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for.
I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/.
GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D
smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about.
i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer.
UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS
FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable.
Ships:
I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality....
|
1793573739.2936907
|
1793660139.2936907
|
|
32657
|
my APOD site by @mbr | Stardance
|
mbr
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T11:37:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website using HTML, CSS and JS that gets the NASA APOD with its explanation and showcases it in a cooler way. This was my first time using JS and I have to admit it was difficult. However, it turned out great. :)", "repo": "https://github.com/marcbr23/Give-Your-Website-a-Pulse", "demo": "https://marcbr23.github.io/Give-Your-Website-a-Pulse/"}]...
|
[{"post_id": 25903, "ts": "202 [{"post_id": 25903, "ts": "2026-07-10T12:12:51Z", "hours": 2.2058, "text": "Just finished it, great mission! This has been my first time coding in JS and I have to admit i has NOT been a pleasant experience. 😂 . However, sooner or later I’ll have to learn. I’m quite pleased with the final output. I’ll try to add mobile support so the website looks great on mobile before shipping."}]...
|
Title: my APOD site by @mbr | Stardance
Devlogs:
Title: my APOD site by @mbr | Stardance
Devlogs:
Just finished it, great mission! This has been my first time coding in JS and I have to admit i has NOT been a pleasant experience. 😂 . However, sooner or later I’ll have to learn. I’m quite pleased with the final output. I’ll try to add mobile support so the website looks great on mobile before shipping.
Ships:
I made a website using HTML, CSS and JS that gets the NASA APOD with its explanation and showcases it in a cooler way. This was my first time using JS and I have to admit it was difficult. However, it turned out great. :)...
|
1793573738.1292498
|
1793660138.1292498
|
|
24171
|
Nocturnal by @Devin | Stardance
|
Devin
|
1
|
3.0
|
11
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T23:24:07Z", "hours": 3.0, "multiplier": 3.72, "payout": 11, "blessing": "neutral", "text": "i made an ascii art displayer that focuses on star paintings like starry night, the hardest part was getting the paintings to look right. I originally wanted it to be animated but that was too hard.", "repo": "https://github.com/Melangert/Nocturnal", "demo": "https://github.com/Melangert/Nocturnal/releases/tag/Initital-release"}]...
|
[{"post_id": 14747, "ts": "202 [{"post_id": 14747, "ts": "2026-06-23T23:22:24Z", "hours": 0.3889, "text": "finished up with the render.js file that renders the colors and brightness of the art inside render.js instead of the painting files"}, {"post_id": 14714, "ts": "2026-06-23T22:24:13Z", "hours": 0.4578, "text": "Got color display on the paintings by encoding the brightness and color of the images and then rendering hundreds of these tiny colored characters like a CRT"}, {"post_id": 14601, "ts": "2026-06-23T19:26:39Z", "hours": 2.2275, "text": "Finally got Starry night to display in the terminal using jimp, no color yet"}]...
|
Title: Nocturnal by @Devin | Stardance
Devlogs:
F Title: Nocturnal by @Devin | Stardance
Devlogs:
Finally got Starry night to display in the terminal using jimp, no color yet
Got color display on the paintings by encoding the brightness and color of the images and then rendering hundreds of these tiny colored characters like a CRT
finished up with the render.js file that renders the colors and brightness of the art inside render.js instead of the painting files
Ships:
i made an ascii art displayer that focuses on star paintings like starry night, the hardest part was getting the paintings to look right. I originally wanted it to be animated but that was too hard....
|
1793573736.9370415
|
1793660136.9370415
|
|
56716
|
Galaxy_OS by @Dhruvin_07 | Stardance
|
Dhruvin_07
|
1
|
1.07
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T12:59:49Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "so till now i have completed making proper WebOS which contains welcome page, notepad, terminal, browser(connected with wikipedia),working calculator.", "repo": "https://github.com/Dhruvinp07/Galaxy_webOS", "demo": "https://dhruvinp07.github.io/Galaxy_webOS/"}]...
|
[{"post_id": 61915, "ts": "202 [{"post_id": 61915, "ts": "2026-09-05T02:46:32Z", "hours": 0.0675, "text": "A new cool all mixed updates in WebOS 2"}, {"post_id": 59529, "ts": "2026-09-01T12:13:39Z", "hours": 0.8869, "text": "I am working on a web_OS name Galaxy_OS."}]...
|
Title: Galaxy_OS by @Dhruvin_07 | Stardance
Devlo Title: Galaxy_OS by @Dhruvin_07 | Stardance
Devlogs:
I am working on a web_OS name Galaxy_OS.
A new cool all mixed updates in WebOS 2
Ships:
so till now i have completed making proper WebOS which contains welcome page, notepad, terminal, browser(connected with wikipedia),working calculator....
|
1793573735.7851472
|
1793660135.7851472
|
|
8007
|
Virgil Modular Audio Controller by @dapenguinguy | Virgil Modular Audio Controller by @dapenguinguy | Stardance...
|
dapenguinguy
|
1
|
18.46
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T21:50:11Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a modular audio controller (with 6 different PCB designs). This has motorized faders, power monitoring, 8 full color screens, wired and wireless networking, and POE. I designed this to develop my Virgil network protocol in the future. Right now, I am shipping to get funding for PCBs. If you want to see this project go far and do well, please rate it well!", "repo": "https://github.com/da-penguin-guy/Virgil-Controller", "demo": ""}]...
|
[{"post_id": 28586, "ts": "202 [{"post_id": 28586, "ts": "2026-07-14T22:35:32Z", "hours": 9.1997, "text": "A lot has changed In the time since my last devlog, I have redesigned every single PCB and upended the entire project topology. So nothing that out of the ordinary CAN Bus Previously I was planning on using SPI as the primary data transfer method between the controller and the modules. However, after doing some math, that wouldn’t work at like above 100khz because reasons. So, now i’m switching over to a protocol that’s actually designed for being a Bus. There is a PIO library that supports CAN with an external transceiver for everything but bootloading, so I still need to keep the SWD lines around. Infinite expandability Because CAN doesn’t need interrupt or CS pins, this allows for you to add as many modules as you want. All you’ll need to do is plug in more backplanes! Removed features The only feature I removed is POE. The power module connector has all the pins required to make it available, but I decided that it isn’t worth the space or time for this first prototype Well, I do actually still need CS pins I lied earlier. While it is true that CAN Bus does not need CS pins, the design still needs them. This is because SWD is not a bus protocol, and so needs multiplexing for true control. While SWD does have a multi-device mode, the RP2040 and 2350 uses it to control each core, meaning it won’t work with more than 1 device connected at once. However, this is still a good thing, because the SWD CS lines can be much slower than SPI CS (for my application). This means that I can use GPIO expanders for these lines, and even use them for other module insert detection and module identification. Funding update I got rejected because I didn’t include a BOM, now I’ve resubmitted with a full BOM. Hopefuly I’ll get approved soon! Oops, I went to get a rendering of a PCB and I realized a part was backwards. Here is the fixed PCB"}, {"post_id": 9614, "ts": "2026-06-16T00:41:43Z", "hours": 0.2647, "text": "I am now under review for funding! Note for the people reviewing this The $400 is only for the PCBs, and that’s only about half. The PCB total is $730, and I can afford to pay the remaining out of pocket. The PCBs themselves are only $430, but because I live in the US the shipping and tax and customs is $300. The $430 is including assembly and component cost. I am unable to assemble them myself because I have chronic hand tremors, making it impossible to place rp2040s and rp2350s. This won’t just be a fantastic learning opportunity for me, but it also has the potential to change the live sound industry. I have designed this to be a sales-ready product, and at scale it would be at least $100 cheaper than the competition. In addition, the virgil controller will be used to develop the virgil protocol. For more information, seem y projects readme. Thank you for your time and concideration"}, {"post_id": 5903, "ts": "2026-06-09T21:34:42Z", "hours": 3.0481, "text": "Devlog #2 I have finished work on my PCBs. For real this time. Probably. I am now to the point where I am at a practical deadend until I get the boards, so this may be my last devlog before my first ship. So, I should probably fill you in on what this project is, and why it matters This project is built like a modular controller, complete with hot swap motorized faders and networking. While building anything modular is hard, that is not the main point of this project. The main point is for it to be a devboard for the Virgil protocol. The Virgil protocol is a network protocol I am designing to make the live sound industry more standardized and less dominated by singular brands. For more information, go to the Virgil Controller github, in the project information."}, {"post_id": 5081, "ts": "2026-06-08T19:22:22Z", "hours": 0.5428, "text": "Virgil Controller Devlog #1 I can proudly say that I have actually made progress during this challenge! I have updated my controller PCB to use the rp2350 chip without a carrier board for cost reasons, complete with a pretty 45 degree angle The kicad wakatime program just… isn’t working, so I completed this in an astonishing 15 min. Now onto making the modules use the bare chip."}, {"post_id": 3945, "ts": "2026-06-07T02:21:44Z", "hours": 0.6244, "text": "Virgil Controller Devlog #-1 I wrote a devlog #0.5, but it just didn’t post. It doesn’t really matter, because I have made negative progress since then, therefore devlog -1 I’ve decided that instead of using rp2040 modules, I’m going to make the PCBs have the bare chips on them. Which means it saves me money, but I’m needing to go back and redo a lot of work. It’s getting pretty late, so I’m gonna commit my partial readme and continue in the morning. Here’s my existing mainboard, so that you can see the darling that I’m killing. I saw someone doing quote of the day, so I’m gonna do a subtle variation of that Project insight of the day: “Get good at killing your darlings” P.S. How are yall doing that fancy markdown formatting?"}, {"post_id": 3734, "ts": "2026-06-06T19:38:31Z", "hours": 0.4728, "text": "Love JLCPCB. Hate Shipping and customs"}, {"post_id": 3490, "ts": "2026-06-06T13:34:06Z", "hours": 3.7778, "text": "Completed enclosure 3D Model! After fighting with Onshape for several days, I finally completed the enclosure. The only downside is that a couple of the parts are impossible to 3d print, but that’s a future me problem. Time to order the PCBs"}, {"post_id": 2821, "ts": "2026-06-05T17:24:21Z", "hours": 0.2881, "text": "Completed module backplane"}]...
|
Title: Virgil Modular Audio Controller by @dapengu Title: Virgil Modular Audio Controller by @dapenguinguy | Stardance
Devlogs:
Completed module backplane
Completed enclosure 3D Model! After fighting with Onshape for several days, I finally completed the enclosure. The only downside is that a couple of the parts are impossible to 3d print, but that’s a future me problem. Time to order the PCBs
Love JLCPCB. Hate Shipping and customs
Virgil Controller Devlog #-1 I wrote a devlog #0.5, but it just didn’t post. It doesn’t really matter, because I have made negative progress since then, therefore devlog -1 I’ve decided that instead of using rp2040 modules, I’m going to make the PCBs have the bare chips on them. Which means it saves me money, but I’m needing to go back and redo a lot of work. It’s getting pretty late, so I’m gonna commit my partial readme and continue in the morning. Here’s my existing mainboard, so that you can see the darling that I’m killing. I saw someone doing quote of the day, so I’m gonna do a subtle variation of that Project insight of the day: “Get good at killing your darlings” P.S. How are yall doing that fancy markdown formatting?
Virgil Controller Devlog #1 I can proudly say that I have actually made progress during this challenge! I have updated my controller PCB to use the rp2350 chip without a carrier board for cost reasons, complete with a pretty 45 degree angle The kicad wakatime program just… isn’t working, so I completed this in an astonishing 15 min. Now onto making the modules use the bare chip.
Devlog #2 I have finished work on my PCBs. For real this time. Probably. I am now to the point where I am at a practical deadend until I get the boards, so this may be my last devlog before my first ship. So, I should probably fill you in on what this project is, and why it matters This project is built like a modular controller, complete with hot swap motorized faders and networking. While building anything modular is hard, that is not the main point of this project. The main point is for it to be a devboard for the Virgil protocol. The Virgil protocol is a network protocol I am designing to make the live sound industry more standardized and less dominated by singular brands. For more information, go to the Virgil Controller github, in the project information.
I am now under review for funding! Note for the people reviewing this The $400 is only for the PCBs, and that’s only about half. The PCB total is $730, and I can afford to pay the remaining out of pocket. The PCBs themselves are only $430, but because I live in the US the shipping and tax and customs is $300. The $430 is including assembly and component cost. I am unable to assemble them myself because I have chronic hand tremors, making it impossible to place rp2040s and rp2350s. This won’t just be a fantastic learning opportunity for me, but it also has the potential to change the live sound industry. I have designed this to be a sales-ready product, and at scale it would be at least $100 cheaper than the competition. In addition, the virgil controller will be used to develop the virgil protocol. For more information, seem y projects readme. Thank you for your time and concideration
A lot has changed In the time since my last devlog, I have redesigned every single PCB and upended the entire project topology. So nothing that out of the ordinary CAN Bus Previously I was planning on using SPI as the primary data transfer method between the controller and the modules. However, after doing some math, that wouldn’t work at like above 100khz because reasons. So, now i’m switching over to a protocol that’s actually designed for being a Bus. There is a PIO library that supports CAN with an external transceiver for everything but bootloading, so I still need to keep the SWD lines around. Infinite expandability Because CAN doesn’t need interrupt or CS pins, this allows for you to add as many modules as you want. All you’ll need to do is plug in more backplanes! Removed features The only feature I removed is POE. The power module connector has all the pins required to make it available, but I decided that it isn’t worth the space or time for this first prototype Well, I do actually still need CS pins I lied earlier. While it is true that CAN Bus does not need CS pins, the design still needs them. This is because SWD is not a bus protocol, and so needs multiplexing for true control. While SWD does have a multi-device mode, the RP2040 and 2350 uses it to control each core, meaning it won’t work with more than 1 device connected at once. However, this is still a good thing, because the SWD CS lines can be much slower than SPI CS (for my application). This means that I can use GPIO expanders for these lines, and even use them for other module insert detection and module identification. Funding update I got rejected because I didn’t include a BOM, now I’ve resubmitted with a full BOM. Hopefuly I’ll get approved soon! Oops, I went to get a rendering of a PCB and I realized a part was backwards. Here is the fixed PCB
Ships:
I created a modular audio controller (with 6 different PCB designs). This has motorized faders, power monitoring, 8 full color screens, wired and wireless networking, and POE. I designed this to develop my Virgil network protocol in the future. Right now, I am shipping to get funding for PCBs. If you want to see this project go far and do well, please rate it well!...
|
1793573734.5434852
|
1793660134.5434852
|
|
21306
|
STARVEST by @JDG | Stardance
|
JDG
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T14:56:13Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? Starvest is a satellite-driven trading signal for Frozen Concentrated Orange Juice (FCOJ) futures. It pulls 20 years of NASA MODIS satellite imagery to measure the health of Florida’s orange groves every January through March, then issues a directional prediction on OJ futures before the April expiry. The dashboard shows the full backtest, NDVI trend, yield vs. price history, and the current 2026 signal (LONG). What was challenging? Cleaning and aligning six independent data sources (NASA satellite data via Google Earth Engine, USDA crop stats, ICE futures prices, NOAA weather records, and Brazil production data) across 20 years without gaps or mismatches. Florida’s orange industry has shrunk 69% since 2005 due to citrus greening disease, so the signal had to account for a structurally collapsing baseline, not just year-to-year weather noise. What are you proud of? The backtest hits 62% directional accuracy (13/21 years) using only publicly available NASA data, no proprietary feeds. The whole pipeline runs on free APIs and the dashboard works without any setup for the judge. What should people know so they can test your project? The live dashboard is deployed and requires no setup, just click the link. If you want to run it locally, clone the repo and run streamlit run dashboard/app.py. The pre-built CSV is included so no API keys are needed.", "repo": "https://github.com/justindelgiudice/Starvest", "demo": "https://huggingface.co/spaces/JustinDG/Starvest"}]...
|
[{"post_id": 17332, "ts": "202 [{"post_id": 17332, "ts": "2026-06-28T02:21:36Z", "hours": 9.3883, "text": "Started with a question: can you predict whether OJ futures will go up or down before the harvest, using only satellite data? Built a full data pipeline pulling NASA MODIS MOD13Q1 satellite imagery (250m resolution) over the Florida citrus belt every January through March via Google Earth Engine. The core signal is NDVI surprise, how much greener or browner the groves are compared to their 3-year rolling average. Brown groves = stressed trees = lower yield = price goes up.Added five more data sources on top: USDA NASS for Florida orange production and bearing acreage, ICE OJ futures prices via yfinance, NOAA GHCN-Daily for hard freeze days and rainfall, and USDA FAS for Brazil production as a global supply check.Built a Streamlit dashboard with 6 tabs: Overview, NDVI Trend, Yield vs Price, Backtest, Signal, and Glossary. The Backtest tab lets you adjust a threshold slider and see cumulative P&L, hit rate, and a 3-tier signal comparison (NDVI only, plus Brazil confirmation, plus drought confirmation).Backtested across 2005 to 2025: 62% directional accuracy (13/21 years correct). Most commodity price prediction models rely on historical price patterns or economic indicators and typically land around 52 to 54% directional accuracy on out-of-sample data. Starvest gets its edge from reading the physical world directly via satellite before the supply shock shows up in any price data. The signal is issued in March, months before the market fully prices in the harvest outcome.The 2026 forward signal is LONG. Hard freeze in January (24.1°F, 2 days) plus drought stress pushed NDVI surprise to -0.0423. Outcome resolves in September."}]...
|
Title: STARVEST by @JDG | Stardance
Devlogs:
Star Title: STARVEST by @JDG | Stardance
Devlogs:
Started with a question: can you predict whether OJ futures will go up or down before the harvest, using only satellite data? Built a full data pipeline pulling NASA MODIS MOD13Q1 satellite imagery (250m resolution) over the Florida citrus belt every January through March via Google Earth Engine. The core signal is NDVI surprise, how much greener or browner the groves are compared to their 3-year rolling average. Brown groves = stressed trees = lower yield = price goes up.Added five more data sources on top: USDA NASS for Florida orange production and bearing acreage, ICE OJ futures prices via yfinance, NOAA GHCN-Daily for hard freeze days and rainfall, and USDA FAS for Brazil production as a global supply check.Built a Streamlit dashboard with 6 tabs: Overview, NDVI Trend, Yield vs Price, Backtest, Signal, and Glossary. The Backtest tab lets you adjust a threshold slider and see cumulative P&L, hit rate, and a 3-tier signal comparison (NDVI only, plus Brazil confirmation, plus drought confirmation).Backtested across 2005 to 2025: 62% directional accuracy (13/21 years correct). Most commodity price prediction models rely on historical price patterns or economic indicators and typically land around 52 to 54% directional accuracy on out-of-sample data. Starvest gets its edge from reading the physical world directly via satellite before the supply shock shows up in any price data. The signal is issued in March, months before the market fully prices in the harvest outcome.The 2026 forward signal is LONG. Hard freeze in January (24.1°F, 2 days) plus drought stress pushed NDVI surprise to -0.0423. Outcome resolves in September.
Ships:
What did you make? Starvest is a satellite-driven trading signal for Frozen Concentrated Orange Juice (FCOJ) futures. It pulls 20 years of NASA MODIS satellite imagery to measure the health of Florida’s orange groves every January through March, then issues a directional prediction on OJ futures before the April expiry. The dashboard shows the full backtest, NDVI trend, yield vs. price history, and the current 2026 signal (LONG). What was challenging? Cleaning and aligning six independent data sources (NASA satellite data via Google Earth Engine, USDA crop stats, ICE futures prices, NOAA weather records, and Brazil production data) across 20 years without gaps or mismatches. Florida’s orange industry has shrunk 69% since 2005 due to citrus greening disease, so the signal had to account for a structurally collapsing baseline, not just year-to-year weather noise. What are you proud of? The backtest hits 62% directional accuracy (13/21 years) using only publicly available NASA data, no proprietary feeds. The whole pipeline runs on free APIs and the dashboard works without any setup for the judge. What should people know so they can test your project? The live dashboard is deployed and requires no setup, just click the link. If you want to run it locally, clone the repo and run streamlit run dashboard/app.py. The pre-built CSV is included so no API keys are needed....
|
1793573733.3639607
|
1793660133.3639607
|
|
9853
|
Apogee by @Wirenux | Stardance
|
Wirenux
|
1
|
3.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T19:17:39Z", "hours": 3.0, "multiplier": 2.57, "payout": 8, "blessing": "neutral", "text": "I’ve make a pure C CLI tool to fetch and display the NASA Astronomy Picture of the Day. I’m very proud of the display part and the fetch part. Every things to know is on the Github repo https://github.com/wirenux/Apogee/", "repo": "https://github.com/wirenux/Apogee", "demo": "https://github.com/wirenux/Apogee/releases"}]...
|
[{"post_id": 3702, "ts": "2026 [{"post_id": 3702, "ts": "2026-06-06T19:12:33Z", "hours": 0.5736, "text": "Ready to Ship ! https://github.com/wirenux/Apogee/releases/tag/v1.0"}, {"post_id": 3669, "ts": "2026-06-06T18:30:15Z", "hours": 0.6444, "text": "Now i’ve metadata, fixed size + DEMO_KEYS mode with –demo flags"}, {"post_id": 3625, "ts": "2026-06-06T17:15:26Z", "hours": 0.3153, "text": "Now i can print image !!!!! (with the half-block char)"}, {"post_id": 3615, "ts": "2026-06-06T16:49:37Z", "hours": 0.3689, "text": "Now able to get the image and store it in RAM !"}, {"post_id": 3580, "ts": "2026-06-06T16:10:18Z", "hours": 1.1217, "text": "I’m able to fetch the NASA Daily Image End-Point in C with just the cURL lib"}]...
|
Title: Apogee by @Wirenux | Stardance
Devlogs:
I’ Title: Apogee by @Wirenux | Stardance
Devlogs:
I’m able to fetch the NASA Daily Image End-Point in C with just the cURL lib
Now able to get the image and store it in RAM !
Now i can print image !!!!! (with the half-block char)
Now i’ve metadata, fixed size + DEMO_KEYS mode with –demo flags
Ready to Ship ! https://github.com/wirenux/Apogee/releases/tag/v1.0
Ships:
I’ve make a pure C CLI tool to fetch and display the NASA Astronomy Picture of the Day. I’m very proud of the display part and the fetch part. Every things to know is on the Github repo https://github.com/wirenux/Apogee/...
|
1793573732.1863797
|
1793660132.1863797
|
|
18394
|
myMusic by @cluelessfr | Stardance
|
cluelessfr
|
3
|
105.0
|
1498
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T04:09:47Z", "hours": 49.0, "multiplier": 12.73, "payout": 608, "blessing": "neutral", "text": "I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 2, "ts": "2026-07-06T17:31:14Z", "hours": 34.0, "multiplier": 18.59, "payout": 611, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 3, "ts": "2026-06-18T06:15:48Z", "hours": 22.0, "multiplier": 13.37, "payout": 279, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}]...
|
[{"post_id": 38621, "ts": "202 [{"post_id": 38621, "ts": "2026-08-01T03:30:24Z", "hours": 2.9203, "text": "Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions."}, {"post_id": 38528, "ts": "2026-07-31T23:36:25Z", "hours": 7.4581, "text": "Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux."}, {"post_id": 37449, "ts": "2026-07-30T06:15:53Z", "hours": 4.1092, "text": "Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well."}, {"post_id": 37238, "ts": "2026-07-29T19:53:38Z", "hours": 2.6647, "text": "Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is."}, {"post_id": 36598, "ts": "2026-07-28T20:17:16Z", "hours": 2.8025, "text": "Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message."}, {"post_id": 35435, "ts": "2026-07-26T20:46:18Z", "hours": 4.8314, "text": "Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request."}, {"post_id": 31912, "ts": "2026-07-20T18:12:07Z", "hours": 3.5339, "text": "Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers."}, {"post_id": 29252, "ts": "2026-07-16T01:35:08Z", "hours": 6.2167, "text": "Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature."}, {"post_id": 28364, "ts": "2026-07-14T16:05:28Z", "hours": 2.7422, "text": "Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update."}, {"post_id": 27877, "ts": "2026-07-13T19:39:38Z", "hours": 6.6931, "text": "Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole."}, {"post_id": 25666, "ts": "2026-07-10T02:30:59Z", "hours": 5.3094, "text": "Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums."}, {"post_id": 23538, "ts": "2026-07-06T15:46:31Z", "hours": 3.8236, "text": "Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux."}, {"post_id": 21260, "ts": "2026-07-03T03:02:23Z", "hours": 5.4692, "text": "Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates."}, {"post_id": 20302, "ts": "2026-07-01T21:16:28Z", "hours": 1.2353, "text": "Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable."}, {"post_id": 19419, "ts": "2026-06-30T18:55:12Z", "hours": 1.0339, "text": "Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available."}, {"post_id": 19007, "ts": "2026-06-30T05:16:32Z", "hours": 1.6642, "text": "Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI."}, {"post_id": 18082, "ts": "2026-06-29T02:24:36Z", "hours": 1.4658, "text": "Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art."}, {"post_id": 17306, "ts": "2026-06-28T01:07:06Z", "hours": 1.4167, "text": "Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format."}, {"post_id": 16647, "ts": "2026-06-27T02:18:17Z", "hours": 2.3261, "text": "Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method."}, {"post_id": 16559, "ts": "2026-06-26T22:37:04Z", "hours": 1.9589, "text": "Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file."}, {"post_id": 15864, "ts": "2026-06-25T19:50:13Z", "hours": 0.3722, "text": "Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded."}, {"post_id": 15836, "ts": "2026-06-25T19:07:36Z", "hours": 0.9022, "text": "Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon."}, {"post_id": 15337, "ts": "2026-06-24T22:21:13Z", "hours": 3.4889, "text": "Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE."}, {"post_id": 13864, "ts": "2026-06-22T18:38:18Z", "hours": 1.5628, "text": "Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same."}, {"post_id": 13481, "ts": "2026-06-22T02:29:05Z", "hours": 3.7828, "text": "Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying."}, {"post_id": 11619, "ts": "2026-06-18T22:25:28Z", "hours": 3.6753, "text": "Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar."}, {"post_id": 11117, "ts": "2026-06-18T05:51:42Z", "hours": 1.4456, "text": "Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything."}, {"post_id": 10999, "ts": "2026-06-18T00:51:48Z", "hours": 1.1539, "text": "Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling."}, {"post_id": 10925, "ts": "2026-06-17T22:01:48Z", "hours": 1.1078, "text": "Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe)."}, {"post_id": 10860, "ts": "2026-06-17T20:15:14Z", "hours": 1.8986, "text": "Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long."}, {"post_id": 10426, "ts": "2026-06-17T04:14:00Z", "hours": 0.4461, "text": "Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files."}, {"post_id": 10333, "ts": "2026-06-17T00:33:23Z", "hours": 1.6983, "text": "Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows."}, {"post_id": 10283, "ts": "2026-06-16T22:29:59Z", "hours": 1.0183, "text": "Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version."}, {"post_id": 10156, "ts": "2026-06-16T19:30:33Z", "hours": 2.4497, "text": "Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music."}, {"post_id": 9712, "ts": "2026-06-16T04:05:09Z", "hours": 0.4872, "text": "Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality."}, {"post_id": 9667, "ts": "2026-06-16T02:27:43Z", "hours": 3.6628, "text": "Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages."}, {"post_id": 9279, "ts": "2026-06-15T16:04:31Z", "hours": 2.2303, "text": "Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options."}, {"post_id": 9003, "ts": "2026-06-15T00:31:15Z", "hours": 3.3114, "text": "Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned."}, {"post_id": 8718, "ts": "2026-06-14T14:15:06Z", "hours": 0.7378, "text": "Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder."}]...
|
Title: myMusic by @cluelessfr | Stardance
Devlogs Title: myMusic by @cluelessfr | Stardance
Devlogs:
Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder.
Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned.
Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options.
Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages.
Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality.
Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music.
Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version.
Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows.
Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files.
Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long.
Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe).
Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling.
Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything.
Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar.
Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying.
Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same.
Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE.
Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon.
Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded.
Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file.
Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method.
Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format.
Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art.
Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI.
Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available.
Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable.
Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates.
Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux.
Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums.
Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole.
Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update.
Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature.
Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers.
Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request.
Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message.
Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is.
Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well.
Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux.
Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions.
Ships:
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.
I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!...
|
1793573730.777253
|
1793660130.777253
|
|
19500
|
3DS Splash Screen and Badge Maker by @edda | Stard 3DS Splash Screen and Badge Maker by @edda | Stardance...
|
edda
|
1
|
6.0
|
79
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T21:38:06Z", "hours": 6.0, "multiplier": 13.37, "payout": 79, "blessing": "neutral", "text": "This is a splash screen and badge creator for 3DS! While the outputted files are intended for use on, well, the 3DS, this app runs on Windows. Now, what is a ‘splash screen’ or a ‘badge’? Well, a splash screen is a pair of two images–one for each screen– that shows up briefly before or after your 3DS boots. Usually, they are for aesthetic purposes, or just informing that the said console has been modified and listing executable payloads (such as ones to launch the Luma3DS Menu). These images are required to be in a specific format, with BGR color encoding, rotated 90 degrees, and as a .bin file. This program will convert them for you, and export them to a folder within the ‘Output’ and then within a folder of your naming (as defined in the ‘export name’ option). Then, you can go to the website linked in the app, and create an info.smdh, put it in the folder with your .bins, zip it, put it into ‘Splashes’ in your SD card, and voila! You can then load it in Anenome as a splash screen. A badge is a 64x64 PNG image that can be placed on the home menu screen of the 3DS for decoration. This program allows you to import an image, and it will automatically split it into smaller, properly sized images, and export it into the ‘Output’ folder and then to a folder you defined in the ‘export name’ option, as with the splash screens. Then you just zip the folder and put it into ‘Badges’ in your SD Card, and are able to install them with Anenome and use them to your heart’s content as you would any other badges. I made this project because when I was trying to create a splash screen a few months ago, I was struggling a bit with resources and finding info that wasn’t from 13-ish years ago, and I find this kind of thing really fun to mess around with! This isn’t my main project on here, I just really wanted to make a small thing. As for AI use, there was hardly any on this project, mainly just for debugging or asking information or help on things I couldn’t find. And to double check if the .bin files looked okay, as I have hardly ever worked with them before. And as a heads up, this project can lag a little with button inputs at times. It does register it, but every now and then you may need to press a couple times.", "repo": "https://github.com/rosierosierosebud/3DS-Badge-N-Splash", "demo": "https://github.com/rosierosierosebud/3DS-Badge-N-Splash/releases/tag/v1"}]...
|
[{"post_id": 10896, "ts": "202 [{"post_id": 10896, "ts": "2026-06-17T21:10:32Z", "hours": 0.9672, "text": "Finished the Splash Screen Creator section of the program! Had some troubles but it turned out okay in the end! >:D Here is some screenshots of the program. I can’t really like get it in action without showing literally aLL of my files, though, because it’s mainly for converting them."}, {"post_id": 10700, "ts": "2026-06-17T15:50:37Z", "hours": 3.8178, "text": "Got the badge maker fully working! It’s a bit simple, really just an instruction manual that can also split images in 64x64 chunks, but hey, it works! It has a help menu, allows you to input the export name, and asks you for a file to import. It splits the image into 64 x 64 chunks, and saves it to a folder within the Output folder named after your chosen export name, which files named after the pattern [exportname]_[entry number]. Next up is the splash screen maker… which i am more nervous about lol"}, {"post_id": 9663, "ts": "2026-06-16T02:14:29Z", "hours": 1.1525, "text": "Got the window done and drew a few buttons (not pictured), and coded the .bin converter :) it has a fancy shmancy background. pay no attention to how long this has taken me T-T i am slow"}]...
|
Title: 3DS Splash Screen and Badge Maker by @edda Title: 3DS Splash Screen and Badge Maker by @edda | Stardance
Devlogs:
Got the window done and drew a few buttons (not pictured), and coded the .bin converter :) it has a fancy shmancy background. pay no attention to how long this has taken me T-T i am slow
Got the badge maker fully working! It’s a bit simple, really just an instruction manual that can also split images in 64x64 chunks, but hey, it works! It has a help menu, allows you to input the export name, and asks you for a file to import. It splits the image into 64 x 64 chunks, and saves it to a folder within the Output folder named after your chosen export name, which files named after the pattern [exportname]_[entry number]. Next up is the splash screen maker… which i am more nervous about lol
Finished the Splash Screen Creator section of the program! Had some troubles but it turned out okay in the end! >:D Here is some screenshots of the program. I can’t really like get it in action without showing literally aLL of my files, though, because it’s mainly for converting them.
Ships:
This is a splash screen and badge creator for 3DS! While the outputted files are intended for use on, well, the 3DS, this app runs on Windows. Now, what is a ‘splash screen’ or a ‘badge’? Well, a splash screen is a pair of two images–one for each screen– that shows up briefly before or after your 3DS boots. Usually, they are for aesthetic purposes, or just informing that the said console has been modified and listing executable payloads (such as ones to launch the Luma3DS Menu). These images are required to be in a specific format, with BGR color encoding, rotated 90 degrees, and as a .bin file. This program will convert them for you, and export them to a folder within the ‘Output’ and then within a folder of your naming (as defined in the ‘export name’ option). Then, you can go to the website linked in the app, and create an info.smdh, put it in the folder with your .bins, zip it, put it into ‘Splashes’ in your SD card, and voila! You can then load it in Anenome as a splash screen. A badge is a 64x64 PNG image that can be placed on the home menu screen of the 3DS for decoration. This program allows you to import an image, and it will automatically split it into smaller, properly sized images, and export it into the ‘Output’ folder and then to a folder you defined in the ‘export name’ option, as with the splash screens. Then you just zip the folder and put it into ‘Badges’ in your SD Card, and are able to install them with Anenome and use them to your heart’s content as you would any other badges. I made this project because when I was trying to create a splash screen a few months ago, I was struggling a bit with resources and finding info that wasn’t from 13-ish years ago, and I find this kind of thing really fun to mess around with! This isn’t my main project on here, I just really wanted to make a small thing. As for AI use, there was hardly any on this project, mainly just for debugging or asking information or help on things I couldn’t find. And to double check if the .bin files looked okay, as I have hardly ever worked with them before. And as a heads up, this project can lag a little with button inputs at times. It does register it, but every now and then you may need to press a couple times....
|
1793573729.5945373
|
1793660129.5945373
|
|
71642
|
open source kindle os by @ywtak | Stardance
|
ywtak
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-27T22:39:26Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Minos gives old Kindles a second life. It replaces the original Amazon software with a simple, fast reader that’s fully open source. I made it because my old Kindle was collecting dust and I wanted to read on it again.", "repo": "https://github.com/ywtak/minos", "demo": "https://github.com/ywtak/minos/releases/tag/v1.2-games"}]...
|
[{"post_id": 83402, "ts": "202 [{"post_id": 83402, "ts": "2026-10-27T22:24:52Z", "hours": 3.7503, "text": "Minos is my open source replacement for the stock software on a Kindle its just a minimal reader. I first wanted to flash CrossPoint Reader, but it’s built for ESP32-based e-readers and my Kindle runs an ARM i.MX508, so it couldn’t run. I decided to write my own CrossPoint-style reader in C++ that draws directly to the framebuffer. The hardest part was getting the e-ink refresh to stop ghosting, and I fixed it by making the page refresh only twice for the images. It can now also play sudoku and checkers , and next I want to add other games like chess and woordle."}]...
|
Title: open source kindle os by @ywtak | Stardance Title: open source kindle os by @ywtak | Stardance
Devlogs:
Minos is my open source replacement for the stock software on a Kindle its just a minimal reader. I first wanted to flash CrossPoint Reader, but it’s built for ESP32-based e-readers and my Kindle runs an ARM i.MX508, so it couldn’t run. I decided to write my own CrossPoint-style reader in C++ that draws directly to the framebuffer. The hardest part was getting the e-ink refresh to stop ghosting, and I fixed it by making the page refresh only twice for the images. It can now also play sudoku and checkers , and next I want to add other games like chess and woordle.
Ships:
Minos gives old Kindles a second life. It replaces the original Amazon software with a simple, fast reader that’s fully open source. I made it because my old Kindle was collecting dust and I wanted to read on it again....
|
1793573728.4437282
|
1793660128.4437282
|
|
34641
|
AccountantOS by @samarth_hota | Stardance
|
samarth_hota
|
2
|
4.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T21:27:19Z", "hours": 1.0, "multiplier": 11.11, "payout": 6, "blessing": "neutral", "text": "Accountant OS: What I made: I built Accountant OS, a lightweight, browser-based OS -type app for, get this… Accountants . It runs natively in the browser via one HTML file for a “lightweight experience.” What was challenging: Structuring the layout to feel like a true “operating system” rather than just a standard web page took some trial and error. Additionally, routing the logic for the accounting widgets and ensuring the interactive elements updated dynamically without breaking the UI required careful attention to the code structure. //Tryna make this part professional twin. What I am proud of: I am really proud of the user interface and the “retro” design. Taking standard HTML and turning it into a customized, app-like environment is a great milestone, and I’m happy with how nostalgic it looks. What users should know so they can test this: Testing is completely frictionless (Stardance pun intented) you don’t need to install any heavy software or databases. Just download the .html file and double-click it to open it in your preferred web browser. Keep in mind that because it is a localized browser app, your data will reset if you refresh the page. //basically it has no memory but trust the process.", "repo": "https://github.com/samarthhota-cyber/Accountant-os", "demo": "https://samarthhota-cyber.github.io/Accountant-os/"}, {"ship_num": 2, "ts": "2026-07-19T00:42:06Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made this my own webOS, accountant OS. This webOS, primarily built in html, is a standalone web operating system with draggable windows, apps and FYI this will be updated sometime in the future.", "repo": "https://github.com/samarthhota-cyber/Accountant-os", "demo": "https://samarthhota-cyber.github.io/Accountant-os/"}]...
|
[{"post_id": 31607, "ts": "202 [{"post_id": 31607, "ts": "2026-07-20T04:33:51Z", "hours": 0.5083, "text": "1 introdction of the Centralized Database Explorer (DATABASE.EXE)Then (v1.0): Text storage and calculation values operated on disconnected, static page inputs. There was no capability to organize, create, or navigate multiple independent documents.Now (v5.0): Added a multi-node Directory manager that functions as a virtual relational file-system stored in local memory. Users can categorize files by format (Documents or Sheets), monitor file metadata (bytes, edit times), delete nodes, and initiate new files which load into editing buffers upon double-clicking.2. Fully Functional Dynamic Spreadsheet Grid (SHEETS.EXE)Then (v1.0): The spreadsheet app was restricted to a static HTML table structure representing a fixed, hard-coded tax margin computation form.Now (v5.0): Transformed into an interactive, multi-document 4x6 grid with column headers (A–D) and row indices (1–6). Includes a dedicated Excel-style Formula Bar that reads active cells and parses custom math-reference strings (e.g., =A1+B1 or =B4-B3-B5). Changes are evaluated instantly.3. Custom Accountant OS Bookkeeping Theme & Mechanical Click SynthThen (v1.0): Styling was standard retro-grey, styled specifically around flat color panels. Keyboard interaction was silent.Now (v5.0): Polished the design with the warm parchment-colored Vintage Ledger theme, featuring custom margins and double-underlined ledger rules. Created a custom Web Audio API synthesizer that produces retro mechanical keyclick sound effects whenever the user types inside a document, spreadsheet cell, or terminal panel.4. Upgraded Multi-Document Buffer & File Association (DOCS.EXE)Then (v1.0): The notepad component supported editing only one single global string buffer without file associations.Now (v5.0): Fully integrated the text editor with the centralized directory database. The interface tracks active file-handling buffers, displays file state labels, and features a “Commit to DB” protocol to save edits back into the primary database.5. Interactive BIOS Boot loaderThen (v1.0): Accessing the page immediately showed the desktop environment with no startup stage.Now (v5.0): Implemented a classic AMI-style BIOS welcome sequence. The terminal tests RAM, registers system assets, and generates a boot chime using browser audio oscillators to ensure proper context registration before revealing the operating system.6. Refined Window Geometry with Viewport Clamping and Storage Save StateThen (v1.0): Draggable windows lacked boundary constraints, letting users pull elements entirely out of bounds. Window positions, sizes, and open/close states were lost on reload.Now (v5.0): Upgraded the dragging engine with boundary checks, clamping window positions within desktop margins. Window coordinates, width/height dimensions, minimization status, and active directories are saved to localStorage and recovered on bootup. Added a dynamic taskbar tabs manager that tracks window focus and supports minimize-to-tray switching.7. Real-Time Vector Sparklines & Sound VisualizerThen (v1.0): The asset simulation was limited to numeric text fields updating at fixed intervals. The audio synthesizer was a basic sound button with no graphic feedback.Now (v5.0): Integrated an HTML sparkline renderer inside the asset terminal, drawing historical market price lines for machinery (green) and T-bills (yellow). Additionally, added an animated equalizer visualizer inside the synth control applet that animates to procedural frequencies."}, {"post_id": 30990, "ts": "2026-07-19T00:36:09Z", "hours": 0.2892, "text": "Finished up a few touches and is ready for the world."}, {"post_id": 30960, "ts": "2026-07-18T23:40:10Z", "hours": 2.2033, "text": "I changed it to accountant os, and made drastic improvments with new apps and a retro looking desktop(which was pretty easy)."}, {"post_id": 28061, "ts": "2026-07-14T02:42:13Z", "hours": 0.3336, "text": "im making a referee os themed os"}]...
|
Title: AccountantOS by @samarth_hota | Stardance
Title: AccountantOS by @samarth_hota | Stardance
Devlogs:
im making a referee os themed os
I changed it to accountant os, and made drastic improvments with new apps and a retro looking desktop(which was pretty easy).
Finished up a few touches and is ready for the world.
1 introdction of the Centralized Database Explorer (DATABASE.EXE)Then (v1.0): Text storage and calculation values operated on disconnected, static page inputs. There was no capability to organize, create, or navigate multiple independent documents.Now (v5.0): Added a multi-node Directory manager that functions as a virtual relational file-system stored in local memory. Users can categorize files by format (Documents or Sheets), monitor file metadata (bytes, edit times), delete nodes, and initiate new files which load into editing buffers upon double-clicking.2. Fully Functional Dynamic Spreadsheet Grid (SHEETS.EXE)Then (v1.0): The spreadsheet app was restricted to a static HTML table structure representing a fixed, hard-coded tax margin computation form.Now (v5.0): Transformed into an interactive, multi-document 4x6 grid with column headers (A–D) and row indices (1–6). Includes a dedicated Excel-style Formula Bar that reads active cells and parses custom math-reference strings (e.g., =A1+B1 or =B4-B3-B5). Changes are evaluated instantly.3. Custom Accountant OS Bookkeeping Theme & Mechanical Click SynthThen (v1.0): Styling was standard retro-grey, styled specifically around flat color panels. Keyboard interaction was silent.Now (v5.0): Polished the design with the warm parchment-colored Vintage Ledger theme, featuring custom margins and double-underlined ledger rules. Created a custom Web Audio API synthesizer that produces retro mechanical keyclick sound effects whenever the user types inside a document, spreadsheet cell, or terminal panel.4. Upgraded Multi-Document Buffer & File Association (DOCS.EXE)Then (v1.0): The notepad component supported editing only one single global string buffer without file associations.Now (v5.0): Fully integrated the text editor with the centralized directory database. The interface tracks active file-handling buffers, displays file state labels, and features a “Commit to DB” protocol to save edits back into the primary database.5. Interactive BIOS Boot loaderThen (v1.0): Accessing the page immediately showed the desktop environment with no startup stage.Now (v5.0): Implemented a classic AMI-style BIOS welcome sequence. The terminal tests RAM, registers system assets, and generates a boot chime using browser audio oscillators to ensure proper context registration before revealing the operating system.6. Refined Window Geometry with Viewport Clamping and Storage Save StateThen (v1.0): Draggable windows lacked boundary constraints, letting users pull elements entirely out of bounds. Window positions, sizes, and open/close states were lost on reload.Now (v5.0): Upgraded the dragging engine with boundary checks, clamping window positions within desktop margins. Window coordinates, width/height dimensions, minimization status, and active directories are saved to localStorage and recovered on bootup. Added a dynamic taskbar tabs manager that tracks window focus and supports minimize-to-tray switching.7. Real-Time Vector Sparklines & Sound VisualizerThen (v1.0): The asset simulation was limited to numeric text fields updating at fixed intervals. The audio synthesizer was a basic sound button with no graphic feedback.Now (v5.0): Integrated an HTML sparkline renderer inside the asset terminal, drawing historical market price lines for machinery (green) and T-bills (yellow). Additionally, added an animated equalizer visualizer inside the synth control applet that animates to procedural frequencies.
Ships:
I made this my own webOS, accountant OS. This webOS, primarily built in html, is a standalone web operating system with draggable windows, apps and FYI this will be updated sometime in the future.
Accountant OS: What I made: I built Accountant OS, a lightweight, browser-based OS -type app for, get this… Accountants . It runs natively in the browser via one HTML file for a “lightweight experience.” What was challenging: Structuring the layout to feel like a true “operating system” rather than just a standard web page took some trial and error. Additionally, routing the logic for the accounting widgets and ensuring the interactive elements updated dynamically without breaking the UI required careful attention to the code structure. //Tryna make this part professional twin. What I am proud of: I am really proud of the user interface and the “retro” design. Taking standard HTML and turning it into a customized, app-like environment is a great milestone, and I’m happy with how nostalgic it looks. What users should know so they can test this: Testing is completely frictionless (Stardance pun intented) you don’t need to install any heavy software or databases. Just download the .html file and double-click it to open it in your preferred web browser. Keep in mind that because it is a localized browser app, your data will reset if you refresh the page. //basically it has no memory but trust the process....
|
1793573727.2547588
|
1793660127.2547588
|
|
31363
|
Paint App by @jow544445 | Stardance
|
jow544445
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T23:17:06Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Drawing App in JavaScript HTML CSS, how to draw on the canvas using mouse and pointer events, add a color picker input to select colors to draw with, add a slider range input to change the pen size, and add buttons with click handlers to clear and fill the canvas, and save/download the image that you have drawn.", "repo": "https://github.com/jow5445/paint-app", "demo": "https://jow5445.github.io/paint-app"}]...
|
[{"post_id": 23531, "ts": "202 [{"post_id": 23531, "ts": "2026-07-06T15:39:35Z", "hours": 1.1369, "text": "Drawing App in JavaScript HTML CSS. In this video, we go over how to draw on the canvas using mouse and pointer events, add a color picker input to select colors to draw with, add a slider range input to change the pen size, and add buttons with click handlers to clear and fill the canvas, and save/download the image that you have drawn."}]...
|
Title: Paint App by @jow544445 | Stardance
Devlog Title: Paint App by @jow544445 | Stardance
Devlogs:
Drawing App in JavaScript HTML CSS. In this video, we go over how to draw on the canvas using mouse and pointer events, add a color picker input to select colors to draw with, add a slider range input to change the pen size, and add buttons with click handlers to clear and fill the canvas, and save/download the image that you have drawn.
Ships:
Drawing App in JavaScript HTML CSS, how to draw on the canvas using mouse and pointer events, add a color picker input to select colors to draw with, add a slider range input to change the pen size, and add buttons with click handlers to clear and fill the canvas, and save/download the image that you have drawn....
|
1793573726.0897412
|
1793660126.0897412
|
|
43093
|
Bloop by @suprit | Stardance
|
suprit
|
1
|
6.35
|
73
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-12T15:46:21Z", "hours": 6.0, "multiplier": 12.11, "payout": 73, "blessing": "neutral", "text": "For now, I have added AI moderation within the Discord bot, an economy system for gaming, betting games (I dont know a lot about betting so I used the help of AI), music playback and random memes from Reddit using its API. This tools are quite helpful in managing a discord server, especially when AI can decide how someone’s action is harming someone else and can also decide whether to Kick, Ban, Mute or Timeout the person although you can remove those permissions from it anytime!", "repo": "https://github.com/supritpahari/bloop", "demo": "https://discord.gg/te2MYwzTVA"}]...
|
[{"post_id": 51113, "ts": "202 [{"post_id": 51113, "ts": "2026-08-20T16:42:44Z", "hours": 0.3503, "text": "For this new update, I added just some fun commands in the bot. The newly added commands include the /neko, /meme, /joke commands, each getting content from specific apis. I used the free APIs from different platforms and checked the commands a number of times to ensure the api requests work and I get some output data. Go try yourself!"}, {"post_id": 43790, "ts": "2026-08-09T06:50:57Z", "hours": 0.9839, "text": "Just completed my second mission: Make the Bot Sound and Moderate Today, I continued my work on my Discord bot Bloop, a friendly Discord bot that will include AI moderation and games for everyone! I coded it with Python. Today’s Objective- Add Music and Audio Playback from YouTube Add AI Moderation for better servers Fixed some errors in Economy Commands and Database Next Objective- Add AI Chat Support You can invite the bot in your discord to test out some features! I used Wisp byte to host it for free forever! Invite here: https://discord.com/oauth2/authorize?client_id=1533480410519048293"}, {"post_id": 42460, "ts": "2026-08-07T06:38:38Z", "hours": 5.0803, "text": "Just completed my first mission: Make the Bot Alive Today, I started my work on my Discord bot Bloop, a friendly Discord bot that will include AI moderation and games for everyone! I coded it with Python. Today’s Objective- Make the Bot Alive Add basic ban and kick commands Add economy commands Next Objective- Add Music Playback Support You can invite the bot in your discord to test out some features! I used Wisp byte to host it for free forever! Invite here: https://discord.com/oauth2/authorize?client_id=1533480410519048293"}]...
|
Title: Bloop by @suprit | Stardance
Devlogs:
Just Title: Bloop by @suprit | Stardance
Devlogs:
Just completed my first mission: Make the Bot Alive Today, I started my work on my Discord bot Bloop, a friendly Discord bot that will include AI moderation and games for everyone! I coded it with Python. Today’s Objective- Make the Bot Alive Add basic ban and kick commands Add economy commands Next Objective- Add Music Playback Support You can invite the bot in your discord to test out some features! I used Wisp byte to host it for free forever! Invite here: https://discord.com/oauth2/authorize?client_id=1533480410519048293
Just completed my second mission: Make the Bot Sound and Moderate Today, I continued my work on my Discord bot Bloop, a friendly Discord bot that will include AI moderation and games for everyone! I coded it with Python. Today’s Objective- Add Music and Audio Playback from YouTube Add AI Moderation for better servers Fixed some errors in Economy Commands and Database Next Objective- Add AI Chat Support You can invite the bot in your discord to test out some features! I used Wisp byte to host it for free forever! Invite here: https://discord.com/oauth2/authorize?client_id=1533480410519048293
For this new update, I added just some fun commands in the bot. The newly added commands include the /neko, /meme, /joke commands, each getting content from specific apis. I used the free APIs from different platforms and checked the commands a number of times to ensure the api requests work and I get some output data. Go try yourself!
Ships:
For now, I have added AI moderation within the Discord bot, an economy system for gaming, betting games (I dont know a lot about betting so I used the help of AI), music playback and random memes from Reddit using its API. This tools are quite helpful in managing a discord server, especially when AI can decide how someone’s action is harming someone else and can also decide whether to Kick, Ban, Mute or Timeout the person although you can remove those permissions from it anytime!...
|
1793573724.8812816
|
1793660124.8812816
|
|
41776
|
ryder's runnin' late! (⌒▽⌒)☆ by @rinimee | ryder's runnin' late! (⌒▽⌒)☆ by @rinimee | Stardance...
|
rinimee
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T18:29:36Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WarioWare inspired game complete with two separate levels: a platformer and a clicker. It was challenging to code because I wanted to introduce originality rather than copying what the tutorial said, and that led to many errors that took way too long to fix, such as errors with timers and display. Regardless, I am proud of the final result and I loved the story I introduced as well as the UI of the game. Test my project on itch.io! The first minigame should be played by using space and the left/right arrows. The second minigame should be played with the mouse to click. All buttons are navigation-friendly. Good luck, and don’t make Ryder late again!", "repo": "https://github.com/rinimee/riniwarioware", "demo": "https://rinimee.itch.io/ryders-runnin-late"}]...
|
[{"post_id": 44374, "ts": "202 [{"post_id": 44374, "ts": "2026-08-10T02:49:54Z", "hours": 1.5781, "text": "alright now im done ;) so update! apparently there was an error when i was testing my code: the winning scene wasn’t even loading after minigame 2! I had to change the global miniagme count to 2 since I only have 2 minigames. and I had to take too much time to fix it sighh, but now I’ll be publishing this goofy game so that you can finally help ryder get to nasa hq~ here’s a very hilarious ryder art for you guys while you wait for this ship!"}, {"post_id": 43700, "ts": "2026-08-09T03:16:00Z", "hours": 0.8242, "text": "ALL DONE!! finally! after a good 7 hours of coding, I have finished the game! there were a lot of errors along the way and a whole lot more crashouts, but now that the game is done, I’ll be testing it next, making a READme on my repo, and publishing the game! while i didn’t have the motivation to draw ryder showing up to NASA HQ as the winning/loosing scenes, you can see that I ended up drawing memes instead. here they are! PS: there’s also a bonus third pic of me playing the game hehe"}, {"post_id": 39791, "ts": "2026-08-03T00:11:42Z", "hours": 1.1094, "text": "HOLY CHEESE I FIXED IT!! with some awesome-sauce help from the hack-club slack, I finally fixed the first minigame!!!! YAYY!! it still says level 0 but i think i can fix that easily, now the second minigame is buggin a little but I’ll work on that! ill also need to make the winning and loosing scene (DRAWING!) later on. heres the snippet of the second minigame!"}, {"post_id": 39220, "ts": "2026-08-02T01:35:53Z", "hours": 3.1844, "text": "NEED GODOT VETS :( updates! I completed the first minigame and its working, but the level screen timer errors are still haunting me. It took a full 1:30 hours just to get the timer to work. I’m crashing out over these errors and I just hope they’ll get fixed soon ;-; while I have finished the first minigame, I’ll be doing the next one: a clicker. I hope to god I dont run into any errors this time…"}, {"post_id": 38521, "ts": "2026-07-31T23:01:44Z", "hours": 1.4608, "text": "MOVING TIME!! (literally) yep! after some annoying moments of me repeatedly crashing out before ryder wouldn’t move, but after enabling game inputs and making the velocity negative, ryder can finally jump around on fountains and telephone boxes (although in Ryder’s timeline I doubt he needs telephone boxes.) Here’s a quick snippet below, Ill update you all on the next things!"}, {"post_id": 38409, "ts": "2026-07-31T19:15:19Z", "hours": 0.7131, "text": "its comin together! first devlog! its been like 40 mins but I was able to get the title/timer screen done, working on the level itself now, the ryder sprite is so adorable! let me know if you want the plot drop, its pretty simple. Anyway, I’m creating barriers right now for the sprite but heres a couple snippets! I really love how the title screen turned out!"}]...
|
Title: ryder's runnin' late! (⌒▽⌒)☆ by @ri Title: ryder's runnin' late! (⌒▽⌒)☆ by @rinimee | Stardance
Devlogs:
its comin together! first devlog! its been like 40 mins but I was able to get the title/timer screen done, working on the level itself now, the ryder sprite is so adorable! let me know if you want the plot drop, its pretty simple. Anyway, I’m creating barriers right now for the sprite but heres a couple snippets! I really love how the title screen turned out!
MOVING TIME!! (literally) yep! after some annoying moments of me repeatedly crashing out before ryder wouldn’t move, but after enabling game inputs and making the velocity negative, ryder can finally jump around on fountains and telephone boxes (although in Ryder’s timeline I doubt he needs telephone boxes.) Here’s a quick snippet below, Ill update you all on the next things!
NEED GODOT VETS :( updates! I completed the first minigame and its working, but the level screen timer errors are still haunting me. It took a full 1:30 hours just to get the timer to work. I’m crashing out over these errors and I just hope they’ll get fixed soon ;-; while I have finished the first minigame, I’ll be doing the next one: a clicker. I hope to god I dont run into any errors this time…
HOLY CHEESE I FIXED IT!! with some awesome-sauce help from the hack-club slack, I finally fixed the first minigame!!!! YAYY!! it still says level 0 but i think i can fix that easily, now the second minigame is buggin a little but I’ll work on that! ill also need to make the winning and loosing scene (DRAWING!) later on. heres the snippet of the second minigame!
ALL DONE!! finally! after a good 7 hours of coding, I have finished the game! there were a lot of errors along the way and a whole lot more crashouts, but now that the game is done, I’ll be testing it next, making a READme on my repo, and publishing the game! while i didn’t have the motivation to draw ryder showing up to NASA HQ as the winning/loosing scenes, you can see that I ended up drawing memes instead. here they are! PS: there’s also a bonus third pic of me playing the game hehe
alright now im done ;) so update! apparently there was an error when i was testing my code: the winning scene wasn’t even loading after minigame 2! I had to change the global miniagme count to 2 since I only have 2 minigames. and I had to take too much time to fix it sighh, but now I’ll be publishing this goofy game so that you can finally help ryder get to nasa hq~ here’s a very hilarious ryder art for you guys while you wait for this ship!
Ships:
I made a WarioWare inspired game complete with two separate levels: a platformer and a clicker. It was challenging to code because I wanted to introduce originality rather than copying what the tutorial said, and that led to many errors that took way too long to fix, such as errors with timers and display. Regardless, I am proud of the final result and I loved the story I introduced as well as the UI of the game. Test my project on itch.io! The first minigame should be played by using space and the left/right arrows. The second minigame should be played with the mouse to click. All buttons are navigation-friendly. Good luck, and don’t make Ryder late again!...
|
1793573723.675252
|
1793660123.675252
|
|
2894
|
TariqGPT Website by @yumorange | Stardance
|
yumorange
|
2
|
16.0
|
77
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T21:17:40Z", "hours": 14.0, "multiplier": 4.59, "payout": 65, "blessing": "neutral", "text": "Tariq’s progress has come another step further! We’re trying new ways of developing the model to make him faster, which has been challenging due to model keys being stupidly hard with pytorch. If you want to get the full out of testing tariq, you should know these things: Tokens - They control how many characters/words tariq is able to use, in a sense, a token equals 1 of anything in his vocabulary Temp - controls tariq’s probabilities, how often he will decide against his training data, a good number for this is 0.8. saving - Although there is sessions, saving is not automatic, you must locally save your tariq conversations- and hey if you get a funny conversation, maybe share it with others!", "repo": "https://github.com/orangeTasteYummers/TariqGPTWebsite", "demo": "https://tariqgpt.duckdns.org"}, {"ship_num": 2, "ts": "2026-06-03T19:47:51Z", "hours": 2.0, "multiplier": 4.97, "payout": 12, "blessing": "neutral", "text": "Tariq Website that contains info on Tariq and allows you to talk to his models! (Models made by me and @poopypants on github). AI was used ONLY for help during debugging, helping to set up model_interpreter, and for info on different way to implement something I didn’t already know how to do.", "repo": "https://github.com/orangeTasteYummers/TariqGPTWebsite", "demo": "https://tariqgpt.duckdns.org"}]...
|
[{"post_id": 24348, "ts": "202 [{"post_id": 24348, "ts": "2026-07-07T21:11:21Z", "hours": 2.1144, "text": "More fixing again we tried to fix the next tt model, but yet again model keys screw me over and now I have to figure that out, regardless it’s really close to coming together and I’m just going to ship the project for now since so much has been done since the first ship anyway."}, {"post_id": 13905, "ts": "2026-06-22T20:03:16Z", "hours": 1.68, "text": "UI Update I moved the bot settings into a menu, which you can open by pressing the “settings” button above the input box. (volume temp tokens etc.) Fixed some major bugs that happen during first time set up, and fixed that weird bug for creating new sessions where the exp time was undefined/null. Overall not a whole lot but I really like how this looks on mobile now!"}, {"post_id": 9470, "ts": "2026-06-15T20:30:05Z", "hours": 6.5061, "text": "This update was really not that much for what I did. I decided to add session keys with cookies on the website, just incase for features later when this gets pushed as a mobile app or other format, it also tracks data like device type. I used SQLite for my db, and it was very fun to setup and make work with my server! sessions last 3 days and I plan to do SOMETHING with this in the future, especially when I start working in xcode on my macbook. Quick list of what I did: even MORE ui fixes Sessions that last 3 days (also tracks device type) Sqlite sessions.db so i can add data on users. Added a single fact to tariq Quick list of what I wanna do: Add a settings button instead of the cluttered menu above the text bar Update the readme to be a little more detailed and maybe have better instructions. New page? MAYBE add limited chat saving online for the published site? Below is an example session row: (ip will be changed to local location most likely or local location will be added ex: united states or canada)"}, {"post_id": 5210, "ts": "2026-06-08T22:22:01Z", "hours": 1.1786, "text": "Tariq GPT update I’m proud to say I was able to really quickly make the ui accessible to all devices with access to a network and browser without weird visual bugs! This should have been done sooner but I procrastinated it and I finally did it today and it was really easy, here are the changes: changed sizing for elements to fix overflow on mobile made side bar a collapsible overlay instead of part of the container flex fixed button icons to do: Fix Tsundere Tariq"}, {"post_id": 2452, "ts": "2026-06-04T23:03:47Z", "hours": 2.7497, "text": "Tariq GPT changes Updated Info page with a fun facts section (with a refresh button), and a “how it started” section (to be written still) Changed volume bar not to go crazy for no reason Changed volume bar’s appearance Tariq will no long speak automatically Added more css animations Changed some text to tabler icons Things to fix/add: Tsundere tariq 1.1 is bugged as hell so he isn’t up there right now. Make the website work well on mobile Make the side bar collapsable"}, {"post_id": 1653, "ts": "2026-06-03T19:43:19Z", "hours": 1.3117, "text": "Finished styling about page and added back button. I also added new entries."}, {"post_id": 1166, "ts": "2026-06-03T00:39:49Z", "hours": 1.1025, "text": "added tusndere tariq, started on info page (some info was added but no css) and fixed a lot of stuff wrong with github"}]...
|
Title: TariqGPT Website by @yumorange | Stardance
Title: TariqGPT Website by @yumorange | Stardance
Devlogs:
added tusndere tariq, started on info page (some info was added but no css) and fixed a lot of stuff wrong with github
Finished styling about page and added back button. I also added new entries.
Tariq GPT changes Updated Info page with a fun facts section (with a refresh button), and a “how it started” section (to be written still) Changed volume bar not to go crazy for no reason Changed volume bar’s appearance Tariq will no long speak automatically Added more css animations Changed some text to tabler icons Things to fix/add: Tsundere tariq 1.1 is bugged as hell so he isn’t up there right now. Make the website work well on mobile Make the side bar collapsable
Tariq GPT update I’m proud to say I was able to really quickly make the ui accessible to all devices with access to a network and browser without weird visual bugs! This should have been done sooner but I procrastinated it and I finally did it today and it was really easy, here are the changes: changed sizing for elements to fix overflow on mobile made side bar a collapsible overlay instead of part of the container flex fixed button icons to do: Fix Tsundere Tariq
This update was really not that much for what I did. I decided to add session keys with cookies on the website, just incase for features later when this gets pushed as a mobile app or other format, it also tracks data like device type. I used SQLite for my db, and it was very fun to setup and make work with my server! sessions last 3 days and I plan to do SOMETHING with this in the future, especially when I start working in xcode on my macbook. Quick list of what I did: even MORE ui fixes Sessions that last 3 days (also tracks device type) Sqlite sessions.db so i can add data on users. Added a single fact to tariq Quick list of what I wanna do: Add a settings button instead of the cluttered menu above the text bar Update the readme to be a little more detailed and maybe have better instructions. New page? MAYBE add limited chat saving online for the published site? Below is an example session row: (ip will be changed to local location most likely or local location will be added ex: united states or canada)
UI Update I moved the bot settings into a menu, which you can open by pressing the “settings” button above the input box. (volume temp tokens etc.) Fixed some major bugs that happen during first time set up, and fixed that weird bug for creating new sessions where the exp time was undefined/null. Overall not a whole lot but I really like how this looks on mobile now!
More fixing again we tried to fix the next tt model, but yet again model keys screw me over and now I have to figure that out, regardless it’s really close to coming together and I’m just going to ship the project for now since so much has been done since the first ship anyway.
Ships:
Tariq Website that contains info on Tariq and allows you to talk to his models! (Models made by me and @poopypants on github). AI was used ONLY for help during debugging, helping to set up model_interpreter, and for info on different way to implement something I didn’t already know how to do.
Tariq’s progress has come another step further! We’re trying new ways of developing the model to make him faster, which has been challenging due to model keys being stupidly hard with pytorch. If you want to get the full out of testing tariq, you should know these things: Tokens - They control how many characters/words tariq is able to use, in a sense, a token equals 1 of anything in his vocabulary Temp - controls tariq’s probabilities, how often he will decide against his training data, a good number for this is 0.8. saving - Although there is sessions, saving is not automatic, you must locally save your tariq conversations- and hey if you get a funny conversation, maybe share it with others!...
|
1793573722.4361498
|
1793660122.4361498
|
|
16064
|
Pistons by @EndLess9 | Stardance
|
EndLess9
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T00:19:16Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’m proud to showcase my first CAD project for Hack club. I decided to make a piston since it’ beginner friendly and incorporates a lot of tools that I learned in my basic training for Onshape.", "repo": "https://github.com/EndLessDude/Onshape-Piston", "demo": "https://cad.onshape.com/documents/6b9c6c0743535657905d2399/w/5c75fbc38a07ae5a80378a6e/e/a781c21170eb18971778938e?renderMode=0&uiState=6a2d8ba4d621c391c3f06010"}]...
|
[{"post_id": 15368, "ts": "202 [{"post_id": 15368, "ts": "2026-06-24T23:59:47Z", "hours": 0.6569, "text": "Changes: Added the gudgeon pin Made a connecting rod carving for design Made the rod bearing Curved the sides of the rod bearing for better looks"}, {"post_id": 8179, "ts": "2026-06-13T17:01:28Z", "hours": 0.365, "text": "Made a cylinder Removed the inside of the cylinder Made the piston rings Created valve pockets"}]...
|
Title: Pistons by @EndLess9 | Stardance
Devlogs:
Title: Pistons by @EndLess9 | Stardance
Devlogs:
Made a cylinder Removed the inside of the cylinder Made the piston rings Created valve pockets
Changes: Added the gudgeon pin Made a connecting rod carving for design Made the rod bearing Curved the sides of the rod bearing for better looks
Ships:
I’m proud to showcase my first CAD project for Hack club. I decided to make a piston since it’ beginner friendly and incorporates a lot of tools that I learned in my basic training for Onshape....
|
1793573719.8958058
|
1793660119.8958058
|
|
37196
|
SCP WebOS by @superr | Stardance
|
superr
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T22:22:57Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SCP themed WebOS. This was a fun way for me to learn more about CSS and also learn some JS. It was difficult at times to deal with CSS, but I ended up learning alot of stuff from that. In the future I’d like to add more pictures to the classified app, and I’ll also make a terminal app with lots of functionality.", "repo": "https://github.com/supe-r/superswebos", "demo": "https://supe-r.github.io/superswebos/"}]...
|
[{"post_id": 32623, "ts": "202 [{"post_id": 32623, "ts": "2026-07-21T22:10:48Z", "hours": 1.1994, "text": "added cool cats app behind classified security"}, {"post_id": 32020, "ts": "2026-07-20T21:48:33Z", "hours": 1.8144, "text": "Added SCP Directory with 4 SCPs. I’ll probably make the actual display of the files prettier later, so they aren’t just blocks of text :D"}, {"post_id": 31845, "ts": "2026-07-20T15:31:34Z", "hours": 3.47, "text": "Made “login” screen, made desktop, made a “text file” as a welcome thats draggable closeable and openable"}]...
|
Title: SCP WebOS by @superr | Stardance
Devlogs:
Title: SCP WebOS by @superr | Stardance
Devlogs:
Made “login” screen, made desktop, made a “text file” as a welcome thats draggable closeable and openable
Added SCP Directory with 4 SCPs. I’ll probably make the actual display of the files prettier later, so they aren’t just blocks of text :D
added cool cats app behind classified security
Ships:
SCP themed WebOS. This was a fun way for me to learn more about CSS and also learn some JS. It was difficult at times to deal with CSS, but I ended up learning alot of stuff from that. In the future I’d like to add more pictures to the classified app, and I’ll also make a terminal app with lots of functionality....
|
1793573716.8831987
|
1793660116.8831987
|
|
44042
|
cool homepage by @Aliexpress_enjoyer | Stardance
|
Aliexpress_enjoyer
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T18:03:56Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom homepage yay I am proud of how quickly did it, since this would have taken me much longer when I first started years ago.", "repo": "https://github.com/boredguywithacomputer/homepage", "demo": "https://boredguywithacomputer.github.io/homepage/"}]...
|
[{"post_id": 41447, "ts": "202 [{"post_id": 41447, "ts": "2026-08-05T17:38:18Z", "hours": 0.7875, "text": "Added a simple temperature reading from a weather api I tried stealing firefox’s sponsored weather api but couldnt figure it out so I just went with a random one"}, {"post_id": 41158, "ts": "2026-08-05T06:01:22Z", "hours": 0.6911, "text": "Added the spinning turtle using threejs and a suspiciously google colored text and other css things I was wondering why threejs was tweaking when I remembered webgl didnt work on my firefox installation for some reason, I think i’ll be fixing that right after posting this devlog"}, {"post_id": 41072, "ts": "2026-08-05T01:08:35Z", "hours": 0.3503, "text": "made a turtle in blender he will return later…"}, {"post_id": 41059, "ts": "2026-08-05T00:41:34Z", "hours": 0.2644, "text": "I made a basic Google search bar It allows you to type slash to focus on the input"}]...
|
Title: cool homepage by @Aliexpress_enjoyer | Star Title: cool homepage by @Aliexpress_enjoyer | Stardance
Devlogs:
I made a basic Google search bar It allows you to type slash to focus on the input
made a turtle in blender he will return later…
Added the spinning turtle using threejs and a suspiciously google colored text and other css things I was wondering why threejs was tweaking when I remembered webgl didnt work on my firefox installation for some reason, I think i’ll be fixing that right after posting this devlog
Added a simple temperature reading from a weather api I tried stealing firefox’s sponsored weather api but couldnt figure it out so I just went with a random one
Ships:
I made a custom homepage yay I am proud of how quickly did it, since this would have taken me much longer when I first started years ago....
|
1793573711.8419573
|
1793660111.8419573
|
|
53165
|
Bot by @leam | Stardance
|
leam
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T17:05:44Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Basic SlackBot", "repo": "https://github.com/G-WE/RegularBot", "demo": "https://github.com/G-WE"}]...
|
[{"post_id": 61636, "ts": "202 [{"post_id": 61636, "ts": "2026-09-04T17:04:18Z", "hours": 0.4533, "text": "Horrible start, need to be better…."}, {"post_id": 54578, "ts": "2026-08-25T16:31:34Z", "hours": 0.3039, "text": "Ladies and gentlemen, its not working… I guess ill fix it tomorrow"}, {"post_id": 54534, "ts": "2026-08-25T15:46:44Z", "hours": 0.4619, "text": "Updated the Bot! I made a few addons for people who want to tack their expenses using the bot! We can add our expenses and also income, see history and the balance!"}, {"post_id": 52865, "ts": "2026-08-23T07:26:59Z", "hours": 0.3306, "text": "My First Slackbot!"}]...
|
Title: Bot by @leam | Stardance
Devlogs:
My First Title: Bot by @leam | Stardance
Devlogs:
My First Slackbot!
Updated the Bot! I made a few addons for people who want to tack their expenses using the bot! We can add our expenses and also income, see history and the balance!
Ladies and gentlemen, its not working… I guess ill fix it tomorrow
Horrible start, need to be better….
Ships:
Basic SlackBot...
|
1793573710.6427152
|
1793660110.6427152
|
|
56705
|
KERNL Archives by @KERNL | Stardance
|
KERNL
|
3
|
19.0
|
116
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T07:33:06Z", "hours": 4.0, "multiplier": 10.75, "payout": 45, "blessing": "neutral", "text": "Ship #3 - Final submission as Stardance ends. Thank you Stardance! Here is my final ship for this event! Unlogged time and changes is in this ship version.", "repo": "https://github.com/kxrnl/kernl-archives", "demo": "https://kernl-archives.vercel.app/"}, {"ship_num": 2, "ts": "2026-09-18T03:55:14Z", "hours": 4.0, "multiplier": 12.48, "payout": 50, "blessing": "neutral", "text": "Ship #2 I have implemented the ability to view project details and also their links! I am so far enjoying how React.js works and the work flow but i am struggling how to efficiently write logic since i am not familiar with TypeScript but i am slowly learning how to understand its syntax!", "repo": "https://github.com/kxrnl/kernl-archives", "demo": "https://kernl-archives.vercel.app/"}, {"ship_num": 3, "ts": "2026-09-08T09:55:25Z", "hours": 11.0, "multiplier": 1.97, "payout": 21, "blessing": "neutral", "text": "KERNL Archives is a collection of my past and so future. I would like to store them in one place like a “year book” but also have my other things into it like Devlogs which i liked from Stardance. This website is a past project from a practice web page ported into React.js! Using Supabase it has been a little more convenient and more forgiving than Firebase since Supabase has more rules/policies to modify. Also, React.js has been fun for me coming from vanilla HTML it really is very efficient to use as a framework but I am also aware of how heavy it is to deploy but for efficiency I would say it is a fair trade.", "repo": "https://github.com/kxrnl/kernl-archives", "demo": "https://kernl-archives.vercel.app/"}]...
|
[{"post_id": 86307, "ts": "202 [{"post_id": 86307, "ts": "2026-11-01T07:30:58Z", "hours": 4.1822, "text": "11/1/26 - The end This project has been shipped fully and will see more updates in the future! As stardance event ends here is the final version of my archival site."}, {"post_id": 69951, "ts": "2026-09-18T03:49:07Z", "hours": 1.6458, "text": "9/18/26 - Devlog 7 I have been pretty busy with school works lately and haven’t updated this project in a while. But i have finished the card view overlay! You can now visit my projects and see their code (if i set it to public). Now you can roast my codebase! I am still gathering devlogs on other projects so that might take a while to implement fully sorry for taking long 😓"}, {"post_id": 66664, "ts": "2026-09-12T14:59:55Z", "hours": 2.3933, "text": "9/12/26 - Devlog 6 Just got home from school and immediately worked on fixing content on the website, since i get flagged for using too much ai? ANYWAYS I am currently planning on fixing the orders of the project cards and gathering devlogs and grouping them so its easier to browse! Another goal is for mobile responsive design! But for now i will currently focus on desktop since its easier to adjust (well for me) sooo thats all for today! Shoutout to very cool people"}, {"post_id": 64113, "ts": "2026-09-08T09:46:57Z", "hours": 1.6611, "text": "9/8/26 - Devlog 5 Card views is now on the work. Still figuring out how to connect it to Supabase via ids! Markdown for devlogs is also being added (thanks to ai jeez it would kill me if i did it manually) Just a quick update"}, {"post_id": 63626, "ts": "2026-09-07T15:35:35Z", "hours": 1.6778, "text": "9/7/26 - Devlog 4 Omygod its beautiful. ALSO! Its now hosted! So the about page has been ported now and improved! Heres the preview might change a little bit more but overall. i love it"}, {"post_id": 63526, "ts": "2026-09-07T13:10:40Z", "hours": 0.4914, "text": "9/7/26 - Devlog 3 I have fixed the image problem thing! I also renamed the “Games” to “Projects” since I might put more than just games in the site soo yea:) I’d say this project is 80% complete!"}, {"post_id": 62928, "ts": "2026-09-06T13:55:20Z", "hours": 1.5811, "text": "9/6/26 - Devlog 2 Games and Devlogs Database and display is now working. HOWEVER, my dashboard when adding them is kinda broken (bcos of the image) but overall I am getting closer to getting the archives finished :) Supabase experience so far: Ease of use: 8/10 Data management: 7/10 Solving errors: 4/10 (Still not used to its policy things but i kinda get it)"}, {"post_id": 62156, "ts": "2026-09-05T12:32:37Z", "hours": 1.1825, "text": "9/5/26 - Devlog 1 I have chosen Supabase as my backend than Firebase just experimentation :) I am feeling sick today so a few things has been only added"}, {"post_id": 61483, "ts": "2026-09-04T12:51:28Z", "hours": 0.8978, "text": "9/4/26 - Devlog After a few hours with React.js I find it fun and fast to use components and the idea of reusability and not having repetitive tags is great! It is coming together now from native HTML to React.js love it"}, {"post_id": 60903, "ts": "2026-09-03T15:40:15Z", "hours": 2.8069, "text": "9/3/26 - React.js Since i was originally planning on porting my RoFind project into React, I wanted to try and learn it a little more on this project to further expand my knowledge and easily port it in the shortest amount of time."}, {"post_id": 58848, "ts": "2026-08-31T13:01:53Z", "hours": 0.42, "text": "8/31/26 - KERNL ARCHIVES I remembered that i have a template website i have originally created as a practice. Inspired from ARKE’s website ( https://arke.gumroad.com/ ), I really liked the simple blank and white theme of it and the spacious design. KERNL ARCHIVES will house my previous & future projects. Devlogs are also included and about me :)"}]...
|
Title: KERNL Archives by @KERNL | Stardance
Devlo Title: KERNL Archives by @KERNL | Stardance
Devlogs:
8/31/26 - KERNL ARCHIVES I remembered that i have a template website i have originally created as a practice. Inspired from ARKE’s website ( https://arke.gumroad.com/ ), I really liked the simple blank and white theme of it and the spacious design. KERNL ARCHIVES will house my previous & future projects. Devlogs are also included and about me :)
9/3/26 - React.js Since i was originally planning on porting my RoFind project into React, I wanted to try and learn it a little more on this project to further expand my knowledge and easily port it in the shortest amount of time.
9/4/26 - Devlog After a few hours with React.js I find it fun and fast to use components and the idea of reusability and not having repetitive tags is great! It is coming together now from native HTML to React.js love it
9/5/26 - Devlog 1 I have chosen Supabase as my backend than Firebase just experimentation :) I am feeling sick today so a few things has been only added
9/6/26 - Devlog 2 Games and Devlogs Database and display is now working. HOWEVER, my dashboard when adding them is kinda broken (bcos of the image) but overall I am getting closer to getting the archives finished :) Supabase experience so far: Ease of use: 8/10 Data management: 7/10 Solving errors: 4/10 (Still not used to its policy things but i kinda get it)
9/7/26 - Devlog 3 I have fixed the image problem thing! I also renamed the “Games” to “Projects” since I might put more than just games in the site soo yea:) I’d say this project is 80% complete!
9/7/26 - Devlog 4 Omygod its beautiful. ALSO! Its now hosted! So the about page has been ported now and improved! Heres the preview might change a little bit more but overall. i love it
9/8/26 - Devlog 5 Card views is now on the work. Still figuring out how to connect it to Supabase via ids! Markdown for devlogs is also being added (thanks to ai jeez it would kill me if i did it manually) Just a quick update
9/12/26 - Devlog 6 Just got home from school and immediately worked on fixing content on the website, since i get flagged for using too much ai? ANYWAYS I am currently planning on fixing the orders of the project cards and gathering devlogs and grouping them so its easier to browse! Another goal is for mobile responsive design! But for now i will currently focus on desktop since its easier to adjust (well for me) sooo thats all for today! Shoutout to very cool people
9/18/26 - Devlog 7 I have been pretty busy with school works lately and haven’t updated this project in a while. But i have finished the card view overlay! You can now visit my projects and see their code (if i set it to public). Now you can roast my codebase! I am still gathering devlogs on other projects so that might take a while to implement fully sorry for taking long 😓
11/1/26 - The end This project has been shipped fully and will see more updates in the future! As stardance event ends here is the final version of my archival site.
Ships:
KERNL Archives is a collection of my past and so future. I would like to store them in one place like a “year book” but also have my other things into it like Devlogs which i liked from Stardance. This website is a past project from a practice web page ported into React.js! Using Supabase it has been a little more convenient and more forgiving than Firebase since Supabase has more rules/policies to modify. Also, React.js has been fun for me coming from vanilla HTML it really is very efficient to use as a framework but I am also aware of how heavy it is to deploy but for efficiency I would say it is a fair trade.
Ship #2 I have implemented the ability to view project details and also their links! I am so far enjoying how React.js works and the work flow but i am struggling how to efficiently write logic since i am not familiar with TypeScript but i am slowly learning how to understand its syntax!
Ship #3 - Final submission as Stardance ends. Thank you Stardance! Here is my final ship for this event! Unlogged time and changes is in this ship version....
|
1793573709.4002573
|
1793660109.4002573
|
|
56701
|
MIDL by @ibrahim- | Stardance
|
ibrahim-
|
2
|
14.0
|
228
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T15:22:22Z", "hours": 7.0, "multiplier": 16.78, "payout": 119, "blessing": "neutral", "text": "I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Almost all of the features that the reviewers mentioned in the last ship have been implemented! . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Cloud save file storage (YOU CAN SAVE YOUR SAVE FILES IN THE CLOUD) Accounts system LEADERBOARD!! (with custom MIDL points, although not all games support our leaderboard) Player controls (play, pause fullscreen) Security (popup blocking) You can now upload your own SWF file! . Planned Features Game snapshot as a save file Emulators!", "repo": "https://github.com/ibfactor/midl", "demo": "https://midl.ibfr.org/"}, {"ship_num": 2, "ts": "2026-09-04T06:33:19Z", "hours": 7.0, "multiplier": 14.95, "payout": 109, "blessing": "neutral", "text": "I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Planned Features Saving game state (as it is) Cloud storage functionality Retro console emulators!", "repo": "https://github.com/ibfactor/midl", "demo": "https://midl.ibfr.org/"}]...
|
[{"post_id": 64264, "ts": "202 [{"post_id": 64264, "ts": "2026-09-08T15:19:16Z", "hours": 0.7286, "text": "Devlog #15 Added finishing touches, and more importantly (something I forgot to mention earlier), you can now upload and play your own .SWF files!"}, {"post_id": 64202, "ts": "2026-09-08T12:58:56Z", "hours": 0.4606, "text": "Devlog #14 Finally fixed the extra space issue and squashed a few visual bugs"}, {"post_id": 64107, "ts": "2026-09-08T09:34:56Z", "hours": 0.2803, "text": "Devlog #13 Need your advice I do not know what do to with this extra space. Experimented for like 15 minutes but idk atp, nothing looked good. or or or I could leave it as it is."}, {"post_id": 64061, "ts": "2026-09-08T06:07:13Z", "hours": 0.7936, "text": "Devlog #12 Leaderboards are here Fixed a bug that was introduced in the previous log (save feature was not working as expected)."}, {"post_id": 63710, "ts": "2026-09-07T17:24:51Z", "hours": 0.9033, "text": "Devlog #11 The my account page is finally complete. I also implemented max (high) score calculation, just need to make the leaderboard now. MP (MIDL points) are different from in-game points, and use a special algorithm for their calculation. (multiplying all high scores in all levels, by the number of levels, and multiplying that by the number of stars gained, all of these values depend on the game of course)"}, {"post_id": 63581, "ts": "2026-09-07T14:34:19Z", "hours": 0.2656, "text": "Devlog #10 I’ve added the following games (on the request of @NC and @Definitly-Not-Me ): Dragon Ball Z vs Naruto One Piece vs Naruto Learn to Fly"}, {"post_id": 63551, "ts": "2026-09-07T13:56:37Z", "hours": 1.4186, "text": "Devlog #9 Finally completed the cloud save feature! Used Express and LowDB in the backend. Next Up: add requested games, squash bugs, and most importantly, add a leaderboard!"}, {"post_id": 62212, "ts": "2026-09-05T14:01:31Z", "hours": 2.2394, "text": "Devlog #8 Finally created the authentication system using Express & LowDB, not committing to GitHub yet since I still have to set up the server. I’ve seen all the reviews and will implement them. Also added the close buttons to modals. The requested games will be added in the next devlog. :)"}, {"post_id": 60891, "ts": "2026-09-03T15:17:26Z", "hours": 0.3594, "text": "Devlog #7 Finally implemented the save manager"}, {"post_id": 60853, "ts": "2026-09-03T14:11:47Z", "hours": 2.2514, "text": "Devlog #6 I fixed a few bugs, added a few animations, and most importantly… Wasted 2 whole hours trying to get ruffle player state to restore after reloads…… which failed So plan B, we use the actual save files."}, {"post_id": 60299, "ts": "2026-09-02T16:00:31Z", "hours": 0.8422, "text": "Devlog #5 Done with the Ruffle player, added play/pause controls, fullscreen, and developed a custom solution for saving ruffle state (this is really exciting ), so now we can have flash games with cloud state saves :3"}, {"post_id": 60187, "ts": "2026-09-02T12:43:37Z", "hours": 1.2194, "text": "Devlog #4 Done with the game page and some animations <3 I need your help now, comment ANY obscure flash games you used to play so that they can be archived"}, {"post_id": 59766, "ts": "2026-09-01T18:13:57Z", "hours": 1.0086, "text": "Devlog #3 Finally done with some animations and the search bar"}, {"post_id": 59598, "ts": "2026-09-01T14:43:41Z", "hours": 1.3175, "text": "Devlog #2 Done with adding the games, the images, and styled the main home page. now I need your help, comment any obscure flash game you used to play so that it can be added and archived"}, {"post_id": 58977, "ts": "2026-08-31T15:32:12Z", "hours": 0.2656, "text": "I need YOUR help Do you know of any obscure flash games you used to play? Comment it so it can be added Done with the base styles and structure + created and filled the games database partially"}]...
|
Title: MIDL by @ibrahim- | Stardance
Devlogs:
I n Title: MIDL by @ibrahim- | Stardance
Devlogs:
I need YOUR help Do you know of any obscure flash games you used to play? Comment it so it can be added Done with the base styles and structure + created and filled the games database partially
Devlog #2 Done with adding the games, the images, and styled the main home page. now I need your help, comment any obscure flash game you used to play so that it can be added and archived
Devlog #3 Finally done with some animations and the search bar
Devlog #4 Done with the game page and some animations <3 I need your help now, comment ANY obscure flash games you used to play so that they can be archived
Devlog #5 Done with the Ruffle player, added play/pause controls, fullscreen, and developed a custom solution for saving ruffle state (this is really exciting ), so now we can have flash games with cloud state saves :3
Devlog #6 I fixed a few bugs, added a few animations, and most importantly… Wasted 2 whole hours trying to get ruffle player state to restore after reloads…… which failed So plan B, we use the actual save files.
Devlog #7 Finally implemented the save manager
Devlog #8 Finally created the authentication system using Express & LowDB, not committing to GitHub yet since I still have to set up the server. I’ve seen all the reviews and will implement them. Also added the close buttons to modals. The requested games will be added in the next devlog. :)
Devlog #9 Finally completed the cloud save feature! Used Express and LowDB in the backend. Next Up: add requested games, squash bugs, and most importantly, add a leaderboard!
Devlog #10 I’ve added the following games (on the request of @NC and @Definitly-Not-Me ): Dragon Ball Z vs Naruto One Piece vs Naruto Learn to Fly
Devlog #11 The my account page is finally complete. I also implemented max (high) score calculation, just need to make the leaderboard now. MP (MIDL points) are different from in-game points, and use a special algorithm for their calculation. (multiplying all high scores in all levels, by the number of levels, and multiplying that by the number of stars gained, all of these values depend on the game of course)
Devlog #12 Leaderboards are here Fixed a bug that was introduced in the previous log (save feature was not working as expected).
Devlog #13 Need your advice I do not know what do to with this extra space. Experimented for like 15 minutes but idk atp, nothing looked good. or or or I could leave it as it is.
Devlog #14 Finally fixed the extra space issue and squashed a few visual bugs
Devlog #15 Added finishing touches, and more importantly (something I forgot to mention earlier), you can now upload and play your own .SWF files!
Ships:
I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Planned Features Saving game state (as it is) Cloud storage functionality Retro console emulators!
I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Almost all of the features that the reviewers mentioned in the last ship have been implemented! . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Cloud save file storage (YOU CAN SAVE YOUR SAVE FILES IN THE CLOUD) Accounts system LEADERBOARD!! (with custom MIDL points, although not all games support our leaderboard) Player controls (play, pause fullscreen) Security (popup blocking) You can now upload your own SWF file! . Planned Features Game snapshot as a save file Emulators!...
|
1793573708.16858
|
1793660108.16858
|
|
44021
|
wildfire by @Imtiaz | Stardance
|
Imtiaz
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T23:14:23Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So, it’s a fun project of mine made by using NASA’s Firms software. NASA actually collects data from the space and puts it into FIRMS if any place is getting cooked. To see if you’re living in a great place, check it out!!", "repo": "https://github.com/imtua/wildfire", "demo": "https://imtua.github.io/wildfire/"}]...
|
[{"post_id": 42101, "ts": "202 [{"post_id": 42101, "ts": "2026-08-06T17:45:34Z", "hours": 0.3542, "text": "just wrote the scoring.js file, everythings working good, it scores."}, {"post_id": 42084, "ts": "2026-08-06T17:19:48Z", "hours": 0.2933, "text": "wrote the firms.js file"}, {"post_id": 41830, "ts": "2026-08-06T09:07:20Z", "hours": 1.2853, "text": "just wrote the app.js file, i used CARTO api for the map."}, {"post_id": 41605, "ts": "2026-08-05T22:12:30Z", "hours": 0.5072, "text": "just wrote the main.css file that gives my website a beautiful design."}, {"post_id": 41586, "ts": "2026-08-05T21:41:03Z", "hours": 0.9125, "text": "as you can see, the index.html is done here. whatever im doing is getting logged in the readme file."}]...
|
Title: wildfire by @Imtiaz | Stardance
Devlogs:
a Title: wildfire by @Imtiaz | Stardance
Devlogs:
as you can see, the index.html is done here. whatever im doing is getting logged in the readme file.
just wrote the main.css file that gives my website a beautiful design.
just wrote the app.js file, i used CARTO api for the map.
wrote the firms.js file
just wrote the scoring.js file, everythings working good, it scores.
Ships:
So, it’s a fun project of mine made by using NASA’s Firms software. NASA actually collects data from the space and puts it into FIRMS if any place is getting cooked. To see if you’re living in a great place, check it out!!...
|
1793573706.9798326
|
1793660106.9798326
|
|
44005
|
Travel Budget Planner by @Ombama | Stardance
|
Ombama
|
1
|
5.64
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T22:28:59Z", "hours": 5.0, "multiplier": 7.28, "payout": 38, "blessing": "neutral", "text": "I made a Travel Budget Planner that helps users estimate the full cost of a trip. Users enter their destination, number of days, travelers, hotel, food, transportation, activities, and emergency-budget percentage. The app calculates each expense category, total trip cost, cost per person, and average daily cost. It also labels the trip as Budget, Standard, or Expensive, saves the latest trip, and includes reset and print options. The most challenging parts were validating inputs, organizing the calculations, preventing incorrect results, and saving data with localStorage. I am most proud of the responsive design and visual budget breakdown. To test it, enter trip details and click Calculate Budget. Also try missing fields, zero or negative values, refreshing the page, resetting the form, and printing the summary.", "repo": "https://github.com/Om-Bhagat-prog/Travel-Budget-Planner", "demo": "https://travel-budget-planner-five.vercel.app/"}]...
|
[{"post_id": 41558, "ts": "202 [{"post_id": 41558, "ts": "2026-08-05T21:00:17Z", "hours": 0.6419, "text": "I changed the README.md file."}, {"post_id": 41019, "ts": "2026-08-04T22:25:53Z", "hours": 5.1947, "text": "The final project includes a responsive interface where users enter their destination, trip length, number of travelers, hotel cost, food cost, transportation, activities, and an extra emergency-budget percentage. JavaScript reads and validates the form, calculates each expense category, total trip cost, cost per person, and average daily cost. It also labels the trip as Budget, Standard, or Expensive and displays visual spending bars. I added currency formatting, clear error messages, reset and print buttons, and browser localStorage so the latest trip can be saved and restored after refreshing the page. The CSS includes cards, responsive layouts, mobile support, and print styles. The finished GitHub project also includes a detailed README explaining its features, calculations, technologies, file structure, and possible future improvements."}]...
|
Title: Travel Budget Planner by @Ombama | Stardanc Title: Travel Budget Planner by @Ombama | Stardance
Devlogs:
The final project includes a responsive interface where users enter their destination, trip length, number of travelers, hotel cost, food cost, transportation, activities, and an extra emergency-budget percentage. JavaScript reads and validates the form, calculates each expense category, total trip cost, cost per person, and average daily cost. It also labels the trip as Budget, Standard, or Expensive and displays visual spending bars. I added currency formatting, clear error messages, reset and print buttons, and browser localStorage so the latest trip can be saved and restored after refreshing the page. The CSS includes cards, responsive layouts, mobile support, and print styles. The finished GitHub project also includes a detailed README explaining its features, calculations, technologies, file structure, and possible future improvements.
I changed the README.md file.
Ships:
I made a Travel Budget Planner that helps users estimate the full cost of a trip. Users enter their destination, number of days, travelers, hotel, food, transportation, activities, and emergency-budget percentage. The app calculates each expense category, total trip cost, cost per person, and average daily cost. It also labels the trip as Budget, Standard, or Expensive, saves the latest trip, and includes reset and print options. The most challenging parts were validating inputs, organizing the calculations, preventing incorrect results, and saving data with localStorage. I am most proud of the responsive design and visual budget breakdown. To test it, enter trip details and click Calculate Budget. Also try missing fields, zero or negative values, refreshing the page, resetting the form, and printing the summary....
|
1793573705.8148098
|
1793660105.8148098
|
|
44004
|
AI APEX Trader by @alex4o | Stardance
|
alex4o
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T13:25:15Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made apex-trader — a fully autonomous crypto trend-following bot trading BTC-EUR and ETH-EUR on Revolut X. It enters only when three conditions align on daily candles: price breaks above a 30-day Donchian channel, Supertrend(10,3) points up, and price sits above the 200-day SMA. It exits when Supertrend flips, protected by a Chandelier hard stop (6xATR). Risk is rules-based: max 25% of equity per position, max 2 positions, 50% exposure cap, -5% daily circuit breaker. An LLM (4-model fallback chain: Groq -> OpenRouter) reviews each entry as a risk-off veto — it can block trades but never create them, and fails open if all models are down. It runs unattended in the cloud: a cron-job.org pinger triggers a GitHub Actions cycle every 15 minutes, the bot commits its own state and decision log back to the repo, and ntfy.sh pushes entry/exit alerts to my phone. Currently paper trading EUR 500. What was challenging The hardest part wasn’t the strategy — it was trusting it, then deploying it. My first backtests looked amazing until I learned to distrust them: I built proper out-of-sample validation (frozen parameters, last 30% of history, real fees + slippage) plus a robustness check across all 7 neighboring parameter combos. That process killed one exit rule — the Donchian lower band was silently cutting winners on ~100% of bars; removing it improved OOS Sharpe on both assets. On deployment, GitHub’s built-in 15-min cron proved unreliable (measured gaps of 76-204 minutes overnight), so I built an external metronome via cron-job.org + repository_dispatch — then debugged a misleading 404 that turned out to be GitHub’s response when a fine-grained PAT can’t see a repo (fixed with least-privilege token scoping). I also had to guarantee the local and cloud bots could never run simultaneously — shared git state means double-trade risk. What I’m proud of The discipline. Every number in my README carries its caveats: out-of-sample trade counts are below statistical significance and I say so; buy-and-hold actually beat the strategy on raw return in the bull window, and I publish that too — the real edge is drawdown survival (-11% vs -52% for holding). The bot runs itself for days with zero intervention, every decision logged to a public JSONL audit trail from cron ping to trade decision. The LLM is caged — used only where it’s defensible (a second opinion on risk) and locked out of creating trades. And the parity check: live bot logic vs backtest engine, 0 mismatches — the bot IS what was tested. How to test it out No UI — it’s headless — but everything is verifiable: Watch it live: the repo’s Actions tab shows a full trading cycle every 15 min (market data -> signals -> decision). Read its mind: apex_decisions.jsonl logs every decision it has ever made with reasoning; apex_state.json is its current portfolio. Reproduce my backtest: clone the repo, pip install -r requirements.txt, python backtest_apex.py — public Coinbase data, zero secrets needed; you should get the same numbers as the README table. Run it yourself: python apex_trader.py defaults to paper mode with zero secrets — it evaluates live market data and tells you what it WOULD do. It can’t place a real order unless you deliberately set LIVE_TRADING=true and add exchange credentials.", "repo": "https://github.com/alexgamingmax11-code/apex-trader", "demo": "https://github.com/alexgamingmax11-code/apex-trader/actions"}]...
|
[{"post_id": 41296, "ts": "202 [{"post_id": 41296, "ts": "2026-08-05T13:04:21Z", "hours": 0.3139, "text": "My very own trading automation project!"}]...
|
Title: AI APEX Trader by @alex4o | Stardance
Devl Title: AI APEX Trader by @alex4o | Stardance
Devlogs:
My very own trading automation project!
Ships:
What I made apex-trader — a fully autonomous crypto trend-following bot trading BTC-EUR and ETH-EUR on Revolut X. It enters only when three conditions align on daily candles: price breaks above a 30-day Donchian channel, Supertrend(10,3) points up, and price sits above the 200-day SMA. It exits when Supertrend flips, protected by a Chandelier hard stop (6xATR). Risk is rules-based: max 25% of equity per position, max 2 positions, 50% exposure cap, -5% daily circuit breaker. An LLM (4-model fallback chain: Groq -> OpenRouter) reviews each entry as a risk-off veto — it can block trades but never create them, and fails open if all models are down. It runs unattended in the cloud: a cron-job.org pinger triggers a GitHub Actions cycle every 15 minutes, the bot commits its own state and decision log back to the repo, and ntfy.sh pushes entry/exit alerts to my phone. Currently paper trading EUR 500. What was challenging The hardest part wasn’t the strategy — it was trusting it, then deploying it. My first backtests looked amazing until I learned to distrust them: I built proper out-of-sample validation (frozen parameters, last 30% of history, real fees + slippage) plus a robustness check across all 7 neighboring parameter combos. That process killed one exit rule — the Donchian lower band was silently cutting winners on ~100% of bars; removing it improved OOS Sharpe on both assets. On deployment, GitHub’s built-in 15-min cron proved unreliable (measured gaps of 76-204 minutes overnight), so I built an external metronome via cron-job.org + repository_dispatch — then debugged a misleading 404 that turned out to be GitHub’s response when a fine-grained PAT can’t see a repo (fixed with least-privilege token scoping). I also had to guarantee the local and cloud bots could never run simultaneously — shared git state means double-trade risk. What I’m proud of The discipline. Every number in my README carries its caveats: out-of-sample trade counts are below statistical significance and I say so; buy-and-hold actually beat the strategy on raw return in the bull window, and I publish that too — the real edge is drawdown survival (-11% vs -52% for holding). The bot runs itself for days with zero intervention, every decision logged to a public JSONL audit trail from cron ping to trade decision. The LLM is caged — used only where it’s defensible (a second opinion on risk) and locked out of creating trades. And the parity check: live bot logic vs backtest engine, 0 mismatches — the bot IS what was tested. How to test it out No UI — it’s headless — but everything is verifiable: Watch it live: the repo’s Actions tab shows a full trading cycle every 15 min (market data -> signals -> decision). Read its mind: apex_decisions.jsonl logs every decision it has ever made with reasoning; apex_state.json is its current portfolio. Reproduce my backtest: clone the repo, pip install -r requirements.txt, python backtest_apex.py — public Coinbase data, zero secrets needed; you should get the same numbers as the README table. Run it yourself: python apex_trader.py defaults to paper mode with zero secrets — it evaluates live market data and tells you what it WOULD do. It can’t place a real order unless you deliberately set LIVE_TRADING=true and add exchange credentials....
|
1793573704.6580994
|
1793660104.6580994
|
|
53150
|
Yashiro's JSON by @pksmkwe26 | Stardance
|
pksmkwe26
|
1
|
14.0
|
48
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T16:31:26Z", "hours": 14.0, "multiplier": 3.54, "payout": 48, "blessing": "neutral", "text": "I made an Programming Language that uses JSON (You heard it right, JSON!!!) I initially showed the idea to my friend and he was traumatized as hell, So i decided to go with it. And i decided to write the interpreter with Dart to add more spice to the wound. It is a real sucess!! tho i faced many issues with variable declaration and parser, it was solved thankfully. It has two types of variable assigning let and lete, Lete being the executed variable. Loop and Networking were the hardest to do, It also has a tests section to see if something breaks something or not. It has custom function definations too and Math’s Bitwise Operators and stdin support as well. It also has an exception view to see the code crash and i plan to expand this project more. I hope you all like this project as much as my other ones.", "repo": "https://github.com/kwe26/yajson", "demo": "https://github.com/kwe26/yajson/releases/tag/1.0.0"}]...
|
[{"post_id": 64307, "ts": "202 [{"post_id": 64307, "ts": "2026-09-08T16:25:50Z", "hours": 2.0317, "text": "Devlog - 5 (Finale Before Shipping) An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Networking Added net.server net.server As it suggests it can now open full HTTP Server at designated ports now! You can check out the example in server.yaj in root of the repository. The First Beta and Ship is now READY!!! https://github.com/kwe26/yajson/releases/tag/1.0.0 Test and tinker around with it, Let’s goo!! THANKS, I LOVE YOU ALL >3.!!!"}, {"post_id": 61675, "ts": "2026-09-04T18:22:33Z", "hours": 1.0083, "text": "Devlog - 4 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Features added - Networking There are now Networking Modules too Networking Allows the User to do Networking tasks with --allow-network-access net.get net.post net.delete net.patch net.put It currently allows passing url, headers and body. Anyways, Thanks for reading Love you all 😘😘"}, {"post_id": 61002, "ts": "2026-09-03T18:17:09Z", "hours": 1.5583, "text": "Devlog - 3 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Loops Include Multiple .yaj files in one. io.rename <-> io.move More Tests added in tests/ Tests There are now more tests included such as Lists (add,remove,indexOf,getAt,removeAt,set, etc.) I/O Tests Include yaj files Switch Tests VarInVar Tests YaJSON [ { \"func\" : \"print\" , \"$1\" : \"Hello World, love you all!\" } ] Info YaJSON’s interpreter is written in dart, weird isn’t it? Future Goal Networking Shell Access GUI Visualizer . Cya, everyone Love you all ❤️ , Have a nice day/night ahead depending on your timezone and when you are reading right now.!!!"}, {"post_id": 60800, "ts": "2026-09-03T12:15:14Z", "hours": 6.6206, "text": "Devlog - 2 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Function Define and Calling Them Lists Manipulation File I/O Take Input from User Extended Permissions POE DUMP (Point of Execution my own term) Added Tests Changes lete can now execute and assign to variable and permissions of --allow-rw-access is required for File I/O Operations. The Variables can now be assigned like {hello: {b: 1}} and be accessed like ${hello.b} like this too. It’s too good looking now. - Variable Parser is now universal too. Tests It can conduct tests within the runtime and check for expected output. It also reports the pass percentage too. POE It’s an Counter of Total Executions Being made. It outputs the original parse value of the JSON so it could better used for predicting errors Thanks, Love you all"}, {"post_id": 54675, "ts": "2026-08-25T18:33:12Z", "hours": 2.4442, "text": "Devlog - 1 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language What is Currently Has? Print/Console Clear Basic Arithmatic Operations Declaring Variable and Constants Future Plans Make it to have Tests Making the Interpreter More Stable. Also, i think i can also make an Drag-an-drop Programming Interface. yeah, i created this to traumatize the Internet. And obv, The Interpreter is Writtern in Dart!!"}]...
|
Title: Yashiro's JSON by @pksmkwe26 | Stardanc Title: Yashiro's JSON by @pksmkwe26 | Stardance
Devlogs:
Devlog - 1 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language What is Currently Has? Print/Console Clear Basic Arithmatic Operations Declaring Variable and Constants Future Plans Make it to have Tests Making the Interpreter More Stable. Also, i think i can also make an Drag-an-drop Programming Interface. yeah, i created this to traumatize the Internet. And obv, The Interpreter is Writtern in Dart!!
Devlog - 2 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Function Define and Calling Them Lists Manipulation File I/O Take Input from User Extended Permissions POE DUMP (Point of Execution my own term) Added Tests Changes lete can now execute and assign to variable and permissions of --allow-rw-access is required for File I/O Operations. The Variables can now be assigned like {hello: {b: 1}} and be accessed like ${hello.b} like this too. It’s too good looking now. - Variable Parser is now universal too. Tests It can conduct tests within the runtime and check for expected output. It also reports the pass percentage too. POE It’s an Counter of Total Executions Being made. It outputs the original parse value of the JSON so it could better used for predicting errors Thanks, Love you all
Devlog - 3 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Loops Include Multiple .yaj files in one. io.rename <-> io.move More Tests added in tests/ Tests There are now more tests included such as Lists (add,remove,indexOf,getAt,removeAt,set, etc.) I/O Tests Include yaj files Switch Tests VarInVar Tests YaJSON [ { "func" : "print" , "$1" : "Hello World, love you all!" } ] Info YaJSON’s interpreter is written in dart, weird isn’t it? Future Goal Networking Shell Access GUI Visualizer . Cya, everyone Love you all ❤️ , Have a nice day/night ahead depending on your timezone and when you are reading right now.!!!
Devlog - 4 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Features added - Networking There are now Networking Modules too Networking Allows the User to do Networking tasks with --allow-network-access net.get net.post net.delete net.patch net.put It currently allows passing url, headers and body. Anyways, Thanks for reading Love you all 😘😘
Devlog - 5 (Finale Before Shipping) An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Networking Added net.server net.server As it suggests it can now open full HTTP Server at designated ports now! You can check out the example in server.yaj in root of the repository. The First Beta and Ship is now READY!!! https://github.com/kwe26/yajson/releases/tag/1.0.0 Test and tinker around with it, Let’s goo!! THANKS, I LOVE YOU ALL >3.!!!
Ships:
I made an Programming Language that uses JSON (You heard it right, JSON!!!) I initially showed the idea to my friend and he was traumatized as hell, So i decided to go with it. And i decided to write the interpreter with Dart to add more spice to the wound. It is a real sucess!! tho i faced many issues with variable declaration and parser, it was solved thankfully. It has two types of variable assigning let and lete, Lete being the executed variable. Loop and Networking were the hardest to do, It also has a tests section to see if something breaks something or not. It has custom function definations too and Math’s Bitwise Operators and stdin support as well. It also has an exception view to see the code crash and i plan to expand this project more. I hope you all like this project as much as my other ones....
|
1793573703.468647
|
1793660103.468647
|
|
7145
|
Personal Portfolio Site by @smjp | Stardance
|
smjp
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T07:19:30Z", "hours": 6.0, "multiplier": 3.85, "payout": 0, "blessing": "neutral", "text": "I built a personal portfolio website from scratch to display my academic profile, community service, extra-curricular achievements, and my overall personality. It is a lightweight, static site built entirely with semantic HTML5, custom CSS3 layouts, and core JavaScript. The single biggest obstacle was working with responsive design and media queries. Getting the layouts—especially text blocks and complex section wraps—to look natural and scale down elegantly on mobile devices required a significant amount of layout debugging and trial and error. I’m really proud of grasping cleaner design principles and stylesheet architecture. Figuring out how to use the CSS :root class to store a global color palette and building a unified common CSS layout that cleanly links across separate pages felt like a huge leap forward in making my code maintainable. The site is entirely static, responsive, and ready to view. To test it: Open the project directly via its deployed link. Toggle your browser’s Developer Tools (F12) to responsive/mobile view to see how the media query breakpoints fluidly restructure the navigation menu, sections, and flex elements for smaller screens!", "repo": "https://github.com/Spirit62/Portfolio", "demo": "https://spirit62.github.io/Portfolio/"}]...
|
[{"post_id": 6702, "ts": "2026 [{"post_id": 6702, "ts": "2026-06-11T07:15:13Z", "hours": 0.5847, "text": "Devlog 4- Finished the designs for every single page, made research connect to my research paper and added cool visual effects in my social media page Also, media queries took me a lot of time which makes it look extremely clean on smaller devices"}, {"post_id": 4913, "ts": "2026-06-08T14:35:11Z", "hours": 3.4422, "text": "Devlog3- I added a navigation bar for all pages which looks really neat and it took me a lot of time to add media queries to make the website have a good UI in mobile phones or tablets. This taught me a lot and I’m starting to realize AI cannot replace humans after all. I feel its the same as mathematics, we have AI to do the math for us but we dont rely on it blindly. Moreover, I made individual pages for the websites with the same template idea and I also finished up on the experience page. This is my first project and I am so excited to share the end result which I will post in Devlog4."}, {"post_id": 2656, "ts": "2026-06-05T10:11:05Z", "hours": 1.56, "text": "Devlog -2 Hi again, Here is the second page of my portfolio site it took me a long time to get a clean site lmk if you have any feedbacks or suggestions!!"}, {"post_id": 2540, "ts": "2026-06-05T02:32:31Z", "hours": 0.8078, "text": "Devlog1- Hi! I’m Sam for short; I really fell in love with web designing a month ago and after learning HTML and CSS, I am currently learning JavaScript, yet I fear that I will lose my designing abilities hence, I am working on this personal portfolio site where I finished this main page in about 15 minutes, I find the design clean but if you have any feedbacks lmk! :>"}]...
|
Title: Personal Portfolio Site by @smjp | Stardanc Title: Personal Portfolio Site by @smjp | Stardance
Devlogs:
Devlog1- Hi! I’m Sam for short; I really fell in love with web designing a month ago and after learning HTML and CSS, I am currently learning JavaScript, yet I fear that I will lose my designing abilities hence, I am working on this personal portfolio site where I finished this main page in about 15 minutes, I find the design clean but if you have any feedbacks lmk! :>
Devlog -2 Hi again, Here is the second page of my portfolio site it took me a long time to get a clean site lmk if you have any feedbacks or suggestions!!
Devlog3- I added a navigation bar for all pages which looks really neat and it took me a lot of time to add media queries to make the website have a good UI in mobile phones or tablets. This taught me a lot and I’m starting to realize AI cannot replace humans after all. I feel its the same as mathematics, we have AI to do the math for us but we dont rely on it blindly. Moreover, I made individual pages for the websites with the same template idea and I also finished up on the experience page. This is my first project and I am so excited to share the end result which I will post in Devlog4.
Devlog 4- Finished the designs for every single page, made research connect to my research paper and added cool visual effects in my social media page Also, media queries took me a lot of time which makes it look extremely clean on smaller devices
Ships:
I built a personal portfolio website from scratch to display my academic profile, community service, extra-curricular achievements, and my overall personality. It is a lightweight, static site built entirely with semantic HTML5, custom CSS3 layouts, and core JavaScript. The single biggest obstacle was working with responsive design and media queries. Getting the layouts—especially text blocks and complex section wraps—to look natural and scale down elegantly on mobile devices required a significant amount of layout debugging and trial and error. I’m really proud of grasping cleaner design principles and stylesheet architecture. Figuring out how to use the CSS :root class to store a global color palette and building a unified common CSS layout that cleanly links across separate pages felt like a huge leap forward in making my code maintainable. The site is entirely static, responsive, and ready to view. To test it: Open the project directly via its deployed link. Toggle your browser’s Developer Tools (F12) to responsive/mobile view to see how the media query breakpoints fluidly restructure the navigation menu, sections, and flex elements for smaller screens!...
|
1793573702.314504
|
1793660102.314504
|
|
42785
|
Completing My Coursera Course by @abhi_lenkala | S Completing My Coursera Course by @abhi_lenkala | Stardance...
|
abhi_lenkala
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T18:21:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "there is a lot left im just trying to do this before i forget", "repo": "https://github.com/26lenkalaa/AI-ML-Models-and-Practice-", "demo": "https://github.com/26lenkalaa/AI-ML-Models-and-Practice-/issues"}]...
|
[{"post_id": 39607, "ts": "202 [{"post_id": 39607, "ts": "2026-08-02T18:17:00Z", "hours": 0.8339, "text": "I worked on completing my Coursera Microsoft AI/ML engineering course, learning how to build a convolutional neural network and a webscraper."}]...
|
Title: Completing My Coursera Course by @abhi_lenk Title: Completing My Coursera Course by @abhi_lenkala | Stardance
Devlogs:
I worked on completing my Coursera Microsoft AI/ML engineering course, learning how to build a convolutional neural network and a webscraper.
Ships:
there is a lot left im just trying to do this before i forget...
|
1793573701.418098
|
1793660101.418098
|
|
69396
|
EpicSlackBot by @Epicninja3 | Stardance
|
Epicninja3
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T02:01:46Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "EpicSlackBot A Slackbot with various fun and helpful commands! View your local weather (or any city), view upcoming space launches, play a trivia game, and much more! Commands: /epicslackbot-help - View this menu again with the list of commands /epicslackbot-ping - Check bot latency /epicslackbot-apod - View today’s NASA Astronomy Picture of the Day /epicslackbot-joke - a joke. /epicslackbot-weather - View the weather for your city. Make sure you enter your city name and click “Get Weather” /epicslackbot-spacenews - View upcoming launches and exciting space events /epicslackbot-calc - Calculate any two numbers with one operator; make sure to include angle brackets around the numbers. Example: /epicslackbot-calc <2>*<2> /epicslackbot-flip - Flip a coin! /epicslackbot-roll - Roll any sided dice; simply type a number after the command. Example: /epicslackbot-roll 6 /epicslackbot-trivia - Get quizzed on your trivia skills; click on one of the buttons to select an answer.", "repo": "https://github.com/epicninja3/EpicSlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0CDSLHHJDC"}]...
|
[{"post_id": 83217, "ts": "202 [{"post_id": 83217, "ts": "2026-10-27T11:53:15Z", "hours": 3.5894, "text": "Added New Commands! I added a few more commands to wrap up the project. The bot now features: Spacenews - Shows upcoming space launches and events Calculator - Evaluates simple math such as 5*32 or 75/3 Flip - Flips a coin Roll - Roll any sided dice, simply type in the number-sided dice that you want Trivia - Uses an API and clickable buttons to quiz you on your trivia skills."}, {"post_id": 80005, "ts": "2026-10-15T22:50:00Z", "hours": 3.0439, "text": "First Commands! Along with the default joke and help commands, I added a new command that shows today’s NASA Astronomy Picture of the Day and the weather! APOD Returns today’s APOD image and the explanation Weather Asks for city input using a modal Returns: Current temperature High and low temperature Precipitation and wind information Sunrise and Sunset timings"}]...
|
Title: EpicSlackBot by @Epicninja3 | Stardance
De Title: EpicSlackBot by @Epicninja3 | Stardance
Devlogs:
First Commands! Along with the default joke and help commands, I added a new command that shows today’s NASA Astronomy Picture of the Day and the weather! APOD Returns today’s APOD image and the explanation Weather Asks for city input using a modal Returns: Current temperature High and low temperature Precipitation and wind information Sunrise and Sunset timings
Added New Commands! I added a few more commands to wrap up the project. The bot now features: Spacenews - Shows upcoming space launches and events Calculator - Evaluates simple math such as 5*32 or 75/3 Flip - Flips a coin Roll - Roll any sided dice, simply type in the number-sided dice that you want Trivia - Uses an API and clickable buttons to quiz you on your trivia skills.
Ships:
EpicSlackBot A Slackbot with various fun and helpful commands! View your local weather (or any city), view upcoming space launches, play a trivia game, and much more! Commands: /epicslackbot-help - View this menu again with the list of commands /epicslackbot-ping - Check bot latency /epicslackbot-apod - View today’s NASA Astronomy Picture of the Day /epicslackbot-joke - a joke. /epicslackbot-weather - View the weather for your city. Make sure you enter your city name and click “Get Weather” /epicslackbot-spacenews - View upcoming launches and exciting space events /epicslackbot-calc - Calculate any two numbers with one operator; make sure to include angle brackets around the numbers. Example: /epicslackbot-calc <2>*<2> /epicslackbot-flip - Flip a coin! /epicslackbot-roll - Roll any sided dice; simply type a number after the command. Example: /epicslackbot-roll 6 /epicslackbot-trivia - Get quizzed on your trivia skills; click on one of the buttons to select an answer....
|
1793573699.88623
|
1793660099.88623
|
|
41496
|
My own site! by @akshara | Stardance
|
akshara
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T09:05:59Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built a personal portfolio website to share a little about myself, showcase some of my projects, and include a small photo dump of my favorite cloud pictures. The most challenging part was designing the layout, especially positioning the cat GIFs without making the page feel messy. My favorite parts are the homepage and the side navigation—they turned out just the way I wanted. It’s live at https://akshara200829-lgtm.github.io/Personal-website/ . Just open the link—no setup required.", "repo": "https://github.com/akshara200829-lgtm/Personal-website", "demo": "https://akshara200829-lgtm.github.io/Personal-website/"}]...
|
[{"post_id": 41828, "ts": "202 [{"post_id": 41828, "ts": "2026-08-06T08:57:58Z", "hours": 4.55, "text": "Finally completed my personal website!! Added a little photo dump corner just to flex my cloud finds ;)"}, {"post_id": 41187, "ts": "2026-08-05T07:33:12Z", "hours": 1.8017, "text": "Working on index.html Saved some cute random cat gifs to add to make it a fun :)"}]...
|
Title: My own site! by @akshara | Stardance
Devlo Title: My own site! by @akshara | Stardance
Devlogs:
Working on index.html Saved some cute random cat gifs to add to make it a fun :)
Finally completed my personal website!! Added a little photo dump corner just to flex my cloud finds ;)
Ships:
Built a personal portfolio website to share a little about myself, showcase some of my projects, and include a small photo dump of my favorite cloud pictures. The most challenging part was designing the layout, especially positioning the cat GIFs without making the page feel messy. My favorite parts are the homepage and the side navigation—they turned out just the way I wanted. It’s live at https://akshara200829-lgtm.github.io/Personal-website/ . Just open the link—no setup required....
|
1793573697.979536
|
1793660097.979536
|
|
69395
|
Project umbra by @Nozomi | Stardance
|
Nozomi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Project umbra by @Nozomi | Stardance
|
1793573697.1237292
|
1794437697.1237292
|
|
34096
|
Flappy Bird Game by @OggyW0ppy | Stardance
|
OggyW0ppy
|
1
|
7.0
|
11
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T04:01:26Z", "hours": 7.0, "multiplier": 1.72, "payout": 11, "blessing": "neutral", "text": "Flappy Bird Neuroevolution Flappy Bird clone where 100 birds controlled by a neural network learn to play the game over many generations of training. Each bird has 4 inputs leading to a hidden layer with 6 nodes and ending with a one node jump/wait output all starting with random weights. The more “fit” a bird is based on several factors, the more likely they will produce offspring with similar weights. Used Python + pygame-ce (no ML library) for the game Used pygbag to compile to WebAssembly to get it working live in the browser Play here Source Code", "repo": "https://github.com/OggyWoppy36/FlappyBirdAI", "demo": "https://oggywoppy36.github.io/FlappyBirdAI/"}]...
|
[{"post_id": 39855, "ts": "202 [{"post_id": 39855, "ts": "2026-08-03T03:42:30Z", "hours": 6.6317, "text": "Flappy Bird AI I started by creating a playable game with human input to play flappy bird. After that basic testing, I planned on training a population of computer-controlled birds too learn to play using evolution. I did this without using ML libraries because I felt like it :P (and I’ve never used python ML libs before). To start, I created a simple neural network for each birds “brain”, each with 4 input nodes (y position, y position offset from next pipe, y velocity, and distance to next pipe), 6 hidden nodes, and one output node that determines whether the bird should jump that frame (>0.5 jump, <=0.5 do nothing). They each have their own weights that determine A bird has a fitness score that is affected by time survived, distance from center of next pipe gap, and a bonus for passing through a pipe (this score is how birds are sorted for parent selection). I used a population of 100 birds and a simple genetic algorithm for each generation where the top few birds create offspring based on their brain’s weights, plus a little mutation for randomness & minor improvement. This allows for future generations’ weights to improve over time. One of the hardest parts to figure out was the fitness calculation. Initially, the birds had a relatively small reward for passing a pipe, so compared to the amount they got for just surviving, they didn’t actually learn to pass through the pipes and would instead just hover around the gap height without learning to thread the gap. I then made the bonus much larger which actually helped train better birds. Finally, when I was trying to get this working in the browser using pygbag to compile it to WebAssembly, I got a blank gray screen with NO errors O_O. I spent over an hour trying any fix I could find, and finally came to the conclusion that numpy was crashing the web assembly, and so I had to rewrite the neural network into base python. ToT Anyways, the results are pretty great! While I was training it once, I got a top score of ~9400 after 700 generations, but I forgot to screenshot it :(. Try the project here (no download necessary!) Press left/right to speed up/slow down Github Repo"}]...
|
Title: Flappy Bird Game by @OggyW0ppy | Stardance
Title: Flappy Bird Game by @OggyW0ppy | Stardance
Devlogs:
Flappy Bird AI I started by creating a playable game with human input to play flappy bird. After that basic testing, I planned on training a population of computer-controlled birds too learn to play using evolution. I did this without using ML libraries because I felt like it :P (and I’ve never used python ML libs before). To start, I created a simple neural network for each birds “brain”, each with 4 input nodes (y position, y position offset from next pipe, y velocity, and distance to next pipe), 6 hidden nodes, and one output node that determines whether the bird should jump that frame (>0.5 jump, <=0.5 do nothing). They each have their own weights that determine A bird has a fitness score that is affected by time survived, distance from center of next pipe gap, and a bonus for passing through a pipe (this score is how birds are sorted for parent selection). I used a population of 100 birds and a simple genetic algorithm for each generation where the top few birds create offspring based on their brain’s weights, plus a little mutation for randomness & minor improvement. This allows for future generations’ weights to improve over time. One of the hardest parts to figure out was the fitness calculation. Initially, the birds had a relatively small reward for passing a pipe, so compared to the amount they got for just surviving, they didn’t actually learn to pass through the pipes and would instead just hover around the gap height without learning to thread the gap. I then made the bonus much larger which actually helped train better birds. Finally, when I was trying to get this working in the browser using pygbag to compile it to WebAssembly, I got a blank gray screen with NO errors O_O. I spent over an hour trying any fix I could find, and finally came to the conclusion that numpy was crashing the web assembly, and so I had to rewrite the neural network into base python. ToT Anyways, the results are pretty great! While I was training it once, I got a top score of ~9400 after 700 generations, but I forgot to screenshot it :(. Try the project here (no download necessary!) Press left/right to speed up/slow down Github Repo
Ships:
Flappy Bird Neuroevolution Flappy Bird clone where 100 birds controlled by a neural network learn to play the game over many generations of training. Each bird has 4 inputs leading to a hidden layer with 6 nodes and ending with a one node jump/wait output all starting with random weights. The more “fit” a bird is based on several factors, the more likely they will produce offspring with similar weights. Used Python + pygame-ce (no ML library) for the game Used pygbag to compile to WebAssembly to get it working live in the browser Play here Source Code...
|
1793573695.966166
|
1793660095.966166
|
|
69394
|
My own site! by @Nilay | Stardance
|
Nilay
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Nilay | Stardance
|
1793573695.0777023
|
1794178495.0777023
|
|
70586
|
Stock Return Calculator by @dillonnagar | Stardanc Stock Return Calculator by @dillonnagar | Stardance...
|
dillonnagar
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-20T23:25:53Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Stock Return Calculator that lets users enter a stock’s purchase price, selling price, and number of shares to calculate their total profit or loss and percentage return. The most challenging part was getting the JavaScript to work correctly. I ran into a few HTML errors, and initially the calculate button wasn’t doing anything. I debugged the error and figuered out what was wrong and fixed it. I’m proud that I got a working website online and learned how to code with HTML and JavaScript. To test it, enter your purchase price, your selling price, and however many shares you want. Click Calculate Returns, and it should show your profit and return.", "repo": "https://github.com/Manateek1/stock-return-calculator", "demo": "https://manateek1.github.io/stock-return-calculator/"}]...
|
[{"post_id": 81288, "ts": "202 [{"post_id": 81288, "ts": "2026-10-20T16:59:24Z", "hours": 1.3247, "text": "Today I worked on my Stock Return Calculator, a website that calculates stock investment profits and percentage returns. I had trouble with the design but learned how to use CSS to make it look good. Also the calculation wouldn’t work so I had to debug it and figued out what was wrong with the logic."}]...
|
Title: Stock Return Calculator by @dillonnagar | S Title: Stock Return Calculator by @dillonnagar | Stardance
Devlogs:
Today I worked on my Stock Return Calculator, a website that calculates stock investment profits and percentage returns. I had trouble with the design but learned how to use CSS to make it look good. Also the calculation wouldn’t work so I had to debug it and figued out what was wrong with the logic.
Ships:
I made a Stock Return Calculator that lets users enter a stock’s purchase price, selling price, and number of shares to calculate their total profit or loss and percentage return. The most challenging part was getting the JavaScript to work correctly. I ran into a few HTML errors, and initially the calculate button wasn’t doing anything. I debugged the error and figuered out what was wrong and fixed it. I’m proud that I got a working website online and learned how to code with HTML and JavaScript. To test it, enter your purchase price, your selling price, and however many shares you want. Click Calculate Returns, and it should show your profit and return....
|
1793573693.9016075
|
1793660093.9016075
|
|
16683
|
Blur Stuff by @AbdurRehman | Stardance
|
AbdurRehman
|
1
|
126.53
|
826
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T15:46:55Z", "hours": 118.0, "multiplier": 14.02, "payout": 826, "blessing": "neutral", "text": "I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future.", "repo": "https://github.com/RealAbdurRehman/blur-stuff", "demo": "https://blurstuff.up.railway.app"}]...
|
[{"post_id": 50269, "ts": "202 [{"post_id": 50269, "ts": "2026-08-19T13:00:35Z", "hours": 8.5269, "text": "Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there."}, {"post_id": 47548, "ts": "2026-08-15T14:59:59Z", "hours": 6.7497, "text": "Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new."}, {"post_id": 46326, "ts": "2026-08-13T13:59:24Z", "hours": 10.0189, "text": "Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new."}, {"post_id": 45041, "ts": "2026-08-11T08:51:50Z", "hours": 10.0544, "text": "Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages."}, {"post_id": 44018, "ts": "2026-08-09T14:49:05Z", "hours": 8.77, "text": "Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations."}, {"post_id": 43070, "ts": "2026-08-08T04:16:11Z", "hours": 7.8842, "text": "Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization."}, {"post_id": 41878, "ts": "2026-08-06T11:22:26Z", "hours": 9.1442, "text": "Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed."}, {"post_id": 40707, "ts": "2026-08-04T12:12:59Z", "hours": 5.1222, "text": "I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more."}, {"post_id": 40104, "ts": "2026-08-03T14:28:55Z", "hours": 7.8764, "text": "I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application."}, {"post_id": 39358, "ts": "2026-08-02T09:02:20Z", "hours": 4.3503, "text": "I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF."}, {"post_id": 38921, "ts": "2026-08-01T14:49:34Z", "hours": 4.2206, "text": "I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible."}, {"post_id": 38713, "ts": "2026-08-01T08:01:59Z", "hours": 2.0572, "text": "I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes."}, {"post_id": 38633, "ts": "2026-08-01T04:05:36Z", "hours": 6.9461, "text": "I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate."}, {"post_id": 37518, "ts": "2026-07-30T10:23:19Z", "hours": 3.8147, "text": "I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages."}, {"post_id": 36966, "ts": "2026-07-29T12:14:19Z", "hours": 3.4994, "text": "I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way."}, {"post_id": 36365, "ts": "2026-07-28T13:10:24Z", "hours": 6.6581, "text": "I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names."}, {"post_id": 21527, "ts": "2026-07-03T15:19:19Z", "hours": 5.6331, "text": "I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred)."}, {"post_id": 20974, "ts": "2026-07-02T18:27:02Z", "hours": 3.4869, "text": "I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them."}, {"post_id": 20600, "ts": "2026-07-02T07:10:58Z", "hours": 1.7692, "text": "I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so."}, {"post_id": 20144, "ts": "2026-07-01T18:06:28Z", "hours": 2.2011, "text": "I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content."}, {"post_id": 19929, "ts": "2026-07-01T11:30:11Z", "hours": 4.4158, "text": "Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image."}, {"post_id": 19370, "ts": "2026-06-30T17:34:05Z", "hours": 1.9744, "text": "Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces."}, {"post_id": 19094, "ts": "2026-06-30T09:42:15Z", "hours": 0.4869, "text": "Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage."}, {"post_id": 19079, "ts": "2026-06-30T08:42:18Z", "hours": 0.6667, "text": "Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads."}]...
|
Title: Blur Stuff by @AbdurRehman | Stardance
Dev Title: Blur Stuff by @AbdurRehman | Stardance
Devlogs:
Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads.
Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage.
Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces.
Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image.
I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content.
I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so.
I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them.
I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred).
I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names.
I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way.
I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages.
I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate.
I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes.
I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible.
I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF.
I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application.
I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more.
Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed.
Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization.
Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations.
Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages.
Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new.
Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new.
Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there.
Ships:
I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future....
|
1793573692.632868
|
1793660092.632868
|