|
17663
|
Pipe Organ Simulation by @Cy | Stardance
|
Cy
|
1
|
13.0
|
127
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T06:06:35Z", "hours": 13.0, "multiplier": 10.0, "payout": 127, "blessing": "neutral", "text": "I have made a Pipe Organ Synth Simulation to create organ sounds for my music. The reason why I have made this Is because I searched online for a certain sounding organ that I have heard in a song and found nothing. The most challenging part of this whole program would be trying to make the sound and trying to figure out what button is off out of the 100 buttons when there is a problem with one. It was also very tedious copy and pasting and slightly modifying the same code for all of those buttons. I am really proud of how the sound turned out because I was a little scared that it would just sound like sine waves just clashing together (you can make that sound still), but with the slight bit of noise makes it sound like pumping air. What people should know when testing my program for the first time is to load the light.json preset and modify it little by little by using whole numbers for the wave width buttons.", "repo": "https://github.com/Cybrock9000/Organ-Simulation", "demo": "https://cyberwolfgames.itch.io/cys-pipe-organ-simulation"}]...
|
[{"post_id": 30531, "ts": "202 [{"post_id": 30531, "ts": "2026-07-18T05:45:20Z", "hours": 1.4642, "text": "I have polished up the ui and added a couple more features like a button to have the sound wave to auto scroll and more fade options. all code is open source and is (mostly) easy to read and i am going to ship this project now :)"}, {"post_id": 29988, "ts": "2026-07-17T06:37:16Z", "hours": 1.5622, "text": "DEMO RELEASED!!!!!!!!!!!!!!!! I have done some minor things to finish up this project like: saving and loading sounds, setting the duration of the output and adding a button to clear the grid to start new. The demo is a exe that works on pcs that dont have python too. More info on how to use in the Read Me ."}, {"post_id": 28741, "ts": "2026-07-15T05:46:26Z", "hours": 5.1436, "text": "Like I said in my devlog with my engine, I have found Terraria and it is amazing. so that is why i have been off for a while. But I have done so much today with both the engine and this simulation like: double the amount of waves you can mess with (96 buttons total in that grid), there is attack fade and noise toggles, you can now test and hear your sound in the program without trying to find it in the files. and now my code is one super long (1490 lines) repeating ‘mess’. BUT, it works and runs fast. Expect a demo soon :) ."}, {"post_id": 14223, "ts": "2026-06-23T07:21:18Z", "hours": 4.5286, "text": "So, I have done quite a bit with this project compared to the engine this past week. It is pretty much just a wave maker that creates interesting sounds by changing quite a few variables. I want to make it so its purpose is to recreate organ sounds (like the wave you see in the pic). But once you touch any variable, I will ether sound good or blow you brains out. So this will be a project that I will dabble in every so often to figure out how to fix it. (maybe use preset waves and modify those)"}]...
|
Title: Pipe Organ Simulation by @Cy | Stardance
D Title: Pipe Organ Simulation by @Cy | Stardance
Devlogs:
So, I have done quite a bit with this project compared to the engine this past week. It is pretty much just a wave maker that creates interesting sounds by changing quite a few variables. I want to make it so its purpose is to recreate organ sounds (like the wave you see in the pic). But once you touch any variable, I will ether sound good or blow you brains out. So this will be a project that I will dabble in every so often to figure out how to fix it. (maybe use preset waves and modify those)
Like I said in my devlog with my engine, I have found Terraria and it is amazing. so that is why i have been off for a while. But I have done so much today with both the engine and this simulation like: double the amount of waves you can mess with (96 buttons total in that grid), there is attack fade and noise toggles, you can now test and hear your sound in the program without trying to find it in the files. and now my code is one super long (1490 lines) repeating ‘mess’. BUT, it works and runs fast. Expect a demo soon :) .
DEMO RELEASED!!!!!!!!!!!!!!!! I have done some minor things to finish up this project like: saving and loading sounds, setting the duration of the output and adding a button to clear the grid to start new. The demo is a exe that works on pcs that dont have python too. More info on how to use in the Read Me .
I have polished up the ui and added a couple more features like a button to have the sound wave to auto scroll and more fade options. all code is open source and is (mostly) easy to read and i am going to ship this project now :)
Ships:
I have made a Pipe Organ Synth Simulation to create organ sounds for my music. The reason why I have made this Is because I searched online for a certain sounding organ that I have heard in a song and found nothing. The most challenging part of this whole program would be trying to make the sound and trying to figure out what button is off out of the 100 buttons when there is a problem with one. It was also very tedious copy and pasting and slightly modifying the same code for all of those buttons. I am really proud of how the sound turned out because I was a little scared that it would just sound like sine waves just clashing together (you can make that sound still), but with the slight bit of noise makes it sound like pumping air. What people should know when testing my program for the first time is to load the light.json preset and modify it little by little by using whole numbers for the wave width buttons....
|
1793285420.9131637
|
1793371820.9131637
|
|
17673
|
WebOs by @lima6 | Stardance
|
lima6
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T12:31:29Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "WebOS A lightweight, interactive and simplistic web operating system environment built entirely with vanilla HTML, CSS, and JavaScript. This project simulates a desktop interface featuring draggable windows, dynamic theme personalisation and an expandable photos app. Key Features: Window Management: Fully draggable application windows with boundary clamping to prevent windows from escaping the viewport bounds. Features a dynamic layering system that moves active windows to the front on click. Customisation: 9 distinct selectable accent themes, as well as live-updating text input that modifies the operating system branding in the taskbar. Dark Mode: A unified dark mode toggle that dynamically applies a overlay to tint and dim active theme wallpaper backgrounds without hardcoding separate colour tables. Photos App: Single-click preview capability within the primary photo viewer. Double-click event listener that creates separate picture windows. I plan to expand this project by completing the Hackclub Stardance mission WebOs 2 sometime soon.", "repo": "https://github.com/lima6-tech/WebOs", "demo": "https://lima6.itch.io/webos-lima6"}]...
|
[{"post_id": 15018, "ts": "202 [{"post_id": 15018, "ts": "2026-06-24T12:22:20Z", "hours": 0.3097, "text": "Added Settings App Added a settings app. Features: 9 different accent themes. An editable operating system branding in the taskbar. Dark Mode: A dark mode toggle that applies a overlay to tint and dim active theme wallpaper backgrounds."}, {"post_id": 14960, "ts": "2026-06-24T09:18:32Z", "hours": 0.5006, "text": "Added two apps Moved on from the main desktop to adding two generic apps. About App: shows different sets of text and includes a sidebar to navigate them. Photos App: displays images with a thumbnail sidebar. The images can be opened up into their own window by double-clicking"}, {"post_id": 14327, "ts": "2026-06-23T12:43:25Z", "hours": 14.9892, "text": "Framework I have forgotten to post devlogs, so here is my progress so far: created the main desktop with a top taskbar with a clock, as well as a welcome window which can be dragged and closed."}]...
|
Title: WebOs by @lima6 | Stardance
Devlogs:
Frame Title: WebOs by @lima6 | Stardance
Devlogs:
Framework I have forgotten to post devlogs, so here is my progress so far: created the main desktop with a top taskbar with a clock, as well as a welcome window which can be dragged and closed.
Added two apps Moved on from the main desktop to adding two generic apps. About App: shows different sets of text and includes a sidebar to navigate them. Photos App: displays images with a thumbnail sidebar. The images can be opened up into their own window by double-clicking
Added Settings App Added a settings app. Features: 9 different accent themes. An editable operating system branding in the taskbar. Dark Mode: A dark mode toggle that applies a overlay to tint and dim active theme wallpaper backgrounds.
Ships:
WebOS A lightweight, interactive and simplistic web operating system environment built entirely with vanilla HTML, CSS, and JavaScript. This project simulates a desktop interface featuring draggable windows, dynamic theme personalisation and an expandable photos app. Key Features: Window Management: Fully draggable application windows with boundary clamping to prevent windows from escaping the viewport bounds. Features a dynamic layering system that moves active windows to the front on click. Customisation: 9 distinct selectable accent themes, as well as live-updating text input that modifies the operating system branding in the taskbar. Dark Mode: A unified dark mode toggle that dynamically applies a overlay to tint and dim active theme wallpaper backgrounds without hardcoding separate colour tables. Photos App: Single-click preview capability within the primary photo viewer. Double-click event listener that creates separate picture windows. I plan to expand this project by completing the Hackclub Stardance mission WebOs 2 sometime soon....
|
1793288986.7481956
|
1793375386.7481956
|
|
17678
|
Mole in a Hole by @lima6 | Stardance
|
lima6
|
1
|
3.0
|
46
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T09:35:20Z", "hours": 3.0, "multiplier": 17.27, "payout": 46, "blessing": "neutral", "text": "Mole in a Hole Version 2.1: New update of the Mole in a Hole released + shipped! Updates: Added a new brick - the monster brick. Destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed. Redid section - overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible - they can bounce the player to the left or right Please try out our game and feel free to comment! (I would like to know if anyone can beat the game - it’s not long).", "repo": "https://github.com/justtjasonn/Mole_in_a_hole", "demo": "https://lima6.itch.io/mole-in-a-hole"}]...
|
[{"post_id": 16174, "ts": "202 [{"post_id": 16174, "ts": "2026-06-26T08:55:13Z", "hours": 2.3042, "text": "Redid section Overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. This update includes: Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible. Changed the boost from just y to Vector(x, y) so the spring can bounce the player to the left or right."}, {"post_id": 7768, "ts": "2026-06-12T23:53:48Z", "hours": 0.4086, "text": "Monster Brick Added a new brick - the monster brick. Is destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed."}]...
|
Title: Mole in a Hole by @lima6 | Stardance
Devlo Title: Mole in a Hole by @lima6 | Stardance
Devlogs:
Monster Brick Added a new brick - the monster brick. Is destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed.
Redid section Overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. This update includes: Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible. Changed the boost from just y to Vector(x, y) so the spring can bounce the player to the left or right.
Ships:
Mole in a Hole Version 2.1: New update of the Mole in a Hole released + shipped! Updates: Added a new brick - the monster brick. Destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed. Redid section - overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible - they can bounce the player to the left or right Please try out our game and feel free to comment! (I would like to know if anyone can beat the game - it’s not long)....
|
1793260397.0531468
|
1793346797.0531468
|
|
17694
|
Code Grabber by @theEclipse | Stardance
|
theEclipse
|
1
|
2.41
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T21:06:44Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Code Grabber, a Chrome extension that connects to your Gmail and watches for verification codes. When it finds one, a small popup appears on whatever site you’re on, letting you fill it in with the push of a button, no Ctrl-Tabbing needed. The hardest part was making the fill work properly, since some sites are built with React and Vue, and they ignore a simple value change and need the right native input events fired to register it. I’m most proud of the fact that nothing ever happens automatically — the extension only has read-only Gmail access, and every code fill requires the user to say yes to the fill. To test it, download the zip from the website, load it unpacked via chrome://extensions with Developer Mode on, set up a free Google Cloud OAuth Client ID, which can be a bit tricky, but just follow the instructions on the website or README and you should be fine. Then simply connect your Gmail via the toolbar, and the extension will start working. One thing to note is that the extension only checks every minute, but I added a button where you can instantly check for a code in your inbox.", "repo": "https://github.com/TheEclipse1/Code-Grabber", "demo": "https://github.com/TheEclipse1/Code-Grabber/releases/tag/v1.0.0"}]...
|
[{"post_id": 11775, "ts": "202 [{"post_id": 11775, "ts": "2026-06-19T05:01:17Z", "hours": 1.4083, "text": "Google Chrome Support"}, {"post_id": 7906, "ts": "2026-06-13T05:55:23Z", "hours": 1.4508, "text": "Gmail support"}]...
|
Title: Code Grabber by @theEclipse | Stardance
De Title: Code Grabber by @theEclipse | Stardance
Devlogs:
Gmail support
Google Chrome Support
Ships:
I built Code Grabber, a Chrome extension that connects to your Gmail and watches for verification codes. When it finds one, a small popup appears on whatever site you’re on, letting you fill it in with the push of a button, no Ctrl-Tabbing needed. The hardest part was making the fill work properly, since some sites are built with React and Vue, and they ignore a simple value change and need the right native input events fired to register it. I’m most proud of the fact that nothing ever happens automatically — the extension only has read-only Gmail access, and every code fill requires the user to say yes to the fill. To test it, download the zip from the website, load it unpacked via chrome://extensions with Developer Mode on, set up a free Google Cloud OAuth Client ID, which can be a bit tricky, but just follow the instructions on the website or README and you should be fine. Then simply connect your Gmail via the toolbar, and the extension will start working. One thing to note is that the extension only checks every minute, but I added a button where you can instantly check for a code in your inbox....
|
1793134417.8731835
|
1793220817.8731835
|
|
17716
|
The Canad Website by @Siddharth_A | Stardance
|
Siddharth_A
|
1
|
3.7
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T19:50:29Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a website where the user can enter any valid ticker symbol in NASDAQ and can view that stock’s current closing price and its history on a graph. They can also see current gold prices and popular exchange rates such as USD –> CAD. It is super simple to use and", "repo": "https://github.com/s-asuthker/Canad-Stocks", "demo": "https://web-production-1037a.up.railway.app"}]...
|
[{"post_id": 10025, "ts": "202 [{"post_id": 10025, "ts": "2026-06-16T16:15:49Z", "hours": 0.9353, "text": "I added a few animations to my website for visual effects. I can’t rlly screenshot them tho."}, {"post_id": 9502, "ts": "2026-06-15T21:07:13Z", "hours": 0.7672, "text": "Added 52 week high and low, added avg volume for stocks."}, {"post_id": 9015, "ts": "2026-06-15T01:11:48Z", "hours": 1.5236, "text": "Devlog #1 I just finished hardcoding current gold prices and exchange rates into my website. -Current gold price –> Gold Futures (yfinance module) -Exchange Rates –> Forex_Python -NASDAQ Stock Prices –> Yfinance module Stocks For stocks, the user can enter any ticker symbol that is valid in NASDAQ. Once they enter, they can view the current closing price of that stock and view a graph of the stock’s closing price from the past year. Exchange Rates Popular exchange rates are hardcoded into the website. They feature exchange rates such as USD to Canadian dollar, USD to Euro, USD to pound, and USD to Japanese Yen and vice-versa. I hope y’all enjoy the website it took quite a lot of debugging and messing around with he data frames. I would appreciate if you would check it out (No API-Key needed). In the near future I am planning to add code to find economic data of a country as I have discovered a python module for this."}]...
|
Title: The Canad Website by @Siddharth_A | Stardan Title: The Canad Website by @Siddharth_A | Stardance
Devlogs:
Devlog #1 I just finished hardcoding current gold prices and exchange rates into my website. -Current gold price –> Gold Futures (yfinance module) -Exchange Rates –> Forex_Python -NASDAQ Stock Prices –> Yfinance module Stocks For stocks, the user can enter any ticker symbol that is valid in NASDAQ. Once they enter, they can view the current closing price of that stock and view a graph of the stock’s closing price from the past year. Exchange Rates Popular exchange rates are hardcoded into the website. They feature exchange rates such as USD to Canadian dollar, USD to Euro, USD to pound, and USD to Japanese Yen and vice-versa. I hope y’all enjoy the website it took quite a lot of debugging and messing around with he data frames. I would appreciate if you would check it out (No API-Key needed). In the near future I am planning to add code to find economic data of a country as I have discovered a python module for this.
Added 52 week high and low, added avg volume for stocks.
I added a few animations to my website for visual effects. I can’t rlly screenshot them tho.
Ships:
I created a website where the user can enter any valid ticker symbol in NASDAQ and can view that stock’s current closing price and its history on a graph. They can also see current gold prices and popular exchange rates such as USD –> CAD. It is super simple to use and...
|
1793289126.0632496
|
1793375526.0632496
|
|
17737
|
Hangman by @elisa_hang_10 | Stardance
|
elisa_hang_10
|
1
|
9.19
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T18:13:25Z", "hours": 1.0, "multiplier": 1.1, "payout": 2, "blessing": "neutral", "text": "I made a digital version of Hangman! I got the inspiration from my brother. He said he also made hangman in code for a schoolproject with his friends. I liked the idea of that and decided to make it too. At first, I had some problems with the While-loop. It didn’t exit the loop even though it should with a if statement. Eventually, I found out that I needed to click on run Python file and not stay in the same terminal. It’s a short project but I learned lots about the logic of code!", "repo": "https://github.com/elisahang/hangman", "demo": "https://elisahang.github.io/hangman/"}]...
|
[{"post_id": 71985, "ts": "202 [{"post_id": 71985, "ts": "2026-09-21T22:20:26Z", "hours": 2.6714, "text": "I added quite some stuff extra. I made a beginning for a start screen, but I want it more beautiful but don’t really know how to for now. In the start screen, you have two options. You either start the game or read the tutorial. For now I only added some really short text in the tut but that’s just to test if it works. I also tried to make an end screen, but it has some bugs in it so I need to change that. I also changed the colors. Everything is now a brown or pastel tint. Next time, I’m gonna work on the end and start screen, and try to make the game more appealing."}, {"post_id": 65623, "ts": "2026-09-10T21:21:39Z", "hours": 1.1289, "text": "Today, I worked on seeing my correct letters if i clicked on the correct letter on the keyboard. Now if you choose the wrong letter, you see an extra line in the canvas. If you choose the correct letter, you see said letter instead of a line. I also added the sentence “Your guess is correct” and “Your guess is incorrect” after you choose a letter. Next time I want to code something so it choses a random word. Right now I only use the word “dog” just for simplification. And maybe make the website more appealing, but idk how for now"}, {"post_id": 59915, "ts": "2026-09-01T22:58:07Z", "hours": 2.0511, "text": "I made my keyboard more functional. Now if you click on a letter that isn’t in the chosen word, an extra line gets drawn. Before the player choses a letter, the structure is already drawn. The structure is the frame where the man hangs onto. Next time, I want to show the correct letter, if the player choses a correct letter. I also have no idea why 2h are logged, because today I coded for 1h."}, {"post_id": 53235, "ts": "2026-08-23T17:56:53Z", "hours": 1.6833, "text": "Today, I made my keyboard functional. But now it only hows wich are correct and which aren’t. I still need to add what happens after clicking a button. I also added lines for each letter of the word, so that you could see how many letter the word has. The box on the left side is the place where the hanging man comes, if you make any mistakes. The next time I want to make everything functional. Because now nothing works together yet."}, {"post_id": 50555, "ts": "2026-08-19T19:21:02Z", "hours": 0.6553, "text": "I started working on a website version of my Hangman game. It was originally made to be played in a terminal. I firstly did some research about HTML, CSS and js, because i’m not experienced in it. I then made a beginning of my keyboard. My plan is to also make that classic Hangman drawing. Where it begins with the head and everytime you guess a letter wrong, you get an extra line fo the drawing. I also want to make something so that you can see where your correct guesses are in the word. Also, thanks to everyone who rated my last ship and gave my advice on how to improve. It was really helpful!"}, {"post_id": 26722, "ts": "2026-07-11T17:58:10Z", "hours": 1.4736, "text": "This is my first and only devlog of this project because it is a small beginner project. I started with adding the main parts(chosing the word, printing the rules, while-loop). I later added extra stuff like checking if the input is correct or printing already used letters. I’m quite new with Hack Club and coding, so any feedback is appreciated:)"}]...
|
Title: Hangman by @elisa_hang_10 | Stardance
Devl Title: Hangman by @elisa_hang_10 | Stardance
Devlogs:
This is my first and only devlog of this project because it is a small beginner project. I started with adding the main parts(chosing the word, printing the rules, while-loop). I later added extra stuff like checking if the input is correct or printing already used letters. I’m quite new with Hack Club and coding, so any feedback is appreciated:)
I started working on a website version of my Hangman game. It was originally made to be played in a terminal. I firstly did some research about HTML, CSS and js, because i’m not experienced in it. I then made a beginning of my keyboard. My plan is to also make that classic Hangman drawing. Where it begins with the head and everytime you guess a letter wrong, you get an extra line fo the drawing. I also want to make something so that you can see where your correct guesses are in the word. Also, thanks to everyone who rated my last ship and gave my advice on how to improve. It was really helpful!
Today, I made my keyboard functional. But now it only hows wich are correct and which aren’t. I still need to add what happens after clicking a button. I also added lines for each letter of the word, so that you could see how many letter the word has. The box on the left side is the place where the hanging man comes, if you make any mistakes. The next time I want to make everything functional. Because now nothing works together yet.
I made my keyboard more functional. Now if you click on a letter that isn’t in the chosen word, an extra line gets drawn. Before the player choses a letter, the structure is already drawn. The structure is the frame where the man hangs onto. Next time, I want to show the correct letter, if the player choses a correct letter. I also have no idea why 2h are logged, because today I coded for 1h.
Today, I worked on seeing my correct letters if i clicked on the correct letter on the keyboard. Now if you choose the wrong letter, you see an extra line in the canvas. If you choose the correct letter, you see said letter instead of a line. I also added the sentence “Your guess is correct” and “Your guess is incorrect” after you choose a letter. Next time I want to code something so it choses a random word. Right now I only use the word “dog” just for simplification. And maybe make the website more appealing, but idk how for now
I added quite some stuff extra. I made a beginning for a start screen, but I want it more beautiful but don’t really know how to for now. In the start screen, you have two options. You either start the game or read the tutorial. For now I only added some really short text in the tut but that’s just to test if it works. I also tried to make an end screen, but it has some bugs in it so I need to change that. I also changed the colors. Everything is now a brown or pastel tint. Next time, I’m gonna work on the end and start screen, and try to make the game more appealing.
Ships:
I made a digital version of Hangman! I got the inspiration from my brother. He said he also made hangman in code for a schoolproject with his friends. I liked the idea of that and decided to make it too. At first, I had some problems with the While-loop. It didn’t exit the loop even though it should with a if statement. Eventually, I found out that I needed to click on run Python file and not stay in the same terminal. It’s a short project but I learned lots about the logic of code!...
|
1793256542.3017688
|
1793342942.3017688
|
|
17741
|
Easier brave scrolling by @C76 | Stardance
|
C76
|
1
|
4.28
|
14
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T21:04:19Z", "hours": 4.0, "multiplier": 3.84, "payout": 14, "blessing": "neutral", "text": "Im proud to say i am finished with this project, i never fully expected this to be a massive or rather hard project to begin with. I had been extremely annoyed at the fact it was near impossible for me to scroll with my arrow keys on my laptop on the brave browser compared to my desktop computer, after doing lots of searching i had seen that many others shared my frustration that this wasnt a thing anymore. At the time i still had needed a beginning idea for stardance and i thought id make it for this. (due to it being a browser extension i had no idea how to make a webpage demo or any demo really. so my github is linked with instructions for installation. only really useful for brave browser)", "repo": "https://github.com/mightyviking40-collab/Brave-Easier-scrolling", "demo": "https://github.com/mightyviking40-collab/Brave-Easier-scrolling/releases"}]...
|
[{"post_id": 23811, "ts": "202 [{"post_id": 23811, "ts": "2026-07-06T23:42:17Z", "hours": 0.2789, "text": "Changed banner to reflect usage. fixed github to include CRX file (old ZIP folder will still be included as brave sometimes blocks self signed/3rd party CRX files)"}, {"post_id": 17377, "ts": "2026-06-28T04:24:51Z", "hours": 1.2769, "text": "Devlog 3# i never fully expected this to be longer than a 4-ish hour project at most, also really bad at fully being descriptive but i wouldnt be anywhere without pushing either. Smoothed out ALOT of the issues previously added a GUI dropdown menu to edit your own scrolling speed fixed a good chunk of background issues, smoother feel to when you press the keys holding and tapping. TBA Nothing really, i guess one more devlog and it should be great to ship"}, {"post_id": 9769, "ts": "2026-06-16T06:29:59Z", "hours": 1.3292, "text": "Devlog #2 Added a capture to prevent the choppiness of before, preventing the brave browser from capturing the event first and causing the jumping search results, rather than my extension cutting it. It stops it prematurely before it can load within the browser page, Smoothed out the animations for the scrolling. added support to do “tap scrolling” where tapping the key scrolls it a small bit rather than it being a held only scroll TBA: a speed dial of sorts with a dropdown GUI to edit your scrolling speed (cause what i have it set right now is way too fast( some small improvements to smooth out everything even more a bulk cleanup to make this a very lightweight extension (video shows current work VS without my extension.)"}, {"post_id": 7924, "ts": "2026-06-13T06:37:30Z", "hours": 1.0917, "text": "Im creating a browser extension to restore braves original key scrolling rather than it using the search result jumping it does now,"}]...
|
Title: Easier brave scrolling by @C76 | Stardance
Title: Easier brave scrolling by @C76 | Stardance
Devlogs:
Im creating a browser extension to restore braves original key scrolling rather than it using the search result jumping it does now,
Devlog #2 Added a capture to prevent the choppiness of before, preventing the brave browser from capturing the event first and causing the jumping search results, rather than my extension cutting it. It stops it prematurely before it can load within the browser page, Smoothed out the animations for the scrolling. added support to do “tap scrolling” where tapping the key scrolls it a small bit rather than it being a held only scroll TBA: a speed dial of sorts with a dropdown GUI to edit your scrolling speed (cause what i have it set right now is way too fast( some small improvements to smooth out everything even more a bulk cleanup to make this a very lightweight extension (video shows current work VS without my extension.)
Devlog 3# i never fully expected this to be longer than a 4-ish hour project at most, also really bad at fully being descriptive but i wouldnt be anywhere without pushing either. Smoothed out ALOT of the issues previously added a GUI dropdown menu to edit your own scrolling speed fixed a good chunk of background issues, smoother feel to when you press the keys holding and tapping. TBA Nothing really, i guess one more devlog and it should be great to ship
Changed banner to reflect usage. fixed github to include CRX file (old ZIP folder will still be included as brave sometimes blocks self signed/3rd party CRX files)
Ships:
Im proud to say i am finished with this project, i never fully expected this to be a massive or rather hard project to begin with. I had been extremely annoyed at the fact it was near impossible for me to scroll with my arrow keys on my laptop on the brave browser compared to my desktop computer, after doing lots of searching i had seen that many others shared my frustration that this wasnt a thing anymore. At the time i still had needed a beginning idea for stardance and i thought id make it for this. (due to it being a browser extension i had no idea how to make a webpage demo or any demo really. so my github is linked with instructions for installation. only really useful for brave browser)...
|
1793274578.4277318
|
1793360978.4277318
|
|
17747
|
My very own WebOS by @Suhas-Jonnakuti | Stardance
|
Suhas-Jonnakuti
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T14:43:38Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made SuhasOS, my own web-based operating system that runs in the browser! It has 4 draggable windows, a Welcome screen, Notepad, Calculator, and a live Clock. The most challenging part was making the windows draggable using JavaScript, I also forgot to do the devlogs so I was able to do only one. I am proud of how the purple space theme looks and that everything actually works! To test it, just drag the windows around, type in the notepad, and use the calculator.", "repo": "https://github.com/suhasjonnakuti03-boop/SuhasOS", "demo": "https://suhasjonnakuti03-boop.github.io/SuhasOS/"}]...
|
[{"post_id": 9219, "ts": "2026 [{"post_id": 9219, "ts": "2026-06-15T14:21:44Z", "hours": 0.3819, "text": "SuhasOS is officially done"}]...
|
Title: My very own WebOS by @Suhas-Jonnakuti | Sta Title: My very own WebOS by @Suhas-Jonnakuti | Stardance
Devlogs:
SuhasOS is officially done
Ships:
I made SuhasOS, my own web-based operating system that runs in the browser! It has 4 draggable windows, a Welcome screen, Notepad, Calculator, and a live Clock. The most challenging part was making the windows draggable using JavaScript, I also forgot to do the devlogs so I was able to do only one. I am proud of how the purple space theme looks and that everything actually works! To test it, just drag the windows around, type in the notepad, and use the calculator....
|
1793267575.0527751
|
1793353975.0527751
|
|
17783
|
PepperPeople by @ThatFairyFijia | Stardance
|
ThatFairyFijia
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T00:39:39Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species.", "repo": "https://github.com/ZoomingLightningbugGirl/PepperBlog", "demo": "https://zoominglightningbuggirl.github.io/PepperBlog/"}]...
|
[{"post_id": 75410, "ts": "202 [{"post_id": 75410, "ts": "2026-09-30T00:35:41Z", "hours": 0.9111, "text": "Primarily quality of life fixes, as I’ve been working on improving my home page and landing page"}, {"post_id": 22573, "ts": "2026-07-05T03:05:09Z", "hours": 3.3794, "text": "Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational."}]...
|
Title: PepperPeople by @ThatFairyFijia | Stardance Title: PepperPeople by @ThatFairyFijia | Stardance
Devlogs:
Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational.
Primarily quality of life fixes, as I’ve been working on improving my home page and landing page
Ships:
I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species....
|
1793145331.540866
|
1793231731.540866
|
|
17801
|
Art Idea Generator by @AK_47 | Stardance
|
AK_47
|
1
|
2.66
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T01:42:17Z", "hours": 1.0, "multiplier": 2.38, "payout": 2, "blessing": "neutral", "text": "I made an application that you can use when you need an Idea or have an art block. You can generate up to five random words that will give you an idea for your next art project or sketch. It was a fairly simple application to code, and I was too lazy to debug the code myself, so I used the help of Google Gemini to recheck my code. It was mostly just typos because I was probably going too fast. Enjoy!", "repo": "https://github.com/AKKKKKK-47/Art_inspo_generator", "demo": ""}]...
|
[{"post_id": 10279, "ts": "202 [{"post_id": 10279, "ts": "2026-06-16T22:25:46Z", "hours": 1.6631, "text": "I know there’s a huge time gap between my first devlog to my last but I finally got it approved! I’ve tested out the code and everything. I’m happy with how this project turned out. When rating, please let me know if I can improve. Thank you! And I hope you liked it as much as I did :)"}, {"post_id": 8443, "ts": "2026-06-14T01:22:36Z", "hours": 1.2239, "text": "The art idea generator is finally finished! I was too lazy to debug my code so I used gemini… Surprisingly, it gave me a thorough explanation of my errors and the code to fix it. I hope you like it :)"}]...
|
Title: Art Idea Generator by @AK_47 | Stardance
D Title: Art Idea Generator by @AK_47 | Stardance
Devlogs:
The art idea generator is finally finished! I was too lazy to debug my code so I used gemini… Surprisingly, it gave me a thorough explanation of my errors and the code to fix it. I hope you like it :)
I know there’s a huge time gap between my first devlog to my last but I finally got it approved! I’ve tested out the code and everything. I’m happy with how this project turned out. When rating, please let me know if I can improve. Thank you! And I hope you liked it as much as I did :)
Ships:
I made an application that you can use when you need an Idea or have an art block. You can generate up to five random words that will give you an idea for your next art project or sketch. It was a fairly simple application to code, and I was too lazy to debug the code myself, so I used the help of Google Gemini to recheck my code. It was mostly just typos because I was probably going too fast. Enjoy!...
|
1793120039.3823612
|
1793206439.3823612
|
|
17809
|
ZENOS by @yashasvib | Stardance
|
yashasvib
|
1
|
1.96
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T18:18:38Z", "hours": 1.0, "multiplier": 4.97, "payout": 5, "blessing": "neutral", "text": "WHAT DID I MAKE ? I built ZENOS, a futuristic desktop-style web interface with a live clock ,date and time display, draggable widgets, a calculator and a notepad , al designed with a glassmorphism aesthetic CHALLENGES: getting the draggable working smoothly and trying to arrange things so that my IDOL was not covered . turning a simple webpage into interactive desktop experience that feels just right is cool . GUYSS!!!! open the web ,drag the widget around , use them and watch live clock and time updates . THANK YOU !!!!!", "repo": "https://github.com/yashasvi-2012-star/realOS", "demo": "https://zenos-os.vercel.app/"}]...
|
[{"post_id": 8759, "ts": "2026 [{"post_id": 8759, "ts": "2026-06-14T15:52:03Z", "hours": 0.3661, "text": "last one wasssss not the last update guys this one is -vGUYSS!!! I FIXED THE BUGSS AND ADDED SOME NEW FEATURES AS WELL AS UPDATED . i added a better drawing pad with adjustable size and all and even a live sportify playlist where you can just play any song you like !!! . GO CHECK IT OUT NOW !!!"}, {"post_id": 8280, "ts": "2026-06-13T19:27:58Z", "hours": 0.2694, "text": "SECOND UPDATE !!!- ZENOS is getting more exciting now! I’ve added a movable live clock that shows real-time updates, making the desktop feel more interactive and alive. And I’m soon going to add a movable drawing pad where users can write or sketch freely, making the system even more creative and fun to use( AND i will be adding A REAL SPORTIFY PLAYLIST ICON . i am currently working on it !!! IT MEAN U CAN PATSE YOUR OWN PLAYLIST (embed link ) IN AND SEE !!!(before as mentioned in devlog1 i decided to add just a icon but i changed my mind and added real working sportify window ))"}, {"post_id": 8264, "ts": "2026-06-13T19:08:09Z", "hours": 0.3289, "text": "FIRST UPDATE - (SRRY GUYSS I COULD NOT POST BEFORE THIS !!! )IT IS clean, minimal desktop-style operating system UI called ZENOS. It has a top bar showing date and time, a central wallpaper with an analog clock, a calculator on the left, a notepad on the right, and a small music card. modern simple and kpop-ed design . i hope i get feedbacks !!!"}, {"post_id": 8212, "ts": "2026-06-13T17:39:30Z", "hours": 0.9428, "text": "maybee LAST UPDATE - HEYYYY!!! THIS IS MY FIRST OS INSPIRED BY MY FAVROITE ARTIST JENIEEEEEEE!!!! okay to be fair i was excited will making this an this is probabaly not my best work but i tried hard ON THIS .i added draggable calculator , draggable notepad, (maybe add draggable sportify window ), draggable clock and draggable drawing pad"}]...
|
Title: ZENOS by @yashasvib | Stardance
Devlogs:
m Title: ZENOS by @yashasvib | Stardance
Devlogs:
maybee LAST UPDATE - HEYYYY!!! THIS IS MY FIRST OS INSPIRED BY MY FAVROITE ARTIST JENIEEEEEEE!!!! okay to be fair i was excited will making this an this is probabaly not my best work but i tried hard ON THIS .i added draggable calculator , draggable notepad, (maybe add draggable sportify window ), draggable clock and draggable drawing pad
FIRST UPDATE - (SRRY GUYSS I COULD NOT POST BEFORE THIS !!! )IT IS clean, minimal desktop-style operating system UI called ZENOS. It has a top bar showing date and time, a central wallpaper with an analog clock, a calculator on the left, a notepad on the right, and a small music card. modern simple and kpop-ed design . i hope i get feedbacks !!!
SECOND UPDATE !!!- ZENOS is getting more exciting now! I’ve added a movable live clock that shows real-time updates, making the desktop feel more interactive and alive. And I’m soon going to add a movable drawing pad where users can write or sketch freely, making the system even more creative and fun to use( AND i will be adding A REAL SPORTIFY PLAYLIST ICON . i am currently working on it !!! IT MEAN U CAN PATSE YOUR OWN PLAYLIST (embed link ) IN AND SEE !!!(before as mentioned in devlog1 i decided to add just a icon but i changed my mind and added real working sportify window ))
last one wasssss not the last update guys this one is -vGUYSS!!! I FIXED THE BUGSS AND ADDED SOME NEW FEATURES AS WELL AS UPDATED . i added a better drawing pad with adjustable size and all and even a live sportify playlist where you can just play any song you like !!! . GO CHECK IT OUT NOW !!!
Ships:
WHAT DID I MAKE ? I built ZENOS, a futuristic desktop-style web interface with a live clock ,date and time display, draggable widgets, a calculator and a notepad , al designed with a glassmorphism aesthetic CHALLENGES: getting the draggable working smoothly and trying to arrange things so that my IDOL was not covered . turning a simple webpage into interactive desktop experience that feels just right is cool . GUYSS!!!! open the web ,drag the widget around , use them and watch live clock and time updates . THANK YOU !!!!!...
|
1793278314.946346
|
1793364714.946346
|
|
17827
|
My first slack bot Zbot by @NITHIN | Stardance
|
NITHIN
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T05:19:53Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "zBot is a Slack productivity bot with 7 custom commands like reminders, standups, quotes, dice rolls, and an 8-ball. I like that it goes beyond simple replies by supporting delayed reminders and saved standups. The focus on productivity and 24/7 uptime makes it practical and useful.", "repo": "https://github.com/Nithinfgs/Zbot", "demo": "https://www.loom.com/share/bc69f69d82f44b3d81959a91acd72723"}]...
|
[{"post_id": 7922, "ts": "2026 [{"post_id": 7922, "ts": "2026-06-13T06:26:09Z", "hours": 0.0, "text": "project done"}, {"post_id": 7907, "ts": "2026-06-13T05:59:42Z", "hours": 0.0, "text": "finished json file"}, {"post_id": 7884, "ts": "2026-06-13T04:53:18Z", "hours": 0.0, "text": "I started building my Slack bot with Bolt, setting up authentication through environment variables and adding quote and Magic 8-Ball response collections. Next, I’ll connect commands and events to make the bot interactive."}]...
|
Title: My first slack bot Zbot by @NITHIN | Starda Title: My first slack bot Zbot by @NITHIN | Stardance
Devlogs:
I started building my Slack bot with Bolt, setting up authentication through environment variables and adding quote and Magic 8-Ball response collections. Next, I’ll connect commands and events to make the bot interactive.
finished json file
project done
Ships:
zBot is a Slack productivity bot with 7 custom commands like reminders, standups, quotes, dice rolls, and an 8-ball. I like that it goes beyond simple replies by supporting delayed reminders and saved standups. The focus on productivity and 24/7 uptime makes it practical and useful....
|
1792882137.6089406
|
1793746137.6089406
|
|
17830
|
UTAU.js by @NellowTCS | Stardance
|
NellowTCS
|
1
|
21.0
|
349
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T06:38:31Z", "hours": 21.0, "multiplier": 17.25, "payout": 349, "blessing": "neutral", "text": "I built UTAU.js, a fully synthetic singing voice engine that runs in the browser using pure DSP instead of samples or AI. It supports English, Japanese, and Mandarin, and it can import almost every major vocal synth format through a unified score system. The demo includes a piano roll editor, real-time streaming playback, voice presets, and a full set of controls for shaping the glottal source and formant model. I am proud of the coarticulation system, the pitch bend renderer, and the fact that the entire engine sings from math alone. You can try the demo, draw notes, type lyrics, and hear it perform immediately!!!!!!!!!!", "repo": "https://github.com/NellowTCS/UTAU.js", "demo": "https://nellowtcs.me/UTAU.js/"}]...
|
[{"post_id": 11132, "ts": "202 [{"post_id": 11132, "ts": "2026-06-18T06:36:00Z", "hours": 0.2928, "text": "v0.1.0 Well Stardance told me this: Warning You have 1h 14m logged that you haven't posted a devlog for. If you ship without posting a devlog, this time will be lost! IDK why, but i was planning to devlog my silly anyways so: five commits. all tagged v0.1.0. all fixing things that should have been done before I said “the project is ready.” the classic “wait I forgot” sequence. “Oops” - CI was trying to build docs without running npm ci first. added the install step. three words of actual code change. (this was wrong) “Huh. where did that come from.” - the pages deploy was creating a docs/ directory but the docs copy was still commented out. the demo was deploying fine but docs were going nowhere. fixed the mkdir. “Oooops guess who forgot to uncomment some code” - uncommented the actual docs copy in static.yml. also fixed the docs URL from nisoku.org (wrong domain) to nellowtcs.me/UTAU.js/docs. details. “You never saw that coming did you /sarc” - added all the npm publish metadata to package.json. license, author, repository, homepage, bugs URL, and keywords. the keywords are: utau, synthesis, singing, voice, speech, audio, dsp, lf-glottal, source-filter, formant. so if you npm search for any of those things, maybe you’ll find this. someday. (NPM release failed lol, that’s why I did this) “Badges hehe” - npm version badge, CI status badge, MIT license badge at the top of the README. because a project isn’t real until it has badges. everyone knows that. (/j) five commits to go from “done” to actually done. four of them are CI fixes. like i just said, this is software development. CI is green. docs are deployed. npm metadata is set. badges are shiny. v0.1.0 is tagged. so. that’s UTAU.js. six days. from “idk my voice tho” in an Obsidian doc to a parametric singing synthesizer with three languages, 14+ import/export formats, a Svelte demo app, a docs site, 160+ tests, and a v0.1.0 tag. it sounds mid. like, genuinely. the vowels are recognizable but the consonants are strange and the whole thing has this uncanny valley quality where you can tell it’s trying to be a voice but isn’t quite there. it’s really adorable when it tries :3 but it makes sound. from math. in a browser. and that’s the whole point of v0.1.0. it doesn’t have to be good. it has to exist. it exists now. :)"}, {"post_id": 11120, "ts": "2026-06-18T05:56:37Z", "hours": 1.6403, "text": "the docs exist and the README isn’t “Web-Template” anymore so uh. the README has said “Web-Template: My typical web dev starter project” for the entire life of this repo. six days. dozens of commits. a full synthesizer. and the README was still introducing it as a starter template. fixed that. also wrote an entire documentation site. in one sitting. because apparently that’s how I do things now. the README 133 lines replacing the 3-line placeholder. features list, quickstart code (Node.js WAV rendering + browser streaming in like 10 lines each), API overview table with every public export, development instructions, and a Mermaid architecture diagram. the mermaid diagram is a mindmap and it renders SO PRETTY on GitHub. multicolored branches for Core DSP, Languages, Synth, Voices, and IO. each branch fans out into its components. it’s AMAZINGGGGGGGGGGG I spent way too long picking which mermaid diagram type to use and I regret nothing. the docs site ten markdown pages built with DocMD. custom Ruby theme with blue/cyan gradient accents, dark mode support, semantic search via HuggingFace transformers, and a proper navigation structure: getting started : quickstart (5-step guide with code), installation (npm/CDN/source), core concepts (source-filter model explanation with a Mermaid flowchart showing glottal source -> formant cascade -> output) guide : architecture (module layout, data flow diagram, design decisions), renderer (6-step pipeline walkthrough from lyric to audio), languages (built-in language docs + how to register custom languages + cross-language aliasing) API reference : full export table, DSP primitives with code examples, VoiceConfig reference (264 lines of parameter documentation with perceptual effect tables for every single field. “openQuotient 0.3 = pressed tense voice, 0.5 = neutral modal voice, 0.7 = breathy soft voice.” that kind of detail.), import/export format support table the VoiceConfig page alone is probably the most thorough documentation of a formant synthesizer’s parameter space I’ve ever seen in a JS library. I might be biased. I’ve not seen many others. We don’t talk about that. also added UST and TSSLN to the export format list (they were import-only before). fixed the export function to handle generators that return arrays instead of single Uint8Arrays. CI workflows now build and audit the docs workspace too. the TODO is almost empty. just “README: quickstart, API overview, architecture diagram” which is now done. the project has: a synthesizer, three languages, 14+ import formats, 14+ export formats, a demo app with a piano roll, voice presets, undo/redo, settings, file import/export, WAV export, tempo control, buffer management, 160+ tests, JSDoc on everything, a full documentation site, and CI that’s green. six days :O"}, {"post_id": 11091, "ts": "2026-06-18T04:09:58Z", "hours": 0.5989, "text": "the documentation commit (part 1) JSDoc everywhere this is the kind of commit where the line count looks impressive and the actual behavior changes are zero. 118 lines became 216 lines in types.ts alone. every interface, every field, every function got documented. some highlights: (don’t ask why i did a double dash. i was being silly and just noticed somehow idk how) openQuotient : “fraction of the glottal cycle the vocal folds are open. Higher values produce a breathier, softer sound (0.2–0.9)” speedQuotient : “ratio of the opening phase to the closing phase. Higher values give a faster closure, increasing brightness (0.3–3.0)” FormantCascade : “cascade of anti-resonators followed by resonators, modelling the vocal-tract transfer function. Anti-resonators (zeros) come first, followed by resonators (poles), matching the source-filter model: S(f) = G(f) * Z(f) / P(f)” LFGlottalSource : “Liljencrants-Fant (LF) glottal pulse source with jitter, shimmer, aspiration noise, and DC blocking. See Fant (1986), Liljencrants (1985)” renderNote : documents the full pipeline: “lyric -> phoneme symbols -> phoneme lookup -> LF glottal pulse -> formant cascade -> noise mix -> amplitude envelope -> normalisation” every DSP class, every language module, every player method, every import/export function. the person reading this code in six months (probably me) will thank me. docs soon Docs next time, I will not be long heheeee TODO cleanup the languages section is fully checked off now. English CMUDict (124,911 words), Japanese EDICT2 (224,808 kanji-to-kana entries), Mandarin with full pinyin decomposition, and phoneme alias maps for cross-language compatibility. all done. all in previous commits I apparently forgot to devlog. oops. reorganized the remaining items: Documentation (JSDoc done, README and docs site still needed) and Future (scroll-to-playhead, seek, loop, Web Worker rendering). the TODO is getting short. that’s a weird feeling for a project that’s six days old."}, {"post_id": 11073, "ts": "2026-06-18T03:30:48Z", "hours": 3.4428, "text": "567,211 lines of “code” so about that line count. I added the CMU Pronouncing Dictionary as a git submodule. 134,000+ English words with their ARPABET pronunciations. the cmudict repo is… large. like, genuinely enormous. the diff says 567k lines and it’s almost entirely a text file of words and their phoneme sequences. the actual code changes across these four commits? probably 280 lines. the submodule? 567,131 lines. software engineering. the real G2P Build/data/cmudict is now a submodule pointing to cmusphinx/cmudict. this is THE pronunciation dictionary. the one that every TTS and speech recognition system uses. “BEAUTIFUL” -> “B Y UW1 T AH0 F AH0 L”. “SQUIRREL” -> “S K W ER1 AH0 L”. every word, every pronunciation variant, every stress marker. the 100-word hand-rolled dictionary was cute. this is the real thing. (chunk size warning in vite went from 500 to 13000 because bundling the dictionary is… yeah.) glottal pulse fix the LF glottal source had an audible click on every single cycle. the return phase (after the glottis closes) was a bare exponential decay: -exp(-epsilon * x * period) . the problem: it starts at -1 with non-zero slope, so at the boundary between cycles there’s a discontinuity. click. every. cycle. fix: multiply by sin(pi * x) . the sine term makes the slope match the open phase at t=te (C1 continuity) and reach 0 at t=tc. smooth transition. no click. this is how the actual LF model paper describes it but I’d skipped the sine modulation the first time around because I thought it was just cosmetic. it was not cosmetic. also killed the 0.8/0.2 smoothing filter. it was supposed to prevent clicks but was actually just low-passing the glottal pulse and adding phase distortion. the DC blocker handles drift on its own. coefficient went from 0.995 to 0.99 for faster response. renderer performance formant coefficient updates were happening every sample. that’s setFormants() with trig functions 44,100 times per second. formants don’t actually change that fast. throttled to every 5ms (221 samples at 44.1k). no audible difference, meaningful CPU savings. cascade reset came back at phoneme boundaries. I removed it two commits ago thinking filter state carryover was smoother. it is smoother, but it also causes wideband clicks when the coefficients jump. the reset is the right call. aspiration lowpass aspiration noise on vowels was full-spectrum white noise. real breathy voice has most of its noise energy below 4kHz. added a one-pole lowpass at 4kHz on the aspiration path. sounds warmer and less harsh. also re-added parallel filter resets at phoneme boundaries (matched the cascade reset fix). signal quality tests new test category: signal quality. a long 8-beat note must stay in [-1, 1], be finite throughout, and not be dominated by white noise. the “not white noise” check uses a crude HF proxy: ratio of RMS(sample-to-sample difference) to RMS(signal) in the steady state portion. pure white noise scores ~1.4, a clean tonal signal scores ~0.2. test asserts between 0.05 and 0.8. wrote these tests because the glottal fix could have easily introduced NaN propagation or DC drift and I wanted to catch it automatically."}, {"post_id": 10947, "ts": "2026-06-17T23:12:38Z", "hours": 7.0989, "text": "four commits, and failure I did not intend to do all of this in one sitting. and yet. player batching + buffer pool the player was creating a new AudioBuffer for every single chunk. for a 100-note score that’s 200 buffer allocations (stereo) plus 200 BufferSourceNodes. the garbage collector was not happy. rewrote the scheduling layer. chunks now accumulate into batches (~0.5s each) and get merged into a single AudioBuffer per channel before scheduling. acquireBuffer() checks a pool of previously used buffers by sampleRate and length before allocating new ones. onended releases them back to the pool. pre-buffer threshold bumped to 1.0s for more runway. the result: way fewer Web Audio nodes, way less GC pressure, smoother playback on longer scores. japanese UTAU compatibility imported UST files from real UTAU projects were breaking because Japanese has a bunch of special lyric conventions I didn’t handle: っ (sokuon) : geminate consonant marker. maps to a new sil (silence) phoneme. ※ (pronunciation alias) : text after ※ is the actual pronunciation. あ※ka uses “ka” not “あ”. dot-prefixed lyrics ( .sil , .S ): UTAU rest/silence commands. treated as empty. @ and % : stripped. @ also acts as a note-join marker in the renderer: if present, the initial consonant gets suppressed so the vowel carries through from the previous note. also removed the cascade.reset() between phonemes. filter state now carries through for smoother formant transitions instead of clicking at every phoneme boundary. settings panel new SettingsPanel.svelte . modal overlay, dark theme, closes on Escape or click-outside. currently has one setting: auto-scroll toggle (for a future scroll-to-playhead feature). settings gear icon in the header bar. undo/redo integrated undora for undo/redo history. 50-state capacity. snapshots are saved on mouse-up in the piano roll, delete key, pitch point changes, and lyric/note-number edits (on blur, not on every keystroke). Ctrl/Cmd+Z to undo. Ctrl/Cmd+Shift+Z or Ctrl/Cmd+Y to redo. Undo2 and Redo2 icons in the header bar, disabled when there’s nothing to undo/redo. history clears on language switch and file import. the formatting commit ran prettier again. removed a dead MIN_POOL_SIZE constant and an unused import. cleaned up a few TODO items. the usual. scrollToNotes also got a fix: it was centering on the midpoint of all notes which looked weird when the first note started late. now it clamps to the start of the earliest note so you always see the beginning. also I tried to fix the hissing and static and clicking but to no avail. i tried fixing a LOT of stuff. but. sadly ir only made things worse, so I had to retry. and retry. and retry. and retry. with no luck I’m not sure what the problem is tbh. Let me use Satori to debug some stuff ig"}, {"post_id": 8849, "ts": "2026-06-14T18:34:21Z", "hours": 1.2458, "text": "making it sound less terrible (two commits, one mission) these two commits are about one thing: the output was robotic and buzzy and I was tired of it. every change here is about making the synthesizer sound more like a voice and less like a modem. the renderer got smarter cross-note co-articulation. renderNote() now returns { chunk, finalFormants } . the stream passes the previous note’s final formants into the next note’s renderer, and the first phoneme interpolates from those formants instead of jumping cold. gaps between notes reset the chain. notes that follow each other seamlessly now blend their formants across the boundary. per-phoneme envelopes. the old global 5ms attack / 10ms release is gone. replaced with getPhonemeEnvelopeSamples() which gives each phoneme type its own envelope: plosives get 2ms attack / 15ms decay (sharp burst), consonants and vowels get 5ms / 3ms. every phoneme segment fades independently. diphthong formant sweeping. PhonemeDef got an endFormants field. if a diphthong has both formants and endFormants , the renderer sweeps between them over the phoneme duration. AY now actually glides from /aa/ to /ih/. EY glides from /eh/ to /ih/. OW glides from /oh/ to /uh/. they sound like diphthongs now instead of static vowels. vibratoOverride. was defined on Note but never read. now it is. per-note vibrato control works. everything got retuned glottal source. added shimmer (per-cycle amplitude variation driven by jitter, so the volume wobbles slightly like a real voice). aspiration noise is now high-pass filtered (subtract a lowpass from the raw noise) so it’s airy instead of muddy. aspiration gain bumped from 0.1 to 0.15. plosive bursts. noise envelope for plosives changed from symmetric fade to a fast 12ms exponential decay. “pa” now sounds like a burst instead of a pop. formant data for everything. Z, ZH, V, DH, Y, W, HH, JH in English all got formant targets. same for z, h, y, w, j in Japanese. consonants that were previously just noise bursts now resonate through the vocal tract. the difference is huge. vowel bandwidths tightened. defaults went from 80/100/120 to 70/90/130 Hz. narrower bandwidths = sharper resonant peaks = more vowel-like quality. voice presets retuned. male voice: lower open quotient (0.4), lower speed quotient (0.65), higher tenseness (0.65), less aspiration (0.05). sounds less breathy, more chest voice. female: formant scale 1.18. gender slider in scaleVoice now affects speed quotient and has a gender-dependent tenseness base. pitch accent. Japanese got resolveAccents() implementing heiban pattern (low first mora, high rest). the stream groups consecutive notes into phrases, calls resolveAccents, and applies the offsets as constant pitch shifts. it’s basic but it makes Japanese phrases have some melodic contour beyond what the score provides. four TODO items checked off in one go: co-articulation, phoneme envelopes, diphthong sweeping, vibratoOverride. pitch accent too. it still doesn’t sound human. but it’s starting to sound like it’s trying. and that’s a big step from where it was. if you can identify the song in the editor image, good job, you’re cool :D"}, {"post_id": 8467, "ts": "2026-06-14T02:23:14Z", "hours": 1.0867, "text": "CI arc (three commits, one story) three commits that are really one story: getting CI from “permanently red” to green. the setup “wrote” (aka copied and modified) six GitHub Actions workflows in one go: ci.yml : lint + test + build on push/PR. matrix tests Node 20 and 22. builds the library first, then typechecks the demo. (docs build is commented out because docs don’t exist yet. they will. eventually.) test.yml : dedicated test runner. same Node 20/22 matrix. runs jest in the Build workspace. release-npm.yml : publishes to npm on GitHub release. strips private/scripts/devDependencies from package.json, copies README and LICENSE into Build/, publishes with --provenance . has a workflow_dispatch with a dry-run option so I can test without actually publishing. security-audit.yml : runs npm audit --audit-level=high on all three workspaces (root, Build, Demo). daily cron plus on push when package files change. static.yml : reworked the GitHub Pages deployment. it was pointed at Build/dist (wrong, that’s the library output). now it builds the library, builds the demo, and deploys Demo/dist as the pages root. docs will go in pages-root/docs/ when they exist. single-file.yml : was still referencing Web-Template (the old template name). fixed to point at Demo, output file is now UTAUjsEditor.html. also integrated Updato (my own auto-updater library) into the demo. on load it checks the current build hash against the latest commit on main and shows an update notification if there’s a newer version. the build hash gets injected at build time via __BUILD_HASH__ in the vite config. cleaned up the TODO: removed all the completed checkboxes (they were cluttering the file), added detail to the remaining items. the fixes CI was 0/3 passing. then 1/8 passing. then 2/8. then eventually 8/8. the classic experience. the single-file and updato workflows needed the library built before the demo (workspace dependency). added npm ci at root level and a “Build Library” step before the demo build. also added vite-plugin-singlefile and cross-env for the build:single script. second fix commit added ts-node and unrun as dev deps because the ESM config loading was unhappy without them. three commits to go from red to green. could be worse honestly but whatever"}, {"post_id": 8388, "ts": "2026-06-13T23:00:15Z", "hours": 0.6642, "text": "the prettier commit (and a tiny bugfix) two commits. one has 19 lines of actual code. the other touched every single file in the project. the bugfix the piano roll’s resize handle wasn’t working for already-selected notes. you could resize on first click, but if you clicked a note to select it and THEN tried to drag the right edge, it would move the note instead of resizing. added a resize zone check that fires before the drag-to-move handler when a note is already selected. 19 lines. the formatting pass ran prettier on the entire codebase. every file. the diff is enormous and the actual logic changes are: zero. added .prettierrc (semicolons, double quotes, trailing commas, 140 char width, svelte plugin), .prettierignore , and eslint.config.ts . bumped eslint to 10.5 and typescript-eslint to 8.61. added jiti for ESM config loading. the one real improvement buried in here: replaced the Function type in ufdata.ts with a proper ParseFn type alias. eslint was right to yell at me for using bare Function . everything else is semicolons and line breaks. the codebase has a consistent style now. that’s the whole commit. sometimes you just gotta."}, {"post_id": 8353, "ts": "2026-06-13T21:40:48Z", "hours": 0.5894, "text": "open any vocal synth file ever made so you know how the TODO said “MIDI file import” as one little checkbox? I may have slightly exceeded scope on that one. UTAU.js can now import UST, USTX, VPR, VSQX, VSQ, SVP, MIDI, MusicXML, PPSF, S5P, TSSLN, CCS, DV, and UFData files. that’s UTAU, OpenUTAU, Vocaloid, Synthesizer V, Piapro Studio, CeVIO, DeepVocal, and standard MIDI. basically every vocal synth format that exists. this is thanks to utaformatix-ts by sevenc-nanashi, which is a universal parser for vocal synth project files. it converts everything into a common UfData format. I wrote a 145-line adapter ( ufdata.ts ) that converts UfData into UTAU.js Scores. lazy-loaded so the parser only gets pulled in when you actually import a file. pitch bends this was the hard part. vocal synth files have pitch curves. track-level arrays of tick-value pairs that describe how the pitch deviates from the written note. the importer splits the track-level curve into per-note pitch bends, handling absolute-to-relative conversion, null value filtering, start/end padding, and extrapolation from preceding points. the renderer now reads note.pitchBend and interpolates it per-sample alongside vibrato. the math: f0 = baseF0 * 2^((bendSemitones * 100 + vibratoCents) / 1200) . pitch bends and vibrato stack correctly in cents space. piano roll overhaul the piano roll was hardcoded to 3 octaves (ik bad, but will fix soon) and a fixed width. now it covers the full MIDI range (0-127) with virtual scrolling. wheel scrolls vertically, shift+wheel or trackpad scrolls horizontally. viewport culling so only visible notes and key labels get drawn. auto-scrolls to center on notes when you import a file. also: pitch curves render as yellow lines overlaid on note blocks. you can see the imported pitch data right there on the piano roll. other stuff added await setTimeout(0) in the streaming loop so the UI doesn’t freeze during long scores. the demo has an “Open” button that accepts all 14 supported file extensions. TODO got updated with a lot of checkboxes ticked. Some amount of lines of import tests covering note mapping, tempo conversion, pitch splitting (absolute, relative, null filtering, extrapolation, out-of-range skipping, pitch:false opt-out), and edge cases."}, {"post_id": 8316, "ts": "2026-06-13T20:40:13Z", "hours": 0.7764, "text": "uhhh tests (that was fast huh) the commit message says it all. 961 lines added. 10 test files. plus a WAV encoder, a bunch of bug fixes, and the entire player got an upgrade. in one sitting. tests jest config, ts-jest, ESM mode. ten test files covering everything that exists: envelope.test.ts : attack/release shape, mixBuffers offset and gain, edge cases filter.test.ts : FormantFilter resonator, FormantCascade noise.test.ts : NoiseSource output oscillator.test.ts : LFGlottalSource waveform shape wav.test.ts : encodeWav RIFF header english.test.ts : lexicon hits and fallback japanese.test.ts : hiragana, romaji, special cases renderer.test.ts : renderNote output shape, sample count, non-zero output stream.test.ts : streamScore chunk boundaries, mixChunks voices/index.test.ts : buildVoice, scaleVoice parameter ranges writing tests found bugs. writing tests always finds bugs. the bugs tests found OW was missing. the English phoneme table had every ARPABET vowel except OW. “HELLO” ends with OW. the demo word was literally broken and I didn’t notice because the fallback produced silence instead of crashing. added it. F1=470 F2=1000 F3=2400. anti-resonator formula was wrong. the pole radius was hardcoded to 0.99 with a random 0.95 frequency offset. now it derives the pole from bw * 1.5 like a real anti-resonator should. nasals sound less terrible. jitter was per-sample. it was recalculating a random f0 every single sample, which made the pitch wobble chaotically instead of naturally. moved it to recalculate once per glottal cycle. much more realistic. noise fadeout could go negative. phDur - segPos - 1 can be negative at the boundary. clamped to 0. gain normalization could divide by zero. clamped overallPeak to 1e-6 and gain to max 100. buildVoice spread order was wrong. ...overrides was before the sub-objects, so the glottal/formant/vibrato defaults always overwrote user values. flipped the order. WAV encoder (i’ve written manual WAV encoders before, I just copy-pasted that, it’s not that bad tbh) 62 lines. encodeWav() takes AudioChunks and writes a proper RIFF/WAVE file. 16-bit PCM, little-endian, handles mono and stereo. float-to-int16 conversion with clamping. exported from the barrel file. player upgrades setVolume() API. volume parameter on play() . progress events actually fire now (the type existed but was never emitted). stop does a 50ms gain ramp to zero before closing the AudioContext so it doesn’t click. scheduling uses Math.max(ctx.currentTime + 0.01, ...) to prevent scheduling in the past if rendering falls behind. stream tempo handling streamScore() was using a single currentTempo for the whole note. now it has tempoAt() for point lookups and noteSampleDuration() that integrates across tempo changes within a note. a note that spans a tempo change gets the right duration now. also added a cascade reset between phonemes in the renderer (was carrying filter state across phoneme boundaries causing ringing), added a missing phoneme console.warn so you can actually debug G2P failures, and fixed the Japanese romaji parser to skip spaces instead of treating them as unknown consonants. the TODO list is getting shorter. slowly but surely. …and i forgot to update it oops"}, {"post_id": 8294, "ts": "2026-06-13T19:45:25Z", "hours": 1.8264, "text": "it makes sound now okay so. I may have blacked out and written an entire synthesizer in one commit. 210 lines of renderer, 65 lines of streaming, a full Svelte demo app with a piano roll, and a dozen DSP fixes. this is flo-era hyperfocus energy except I can HEAR it this time. (well I could hear flo, it’s a audio format, so like, duh, but yk what i mean loll) the renderer renderNote() takes a Note + VoiceConfig + LanguageModule and produces actual audio. per-sample processing: vibrato with attack ramp, 30ms smoothstep formant interpolation between phonemes, glottal pulse through the cascade, shaped noise for consonants with per-segment fade in/out, smoothstep attack/release envelope, peak normalization. consonants get their default duration, vowels split the remaining time. if consonants would eat more than 40% of the note they get compressed. every filter, oscillator, and cascade got refactored from batch to per-sample. slower but I can morph formants sample-by-sample for smooth transitions. DSP fixes (there were several) the LF oscillator’s open phase was inverted. added a DC blocking filter because the pulse was making everything drift. added jitter for natural-sounding pitch variation. the resonator gain formula was wrong ( b0 = 1 - r*r should be b0 = 1 - B - C ). FormantCascade now runs anti-resonators before resonators (correct order for nasals). added setPassthrough() for unused filter slots. female formant scale went from 0.88 to 1.15. I had it backwards. scaling down shrinks the tract and sounds childlike. scaling up is what you want. streaming + demo streamScore() is an async generator. walks the score note by note, handles tempo changes, yields chunks. player starts playing before the score finishes rendering. the demo is a full Svelte 5 app. canvas piano roll (click to create, drag to move/resize, delete to remove), voice panel with easy sliders + expandable advanced params, transport bar, language switcher. Japanese demo says “ka na ta shi i ne”. English says “HELLO WORLD THIS IS A TEST”. press play and it synthesizes through Web Audio in real time. from math. everything else Japanese plosives got formant data (were noise-only). added “l” as an r-alias for loanwords. barrel file exports the full public API. wrote a comprehensive TODO.md because the list of things that aren’t done is very long. it sounds terrible. robotic and buzzy and the consonants are more like clicks. but it’s SOUND. generated from MATH. in a BROWSER. Peterson and Barney would be proud. (or horrified.)"}, {"post_id": 7973, "ts": "2026-06-13T09:17:37Z", "hours": 0.3825, "text": "voices, a player, and oh look a demo app three things in one commit because I couldn’t decide which to work on so I did all of them. voice presets two built-in voices: Male and Female. the male voice has a lower open quotient (0.45, vocal folds close faster), lower aspiration (0.08, less breathy), and formant scale of 1.0. the female voice has higher open quotient (0.55), more aspiration (0.12), and formant scale of 0.88 which shifts all the formant frequencies up to simulate a shorter vocal tract. vibrato differs too. male is 5.5 Hz rate with 30 cents depth. female is 6.0 Hz with 40 cents. these are rough averages from the singing voice literature. real vibrato varies wildly between singers but you have to start somewhere. buildVoice() lets you construct a custom voice with partial overrides. scaleVoice() is the fun one. it takes a voice config and five intuitive sliders: gender (-1 to +1), breathiness, tension, brightness, vibratoAmount. the gender parameter interpolates formant scale between 0.88 and 1.0. breathiness maps to open quotient and aspiration. tension maps to glottal tenseness. brightness maps to formant bandwidth (narrower bandwidths = brighter, more resonant sound). vibrato amount scales depth. the idea is you start with a preset and then tweak it with human-readable parameters instead of raw acoustic values. “make this voice breathier” is easier to think about than “increase open quotient to 0.55 and aspiration to 0.12”. registry pattern same as languages. getVoice(\"male\") , registerVoice(\"my-voice\", config) . stream player this is the thing that actually makes sound come out of your speakers. StreamPlayer takes an AsyncGenerator<AudioChunk> and schedules the audio through the Web Audio API. each chunk gets turned into an AudioBuffer, wired through a GainNode (fixed at 0.8 for now), and scheduled at its exact start time using ctx.currentTime + chunk.startSample / sampleRate . the generator can yield chunks as fast or as slow as it wants. the player just keeps scheduling them. async generator as the interface is the key design decision. the synthesizer can stream audio chunk by chunk as it renders each phoneme, and the player starts playing before the whole score is done. no waiting for the full render. just start. pause suspends the AudioContext. resume resumes it. stop aborts the generator via AbortController and closes the context. event system emits stateChange, progress, done, error. on() returns an unsubscribe function. clean lifecycle. the demo app svelte 5 + vite. the Demo/ workspace finally has code in it. just scaffolding for now, no UI components yet. but the package.json is wired up: utaujs as a workspace dependency so it pulls from the Build/ output, @sveltejs /vite-plugin-svelte, vite 8. I picked svelte because it’s the lightest framework that still gives me reactivity and components without a virtual DOM. for a music app where audio timing matters, I don’t want React’s reconciliation cycle anywhere near my render loop. svelte compiles to vanilla JS. no runtime overhead. (also I just like svelte.) the engine is almost wirable end to end now. language module produces phonemes, voice config provides the acoustic parameters, the DSP layer renders audio chunks, the stream player schedules them through Web Audio. the only missing piece is the actual synthesizer that takes a Score + Voice + Language and yields AudioChunks. that’s next. getting close to hearing actual sound."}, {"post_id": 7955, "ts": "2026-06-13T08:49:48Z", "hours": 0.6944, "text": "two languages walk into a synthesizer… so I said “next step is a basic ARPABET phoneme dictionary” and then I just… did both English AND Japanese in one sitting. because apparently my brain doesn’t know how to do things incrementally. english every phoneme in ARPABET, with real formant data from real papers. I’m going to be responsible and cite my sources (gasp): vowel formants are Peterson & Barney 1952 male speaker means. the classic dataset. 76 speakers, 10 monophthongal vowels. /IY/ is F1=270 F2=2290 F3=3010. /AA/ is F1=730 F2=1090 F3=2440. these numbers are from a 74-year-old paper and they’re still the standard reference. wild. consonant noise centres follow Jongman et al. 2000 for fricatives (sibilant spectral peaks), Stevens 1998 for plosive burst loci, and Fujimura 1962 for nasal formants/antiformants. I feel like an actual phonetician typing these citations. I am not an actual phonetician. the full set: 10 vowels, 4 diphthongs, 6 plosives, 9 fricatives, 3 nasals, 4 approximants, 2 affricates. every consonant has its noise shaping config. every nasal has antiformant data. every vowel has 5 formant targets (F1 through F5). there’s also a grapheme-to-phoneme dictionary with like 100 common English words. “HELLO” -> [“HH”, “EH”, “L”, “OW”]. “BEAUTIFUL” -> [“B”, “Y”, “UW”, “T”, “IH”, “F”, “UH”, “L”]. it’s a smol subset but it covers the words you’d actually want a singing synthesizer to say. sun, moon, star, dream, love, forever, together. very anime opening core vocabulary. I should expand it eventually but it’s fine for testing. the fallback for unknown words is fun: first it checks if the input is already ARPABET symbols separated by spaces/underscores. if not, it falls back to a dead simple single-character mapping where each letter gets one phoneme. it’s terrible but it won’t crash. japanese honestly? mapping Japanese to phonemes is SO much easier than English. kana are basically a syllabary. each character maps to exactly one consonant-vowel pair (or just a vowel). no ambiguity. no “through” being pronounced nothing like it looks. English is a disaster and Japanese is a joy. (I still don’t know Japanese. sighhh. but the internet is very helpful.) vowel formants are from Yazawa & Kondo 2019, specifically the short-vowel midpoint averages for male speakers from their ICPhS paper. that Japanese vowel formant displacement paper I was reading earlier today. /a/ F1=687 F2=1283, /i/ F1=301 F2=2154, etc. F3 values come from Kitamura et al. 2009, the ATR MRI vocal tract study. different paper, different research group, but the F3 data fills a gap that Yazawa didn’t cover in detail. the lyric parser handles: raw romaji (“ka”, “shi”, “tsu”), hiragana (あ, き, しゃ), and compound kana (きゃ, しゅ, ちょ). hiragana gets converted to romaji via a lookup table, then romaji gets split into consonant-vowel pairs via romajiToPhonemes() . special cases for し -> “shi”, ち -> “chi”, つ -> “tsu”, ふ -> “fu”. word-final ん becomes the moraic nasal N. geminate consonants (double letters) get handled. it’s not perfect but it covers standard Hepburn romanisation. the registry a Map of language IDs to modules. getLanguage(\"en\") or getLanguage(\"jp\") . registerLanguage() for future additions. both “jp” and “ja” point to Japanese because people use both and I’m not going to pick a side. the LanguageModule interface from types.ts is earning its keep already. both languages implement the same lyricToPhonemes() contract. the synthesizer won’t know or care which language is active. plug in English, plug in Japanese, plug in anything. the architecture handles it. I love this."}, {"post_id": 7946, "ts": "2026-06-13T08:00:27Z", "hours": 0.9586, "text": "new project. yes, another one. (penumbra is on pause btw) so uh. hi. I’m starting a new thing. penumbra is on pause. not abandoned, just… paused. the backend is solid, the architecture is clean, and the UI needs to catch up but I need to do the HTML mockup thing first and I’m not in the headspace for that right now. it’ll come back. I promise. in the meantime: UTAU.js. the idea: a browser-based singing synthesizer inspired by UTAU. but here’s the thing. it’s not sample-based like the original. it’s parametric. formant synthesis. generate the entire voice from math. no voicebank files, no platform dependencies, no 200MB sample libraries. just DSP and physics and the human vocal tract modeled in TypeScript. why TypeScript and not Rust this time? because. I scaffolded the repo from my Web-Template and then immediately ripped out everything that made it a web template. I replaced it with a proper library setup: tsdown for bundling (ESM + CJS + type declarations), npm workspaces (Build for the engine, Demo for a future demo app), TypeScript strict mode. renamed to utaujs. added jest, eslint, prettier, typescript-eslint. the foundation is there. also brought in @nisoku /satori as a dependency because I’ll want observability later and I might as well wire it up now. And like, it’s such a great observatory library like smh my head, why wouldn’t I use it the research rabbit hole (aka I read way too many papers) okay so today was one of those days where hackatime probably says like less than a hour but reality says 4-5. I spent most of half of today reading. papers. reference tables. phonetics Wikipedia articles. I have 20 browser tabs open right now (thank goodness for tab groups) and they’re all about formants and audio and human vocal behaviors. here’s the reading list: Peterson & Barney 1952 (a classic formant frequency dataset, 76 speakers, 10 American English vowels, F0 through F3) the Stanford CCRMA formant table (Peterson’s data averaged by gender and age group, the numbers everyone cites) ARPABET (the phonetic notation system CMU uses, 39 phonemes for General American English) CMU Pronouncing Dictionary (134,000+ words mapped to ARPABET, sheesh) a paper on Japanese vowel formant displacement (short vs long vowels have different formant targets, which matters a lot) Kitamura et al on vocal tract transfer functions from MRI-derived solid models (they literally 3D printed vocal tracts and measured the acoustic response) the MRI one is wild. they took volumetric MRI scans of people saying Japanese vowels, built physical 3D models of their vocal tracts via stereolithography, and then measured the frequency response by pumping sound through the models. but I also wrote code I remember a LOT of this from working on flo. types.ts is the big one. 91 lines of the full type stuff oscillator.ts is the glottal source. an LF (Liljencrants-Fant) model. this is the buzzing sound your vocal folds make before your throat and mouth shape it into speech. lots of math that i don’t want to talk about. filter.ts is the formant cascade. second-order IIR resonator (biquad) that can operate as either a resonator or anti-resonator. noise.ts is simple. white noise generator plus a function to shape it through formant resonators. this is how you get consonants like “s” and “sh”. they’re just filtered noise. envelope.ts is attack/release shaping with smoothstep curves plus a buffer mixing utility. Fun!"}]...
|
Title: UTAU.js by @NellowTCS | Stardance
Devlogs: Title: UTAU.js by @NellowTCS | Stardance
Devlogs:
new project. yes, another one. (penumbra is on pause btw) so uh. hi. I’m starting a new thing. penumbra is on pause. not abandoned, just… paused. the backend is solid, the architecture is clean, and the UI needs to catch up but I need to do the HTML mockup thing first and I’m not in the headspace for that right now. it’ll come back. I promise. in the meantime: UTAU.js. the idea: a browser-based singing synthesizer inspired by UTAU. but here’s the thing. it’s not sample-based like the original. it’s parametric. formant synthesis. generate the entire voice from math. no voicebank files, no platform dependencies, no 200MB sample libraries. just DSP and physics and the human vocal tract modeled in TypeScript. why TypeScript and not Rust this time? because. I scaffolded the repo from my Web-Template and then immediately ripped out everything that made it a web template. I replaced it with a proper library setup: tsdown for bundling (ESM + CJS + type declarations), npm workspaces (Build for the engine, Demo for a future demo app), TypeScript strict mode. renamed to utaujs. added jest, eslint, prettier, typescript-eslint. the foundation is there. also brought in @nisoku /satori as a dependency because I’ll want observability later and I might as well wire it up now. And like, it’s such a great observatory library like smh my head, why wouldn’t I use it the research rabbit hole (aka I read way too many papers) okay so today was one of those days where hackatime probably says like less than a hour but reality says 4-5. I spent most of half of today reading. papers. reference tables. phonetics Wikipedia articles. I have 20 browser tabs open right now (thank goodness for tab groups) and they’re all about formants and audio and human vocal behaviors. here’s the reading list: Peterson & Barney 1952 (a classic formant frequency dataset, 76 speakers, 10 American English vowels, F0 through F3) the Stanford CCRMA formant table (Peterson’s data averaged by gender and age group, the numbers everyone cites) ARPABET (the phonetic notation system CMU uses, 39 phonemes for General American English) CMU Pronouncing Dictionary (134,000+ words mapped to ARPABET, sheesh) a paper on Japanese vowel formant displacement (short vs long vowels have different formant targets, which matters a lot) Kitamura et al on vocal tract transfer functions from MRI-derived solid models (they literally 3D printed vocal tracts and measured the acoustic response) the MRI one is wild. they took volumetric MRI scans of people saying Japanese vowels, built physical 3D models of their vocal tracts via stereolithography, and then measured the frequency response by pumping sound through the models. but I also wrote code I remember a LOT of this from working on flo. types.ts is the big one. 91 lines of the full type stuff oscillator.ts is the glottal source. an LF (Liljencrants-Fant) model. this is the buzzing sound your vocal folds make before your throat and mouth shape it into speech. lots of math that i don’t want to talk about. filter.ts is the formant cascade. second-order IIR resonator (biquad) that can operate as either a resonator or anti-resonator. noise.ts is simple. white noise generator plus a function to shape it through formant resonators. this is how you get consonants like “s” and “sh”. they’re just filtered noise. envelope.ts is attack/release shaping with smoothstep curves plus a buffer mixing utility. Fun!
two languages walk into a synthesizer… so I said “next step is a basic ARPABET phoneme dictionary” and then I just… did both English AND Japanese in one sitting. because apparently my brain doesn’t know how to do things incrementally. english every phoneme in ARPABET, with real formant data from real papers. I’m going to be responsible and cite my sources (gasp): vowel formants are Peterson & Barney 1952 male speaker means. the classic dataset. 76 speakers, 10 monophthongal vowels. /IY/ is F1=270 F2=2290 F3=3010. /AA/ is F1=730 F2=1090 F3=2440. these numbers are from a 74-year-old paper and they’re still the standard reference. wild. consonant noise centres follow Jongman et al. 2000 for fricatives (sibilant spectral peaks), Stevens 1998 for plosive burst loci, and Fujimura 1962 for nasal formants/antiformants. I feel like an actual phonetician typing these citations. I am not an actual phonetician. the full set: 10 vowels, 4 diphthongs, 6 plosives, 9 fricatives, 3 nasals, 4 approximants, 2 affricates. every consonant has its noise shaping config. every nasal has antiformant data. every vowel has 5 formant targets (F1 through F5). there’s also a grapheme-to-phoneme dictionary with like 100 common English words. “HELLO” -> [“HH”, “EH”, “L”, “OW”]. “BEAUTIFUL” -> [“B”, “Y”, “UW”, “T”, “IH”, “F”, “UH”, “L”]. it’s a smol subset but it covers the words you’d actually want a singing synthesizer to say. sun, moon, star, dream, love, forever, together. very anime opening core vocabulary. I should expand it eventually but it’s fine for testing. the fallback for unknown words is fun: first it checks if the input is already ARPABET symbols separated by spaces/underscores. if not, it falls back to a dead simple single-character mapping where each letter gets one phoneme. it’s terrible but it won’t crash. japanese honestly? mapping Japanese to phonemes is SO much easier than English. kana are basically a syllabary. each character maps to exactly one consonant-vowel pair (or just a vowel). no ambiguity. no “through” being pronounced nothing like it looks. English is a disaster and Japanese is a joy. (I still don’t know Japanese. sighhh. but the internet is very helpful.) vowel formants are from Yazawa & Kondo 2019, specifically the short-vowel midpoint averages for male speakers from their ICPhS paper. that Japanese vowel formant displacement paper I was reading earlier today. /a/ F1=687 F2=1283, /i/ F1=301 F2=2154, etc. F3 values come from Kitamura et al. 2009, the ATR MRI vocal tract study. different paper, different research group, but the F3 data fills a gap that Yazawa didn’t cover in detail. the lyric parser handles: raw romaji (“ka”, “shi”, “tsu”), hiragana (あ, き, しゃ), and compound kana (きゃ, しゅ, ちょ). hiragana gets converted to romaji via a lookup table, then romaji gets split into consonant-vowel pairs via romajiToPhonemes() . special cases for し -> “shi”, ち -> “chi”, つ -> “tsu”, ふ -> “fu”. word-final ん becomes the moraic nasal N. geminate consonants (double letters) get handled. it’s not perfect but it covers standard Hepburn romanisation. the registry a Map of language IDs to modules. getLanguage("en") or getLanguage("jp") . registerLanguage() for future additions. both “jp” and “ja” point to Japanese because people use both and I’m not going to pick a side. the LanguageModule interface from types.ts is earning its keep already. both languages implement the same lyricToPhonemes() contract. the synthesizer won’t know or care which language is active. plug in English, plug in Japanese, plug in anything. the architecture handles it. I love this.
voices, a player, and oh look a demo app three things in one commit because I couldn’t decide which to work on so I did all of them. voice presets two built-in voices: Male and Female. the male voice has a lower open quotient (0.45, vocal folds close faster), lower aspiration (0.08, less breathy), and formant scale of 1.0. the female voice has higher open quotient (0.55), more aspiration (0.12), and formant scale of 0.88 which shifts all the formant frequencies up to simulate a shorter vocal tract. vibrato differs too. male is 5.5 Hz rate with 30 cents depth. female is 6.0 Hz with 40 cents. these are rough averages from the singing voice literature. real vibrato varies wildly between singers but you have to start somewhere. buildVoice() lets you construct a custom voice with partial overrides. scaleVoice() is the fun one. it takes a voice config and five intuitive sliders: gender (-1 to +1), breathiness, tension, brightness, vibratoAmount. the gender parameter interpolates formant scale between 0.88 and 1.0. breathiness maps to open quotient and aspiration. tension maps to glottal tenseness. brightness maps to formant bandwidth (narrower bandwidths = brighter, more resonant sound). vibrato amount scales depth. the idea is you start with a preset and then tweak it with human-readable parameters instead of raw acoustic values. “make this voice breathier” is easier to think about than “increase open quotient to 0.55 and aspiration to 0.12”. registry pattern same as languages. getVoice("male") , registerVoice("my-voice", config) . stream player this is the thing that actually makes sound come out of your speakers. StreamPlayer takes an AsyncGenerator<AudioChunk> and schedules the audio through the Web Audio API. each chunk gets turned into an AudioBuffer, wired through a GainNode (fixed at 0.8 for now), and scheduled at its exact start time using ctx.currentTime + chunk.startSample / sampleRate . the generator can yield chunks as fast or as slow as it wants. the player just keeps scheduling them. async generator as the interface is the key design decision. the synthesizer can stream audio chunk by chunk as it renders each phoneme, and the player starts playing before the whole score is done. no waiting for the full render. just start. pause suspends the AudioContext. resume resumes it. stop aborts the generator via AbortController and closes the context. event system emits stateChange, progress, done, error. on() returns an unsubscribe function. clean lifecycle. the demo app svelte 5 + vite. the Demo/ workspace finally has code in it. just scaffolding for now, no UI components yet. but the package.json is wired up: utaujs as a workspace dependency so it pulls from the Build/ output, @sveltejs /vite-plugin-svelte, vite 8. I picked svelte because it’s the lightest framework that still gives me reactivity and components without a virtual DOM. for a music app where audio timing matters, I don’t want React’s reconciliation cycle anywhere near my render loop. svelte compiles to vanilla JS. no runtime overhead. (also I just like svelte.) the engine is almost wirable end to end now. language module produces phonemes, voice config provides the acoustic parameters, the DSP layer renders audio chunks, the stream player schedules them through Web Audio. the only missing piece is the actual synthesizer that takes a Score + Voice + Language and yields AudioChunks. that’s next. getting close to hearing actual sound.
it makes sound now okay so. I may have blacked out and written an entire synthesizer in one commit. 210 lines of renderer, 65 lines of streaming, a full Svelte demo app with a piano roll, and a dozen DSP fixes. this is flo-era hyperfocus energy except I can HEAR it this time. (well I could hear flo, it’s a audio format, so like, duh, but yk what i mean loll) the renderer renderNote() takes a Note + VoiceConfig + LanguageModule and produces actual audio. per-sample processing: vibrato with attack ramp, 30ms smoothstep formant interpolation between phonemes, glottal pulse through the cascade, shaped noise for consonants with per-segment fade in/out, smoothstep attack/release envelope, peak normalization. consonants get their default duration, vowels split the remaining time. if consonants would eat more than 40% of the note they get compressed. every filter, oscillator, and cascade got refactored from batch to per-sample. slower but I can morph formants sample-by-sample for smooth transitions. DSP fixes (there were several) the LF oscillator’s open phase was inverted. added a DC blocking filter because the pulse was making everything drift. added jitter for natural-sounding pitch variation. the resonator gain formula was wrong ( b0 = 1 - r*r should be b0 = 1 - B - C ). FormantCascade now runs anti-resonators before resonators (correct order for nasals). added setPassthrough() for unused filter slots. female formant scale went from 0.88 to 1.15. I had it backwards. scaling down shrinks the tract and sounds childlike. scaling up is what you want. streaming + demo streamScore() is an async generator. walks the score note by note, handles tempo changes, yields chunks. player starts playing before the score finishes rendering. the demo is a full Svelte 5 app. canvas piano roll (click to create, drag to move/resize, delete to remove), voice panel with easy sliders + expandable advanced params, transport bar, language switcher. Japanese demo says “ka na ta shi i ne”. English says “HELLO WORLD THIS IS A TEST”. press play and it synthesizes through Web Audio in real time. from math. everything else Japanese plosives got formant data (were noise-only). added “l” as an r-alias for loanwords. barrel file exports the full public API. wrote a comprehensive TODO.md because the list of things that aren’t done is very long. it sounds terrible. robotic and buzzy and the consonants are more like clicks. but it’s SOUND. generated from MATH. in a BROWSER. Peterson and Barney would be proud. (or horrified.)
uhhh tests (that was fast huh) the commit message says it all. 961 lines added. 10 test files. plus a WAV encoder, a bunch of bug fixes, and the entire player got an upgrade. in one sitting. tests jest config, ts-jest, ESM mode. ten test files covering everything that exists: envelope.test.ts : attack/release shape, mixBuffers offset and gain, edge cases filter.test.ts : FormantFilter resonator, FormantCascade noise.test.ts : NoiseSource output oscillator.test.ts : LFGlottalSource waveform shape wav.test.ts : encodeWav RIFF header english.test.ts : lexicon hits and fallback japanese.test.ts : hiragana, romaji, special cases renderer.test.ts : renderNote output shape, sample count, non-zero output stream.test.ts : streamScore chunk boundaries, mixChunks voices/index.test.ts : buildVoice, scaleVoice parameter ranges writing tests found bugs. writing tests always finds bugs. the bugs tests found OW was missing. the English phoneme table had every ARPABET vowel except OW. “HELLO” ends with OW. the demo word was literally broken and I didn’t notice because the fallback produced silence instead of crashing. added it. F1=470 F2=1000 F3=2400. anti-resonator formula was wrong. the pole radius was hardcoded to 0.99 with a random 0.95 frequency offset. now it derives the pole from bw * 1.5 like a real anti-resonator should. nasals sound less terrible. jitter was per-sample. it was recalculating a random f0 every single sample, which made the pitch wobble chaotically instead of naturally. moved it to recalculate once per glottal cycle. much more realistic. noise fadeout could go negative. phDur - segPos - 1 can be negative at the boundary. clamped to 0. gain normalization could divide by zero. clamped overallPeak to 1e-6 and gain to max 100. buildVoice spread order was wrong. ...overrides was before the sub-objects, so the glottal/formant/vibrato defaults always overwrote user values. flipped the order. WAV encoder (i’ve written manual WAV encoders before, I just copy-pasted that, it’s not that bad tbh) 62 lines. encodeWav() takes AudioChunks and writes a proper RIFF/WAVE file. 16-bit PCM, little-endian, handles mono and stereo. float-to-int16 conversion with clamping. exported from the barrel file. player upgrades setVolume() API. volume parameter on play() . progress events actually fire now (the type existed but was never emitted). stop does a 50ms gain ramp to zero before closing the AudioContext so it doesn’t click. scheduling uses Math.max(ctx.currentTime + 0.01, ...) to prevent scheduling in the past if rendering falls behind. stream tempo handling streamScore() was using a single currentTempo for the whole note. now it has tempoAt() for point lookups and noteSampleDuration() that integrates across tempo changes within a note. a note that spans a tempo change gets the right duration now. also added a cascade reset between phonemes in the renderer (was carrying filter state across phoneme boundaries causing ringing), added a missing phoneme console.warn so you can actually debug G2P failures, and fixed the Japanese romaji parser to skip spaces instead of treating them as unknown consonants. the TODO list is getting shorter. slowly but surely. …and i forgot to update it oops
open any vocal synth file ever made so you know how the TODO said “MIDI file import” as one little checkbox? I may have slightly exceeded scope on that one. UTAU.js can now import UST, USTX, VPR, VSQX, VSQ, SVP, MIDI, MusicXML, PPSF, S5P, TSSLN, CCS, DV, and UFData files. that’s UTAU, OpenUTAU, Vocaloid, Synthesizer V, Piapro Studio, CeVIO, DeepVocal, and standard MIDI. basically every vocal synth format that exists. this is thanks to utaformatix-ts by sevenc-nanashi, which is a universal parser for vocal synth project files. it converts everything into a common UfData format. I wrote a 145-line adapter ( ufdata.ts ) that converts UfData into UTAU.js Scores. lazy-loaded so the parser only gets pulled in when you actually import a file. pitch bends this was the hard part. vocal synth files have pitch curves. track-level arrays of tick-value pairs that describe how the pitch deviates from the written note. the importer splits the track-level curve into per-note pitch bends, handling absolute-to-relative conversion, null value filtering, start/end padding, and extrapolation from preceding points. the renderer now reads note.pitchBend and interpolates it per-sample alongside vibrato. the math: f0 = baseF0 * 2^((bendSemitones * 100 + vibratoCents) / 1200) . pitch bends and vibrato stack correctly in cents space. piano roll overhaul the piano roll was hardcoded to 3 octaves (ik bad, but will fix soon) and a fixed width. now it covers the full MIDI range (0-127) with virtual scrolling. wheel scrolls vertically, shift+wheel or trackpad scrolls horizontally. viewport culling so only visible notes and key labels get drawn. auto-scrolls to center on notes when you import a file. also: pitch curves render as yellow lines overlaid on note blocks. you can see the imported pitch data right there on the piano roll. other stuff added await setTimeout(0) in the streaming loop so the UI doesn’t freeze during long scores. the demo has an “Open” button that accepts all 14 supported file extensions. TODO got updated with a lot of checkboxes ticked. Some amount of lines of import tests covering note mapping, tempo conversion, pitch splitting (absolute, relative, null filtering, extrapolation, out-of-range skipping, pitch:false opt-out), and edge cases.
the prettier commit (and a tiny bugfix) two commits. one has 19 lines of actual code. the other touched every single file in the project. the bugfix the piano roll’s resize handle wasn’t working for already-selected notes. you could resize on first click, but if you clicked a note to select it and THEN tried to drag the right edge, it would move the note instead of resizing. added a resize zone check that fires before the drag-to-move handler when a note is already selected. 19 lines. the formatting pass ran prettier on the entire codebase. every file. the diff is enormous and the actual logic changes are: zero. added .prettierrc (semicolons, double quotes, trailing commas, 140 char width, svelte plugin), .prettierignore , and eslint.config.ts . bumped eslint to 10.5 and typescript-eslint to 8.61. added jiti for ESM config loading. the one real improvement buried in here: replaced the Function type in ufdata.ts with a proper ParseFn type alias. eslint was right to yell at me for using bare Function . everything else is semicolons and line breaks. the codebase has a consistent style now. that’s the whole commit. sometimes you just gotta.
CI arc (three commits, one story) three commits that are really one story: getting CI from “permanently red” to green. the setup “wrote” (aka copied and modified) six GitHub Actions workflows in one go: ci.yml : lint + test + build on push/PR. matrix tests Node 20 and 22. builds the library first, then typechecks the demo. (docs build is commented out because docs don’t exist yet. they will. eventually.) test.yml : dedicated test runner. same Node 20/22 matrix. runs jest in the Build workspace. release-npm.yml : publishes to npm on GitHub release. strips private/scripts/devDependencies from package.json, copies README and LICENSE into Build/, publishes with --provenance . has a workflow_dispatch with a dry-run option so I can test without actually publishing. security-audit.yml : runs npm audit --audit-level=high on all three workspaces (root, Build, Demo). daily cron plus on push when package files change. static.yml : reworked the GitHub Pages deployment. it was pointed at Build/dist (wrong, that’s the library output). now it builds the library, builds the demo, and deploys Demo/dist as the pages root. docs will go in pages-root/docs/ when they exist. single-file.yml : was still referencing Web-Template (the old template name). fixed to point at Demo, output file is now UTAUjsEditor.html. also integrated Updato (my own auto-updater library) into the demo. on load it checks the current build hash against the latest commit on main and shows an update notification if there’s a newer version. the build hash gets injected at build time via __BUILD_HASH__ in the vite config. cleaned up the TODO: removed all the completed checkboxes (they were cluttering the file), added detail to the remaining items. the fixes CI was 0/3 passing. then 1/8 passing. then 2/8. then eventually 8/8. the classic experience. the single-file and updato workflows needed the library built before the demo (workspace dependency). added npm ci at root level and a “Build Library” step before the demo build. also added vite-plugin-singlefile and cross-env for the build:single script. second fix commit added ts-node and unrun as dev deps because the ESM config loading was unhappy without them. three commits to go from red to green. could be worse honestly but whatever
making it sound less terrible (two commits, one mission) these two commits are about one thing: the output was robotic and buzzy and I was tired of it. every change here is about making the synthesizer sound more like a voice and less like a modem. the renderer got smarter cross-note co-articulation. renderNote() now returns { chunk, finalFormants } . the stream passes the previous note’s final formants into the next note’s renderer, and the first phoneme interpolates from those formants instead of jumping cold. gaps between notes reset the chain. notes that follow each other seamlessly now blend their formants across the boundary. per-phoneme envelopes. the old global 5ms attack / 10ms release is gone. replaced with getPhonemeEnvelopeSamples() which gives each phoneme type its own envelope: plosives get 2ms attack / 15ms decay (sharp burst), consonants and vowels get 5ms / 3ms. every phoneme segment fades independently. diphthong formant sweeping. PhonemeDef got an endFormants field. if a diphthong has both formants and endFormants , the renderer sweeps between them over the phoneme duration. AY now actually glides from /aa/ to /ih/. EY glides from /eh/ to /ih/. OW glides from /oh/ to /uh/. they sound like diphthongs now instead of static vowels. vibratoOverride. was defined on Note but never read. now it is. per-note vibrato control works. everything got retuned glottal source. added shimmer (per-cycle amplitude variation driven by jitter, so the volume wobbles slightly like a real voice). aspiration noise is now high-pass filtered (subtract a lowpass from the raw noise) so it’s airy instead of muddy. aspiration gain bumped from 0.1 to 0.15. plosive bursts. noise envelope for plosives changed from symmetric fade to a fast 12ms exponential decay. “pa” now sounds like a burst instead of a pop. formant data for everything. Z, ZH, V, DH, Y, W, HH, JH in English all got formant targets. same for z, h, y, w, j in Japanese. consonants that were previously just noise bursts now resonate through the vocal tract. the difference is huge. vowel bandwidths tightened. defaults went from 80/100/120 to 70/90/130 Hz. narrower bandwidths = sharper resonant peaks = more vowel-like quality. voice presets retuned. male voice: lower open quotient (0.4), lower speed quotient (0.65), higher tenseness (0.65), less aspiration (0.05). sounds less breathy, more chest voice. female: formant scale 1.18. gender slider in scaleVoice now affects speed quotient and has a gender-dependent tenseness base. pitch accent. Japanese got resolveAccents() implementing heiban pattern (low first mora, high rest). the stream groups consecutive notes into phrases, calls resolveAccents, and applies the offsets as constant pitch shifts. it’s basic but it makes Japanese phrases have some melodic contour beyond what the score provides. four TODO items checked off in one go: co-articulation, phoneme envelopes, diphthong sweeping, vibratoOverride. pitch accent too. it still doesn’t sound human. but it’s starting to sound like it’s trying. and that’s a big step from where it was. if you can identify the song in the editor image, good job, you’re cool :D
four commits, and failure I did not intend to do all of this in one sitting. and yet. player batching + buffer pool the player was creating a new AudioBuffer for every single chunk. for a 100-note score that’s 200 buffer allocations (stereo) plus 200 BufferSourceNodes. the garbage collector was not happy. rewrote the scheduling layer. chunks now accumulate into batches (~0.5s each) and get merged into a single AudioBuffer per channel before scheduling. acquireBuffer() checks a pool of previously used buffers by sampleRate and length before allocating new ones. onended releases them back to the pool. pre-buffer threshold bumped to 1.0s for more runway. the result: way fewer Web Audio nodes, way less GC pressure, smoother playback on longer scores. japanese UTAU compatibility imported UST files from real UTAU projects were breaking because Japanese has a bunch of special lyric conventions I didn’t handle: っ (sokuon) : geminate consonant marker. maps to a new sil (silence) phoneme. ※ (pronunciation alias) : text after ※ is the actual pronunciation. あ※ka uses “ka” not “あ”. dot-prefixed lyrics ( .sil , .S ): UTAU rest/silence commands. treated as empty. @ and % : stripped. @ also acts as a note-join marker in the renderer: if present, the initial consonant gets suppressed so the vowel carries through from the previous note. also removed the cascade.reset() between phonemes. filter state now carries through for smoother formant transitions instead of clicking at every phoneme boundary. settings panel new SettingsPanel.svelte . modal overlay, dark theme, closes on Escape or click-outside. currently has one setting: auto-scroll toggle (for a future scroll-to-playhead feature). settings gear icon in the header bar. undo/redo integrated undora for undo/redo history. 50-state capacity. snapshots are saved on mouse-up in the piano roll, delete key, pitch point changes, and lyric/note-number edits (on blur, not on every keystroke). Ctrl/Cmd+Z to undo. Ctrl/Cmd+Shift+Z or Ctrl/Cmd+Y to redo. Undo2 and Redo2 icons in the header bar, disabled when there’s nothing to undo/redo. history clears on language switch and file import. the formatting commit ran prettier again. removed a dead MIN_POOL_SIZE constant and an unused import. cleaned up a few TODO items. the usual. scrollToNotes also got a fix: it was centering on the midpoint of all notes which looked weird when the first note started late. now it clamps to the start of the earliest note so you always see the beginning. also I tried to fix the hissing and static and clicking but to no avail. i tried fixing a LOT of stuff. but. sadly ir only made things worse, so I had to retry. and retry. and retry. and retry. with no luck I’m not sure what the problem is tbh. Let me use Satori to debug some stuff ig
567,211 lines of “code” so about that line count. I added the CMU Pronouncing Dictionary as a git submodule. 134,000+ English words with their ARPABET pronunciations. the cmudict repo is… large. like, genuinely enormous. the diff says 567k lines and it’s almost entirely a text file of words and their phoneme sequences. the actual code changes across these four commits? probably 280 lines. the submodule? 567,131 lines. software engineering. the real G2P Build/data/cmudict is now a submodule pointing to cmusphinx/cmudict. this is THE pronunciation dictionary. the one that every TTS and speech recognition system uses. “BEAUTIFUL” -> “B Y UW1 T AH0 F AH0 L”. “SQUIRREL” -> “S K W ER1 AH0 L”. every word, every pronunciation variant, every stress marker. the 100-word hand-rolled dictionary was cute. this is the real thing. (chunk size warning in vite went from 500 to 13000 because bundling the dictionary is… yeah.) glottal pulse fix the LF glottal source had an audible click on every single cycle. the return phase (after the glottis closes) was a bare exponential decay: -exp(-epsilon * x * period) . the problem: it starts at -1 with non-zero slope, so at the boundary between cycles there’s a discontinuity. click. every. cycle. fix: multiply by sin(pi * x) . the sine term makes the slope match the open phase at t=te (C1 continuity) and reach 0 at t=tc. smooth transition. no click. this is how the actual LF model paper describes it but I’d skipped the sine modulation the first time around because I thought it was just cosmetic. it was not cosmetic. also killed the 0.8/0.2 smoothing filter. it was supposed to prevent clicks but was actually just low-passing the glottal pulse and adding phase distortion. the DC blocker handles drift on its own. coefficient went from 0.995 to 0.99 for faster response. renderer performance formant coefficient updates were happening every sample. that’s setFormants() with trig functions 44,100 times per second. formants don’t actually change that fast. throttled to every 5ms (221 samples at 44.1k). no audible difference, meaningful CPU savings. cascade reset came back at phoneme boundaries. I removed it two commits ago thinking filter state carryover was smoother. it is smoother, but it also causes wideband clicks when the coefficients jump. the reset is the right call. aspiration lowpass aspiration noise on vowels was full-spectrum white noise. real breathy voice has most of its noise energy below 4kHz. added a one-pole lowpass at 4kHz on the aspiration path. sounds warmer and less harsh. also re-added parallel filter resets at phoneme boundaries (matched the cascade reset fix). signal quality tests new test category: signal quality. a long 8-beat note must stay in [-1, 1], be finite throughout, and not be dominated by white noise. the “not white noise” check uses a crude HF proxy: ratio of RMS(sample-to-sample difference) to RMS(signal) in the steady state portion. pure white noise scores ~1.4, a clean tonal signal scores ~0.2. test asserts between 0.05 and 0.8. wrote these tests because the glottal fix could have easily introduced NaN propagation or DC drift and I wanted to catch it automatically.
the documentation commit (part 1) JSDoc everywhere this is the kind of commit where the line count looks impressive and the actual behavior changes are zero. 118 lines became 216 lines in types.ts alone. every interface, every field, every function got documented. some highlights: (don’t ask why i did a double dash. i was being silly and just noticed somehow idk how) openQuotient : “fraction of the glottal cycle the vocal folds are open. Higher values produce a breathier, softer sound (0.2–0.9)” speedQuotient : “ratio of the opening phase to the closing phase. Higher values give a faster closure, increasing brightness (0.3–3.0)” FormantCascade : “cascade of anti-resonators followed by resonators, modelling the vocal-tract transfer function. Anti-resonators (zeros) come first, followed by resonators (poles), matching the source-filter model: S(f) = G(f) * Z(f) / P(f)” LFGlottalSource : “Liljencrants-Fant (LF) glottal pulse source with jitter, shimmer, aspiration noise, and DC blocking. See Fant (1986), Liljencrants (1985)” renderNote : documents the full pipeline: “lyric -> phoneme symbols -> phoneme lookup -> LF glottal pulse -> formant cascade -> noise mix -> amplitude envelope -> normalisation” every DSP class, every language module, every player method, every import/export function. the person reading this code in six months (probably me) will thank me. docs soon Docs next time, I will not be long heheeee TODO cleanup the languages section is fully checked off now. English CMUDict (124,911 words), Japanese EDICT2 (224,808 kanji-to-kana entries), Mandarin with full pinyin decomposition, and phoneme alias maps for cross-language compatibility. all done. all in previous commits I apparently forgot to devlog. oops. reorganized the remaining items: Documentation (JSDoc done, README and docs site still needed) and Future (scroll-to-playhead, seek, loop, Web Worker rendering). the TODO is getting short. that’s a weird feeling for a project that’s six days old.
the docs exist and the README isn’t “Web-Template” anymore so uh. the README has said “Web-Template: My typical web dev starter project” for the entire life of this repo. six days. dozens of commits. a full synthesizer. and the README was still introducing it as a starter template. fixed that. also wrote an entire documentation site. in one sitting. because apparently that’s how I do things now. the README 133 lines replacing the 3-line placeholder. features list, quickstart code (Node.js WAV rendering + browser streaming in like 10 lines each), API overview table with every public export, development instructions, and a Mermaid architecture diagram. the mermaid diagram is a mindmap and it renders SO PRETTY on GitHub. multicolored branches for Core DSP, Languages, Synth, Voices, and IO. each branch fans out into its components. it’s AMAZINGGGGGGGGGGG I spent way too long picking which mermaid diagram type to use and I regret nothing. the docs site ten markdown pages built with DocMD. custom Ruby theme with blue/cyan gradient accents, dark mode support, semantic search via HuggingFace transformers, and a proper navigation structure: getting started : quickstart (5-step guide with code), installation (npm/CDN/source), core concepts (source-filter model explanation with a Mermaid flowchart showing glottal source -> formant cascade -> output) guide : architecture (module layout, data flow diagram, design decisions), renderer (6-step pipeline walkthrough from lyric to audio), languages (built-in language docs + how to register custom languages + cross-language aliasing) API reference : full export table, DSP primitives with code examples, VoiceConfig reference (264 lines of parameter documentation with perceptual effect tables for every single field. “openQuotient 0.3 = pressed tense voice, 0.5 = neutral modal voice, 0.7 = breathy soft voice.” that kind of detail.), import/export format support table the VoiceConfig page alone is probably the most thorough documentation of a formant synthesizer’s parameter space I’ve ever seen in a JS library. I might be biased. I’ve not seen many others. We don’t talk about that. also added UST and TSSLN to the export format list (they were import-only before). fixed the export function to handle generators that return arrays instead of single Uint8Arrays. CI workflows now build and audit the docs workspace too. the TODO is almost empty. just “README: quickstart, API overview, architecture diagram” which is now done. the project has: a synthesizer, three languages, 14+ import formats, 14+ export formats, a demo app with a piano roll, voice presets, undo/redo, settings, file import/export, WAV export, tempo control, buffer management, 160+ tests, JSDoc on everything, a full documentation site, and CI that’s green. six days :O
v0.1.0 Well Stardance told me this: Warning You have 1h 14m logged that you haven't posted a devlog for. If you ship without posting a devlog, this time will be lost! IDK why, but i was planning to devlog my silly anyways so: five commits. all tagged v0.1.0. all fixing things that should have been done before I said “the project is ready.” the classic “wait I forgot” sequence. “Oops” - CI was trying to build docs without running npm ci first. added the install step. three words of actual code change. (this was wrong) “Huh. where did that come from.” - the pages deploy was creating a docs/ directory but the docs copy was still commented out. the demo was deploying fine but docs were going nowhere. fixed the mkdir. “Oooops guess who forgot to uncomment some code” - uncommented the actual docs copy in static.yml. also fixed the docs URL from nisoku.org (wrong domain) to nellowtcs.me/UTAU.js/docs. details. “You never saw that coming did you /sarc” - added all the npm publish metadata to package.json. license, author, repository, homepage, bugs URL, and keywords. the keywords are: utau, synthesis, singing, voice, speech, audio, dsp, lf-glottal, source-filter, formant. so if you npm search for any of those things, maybe you’ll find this. someday. (NPM release failed lol, that’s why I did this) “Badges hehe” - npm version badge, CI status badge, MIT license badge at the top of the README. because a project isn’t real until it has badges. everyone knows that. (/j) five commits to go from “done” to actually done. four of them are CI fixes. like i just said, this is software development. CI is green. docs are deployed. npm metadata is set. badges are shiny. v0.1.0 is tagged. so. that’s UTAU.js. six days. from “idk my voice tho” in an Obsidian doc to a parametric singing synthesizer with three languages, 14+ import/export formats, a Svelte demo app, a docs site, 160+ tests, and a v0.1.0 tag. it sounds mid. like, genuinely. the vowels are recognizable but the consonants are strange and the whole thing has this uncanny valley quality where you can tell it’s trying to be a voice but isn’t quite there. it’s really adorable when it tries :3 but it makes sound. from math. in a browser. and that’s the whole point of v0.1.0. it doesn’t have to be good. it has to exist. it exists now. :)
Ships:
I built UTAU.js, a fully synthetic singing voice engine that runs in the browser using pure DSP instead of samples or AI. It supports English, Japanese, and Mandarin, and it can import almost every major vocal synth format through a unified score system. The demo includes a piano roll editor, real-time streaming playback, voice presets, and a full set of controls for shaping the glottal source and formant model. I am proud of the coarticulation system, the pitch bend renderer, and the fact that the entire engine sings from math alone. You can try the demo, draw notes, type lyrics, and hear it perform immediately!!!!!!!!!!...
|
1793134055.6142983
|
1793220455.6142983
|
|
17842
|
ResearchBase by @nihal_krishna_p | Stardance
|
nihal_krishna_p
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T23:21:26Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Problem Being Solved: Researchers and students waste hours manually searching through multiple PDF papers to find specific information, cross-reference concepts, and synthesize knowledge across documents. Quality-of-Life Improvements: Instant Multi-Document Search - Upload multiple research papers and ask questions in natural language to get instant answers instead of manually reading through hundreds of pages. Semantic Understanding - RAG pipeline with vector embeddings understands context and meaning, not just keywords, finding relevant information even when different terminology is used. Chat-Based Interface - Simple conversation-style interaction eliminates the need to learn complex search syntax or navigate through document hierarchies. Local Desktop App - Works offline with your documents staying private on your machine, no cloud uploads required for sensitive research. Automatic Document Processing - Drag-and-drop PDFs and the app automatically extracts text, chunks intelligently, generates embeddings, and indexes everything for instant retrieval. Technology Stack: Electron + React + TypeScript for cross-platform desktop app RAG (Retrieval-Augmented Generation) pipeline with HuggingFace embeddings Vector similarity search with cosine similarity LLM integration for natural language answer", "repo": "https://github.com/searifxr/ResearchBase", "demo": "https://searifxr.github.io/ResearchBase/"}]...
|
[{"post_id": 21826, "ts": "202 [{"post_id": 21826, "ts": "2026-07-03T23:19:24Z", "hours": 0.6825, "text": "I finally finished Link: https://searifxr.github.io/ResearchBase/"}, {"post_id": 14642, "ts": "2026-06-23T20:31:47Z", "hours": 0.4942, "text": "Learn along with me everyone! I am almost done with the RAG pipeline for ResearchBase. For ResearchBase to use the AI model, I needed the LLM to be hosted in the cloud as my GPU can’t handle ts shi😭. But also I learnt really how a RAG pipeline is built and what are all the processes behind it. This is truly project based learning at its peak. For those who don’t know what a RAG pipeline is A RAG pipeline is an alternative method some applications use to have AI responses. Usually, if you use hugging face, transformers and models are installed locally in the CPU. But if you start using it, it will fry your GPU if it’s not good enough. So alternatively, most applications use a RAG pipeline with an API key to access a model that runs on a server. Then with a little bit of data indexing, converting that data into vector db*, chunking the top K results, feeding those top K results into the LLM for context, and a bit of prompt engineering, you get a fully fledged response from the AI. Now you are caught up with me! The more you know. *Vector DB: A vector database is a specialized database that stores and indexes data as high-dimensional vectors (arrays of numbers). Instead of using exact keyword matches, it allows AI applications to search for information based on semantic meaning, context, and similarity. Check out more info on RAG pipelines from Nvidia"}, {"post_id": 14200, "ts": "2026-06-23T06:06:44Z", "hours": 0.3583, "text": "Folk ========================================== It worked.. after AI generated a test file and fixed my dotenv issue 😭"}, {"post_id": 14185, "ts": "2026-06-23T05:36:01Z", "hours": 1.8361, "text": "I have been working on this RAG pipeline for so long. Just wanted to experience how a normal dev was in the BC era (before chat 😭 😭 ). I don’t know why the post is saying that I only have a 1h 50m logged even though on hacktime it says 2h 26m, but I am more than ready to ship this and just get started on another project omg.. I geniunely don’t know if this would run, I haven’t been vibecoding for the past 30 mins, js only using stackoverflow. This is prolly not going to work but if this does, I am the literal goat. Follow me for more posts about my sanity 😭 Good Night Everyone!"}, {"post_id": 13979, "ts": "2026-06-22T22:58:03Z", "hours": 0.6017, "text": "I am trying to get a research internship at universities, but I am not smart enough to understand the research papers over topics like biology and CS 😭 😭 😭 The main psychology behind landing a research internship from cold emailing a professor is to mention their work. Boost their pride by showing you know and have read their work. But the hardest part is just that… I can’t understand the weird math symbols nor some of the concepts 😭 That’s why I am creating ResearchBase, an application that uses a RAG pipeline + highly specific prompt engineering so that you don’t have to go to Gemini or Chat and have multiple attempts in trying to get the answer you want. UPDATES=========================== Created an Electron JS application Have an upload feature that only takes in PDFs Follow along for more updates!"}]...
|
Title: ResearchBase by @nihal_krishna_p | Stardanc Title: ResearchBase by @nihal_krishna_p | Stardance
Devlogs:
I am trying to get a research internship at universities, but I am not smart enough to understand the research papers over topics like biology and CS 😭 😭 😭 The main psychology behind landing a research internship from cold emailing a professor is to mention their work. Boost their pride by showing you know and have read their work. But the hardest part is just that… I can’t understand the weird math symbols nor some of the concepts 😭 That’s why I am creating ResearchBase, an application that uses a RAG pipeline + highly specific prompt engineering so that you don’t have to go to Gemini or Chat and have multiple attempts in trying to get the answer you want. UPDATES=========================== Created an Electron JS application Have an upload feature that only takes in PDFs Follow along for more updates!
I have been working on this RAG pipeline for so long. Just wanted to experience how a normal dev was in the BC era (before chat 😭 😭 ). I don’t know why the post is saying that I only have a 1h 50m logged even though on hacktime it says 2h 26m, but I am more than ready to ship this and just get started on another project omg.. I geniunely don’t know if this would run, I haven’t been vibecoding for the past 30 mins, js only using stackoverflow. This is prolly not going to work but if this does, I am the literal goat. Follow me for more posts about my sanity 😭 Good Night Everyone!
Folk ========================================== It worked.. after AI generated a test file and fixed my dotenv issue 😭
Learn along with me everyone! I am almost done with the RAG pipeline for ResearchBase. For ResearchBase to use the AI model, I needed the LLM to be hosted in the cloud as my GPU can’t handle ts shi😭. But also I learnt really how a RAG pipeline is built and what are all the processes behind it. This is truly project based learning at its peak. For those who don’t know what a RAG pipeline is A RAG pipeline is an alternative method some applications use to have AI responses. Usually, if you use hugging face, transformers and models are installed locally in the CPU. But if you start using it, it will fry your GPU if it’s not good enough. So alternatively, most applications use a RAG pipeline with an API key to access a model that runs on a server. Then with a little bit of data indexing, converting that data into vector db*, chunking the top K results, feeding those top K results into the LLM for context, and a bit of prompt engineering, you get a fully fledged response from the AI. Now you are caught up with me! The more you know. *Vector DB: A vector database is a specialized database that stores and indexes data as high-dimensional vectors (arrays of numbers). Instead of using exact keyword matches, it allows AI applications to search for information based on semantic meaning, context, and similarity. Check out more info on RAG pipelines from Nvidia
I finally finished Link: https://searifxr.github.io/ResearchBase/
Ships:
Problem Being Solved: Researchers and students waste hours manually searching through multiple PDF papers to find specific information, cross-reference concepts, and synthesize knowledge across documents. Quality-of-Life Improvements: Instant Multi-Document Search - Upload multiple research papers and ask questions in natural language to get instant answers instead of manually reading through hundreds of pages. Semantic Understanding - RAG pipeline with vector embeddings understands context and meaning, not just keywords, finding relevant information even when different terminology is used. Chat-Based Interface - Simple conversation-style interaction eliminates the need to learn complex search syntax or navigate through document hierarchies. Local Desktop App - Works offline with your documents staying private on your machine, no cloud uploads required for sensitive research. Automatic Document Processing - Drag-and-drop PDFs and the app automatically extracts text, chunks intelligently, generates embeddings, and indexes everything for instant retrieval. Technology Stack: Electron + React + TypeScript for cross-platform desktop app RAG (Retrieval-Augmented Generation) pipeline with HuggingFace embeddings Vector similarity search with cosine similarity LLM integration for natural language answer...
|
1793285255.0759833
|
1793371655.0759833
|
|
17882
|
0xKit by @ghita | Stardance
|
ghita
|
1
|
3.0
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T20:48:57Z", "hours": 3.0, "multiplier": 13.37, "payout": 42, "blessing": "neutral", "text": "0xKit | an offline CTF field kit that runs entirely in your browser What I made 0xKit is a toolkit for Capture The Flag: recon, classical and modern crypto, encodings, and file forensics, all in one page, all client-side. It started life as DevBox, a drawer of generic dev converters, and I reprofiled the whole thing around one user, a CTF player, instead of bolting more tools onto a pile. The centerpiece is a chainable pipeline. Instead of one tool per page, you stack operations into a recipe and each step feeds the next: From Base64, then From Hex, then XOR. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. And there’s a Magic button: paste a blob you don’t understand, and it tries a pile of decodes, scores each result on how much it looks like real data, and hands you the ranked chains to click into. Around that sit a Cipher Solver, an XOR brute-forcer, a File Inspector, a Hash Identifier, and the usual recon suspects (JWT, regex, diff, timestamp). What was challenging Writing by hand the things you’d normally just install. MD5, SHA-1 and SHA-256 from scratch, with all the 32-bit integer and padding fiddliness. A base58 codec that shipped with a sneaky all-zeros bug a test caught. The Magic detector was the hardest part conceptually: scoring “does this look like real data” using printable ratio, entropy, dictionary words, file magic bytes and flag markers, then recursing through candidate decodes without blowing up. Keeping the whole thing byte-accurate end to end so binary data never gets corrupted mid-pipeline took real care. What I’m proud of That it has a point of view now. It’s for someone, instead of being odds and ends. It runs with zero runtime dependencies, no UI library, no router, no crypto packages, just React, Vite and plain CSS, and it’s all backed by a real test suite (68 tests). I committed to the bet hard enough to delete the old generic tools, rebuild the look as a clean monochrome shell with hand-drawn line icons, and ship it as an installable, fully offline PWA. Nothing you paste ever leaves your machine, which for competition data actually matters. How to test it Open the Pipeline tool, paste SGVsbG8gMHhLaXQ=, click Magic, and watch it suggest From Base64 and decode to “Hello 0xKit”. Click the suggestion to load it. Try XOR Brute-Force: set format to hex, paste 2e2225236d3a3631386f6738273f, and the top candidate reveals flag{xor_me} with its key. Cipher Solver brute-forces all 26 Caesar shifts at once; the default text decodes at ROT23. Drop any PNG, PDF or ZIP into File Inspector to see magic-byte detection, a hex dump and extracted strings, all without uploading the file. Paste an MD5 into Hash Identifier to see it guess the algorithm from the digest’s shape. Hit Ctrl+K to jump between tools. Install it as an app and turn off your wifi: it still works.", "repo": "https://github.com/AndreiRazvanGhita/0xKit", "demo": "https://andreirazvanghita.github.io/0xKit/"}]...
|
[{"post_id": 9501, "ts": "2026 [{"post_id": 9501, "ts": "2026-06-15T21:05:15Z", "hours": 1.5628, "text": "Devlog 3 - DevBox becomes 0xKit Big pivot. DevBox is turning into 0xKit, a toolkit for CTF recon, crypto and forensics. Same offline browser app, sharper focus. The honest reason: DevBox worked, but it was a pile of converters you could find in ten other places. No reason to reach for it. So instead of bolting on more generic tools, I pointed the whole thing at one user, a CTF player, and built the harder tools that crowd actually needs. What sold me on the pivot was realising DevBox’s “nice to have” is a real selling point here. Everything runs in your browser and never leaves your machine. For a dev formatting JSON, who cares. For someone poking at competition data they shouldn’t paste into a random website, that matters. The centerpiece is a pipeline. Instead of one tool per page, you stack operations and each feeds the next: From Base64, then From Hex, then XOR. It’s the CyberChef idea, rebuilt small and dependency-free. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. Building it meant writing things by hand you’d normally install: MD5, SHA-1, a base58 codec with a sneaky all-zeros bug a test caught. So was it worth it? Yes. 0xKit has a point of view now, it’s for someone instead of being a drawer of odds and ends. And it forced real work: a composable engine, hand-rolled crypto, a pile of tests. I even cut JSON, color and cron to commit to the bet. Felt scary, then immediately right. Next up: the Magic button, which guesses the decode chain for a blob you don’t understand, then the crypto and forensics tools, and getting 0xKit live."}, {"post_id": 8338, "ts": "2026-06-13T21:09:06Z", "hours": 0.58, "text": "Devlog 2 - Four more tools and search DevBox grew up a bit this round. It went from three tools to seven, and the sidebar finally got a search box. The new ones: Regex tester, Timestamp converter, Color converter, and Text Case. The Regex one is my favorite - it highlights matches live as you type and counts them, with the g/i/m flags as little checkboxes. Timestamp figures out on its own whether you handed it seconds or milliseconds. Color swaps between HEX, RGB and HSL and shows a swatch. Text Case turns whatever you type into camelCase, snake_case, kebab-case and the rest. Now that the list was getting longer, I added a search box up top - just start typing to filter, or hit Ctrl+K to jump straight to it. The fiddly bits were the small edge cases. Regex with something like \\d* used to duplicate the text in the preview, and the case converter choked on acronyms like parseHTTPRequest. Both fixed now. Boring stuff, but it’s the difference between a toy and something you actually trust. Next up: a hash generator, and making the whole thing work offline as an installable app."}, {"post_id": 8270, "ts": "2026-06-13T19:19:48Z", "hours": 1.0867, "text": "Devlog 1 - Getting started My first devlog! DevBox just went from an empty folder to something I can actually use, with three working tools. The idea: one page with all the little tools devs keep googling - JSON, Base64, URL encoding - running right in your browser. No submit buttons, works offline, nothing you type ever leaves your machine. I started with the shell, so adding a tool is dead easy: one folder plus one line in a config file gets it into the sidebar, routing, and search. Then the first three tools - JSON Formatter, Base64, and URL, the last two auto-detecting whether to encode or decode. The tricky part was that auto-detect: it only treats input as Base64 if it survives a clean round-trip, otherwise plain text turns to garbage. Next up: four more tools (Regex, Timestamp, Color, Text Case)."}]...
|
Title: 0xKit by @ghita | Stardance
Devlogs:
Devlo Title: 0xKit by @ghita | Stardance
Devlogs:
Devlog 1 - Getting started My first devlog! DevBox just went from an empty folder to something I can actually use, with three working tools. The idea: one page with all the little tools devs keep googling - JSON, Base64, URL encoding - running right in your browser. No submit buttons, works offline, nothing you type ever leaves your machine. I started with the shell, so adding a tool is dead easy: one folder plus one line in a config file gets it into the sidebar, routing, and search. Then the first three tools - JSON Formatter, Base64, and URL, the last two auto-detecting whether to encode or decode. The tricky part was that auto-detect: it only treats input as Base64 if it survives a clean round-trip, otherwise plain text turns to garbage. Next up: four more tools (Regex, Timestamp, Color, Text Case).
Devlog 2 - Four more tools and search DevBox grew up a bit this round. It went from three tools to seven, and the sidebar finally got a search box. The new ones: Regex tester, Timestamp converter, Color converter, and Text Case. The Regex one is my favorite - it highlights matches live as you type and counts them, with the g/i/m flags as little checkboxes. Timestamp figures out on its own whether you handed it seconds or milliseconds. Color swaps between HEX, RGB and HSL and shows a swatch. Text Case turns whatever you type into camelCase, snake_case, kebab-case and the rest. Now that the list was getting longer, I added a search box up top - just start typing to filter, or hit Ctrl+K to jump straight to it. The fiddly bits were the small edge cases. Regex with something like \d* used to duplicate the text in the preview, and the case converter choked on acronyms like parseHTTPRequest. Both fixed now. Boring stuff, but it’s the difference between a toy and something you actually trust. Next up: a hash generator, and making the whole thing work offline as an installable app.
Devlog 3 - DevBox becomes 0xKit Big pivot. DevBox is turning into 0xKit, a toolkit for CTF recon, crypto and forensics. Same offline browser app, sharper focus. The honest reason: DevBox worked, but it was a pile of converters you could find in ten other places. No reason to reach for it. So instead of bolting on more generic tools, I pointed the whole thing at one user, a CTF player, and built the harder tools that crowd actually needs. What sold me on the pivot was realising DevBox’s “nice to have” is a real selling point here. Everything runs in your browser and never leaves your machine. For a dev formatting JSON, who cares. For someone poking at competition data they shouldn’t paste into a random website, that matters. The centerpiece is a pipeline. Instead of one tool per page, you stack operations and each feeds the next: From Base64, then From Hex, then XOR. It’s the CyberChef idea, rebuilt small and dependency-free. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. Building it meant writing things by hand you’d normally install: MD5, SHA-1, a base58 codec with a sneaky all-zeros bug a test caught. So was it worth it? Yes. 0xKit has a point of view now, it’s for someone instead of being a drawer of odds and ends. And it forced real work: a composable engine, hand-rolled crypto, a pile of tests. I even cut JSON, color and cron to commit to the bet. Felt scary, then immediately right. Next up: the Magic button, which guesses the decode chain for a blob you don’t understand, then the crypto and forensics tools, and getting 0xKit live.
Ships:
0xKit | an offline CTF field kit that runs entirely in your browser What I made 0xKit is a toolkit for Capture The Flag: recon, classical and modern crypto, encodings, and file forensics, all in one page, all client-side. It started life as DevBox, a drawer of generic dev converters, and I reprofiled the whole thing around one user, a CTF player, instead of bolting more tools onto a pile. The centerpiece is a chainable pipeline. Instead of one tool per page, you stack operations into a recipe and each step feeds the next: From Base64, then From Hex, then XOR. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. And there’s a Magic button: paste a blob you don’t understand, and it tries a pile of decodes, scores each result on how much it looks like real data, and hands you the ranked chains to click into. Around that sit a Cipher Solver, an XOR brute-forcer, a File Inspector, a Hash Identifier, and the usual recon suspects (JWT, regex, diff, timestamp). What was challenging Writing by hand the things you’d normally just install. MD5, SHA-1 and SHA-256 from scratch, with all the 32-bit integer and padding fiddliness. A base58 codec that shipped with a sneaky all-zeros bug a test caught. The Magic detector was the hardest part conceptually: scoring “does this look like real data” using printable ratio, entropy, dictionary words, file magic bytes and flag markers, then recursing through candidate decodes without blowing up. Keeping the whole thing byte-accurate end to end so binary data never gets corrupted mid-pipeline took real care. What I’m proud of That it has a point of view now. It’s for someone, instead of being odds and ends. It runs with zero runtime dependencies, no UI library, no router, no crypto packages, just React, Vite and plain CSS, and it’s all backed by a real test suite (68 tests). I committed to the bet hard enough to delete the old generic tools, rebuild the look as a clean monochrome shell with hand-drawn line icons, and ship it as an installable, fully offline PWA. Nothing you paste ever leaves your machine, which for competition data actually matters. How to test it Open the Pipeline tool, paste SGVsbG8gMHhLaXQ=, click Magic, and watch it suggest From Base64 and decode to “Hello 0xKit”. Click the suggestion to load it. Try XOR Brute-Force: set format to hex, paste 2e2225236d3a3631386f6738273f, and the top candidate reveals flag{xor_me} with its key. Cipher Solver brute-forces all 26 Caesar shifts at once; the default text decodes at ROT23. Drop any PNG, PDF or ZIP into File Inspector to see magic-byte detection, a hex dump and extracted strings, all without uploading the file. Paste an MD5 into Hash Identifier to see it guess the algorithm from the digest’s shape. Hit Ctrl+K to jump between tools. Install it as an app and turn off your wifi: it still works....
|
1793119923.1404097
|
1793206323.1404097
|
|
17883
|
Utils by @denis | Stardance
|
denis
|
1
|
43.01
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T13:51:25Z", "hours": 35.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Shipping! After a lot of work on these, I want to ship: The bash scripts from the utils repo : db_manager - Simple PostgreSQL database manager. ue5_asset_downloader - Faster way to download and share UE5 asset files via Google Drive. lazyass - Lightweight app launcher script. proxyfix - Simplified configuration file management for proxychains. dchfc tool - Displays children files’ content ( Releases ). So now I will fully focus on astmn , as I’ll need it for my next projects.", "repo": "https://github.com/denis1836/utils", "demo": "https://github.com/denis1836/utils/releases/tag/collection-v1"}]...
|
[{"post_id": 67529, "ts": "202 [{"post_id": 67529, "ts": "2026-09-13T17:27:19Z", "hours": 4.5181, "text": "Utils - fixes and some updates A lot of bugs showed up in testing, so fixed them. I also tested my utils on several minimal Linux distributions to ensure they work with less dependencies. Check out the releases . For the UE5 asset downloader script, I added a testing file to demonstrate its work. Additionally, there have been some updates to astmn , including new commands (view, pack, and update) as well as upcoming features. You can check it out here ."}, {"post_id": 58786, "ts": "2026-08-31T11:12:54Z", "hours": 3.4875, "text": "Utils - releases and docs Made a lot of docs, fixes and releases in order to re-ship the project. Hope this time judges will like it. If you want to check them out check out, see releases , or a doc I made with references and descriptions to all the things I mention in my devlogs."}, {"post_id": 56443, "ts": "2026-08-28T06:37:05Z", "hours": 10.3883, "text": "lazyass Have you ever been too lazy to manually launch the same bunch of apps every day? Me too. So I built a minimal CLI tool that turns a 20-second job into a 3-second job. Check out the repo ."}, {"post_id": 51601, "ts": "2026-08-21T11:25:40Z", "hours": 8.6014, "text": "astmn In my previous devlog about the UE5 bash script, I mentioned the better version of this tool this time built with Golang. The idea of the tool is to make sharing large binary files (like 3D models) easier and to escape the “_v2_FINAL_UPDATE_SUPERFINAL” hell by using SemVer and Git to track manifest files. It’s especially useful for game dev because you don’t have to clog your repo with assets or pay for Git LFS. For now it only works for .zip files and Google Drive, but in the near future I am going to add many more features making it as easy to use as possible. I have no idea what to show yet, so I attach some screenshots of it working and an example manifest file for FreeCAD, I dunno."}, {"post_id": 45729, "ts": "2026-08-12T12:33:26Z", "hours": 5.3386, "text": "Asset Downloader/Manager When my friends and I were trying to make a game in Unreal Engine 5 we had a problem with version control (which is easily resolved by a good gitignore file) and asset sharing. Because actor and map files can grow rapidly I had an idea to use some kind of a cloud, the easiest thing I thought of was using Google Drive (mostly because of its free 15GB limit). As my friends worked on Windows and only had access to MSYS2, Git Bash, Cygwin and WSL I decided to do it in Bash using JSON files as the “registries”. The asset registry files were located in the repo and tracked by Git while the asset files were downloaded locally. Also you can add pre-commit hooks so there is a check if you have all the assets downloaded. After a few tweaks and fixes, it wasn’t too shabby. In fact the script did its job quite well. If you are interested in the code, you can find it here . I may add some small updates to it, but nothing special. The main limitation was that Bash is a scripting language and it has its own tweaks. And I wanted more functionality. So, I decided to rebuild the idea with a better architecture using Golang and YAML. Right now, I don’t have the funds or a way to host a server, so it’ll use regular archives for now. In the future, I want to use hashing for optimization (similar to how Git works). It’s still in early development, but you can find the repo here ."}, {"post_id": 41290, "ts": "2026-08-05T12:47:48Z", "hours": 3.3328, "text": "D.Ch.F.C. The abbreviation stands for Display Children Files Content . The purpose of this command is self-explanatory. It’s quite handy when, for example, you have a lot of files and an AI needs context to help you find a bug in your code. Originally, this was meant to be part of my utils repo, but as its functionality grew, I moved it to a dedicated repo especially since I plan to package and submit it to Linux distro’s mirrors."}, {"post_id": 40005, "ts": "2026-08-03T11:01:52Z", "hours": 7.755, "text": "utils/db_manager In my other projects i often have to deal with PostgresSQL databases, and I was annoyed with using psql or systemd to do basic stuff like managing the postgres daemon or running the set-up queries myself. So I made this. Feel free to add fork it to your project (see instalation ) for better db management. If you encounter any bugs/issues or want to request a feature, please create an issue on GitHub so it can be fixed."}]...
|
Title: Utils by @denis | Stardance
Devlogs:
utils Title: Utils by @denis | Stardance
Devlogs:
utils/db_manager In my other projects i often have to deal with PostgresSQL databases, and I was annoyed with using psql or systemd to do basic stuff like managing the postgres daemon or running the set-up queries myself. So I made this. Feel free to add fork it to your project (see instalation ) for better db management. If you encounter any bugs/issues or want to request a feature, please create an issue on GitHub so it can be fixed.
D.Ch.F.C. The abbreviation stands for Display Children Files Content . The purpose of this command is self-explanatory. It’s quite handy when, for example, you have a lot of files and an AI needs context to help you find a bug in your code. Originally, this was meant to be part of my utils repo, but as its functionality grew, I moved it to a dedicated repo especially since I plan to package and submit it to Linux distro’s mirrors.
Asset Downloader/Manager When my friends and I were trying to make a game in Unreal Engine 5 we had a problem with version control (which is easily resolved by a good gitignore file) and asset sharing. Because actor and map files can grow rapidly I had an idea to use some kind of a cloud, the easiest thing I thought of was using Google Drive (mostly because of its free 15GB limit). As my friends worked on Windows and only had access to MSYS2, Git Bash, Cygwin and WSL I decided to do it in Bash using JSON files as the “registries”. The asset registry files were located in the repo and tracked by Git while the asset files were downloaded locally. Also you can add pre-commit hooks so there is a check if you have all the assets downloaded. After a few tweaks and fixes, it wasn’t too shabby. In fact the script did its job quite well. If you are interested in the code, you can find it here . I may add some small updates to it, but nothing special. The main limitation was that Bash is a scripting language and it has its own tweaks. And I wanted more functionality. So, I decided to rebuild the idea with a better architecture using Golang and YAML. Right now, I don’t have the funds or a way to host a server, so it’ll use regular archives for now. In the future, I want to use hashing for optimization (similar to how Git works). It’s still in early development, but you can find the repo here .
astmn In my previous devlog about the UE5 bash script, I mentioned the better version of this tool this time built with Golang. The idea of the tool is to make sharing large binary files (like 3D models) easier and to escape the “_v2_FINAL_UPDATE_SUPERFINAL” hell by using SemVer and Git to track manifest files. It’s especially useful for game dev because you don’t have to clog your repo with assets or pay for Git LFS. For now it only works for .zip files and Google Drive, but in the near future I am going to add many more features making it as easy to use as possible. I have no idea what to show yet, so I attach some screenshots of it working and an example manifest file for FreeCAD, I dunno.
lazyass Have you ever been too lazy to manually launch the same bunch of apps every day? Me too. So I built a minimal CLI tool that turns a 20-second job into a 3-second job. Check out the repo .
Utils - releases and docs Made a lot of docs, fixes and releases in order to re-ship the project. Hope this time judges will like it. If you want to check them out check out, see releases , or a doc I made with references and descriptions to all the things I mention in my devlogs.
Utils - fixes and some updates A lot of bugs showed up in testing, so fixed them. I also tested my utils on several minimal Linux distributions to ensure they work with less dependencies. Check out the releases . For the UE5 asset downloader script, I added a testing file to demonstrate its work. Additionally, there have been some updates to astmn , including new commands (view, pack, and update) as well as upcoming features. You can check it out here .
Ships:
Shipping! After a lot of work on these, I want to ship: The bash scripts from the utils repo : db_manager - Simple PostgreSQL database manager. ue5_asset_downloader - Faster way to download and share UE5 asset files via Google Drive. lazyass - Lightweight app launcher script. proxyfix - Simplified configuration file management for proxychains. dchfc tool - Displays children files’ content ( Releases ). So now I will fully focus on astmn , as I’ll need it for my next projects....
|
1793288888.5127974
|
1793375288.5127974
|
|
17884
|
Aether by @Kvin | Stardance
|
Kvin
|
1
|
59.0
|
759
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T15:34:14Z", "hours": 59.0, "multiplier": 19.2, "payout": 759, "blessing": "neutral", "text": "Aether - an infinite universe, grown from a single word. Type a word and Aether builds you a whole universe: a galaxy of stars to fly through, systems to dive into, and worlds to land on and scan. Pick any planet and it turns under its own sunlight, with clouds that drift across it and shadow the ground, light glinting off its oceans, rings that throw a shadow over the globe and moons that slip behind it. Here is the strange part. There are no assets. Not one image, model or sound file anywhere in it. Every star, every world, every name, every line of lore, and even the music and the rush of each warp, are generated live from maths, from your word. It is plain HTML and a 2D canvas, no game engine and nothing to download, so it runs at 60fps in the browser, phones included. Share a link and whoever opens it lands on your exact world, in your exact universe. Try violet-tide-77 for a lava world glowing on its night side, bin-3 for a system with two suns, or just type your own name and see the one that only you have!", "repo": "https://github.com/Kvin-21/Aether", "demo": "https://kvin-21.github.io/Aether/"}]...
|
[{"post_id": 10687, "ts": "202 [{"post_id": 10687, "ts": "2026-06-17T15:29:57Z", "hours": 22.9639, "text": "Open it now and a whole galaxy drifts quietly behind the title, waiting for you. Tap the small speaker in the corner. The universe starts to sing. A slow score drifts and resolves beneath you as you fly, and every jump between stars carries its own sound. I’ve fixed the auido. There is not a single sound file in the whole project. The music, and the whoosh of each warp, are built live from oscillators and a little maths, exactly the way the stars and worlds are. Nothing here is downloaded. It is all conjured from your word. I spent this last stretch trying to break it. Zoom out as far as you like and it stays smooth. Click like a maniac and nothing trips. Y So that is the whole thing: a universe from a single word, that you can fly through, land on, scan, listen to, and hand to someone else with a link!"}, {"post_id": 9296, "ts": "2026-06-15T16:44:58Z", "hours": 14.8908, "text": "It’s live! Where there used to be a black loading screen, a whole galaxy now drifts quietly behind the title, waiting for you at https://kvin-21.github.io/Aether ! Type a word, warp in, and everything glows. Bright stars bloom and bleed light into the dark around them. Same as the first day: none of it is downloaded. Still flat 2D, still pure maths, still conjured from your word. It has just put its make-up on. This is the part where it stops being a build and starts being a place. It holds together now/ I spent this last stage trying to break it, then fixing whatever broke. Strange seeds, empty ones, ones in other alphabets, ones two hundred characters long, all land somewhere real. Zoom as far out as you like and it stays smooth. Click like a maniac and nothing trips. Your browser’s back and forward buttons move through the universe with you now. And a share link, opened cold by a stranger, rebuilds your exact world on your exact planet, every single time. So that is the whole thing: a universe from a single word, that you can fly through, land on, scan, listen to, and hand to someone else with a link. Try violet-tide-77 and watch a lava world glow on its night side. Try bin-3 for a system with two suns sharing one centre. Then type your own name, and go and see the universe that only you have. But ofcourse, there are still some bugs with the sound :("}, {"post_id": 8496, "ts": "2026-06-14T03:56:37Z", "hours": 9.5142, "text": "Now it casts shadows Look closely at the planet. That bright spot on the ocean is the sun, reflecting off the water exactly where it should, and it vanishes the instant a cloud drifts over it. Those clouds sit above the surface and throw soft shadows onto the ground below. The rings lay their own shadow across the globe. Now the surprising part, the same one as last time: none of this is 3D. There is still no GPU, no model, no texture, not one downloaded file. It is all flat 2D and pure maths, conjured from your word. It has simply learnt to pretend it has depth, and it pretends well enough that your eye stops asking. Drop onto a planet now and it is actually alive with detail. Clouds drift a touch faster than the ground turning beneath them, and they shade what passes under them. Moons now circle on their own lit paths, slipping in front of the planet and then behind it. Lava worlds, ice worlds, deserts, oceans, green terran worlds, each one scanned and flagged for whether anything could live there. The lore has grown a memory too: it reads the world’s gravity, its heat, its moons, have a different story for each. Systems are stranger than before. Some stars have a companion, two suns sharing one centre, each with its own corona. Belts of asteroids hide in the gaps between orbits. Clicking a star now is no longer a cut. The camera dives, flying you down into the star before its system opens around, and flying you back out when you leave. There is a jump-to-seed box in the corner if you want to leap straight to a particular universe, with your seed, coordinates and zoom always on show!"}, {"post_id": 7938, "ts": "2026-06-13T07:45:20Z", "hours": 11.7253, "text": "What if you could create a universe from your favourite words? What loads is a universe. Your universe. A galaxy of stars nobody has ever flown through, scattered over nebulae nobody has ever seen, because none of it existed until the moment you pressed Enter. Type a different word and the old one is gone, replaced by another entire cosmos waiting to be explored. That is Aether. And here is the part that’s surprising: there are no images in it. None. Not a single texture, model, photo or downloaded file. Every star, every ringed gas giant, every drifting smear of colour is pure maths, generated live from your word. The whole thing is light enough to run on your phone, because there is nothing to load. It is all conjured on the spot. This is the first build, and you can already travel. You start above a galaxy map, an endless field of stars you can drag and zoom through, drifting over layered clouds of gas. Each star is coloured by its real stellar class, from hot blue-white giants down to dim red dwarfs, and each carries a name. Hover one and it tells you what it is called. Pick one and you warp in, starlines streaking past. Inside a system, planets swing around their star on live orbits, rocky worlds and banded gas giants, some having rings. Choose one and you fall towards it. It turns slowly under its own sunlight, wrapped in a thin halo of atmosphere, its rings passing in front and behind. A scan panel reads out the world: radius, gravity, surface temperature, atmosphere, the length of its day, its moons, and a line or two of lore about the place. Then you can leave, and the whole universe is still sitting exactly where you left it. Every world has an address. Hit share and you get a link holding the seed and your exact position, down to the planet you were staring at. Send it and the other person opens the same cosmos, in the same spot, on the same world. Try a different name, and watch a completely different universe assemble itself. Next, I am deepening every layer: richer terrain and weather on the planets, binary stars and asteroid belts, more believable names and histories."}]...
|
Title: Aether by @Kvin | Stardance
Devlogs:
What Title: Aether by @Kvin | Stardance
Devlogs:
What if you could create a universe from your favourite words? What loads is a universe. Your universe. A galaxy of stars nobody has ever flown through, scattered over nebulae nobody has ever seen, because none of it existed until the moment you pressed Enter. Type a different word and the old one is gone, replaced by another entire cosmos waiting to be explored. That is Aether. And here is the part that’s surprising: there are no images in it. None. Not a single texture, model, photo or downloaded file. Every star, every ringed gas giant, every drifting smear of colour is pure maths, generated live from your word. The whole thing is light enough to run on your phone, because there is nothing to load. It is all conjured on the spot. This is the first build, and you can already travel. You start above a galaxy map, an endless field of stars you can drag and zoom through, drifting over layered clouds of gas. Each star is coloured by its real stellar class, from hot blue-white giants down to dim red dwarfs, and each carries a name. Hover one and it tells you what it is called. Pick one and you warp in, starlines streaking past. Inside a system, planets swing around their star on live orbits, rocky worlds and banded gas giants, some having rings. Choose one and you fall towards it. It turns slowly under its own sunlight, wrapped in a thin halo of atmosphere, its rings passing in front and behind. A scan panel reads out the world: radius, gravity, surface temperature, atmosphere, the length of its day, its moons, and a line or two of lore about the place. Then you can leave, and the whole universe is still sitting exactly where you left it. Every world has an address. Hit share and you get a link holding the seed and your exact position, down to the planet you were staring at. Send it and the other person opens the same cosmos, in the same spot, on the same world. Try a different name, and watch a completely different universe assemble itself. Next, I am deepening every layer: richer terrain and weather on the planets, binary stars and asteroid belts, more believable names and histories.
Now it casts shadows Look closely at the planet. That bright spot on the ocean is the sun, reflecting off the water exactly where it should, and it vanishes the instant a cloud drifts over it. Those clouds sit above the surface and throw soft shadows onto the ground below. The rings lay their own shadow across the globe. Now the surprising part, the same one as last time: none of this is 3D. There is still no GPU, no model, no texture, not one downloaded file. It is all flat 2D and pure maths, conjured from your word. It has simply learnt to pretend it has depth, and it pretends well enough that your eye stops asking. Drop onto a planet now and it is actually alive with detail. Clouds drift a touch faster than the ground turning beneath them, and they shade what passes under them. Moons now circle on their own lit paths, slipping in front of the planet and then behind it. Lava worlds, ice worlds, deserts, oceans, green terran worlds, each one scanned and flagged for whether anything could live there. The lore has grown a memory too: it reads the world’s gravity, its heat, its moons, have a different story for each. Systems are stranger than before. Some stars have a companion, two suns sharing one centre, each with its own corona. Belts of asteroids hide in the gaps between orbits. Clicking a star now is no longer a cut. The camera dives, flying you down into the star before its system opens around, and flying you back out when you leave. There is a jump-to-seed box in the corner if you want to leap straight to a particular universe, with your seed, coordinates and zoom always on show!
It’s live! Where there used to be a black loading screen, a whole galaxy now drifts quietly behind the title, waiting for you at https://kvin-21.github.io/Aether ! Type a word, warp in, and everything glows. Bright stars bloom and bleed light into the dark around them. Same as the first day: none of it is downloaded. Still flat 2D, still pure maths, still conjured from your word. It has just put its make-up on. This is the part where it stops being a build and starts being a place. It holds together now/ I spent this last stage trying to break it, then fixing whatever broke. Strange seeds, empty ones, ones in other alphabets, ones two hundred characters long, all land somewhere real. Zoom as far out as you like and it stays smooth. Click like a maniac and nothing trips. Your browser’s back and forward buttons move through the universe with you now. And a share link, opened cold by a stranger, rebuilds your exact world on your exact planet, every single time. So that is the whole thing: a universe from a single word, that you can fly through, land on, scan, listen to, and hand to someone else with a link. Try violet-tide-77 and watch a lava world glow on its night side. Try bin-3 for a system with two suns sharing one centre. Then type your own name, and go and see the universe that only you have. But ofcourse, there are still some bugs with the sound :(
Open it now and a whole galaxy drifts quietly behind the title, waiting for you. Tap the small speaker in the corner. The universe starts to sing. A slow score drifts and resolves beneath you as you fly, and every jump between stars carries its own sound. I’ve fixed the auido. There is not a single sound file in the whole project. The music, and the whoosh of each warp, are built live from oscillators and a little maths, exactly the way the stars and worlds are. Nothing here is downloaded. It is all conjured from your word. I spent this last stretch trying to break it. Zoom out as far as you like and it stays smooth. Click like a maniac and nothing trips. Y So that is the whole thing: a universe from a single word, that you can fly through, land on, scan, listen to, and hand to someone else with a link!
Ships:
Aether - an infinite universe, grown from a single word. Type a word and Aether builds you a whole universe: a galaxy of stars to fly through, systems to dive into, and worlds to land on and scan. Pick any planet and it turns under its own sunlight, with clouds that drift across it and shadow the ground, light glinting off its oceans, rings that throw a shadow over the globe and moons that slip behind it. Here is the strange part. There are no assets. Not one image, model or sound file anywhere in it. Every star, every world, every name, every line of lore, and even the music and the rush of each warp, are generated live from maths, from your word. It is plain HTML and a 2D canvas, no game engine and nothing to download, so it runs at 60fps in the browser, phones included. Share a link and whoever opens it lands on your exact world, in your exact universe. Try violet-tide-77 for a lava world glowing on its night side, bin-3 for a system with two suns, or just type your own name and see the one that only you have!...
|
1792878521.102259
|
1793742521.102259
|
|
17887
|
ARESOS by @Ankit | Stardance
|
Ankit
|
1
|
48.13
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T15:42:03Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built ARESOS, a browser-based WebOS made with React Next.js. ARESOS includes a desktop environment, terminal, virtual filesystem, window management, themes, and ZIP archive support that all run entirely in the browser. The most challenging part was building the terminal and filesystem. Implementing command parsing, pipes, redirection, variables, aliases, archive handling, and making everything work together required a lot of testing and iteration. I’m happy with how the terminal and virtual filesystem turned out. The project evolved from a simple desktop UI into a more complete environment with file management, command execution, and archive tools. To test the project: Default Login Username: guest Password: 1462007 After logging in, open Terminal and try: help Create a file: touch notes.txt write notes.txt “Hello ARESOS” cat notes.txt Test variables: export USER=test echo $USER Test ZIP restore: touch restore.txt write restore.txt hello zip backup.zip restore.txt rm restore.txt unzip backup.zip cat restore.txt", "repo": "https://github.com/RoboticsAITechLab/ARESOS", "demo": "https://aresos-red.vercel.app/"}]...
|
[{"post_id": 26534, "ts": "202 [{"post_id": 26534, "ts": "2026-07-11T12:22:55Z", "hours": 4.2619, "text": "i rewrite some code and remove features like crt visuals and more"}, {"post_id": 23388, "ts": "2026-07-06T09:53:21Z", "hours": 8.3694, "text": "Devlog Why ARESOS Started ARESOS started as a small experiment. At first, I only wanted to understand how operating systems work and how much of that experience could be recreated inside a browser. What started as a simple idea slowly grew into a desktop environment with applications, a virtual file system, games, utilities, and a custom terminal. I was curious about how complex software systems are built and how different parts of a system work together. Building The First Version The first goal was simple: Create a desktop Open applications Switch between windows Once that worked, I started adding more features and the project became much larger than originally planned. Virtual File System One of the biggest challenges was creating the Virtual File System. I wanted users to be able to create files and folders that would remain available after refreshing the browser. Building the filesystem taught me a lot about application state, data structures, and browser storage. Games I also wanted ARESOS to include things that were fun to use. Instead of only building utilities, I created games like: Equation Racers Neon Duel Creating games without relying heavily on external assets pushed me to learn more about rendering, game loops, and browser graphics. Working With AI AI was a useful tool during development, but it was not a magic solution. Sometimes AI generated useful code. Sometimes it generated bugs. Sometimes it broke working features completely. One of the biggest lessons I learned was when to trust AI suggestions and when to stop, debug the problem myself, and understand what was actually happening. What I Learned Through ARESOS I learned about: State management Browser storage Window systems Application architecture Game development Debugging large projects Working with AI tools More importantly, I learned that building real projects teaches more than following tutorials. Current Status ARESOS is still under active development. Some parts are complete, some are experimental, and many ideas are still waiting to be built. Future My long-term goal is to push ARESOS beyond a browser experiment. Future plans include: Cloud-based services AI integration More applications Better terminal capabilities Cross-device support Expanding the ARESOS ecosystem This project started as an experiment, but it has become one of the biggest projects I have built so far."}, {"post_id": 21605, "ts": "2026-07-03T17:23:46Z", "hours": 3.5672, "text": "Devlog #10 — ARES Math Notes Evolution Today was focused on transforming ARES Math Notes from a basic drawing canvas into an AI-assisted handwritten mathematics workspace. What was completed Notebook-Style Canvas Replaced the plain dark graph-board experience with a realistic ruled notebook interface. Added horizontal writing guides and notebook margin styling. Improved visual readability for handwritten equations and diagrams. Handwriting Capture Pipeline Tested freehand input using the pen system. Verified recognition workflow using handwritten equations such as: 2 + 2 = Established the end-to-end flow: Draw → Capture → Process → Generate solution. AI Solution Breakdown Interface Added structured step-by-step solution rendering. Solutions now display: Identified equation Intermediate calculation steps Final answer output Example validation: 2 + 2 = 4 Scientific Mathematics Support Tested trigonometric expression solving. Verified AI explanation generation for: cos(60) + tan(45) System successfully produced: Known values Substitution steps Final result Drawing Tool Improvements Multiple pen colors supported. Eraser workflow tested. Stroke rendering validated on notebook canvas. Diagram Interpretation Testing Conducted experiments using simple sketches and distance-based drawings. Used hand-drawn objects and directional annotations to evaluate future visual reasoning capabilities. AI Processing State Management Implemented visible AI processing feedback. Added retry/wait state handling when AI requests are temporarily unavailable. Users now receive clear status information instead of silent failures. UI Iteration Refined toolbar layout. Improved solve-action accessibility. Continued alignment with the ARES desktop operating environment. Challenges Found Notebook line rendering requires additional theme optimization for dark mode. Handwritten recognition accuracy still depends heavily on stroke quality. Complex diagram understanding is not yet production-ready. AI rate-limit handling needs further refinement. Current Status ARES Math Notes is now functioning as an AI-assisted handwritten mathematics workspace capable of: Freehand equation input Step-by-step AI explanations Scientific expression solving Notebook-style note-taking Interactive drawing workflows"}, {"post_id": 19406, "ts": "2026-06-30T18:35:19Z", "hours": 1.0319, "text": "ARESOS WebOS Devlog - Retro Synth Upgrades & Feature ReleaseHere is the complete devlog detailing the new features, architecture, and implementations created for ARESOS WebOS.🚀 OverviewWe have transformed ARESOS into a retro-futuristic, high-fidelity experience by integrating custom system-wide visual aesthetics, building standalone retro productivity and entertainment apps, and integrating full economy-driven skins/cosmetic customizers into the core arcade games.📺 1. Retro Screen Aesthetics (CRT & Scanline Filter)A system-wide display modifier mimicking old-school cathode-ray tube (CRT) arcade monitors.Tech Stack: CSS Keyframes + Absolute Viewport Layering + Context Settings Synchronization.Features:Horizontal scanline grids, vignette corner shadowing, and contrast-boosting curves.Subtle monitor flicker animation to enhance realism.Seamless Control: Accessible via the System Settings -> Theme panel, dynamically toggling a layout-wide wrapper in the main WebOS viewport.🎵 2. Cyberpunk Synth Player (Audio Terminal App)A reactive cyberpunk media player integrated with YouTube’s iframe API and a custom local storage library.Features:Dynamic Playlist Manager: Tracks are loaded, updated, and deleted locally via localStorage. Preloaded with high-fidelity streams by Lofi Girl and HOME.Sound-Reactive Greek Math Lyrics visualizer:Translates regular alphabetical letters of active song lines to Greek mathematical symbols (e.g. a -> α, b -> β, e -> ε).Stacks symbols in vertical neon columns reacting directly to simulated frequency bands.Double text overlay displaying translated symbols alongside original English lines.Autoplay Video Monitor: Includes a corner video preview frame which bypasses browser sandbox autoplay blocks.Dual Download Pipeline: A cyberpunk holographic terminal simulating decryption and bitstream packaging, accompanied by a direct external MP3 extraction link.🎨 3. Neon Paint (Pixel Paint App)A classic 8-bit retro pixel editor with full grid operations and paint tools.Features:Adjustable Resolutions: Quick toggle between 16x16, 32x32, and 64x64 grids.Sci-Fi Colors: Neon swatches + native color picker.Toolbox: Pencil (freehand draw), Eraser, and Flood Fill bucket (using a BFS queue traversal algorithm).Export System: Transforms local matrix cells into canvas pixels and exports high-definition .png files.🛸 4. Neon Duel: Ship Cosmetics CustomizerAdding progression mechanics to the 2-player local spaceship battle game.Features:Credits Economy: Players accumulate Cyber-Credits (CR) by participating (+20 CR) or winning (+50 CR) matches.Ship Cosmetics Shop: Modal menu inside the main screen allowing users to buy and equip unique skins: Vaporwave, Matrix, Solar, and Plasma.Dynamic Engine Rendering: Equipped skins feed directly into the game engine initialization, dynamically overriding default spaceship vectors and laser beams.🏎️ 5. Equation Racers: Vehicle Garage ShopAn upgrade to the educational racing game adding vehicle personalization.Features:Coins Wallet Sync: Integrates with SaveManager and the gameplay run analytics.Livery Shop: Buy and equip retro car paint jobs: Cyber Orange, Nebula Purple, Formula Red, and Retro Green.Double-Engine Compatibility: Integrated with both the lightweight 2D Canvas renderer and the high-performance WebGL2 sprite atlas pipeline."}, {"post_id": 17623, "ts": "2026-06-28T14:32:36Z", "hours": 12.4958, "text": "Equation Racers – Major Development ProgressEquation Racers has gone through multiple redesigns and gameplay iterations during development. The project started as a simple racing concept, but after extensive testing I repeatedly adjusted the gameplay, vehicle handling, road systems, and overall game direction to create a more enjoyable experience.More than 12 hours have been invested into development so far. During that time, many files were edited repeatedly, several systems were rewritten, numerous bugs were fixed, and performance was optimized through multiple testing cycles. I also changed the game concept and gameplay mechanics several times before arriving at the current direction.Key ProgressVehicle driving systemLane-based movement mechanicsHighway rendering systemEnvironment and atmosphere improvementsGameplay balancing and testingPerformance optimizationMultiple gameplay and concept redesignsThis project represents many hours of experimentation, iteration, debugging, and refinement. The current version is significantly more advanced than the original prototype and now provides a stable, playable racing experience while establishing a foundation for future features."}, {"post_id": 11861, "ts": "2026-06-19T09:42:35Z", "hours": 3.4522, "text": "🚀 Devlog #7: Pausing Equation Realms and Starting Equation Racers“Sometimes the best decision is knowing when to pause.”Over the past few weeks, development focused on Equation Realms, a large RPG project planned as one of the flagship experiences inside ARESOS.The goal was ambitious: build a procedural RPG world powered by mathematics, equations, and exploration.A lot of progress was made.Completed work included:Procedural world generationChunk loading systemsCombat foundationsEnemy spawningLoot systemsInventory architectureEquipment systemsLandmark generationSettlement planningAsset integrationFrom a technical perspective, the project was moving forward successfully.However, after several rounds of testing and design reviews, an important issue became clear.The game had systems.The game had technology.But the core mathematical gameplay was still not fully defined.Many questions remained unanswered:How should equations affect combat?How should equations affect progression?How should equations affect enemies?How should equations affect exploration?Without clear answers, continuing development risked building large amounts of content around mechanics that might later need to be redesigned.Another challenge was resources.Several planned features still required additional assets, effects, enemy concepts, and visual content before they could be implemented properly.Instead of forcing development forward, I decided to pause Equation Realms temporarily and focus on validating the core mathematical gameplay first.That decision led to a new project:Equation RacersEquation Racers is a smaller and more focused game built around a single idea:Mathematical equations directly change how your vehicle behaves during an endless race.Unlike Equation Realms, the core mechanic can be experienced immediately.This allows faster testing, faster iteration, and much quicker development.The first version will focus on:Endless procedural tracksEquation-based driving stylesFunction fragments and upgradesObstacles and collectiblesRisk-versus-reward gameplayArcade-style progressionMost importantly, Equation Racers will help test mathematical gameplay concepts that may later return to Equation Realms. Another important realization during this process was that there is no requirement to preserve every prototype, system, or experiment already built.If necessary, Equation Realms can be restarted from the ground up.The purpose of the current prototype was to explore ideas, test systems, identify weaknesses, and better understand what the game should become.That objective has already been achieved.If future development reveals a better direction, a cleaner architecture, or a stronger gameplay foundation, rebuilding parts of the project — or even restarting entirely — remains a valid option.The goal is not to protect old code.The goal is to build the best possible version of Equation Realms.For now, the existing prototype serves as valuable research and a learning platform while development focus shifts toward Equation Racers. Equation Realms is not cancelled.It’s simply waiting until the right systems, resources, and gameplay ideas are ready.For now, development shifts toward building something smaller, faster, and more focused.Next stop:🏎️ Equation Racers."}, {"post_id": 10526, "ts": "2026-06-17T08:52:35Z", "hours": 1.9486, "text": "🚀 Devlog #6: Reworking the First Impression “The first thing users see is the boot screen and login screen.” After testing ARESOS and reviewing feedback, I spent time improving the startup experience of the operating system. One major issue was that some parts of the interface felt too similar to common AI-generated dashboard designs. The goal was to move toward a cleaner and more believable operating system experience. Changes made: Redesigned the ARESOS boot screen Created a custom animated ARES logo Improved boot sequence and startup flow Simplified boot messages and visual hierarchy Redesigned the login screen layout Improved typography, spacing, and consistency Removed unnecessary futuristic UI elements Strengthened the overall ARESOS visual identity One challenge was getting the logo animation right. Early versions looked incomplete during startup and made the logo difficult to recognize. Several iterations were needed before the animation felt natural and readable. The login screen also went through multiple revisions to balance branding and usability. The final design keeps the logo as the primary focus while making authentication simple and distraction-free. This update doesn’t add new functionality, but it significantly improves the first impression and overall experience of using ARESOS."}, {"post_id": 10014, "ts": "2026-06-16T15:37:45Z", "hours": 5.2469, "text": "🚀 Devlog #5: Terminal, Archives, and the v2.0 Release As development continued, I spent most of my time improving the terminal experience. ARESOS now supports command chaining, pipes, redirection, aliases, environment variables, command history expansion, and a growing collection of filesystem utilities. I also added ZIP archive support. Files can be archived, extracted, and restored directly from the virtual filesystem through terminal commands. One of the goals for this release was making the terminal feel more useful rather than simply displaying simulated output. A lot of time went into testing command interactions, filesystem behavior, and archive handling. With the shell, filesystem, desktop environment, and documentation now in place, ARESOS v2.0 is ready for its first public release."}, {"post_id": 9145, "ts": "2026-06-15T09:53:22Z", "hours": 0.2964, "text": "🚀 Devlog #4: Building the Mission Control Workspace “An operating system becomes useful when everything works together.” After building the core desktop environment, I focused on creating a workspace designed specifically for productivity and organization. ARESOS now includes a collection of integrated tools including Calendar, Todo Manager, Settings, Notification Center, Focus Session controls, and system management panels. Instead of forcing users to switch between multiple websites and browser tabs, the goal was to create a centralized mission-control experience where scheduling, task tracking, configuration, and daily planning happen inside a single environment. This was the point where ARESOS stopped feeling like a collection of windows and started feeling like a complete productivity operating system."}, {"post_id": 9137, "ts": "2026-06-15T09:21:48Z", "hours": 0.63, "text": "“A web operating system needs files.” Content ARESOS includes a custom Virtual File System inspired by Unix-like directory structures. The filesystem is stored entirely inside the browser using localStorage and supports: Directories Files Creation Deletion Navigation Persistent storage The most interesting part is that Terminal and File Explorer both interact with the same underlying filesystem state. Creating a folder through Terminal instantly appears inside File Explorer without refreshing the page."}, {"post_id": 9128, "ts": "2026-06-15T08:37:42Z", "hours": 0.6236, "text": "“Window drag and resize in React is easy. Making it feel like a real OS is not.” Content One of the biggest challenges was creating a desktop environment that behaves like a real operating system. ARESOS supports: Draggable windows Resizable windows Minimize animations Maximize mode Focus management Dynamic z-index stacking Initially, dragging felt sluggish because CSS transitions were conflicting with real-time position updates. The solution was temporarily disabling transitions during drag operations and restoring them afterward. This dramatically improved responsiveness and made window movement feel much smoother."}, {"post_id": 9106, "ts": "2026-06-15T07:11:12Z", "hours": 6.4483, "text": "“An operating system isn’t a collection of apps. It’s the layer that controls them.” Created OSContext.tsx as the central operating system kernel. Every window, process, notification, and desktop state flows through a single source of truth. Implemented process spawning, window registration, focus management, and desktop state persistence. Separated OS logic from application logic to keep the architecture modular. This became the foundation that every other subsystem relies on."}]...
|
Title: ARESOS by @Ankit | Stardance
Devlogs:
“An Title: ARESOS by @Ankit | Stardance
Devlogs:
“An operating system isn’t a collection of apps. It’s the layer that controls them.” Created OSContext.tsx as the central operating system kernel. Every window, process, notification, and desktop state flows through a single source of truth. Implemented process spawning, window registration, focus management, and desktop state persistence. Separated OS logic from application logic to keep the architecture modular. This became the foundation that every other subsystem relies on.
“Window drag and resize in React is easy. Making it feel like a real OS is not.” Content One of the biggest challenges was creating a desktop environment that behaves like a real operating system. ARESOS supports: Draggable windows Resizable windows Minimize animations Maximize mode Focus management Dynamic z-index stacking Initially, dragging felt sluggish because CSS transitions were conflicting with real-time position updates. The solution was temporarily disabling transitions during drag operations and restoring them afterward. This dramatically improved responsiveness and made window movement feel much smoother.
“A web operating system needs files.” Content ARESOS includes a custom Virtual File System inspired by Unix-like directory structures. The filesystem is stored entirely inside the browser using localStorage and supports: Directories Files Creation Deletion Navigation Persistent storage The most interesting part is that Terminal and File Explorer both interact with the same underlying filesystem state. Creating a folder through Terminal instantly appears inside File Explorer without refreshing the page.
🚀 Devlog #4: Building the Mission Control Workspace “An operating system becomes useful when everything works together.” After building the core desktop environment, I focused on creating a workspace designed specifically for productivity and organization. ARESOS now includes a collection of integrated tools including Calendar, Todo Manager, Settings, Notification Center, Focus Session controls, and system management panels. Instead of forcing users to switch between multiple websites and browser tabs, the goal was to create a centralized mission-control experience where scheduling, task tracking, configuration, and daily planning happen inside a single environment. This was the point where ARESOS stopped feeling like a collection of windows and started feeling like a complete productivity operating system.
🚀 Devlog #5: Terminal, Archives, and the v2.0 Release As development continued, I spent most of my time improving the terminal experience. ARESOS now supports command chaining, pipes, redirection, aliases, environment variables, command history expansion, and a growing collection of filesystem utilities. I also added ZIP archive support. Files can be archived, extracted, and restored directly from the virtual filesystem through terminal commands. One of the goals for this release was making the terminal feel more useful rather than simply displaying simulated output. A lot of time went into testing command interactions, filesystem behavior, and archive handling. With the shell, filesystem, desktop environment, and documentation now in place, ARESOS v2.0 is ready for its first public release.
🚀 Devlog #6: Reworking the First Impression “The first thing users see is the boot screen and login screen.” After testing ARESOS and reviewing feedback, I spent time improving the startup experience of the operating system. One major issue was that some parts of the interface felt too similar to common AI-generated dashboard designs. The goal was to move toward a cleaner and more believable operating system experience. Changes made: Redesigned the ARESOS boot screen Created a custom animated ARES logo Improved boot sequence and startup flow Simplified boot messages and visual hierarchy Redesigned the login screen layout Improved typography, spacing, and consistency Removed unnecessary futuristic UI elements Strengthened the overall ARESOS visual identity One challenge was getting the logo animation right. Early versions looked incomplete during startup and made the logo difficult to recognize. Several iterations were needed before the animation felt natural and readable. The login screen also went through multiple revisions to balance branding and usability. The final design keeps the logo as the primary focus while making authentication simple and distraction-free. This update doesn’t add new functionality, but it significantly improves the first impression and overall experience of using ARESOS.
🚀 Devlog #7: Pausing Equation Realms and Starting Equation Racers“Sometimes the best decision is knowing when to pause.”Over the past few weeks, development focused on Equation Realms, a large RPG project planned as one of the flagship experiences inside ARESOS.The goal was ambitious: build a procedural RPG world powered by mathematics, equations, and exploration.A lot of progress was made.Completed work included:Procedural world generationChunk loading systemsCombat foundationsEnemy spawningLoot systemsInventory architectureEquipment systemsLandmark generationSettlement planningAsset integrationFrom a technical perspective, the project was moving forward successfully.However, after several rounds of testing and design reviews, an important issue became clear.The game had systems.The game had technology.But the core mathematical gameplay was still not fully defined.Many questions remained unanswered:How should equations affect combat?How should equations affect progression?How should equations affect enemies?How should equations affect exploration?Without clear answers, continuing development risked building large amounts of content around mechanics that might later need to be redesigned.Another challenge was resources.Several planned features still required additional assets, effects, enemy concepts, and visual content before they could be implemented properly.Instead of forcing development forward, I decided to pause Equation Realms temporarily and focus on validating the core mathematical gameplay first.That decision led to a new project:Equation RacersEquation Racers is a smaller and more focused game built around a single idea:Mathematical equations directly change how your vehicle behaves during an endless race.Unlike Equation Realms, the core mechanic can be experienced immediately.This allows faster testing, faster iteration, and much quicker development.The first version will focus on:Endless procedural tracksEquation-based driving stylesFunction fragments and upgradesObstacles and collectiblesRisk-versus-reward gameplayArcade-style progressionMost importantly, Equation Racers will help test mathematical gameplay concepts that may later return to Equation Realms. Another important realization during this process was that there is no requirement to preserve every prototype, system, or experiment already built.If necessary, Equation Realms can be restarted from the ground up.The purpose of the current prototype was to explore ideas, test systems, identify weaknesses, and better understand what the game should become.That objective has already been achieved.If future development reveals a better direction, a cleaner architecture, or a stronger gameplay foundation, rebuilding parts of the project — or even restarting entirely — remains a valid option.The goal is not to protect old code.The goal is to build the best possible version of Equation Realms.For now, the existing prototype serves as valuable research and a learning platform while development focus shifts toward Equation Racers. Equation Realms is not cancelled.It’s simply waiting until the right systems, resources, and gameplay ideas are ready.For now, development shifts toward building something smaller, faster, and more focused.Next stop:🏎️ Equation Racers.
Equation Racers – Major Development ProgressEquation Racers has gone through multiple redesigns and gameplay iterations during development. The project started as a simple racing concept, but after extensive testing I repeatedly adjusted the gameplay, vehicle handling, road systems, and overall game direction to create a more enjoyable experience.More than 12 hours have been invested into development so far. During that time, many files were edited repeatedly, several systems were rewritten, numerous bugs were fixed, and performance was optimized through multiple testing cycles. I also changed the game concept and gameplay mechanics several times before arriving at the current direction.Key ProgressVehicle driving systemLane-based movement mechanicsHighway rendering systemEnvironment and atmosphere improvementsGameplay balancing and testingPerformance optimizationMultiple gameplay and concept redesignsThis project represents many hours of experimentation, iteration, debugging, and refinement. The current version is significantly more advanced than the original prototype and now provides a stable, playable racing experience while establishing a foundation for future features.
ARESOS WebOS Devlog - Retro Synth Upgrades & Feature ReleaseHere is the complete devlog detailing the new features, architecture, and implementations created for ARESOS WebOS.🚀 OverviewWe have transformed ARESOS into a retro-futuristic, high-fidelity experience by integrating custom system-wide visual aesthetics, building standalone retro productivity and entertainment apps, and integrating full economy-driven skins/cosmetic customizers into the core arcade games.📺 1. Retro Screen Aesthetics (CRT & Scanline Filter)A system-wide display modifier mimicking old-school cathode-ray tube (CRT) arcade monitors.Tech Stack: CSS Keyframes + Absolute Viewport Layering + Context Settings Synchronization.Features:Horizontal scanline grids, vignette corner shadowing, and contrast-boosting curves.Subtle monitor flicker animation to enhance realism.Seamless Control: Accessible via the System Settings -> Theme panel, dynamically toggling a layout-wide wrapper in the main WebOS viewport.🎵 2. Cyberpunk Synth Player (Audio Terminal App)A reactive cyberpunk media player integrated with YouTube’s iframe API and a custom local storage library.Features:Dynamic Playlist Manager: Tracks are loaded, updated, and deleted locally via localStorage. Preloaded with high-fidelity streams by Lofi Girl and HOME.Sound-Reactive Greek Math Lyrics visualizer:Translates regular alphabetical letters of active song lines to Greek mathematical symbols (e.g. a -> α, b -> β, e -> ε).Stacks symbols in vertical neon columns reacting directly to simulated frequency bands.Double text overlay displaying translated symbols alongside original English lines.Autoplay Video Monitor: Includes a corner video preview frame which bypasses browser sandbox autoplay blocks.Dual Download Pipeline: A cyberpunk holographic terminal simulating decryption and bitstream packaging, accompanied by a direct external MP3 extraction link.🎨 3. Neon Paint (Pixel Paint App)A classic 8-bit retro pixel editor with full grid operations and paint tools.Features:Adjustable Resolutions: Quick toggle between 16x16, 32x32, and 64x64 grids.Sci-Fi Colors: Neon swatches + native color picker.Toolbox: Pencil (freehand draw), Eraser, and Flood Fill bucket (using a BFS queue traversal algorithm).Export System: Transforms local matrix cells into canvas pixels and exports high-definition .png files.🛸 4. Neon Duel: Ship Cosmetics CustomizerAdding progression mechanics to the 2-player local spaceship battle game.Features:Credits Economy: Players accumulate Cyber-Credits (CR) by participating (+20 CR) or winning (+50 CR) matches.Ship Cosmetics Shop: Modal menu inside the main screen allowing users to buy and equip unique skins: Vaporwave, Matrix, Solar, and Plasma.Dynamic Engine Rendering: Equipped skins feed directly into the game engine initialization, dynamically overriding default spaceship vectors and laser beams.🏎️ 5. Equation Racers: Vehicle Garage ShopAn upgrade to the educational racing game adding vehicle personalization.Features:Coins Wallet Sync: Integrates with SaveManager and the gameplay run analytics.Livery Shop: Buy and equip retro car paint jobs: Cyber Orange, Nebula Purple, Formula Red, and Retro Green.Double-Engine Compatibility: Integrated with both the lightweight 2D Canvas renderer and the high-performance WebGL2 sprite atlas pipeline.
Devlog #10 — ARES Math Notes Evolution Today was focused on transforming ARES Math Notes from a basic drawing canvas into an AI-assisted handwritten mathematics workspace. What was completed Notebook-Style Canvas Replaced the plain dark graph-board experience with a realistic ruled notebook interface. Added horizontal writing guides and notebook margin styling. Improved visual readability for handwritten equations and diagrams. Handwriting Capture Pipeline Tested freehand input using the pen system. Verified recognition workflow using handwritten equations such as: 2 + 2 = Established the end-to-end flow: Draw → Capture → Process → Generate solution. AI Solution Breakdown Interface Added structured step-by-step solution rendering. Solutions now display: Identified equation Intermediate calculation steps Final answer output Example validation: 2 + 2 = 4 Scientific Mathematics Support Tested trigonometric expression solving. Verified AI explanation generation for: cos(60) + tan(45) System successfully produced: Known values Substitution steps Final result Drawing Tool Improvements Multiple pen colors supported. Eraser workflow tested. Stroke rendering validated on notebook canvas. Diagram Interpretation Testing Conducted experiments using simple sketches and distance-based drawings. Used hand-drawn objects and directional annotations to evaluate future visual reasoning capabilities. AI Processing State Management Implemented visible AI processing feedback. Added retry/wait state handling when AI requests are temporarily unavailable. Users now receive clear status information instead of silent failures. UI Iteration Refined toolbar layout. Improved solve-action accessibility. Continued alignment with the ARES desktop operating environment. Challenges Found Notebook line rendering requires additional theme optimization for dark mode. Handwritten recognition accuracy still depends heavily on stroke quality. Complex diagram understanding is not yet production-ready. AI rate-limit handling needs further refinement. Current Status ARES Math Notes is now functioning as an AI-assisted handwritten mathematics workspace capable of: Freehand equation input Step-by-step AI explanations Scientific expression solving Notebook-style note-taking Interactive drawing workflows
Devlog Why ARESOS Started ARESOS started as a small experiment. At first, I only wanted to understand how operating systems work and how much of that experience could be recreated inside a browser. What started as a simple idea slowly grew into a desktop environment with applications, a virtual file system, games, utilities, and a custom terminal. I was curious about how complex software systems are built and how different parts of a system work together. Building The First Version The first goal was simple: Create a desktop Open applications Switch between windows Once that worked, I started adding more features and the project became much larger than originally planned. Virtual File System One of the biggest challenges was creating the Virtual File System. I wanted users to be able to create files and folders that would remain available after refreshing the browser. Building the filesystem taught me a lot about application state, data structures, and browser storage. Games I also wanted ARESOS to include things that were fun to use. Instead of only building utilities, I created games like: Equation Racers Neon Duel Creating games without relying heavily on external assets pushed me to learn more about rendering, game loops, and browser graphics. Working With AI AI was a useful tool during development, but it was not a magic solution. Sometimes AI generated useful code. Sometimes it generated bugs. Sometimes it broke working features completely. One of the biggest lessons I learned was when to trust AI suggestions and when to stop, debug the problem myself, and understand what was actually happening. What I Learned Through ARESOS I learned about: State management Browser storage Window systems Application architecture Game development Debugging large projects Working with AI tools More importantly, I learned that building real projects teaches more than following tutorials. Current Status ARESOS is still under active development. Some parts are complete, some are experimental, and many ideas are still waiting to be built. Future My long-term goal is to push ARESOS beyond a browser experiment. Future plans include: Cloud-based services AI integration More applications Better terminal capabilities Cross-device support Expanding the ARESOS ecosystem This project started as an experiment, but it has become one of the biggest projects I have built so far.
i rewrite some code and remove features like crt visuals and more
Ships:
I built ARESOS, a browser-based WebOS made with React Next.js. ARESOS includes a desktop environment, terminal, virtual filesystem, window management, themes, and ZIP archive support that all run entirely in the browser. The most challenging part was building the terminal and filesystem. Implementing command parsing, pipes, redirection, variables, aliases, archive handling, and making everything work together required a lot of testing and iteration. I’m happy with how the terminal and virtual filesystem turned out. The project evolved from a simple desktop UI into a more complete environment with file management, command execution, and archive tools. To test the project: Default Login Username: guest Password: 1462007 After logging in, open Terminal and try: help Create a file: touch notes.txt write notes.txt “Hello ARESOS” cat notes.txt Test variables: export USER=test echo $USER Test ZIP restore: touch restore.txt write restore.txt hello zip backup.zip restore.txt rm restore.txt unzip backup.zip cat restore.txt...
|
1793245996.9643621
|
1793332396.9643621
|
|
17903
|
FurgenOS by @furgenramen | Stardance
|
furgenramen
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T12:35:35Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a very simple OS, and though it has very little to show, I am very proud of it. More features should be on the way soon (I might build a hardware project, though). I feel that Hackatime was a bit confusing, especially when using a codespace in VS code. I hope the features are cool and you guys can mess around on my site!", "repo": "https://github.com/furgenramen04/FurgenOS", "demo": "https://furgenramen04.github.io/FurgenOS/"}]...
|
[{"post_id": 67335, "ts": "202 [{"post_id": 67335, "ts": "2026-09-13T12:26:47Z", "hours": 0.6833, "text": "Planning to ship now! I have made a simple app, where if you click the “Messing Around” button, a random website gets opened. I also updated my README, and I think I’m ready to ship now. Here’s the list of all website the button can open and my JS for it:"}, {"post_id": 66570, "ts": "2026-09-12T12:30:45Z", "hours": 1.4156, "text": "After more than a month of not doing anything, I came back and finished my text-based app, Ronaldo quotes. I used other sources on the internet because I found that the Jam was a little confusing. On the right is my new app and on the left is the JS code for it. Btw, if anyone here knows how to use the H1, H2, H3, without all of the text being affected please lmk in comments."}, {"post_id": 41264, "ts": "2026-08-05T11:33:26Z", "hours": 2.0903, "text": "Finally finished the first half of Jam 4 (I know, I know, but I had exams, okay?). I have two windows, they both drag, open, close, and, on tap and on open, go on top of each other. I really shouldn’t be feeling this accomplished but I am. Here’s my code (JS) and my final result! BTW if any of you has any suggestions PLEASE lmk, I’d love it. Thanks for your time!"}, {"post_id": 31743, "ts": "2026-07-20T11:48:49Z", "hours": 0.5125, "text": "Cleaned up my code. That’s pretty much all for today, just organised my in-line CSS into class-based CSS, and here are screenshots of my new code:"}, {"post_id": 30512, "ts": "2026-07-18T04:38:09Z", "hours": 0.4942, "text": "Devlog #5 Almost (almost) finished Jam 3. The welcome window opens and closes properly, and the “Messing around” button opens the tab, while the wheel icon closes it."}, {"post_id": 30121, "ts": "2026-07-17T13:09:15Z", "hours": 1.9697, "text": "Almost done Jam 3, looking to fix the close button option. I’m trying to make the wheel image a close button for the welcome window, but I am tired and I need to sleep so I will make that later. Otherwise, everything is going well, and my WebOS is coming together. The “Messing Around” button is currently the open button for the welcome screen. (P.S. only 1 screenshot today because I am not in the mood to reopen VS code again {its past my bedtime!})"}, {"post_id": 28650, "ts": "2026-07-15T01:03:34Z", "hours": 1.7339, "text": "Hi again! After a week of troubleshooting and struggling with Hackatime, I have finally finished the second Jam of the WebOS tutorial 😭. I removed the Ronaldo part (temporarily) but he will come back once I figure out how to add clickable elements in the OS. (the goat will come back). I also made the OS look much slicker (in my opinion)."}, {"post_id": 25076, "ts": "2026-07-09T01:29:13Z", "hours": 1.23, "text": "Finished part 1 of the WebOS 1 tutorial! My website still looks pretty basic, like this. The other screenshot is all the code in VS code for the website."}, {"post_id": 8450, "ts": "2026-06-14T01:28:34Z", "hours": 0.3092, "text": "Just started the tutorial, here’s a quick screenshot of my progress so far."}]...
|
Title: FurgenOS by @furgenramen | Stardance
Devlo Title: FurgenOS by @furgenramen | Stardance
Devlogs:
Just started the tutorial, here’s a quick screenshot of my progress so far.
Finished part 1 of the WebOS 1 tutorial! My website still looks pretty basic, like this. The other screenshot is all the code in VS code for the website.
Hi again! After a week of troubleshooting and struggling with Hackatime, I have finally finished the second Jam of the WebOS tutorial 😭. I removed the Ronaldo part (temporarily) but he will come back once I figure out how to add clickable elements in the OS. (the goat will come back). I also made the OS look much slicker (in my opinion).
Almost done Jam 3, looking to fix the close button option. I’m trying to make the wheel image a close button for the welcome window, but I am tired and I need to sleep so I will make that later. Otherwise, everything is going well, and my WebOS is coming together. The “Messing Around” button is currently the open button for the welcome screen. (P.S. only 1 screenshot today because I am not in the mood to reopen VS code again {its past my bedtime!})
Devlog #5 Almost (almost) finished Jam 3. The welcome window opens and closes properly, and the “Messing around” button opens the tab, while the wheel icon closes it.
Cleaned up my code. That’s pretty much all for today, just organised my in-line CSS into class-based CSS, and here are screenshots of my new code:
Finally finished the first half of Jam 4 (I know, I know, but I had exams, okay?). I have two windows, they both drag, open, close, and, on tap and on open, go on top of each other. I really shouldn’t be feeling this accomplished but I am. Here’s my code (JS) and my final result! BTW if any of you has any suggestions PLEASE lmk, I’d love it. Thanks for your time!
After more than a month of not doing anything, I came back and finished my text-based app, Ronaldo quotes. I used other sources on the internet because I found that the Jam was a little confusing. On the right is my new app and on the left is the JS code for it. Btw, if anyone here knows how to use the H1, H2, H3, without all of the text being affected please lmk in comments.
Planning to ship now! I have made a simple app, where if you click the “Messing Around” button, a random website gets opened. I also updated my README, and I think I’m ready to ship now. Here’s the list of all website the button can open and my JS for it:
Ships:
I made a very simple OS, and though it has very little to show, I am very proud of it. More features should be on the way soon (I might build a hardware project, though). I feel that Hackatime was a bit confusing, especially when using a codespace in VS code. I hope the features are cool and you guys can mess around on my site!...
|
1793148778.3455334
|
1793235178.3455334
|
|
17918
|
Are You a ROBOT?!?! by @baker | Stardance
|
baker
|
1
|
26.0
|
447
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T13:11:31Z", "hours": 26.0, "multiplier": 16.89, "payout": 447, "blessing": "neutral", "text": "one of my most favourite projects every made. worked a lot for this one. the questions are good and works. love this flappy bird one the most", "repo": "https://github.com/Hamdan772/are-you-a-robot", "demo": "https://are-you-a-robot-six.vercel.app"}]...
|
[{"post_id": 11916, "ts": "202 [{"post_id": 11916, "ts": "2026-06-19T13:00:27Z", "hours": 3.0, "text": "made flappy bird way better. the second picture was the before and the first one is the after. also changed some UI elements"}, {"post_id": 11135, "ts": "2026-06-18T06:42:52Z", "hours": 2.0, "text": "added flappy bird question (very bad and hard need to fix) image underneath js placeholder not the one I made"}, {"post_id": 11079, "ts": "2026-06-18T03:36:36Z", "hours": 3.0, "text": "Added questions and omptimzed website for mobile. also updated readme"}, {"post_id": 10482, "ts": "2026-06-17T07:04:31Z", "hours": 1.0, "text": "so much code 🧑💻. oh well. added questions and sm1 try the website. are-you-a-robot-six.vercel.app"}, {"post_id": 10449, "ts": "2026-06-17T05:35:51Z", "hours": 1.0, "text": "Added a secret feature and fixed bugs"}, {"post_id": 10415, "ts": "2026-06-17T03:40:52Z", "hours": 2.0, "text": "made GitHub readme. improved features and questions."}, {"post_id": 9905, "ts": "2026-06-16T12:39:55Z", "hours": 2.0, "text": "someone off the lightsss……. what happens next will shock you*!!! 😨😱"}, {"post_id": 9814, "ts": "2026-06-16T08:03:32Z", "hours": 1.0, "text": "working on new questions (not gonna spoil it) and if yall want any questions plzzz sayyyyy 🙏"}, {"post_id": 9771, "ts": "2026-06-16T06:39:47Z", "hours": 0.0, "text": "parallel parking is umm in the works. in case you dont know how to parallel park so for reference"}, {"post_id": 9752, "ts": "2026-06-16T05:39:05Z", "hours": 0.0, "text": "should I add parallel parking??????? (ima add it anyway) if you guys want to add anything or questions or features plz give comment I want to know if any1 can even see my devlog 😭"}, {"post_id": 9728, "ts": "2026-06-16T04:45:43Z", "hours": 0.0, "text": "sonny favicon hehe. fixed some questions logic to be better."}, {"post_id": 9702, "ts": "2026-06-16T03:44:22Z", "hours": 0.0, "text": "I like the certificate (made with code) I’ll try to make one in canva. rn the game has 32 questions. play here: https://are-you-a-robot-six.vercel.app"}, {"post_id": 9294, "ts": "2026-06-15T16:43:22Z", "hours": 3.0, "text": "just goofing around. added questions and a certificate. made UI more reasonable? (I think I can do better)"}, {"post_id": 8705, "ts": "2026-06-14T13:48:30Z", "hours": 0.0, "text": "Lets see if you are a robot"}]...
|
Title: Are You a ROBOT?!?! by @baker | Stardance
Title: Are You a ROBOT?!?! by @baker | Stardance
Devlogs:
Lets see if you are a robot
just goofing around. added questions and a certificate. made UI more reasonable? (I think I can do better)
I like the certificate (made with code) I’ll try to make one in canva. rn the game has 32 questions. play here: https://are-you-a-robot-six.vercel.app
sonny favicon hehe. fixed some questions logic to be better.
should I add parallel parking??????? (ima add it anyway) if you guys want to add anything or questions or features plz give comment I want to know if any1 can even see my devlog 😭
parallel parking is umm in the works. in case you dont know how to parallel park so for reference
working on new questions (not gonna spoil it) and if yall want any questions plzzz sayyyyy 🙏
someone off the lightsss……. what happens next will shock you*!!! 😨😱
made GitHub readme. improved features and questions.
Added a secret feature and fixed bugs
so much code 🧑💻. oh well. added questions and sm1 try the website. are-you-a-robot-six.vercel.app
Added questions and omptimzed website for mobile. also updated readme
added flappy bird question (very bad and hard need to fix) image underneath js placeholder not the one I made
made flappy bird way better. the second picture was the before and the first one is the after. also changed some UI elements
Ships:
one of my most favourite projects every made. worked a lot for this one. the questions are good and works. love this flappy bird one the most...
|
1792878764.8360405
|
1793742764.8360405
|
|
17921
|
Pointhole by @lu2000luk | Stardance
|
lu2000luk
|
1
|
25.0
|
286
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T12:21:04Z", "hours": 25.0, "multiplier": 11.87, "payout": 286, "blessing": "neutral", "text": "Pointhole 1.0.0 A complete suite to explore and control your remote servers in a click! Tools like IDEs provide access to remote servers but it usually requires installing 100+ mbs clients and sometimes you just want to get the work done quickly… So to fix this I built Pointhole! Features: Explore files Download/Upload files Edit files with your own IDE ““SSH”” into your server (You can use any terminal!) Demo server for everyone to try out! Nice 3D website Install scripts Multiplatform (Win/Linux) All of the above without needing port forwarding! To connect to the demo server hover the “Demo” top bar option and click “Connect to demo server”", "repo": "https://git.lu2000luk.com/lu2000luk/pointhole", "demo": "https://pointhole.vercel.app/"}]...
|
[{"post_id": 17515, "ts": "202 [{"post_id": 17515, "ts": "2026-06-28T10:19:40Z", "hours": 1.265, "text": "PTY support! (Took a day break to do other life things such as going outside and playing CS2) Now pty is supported (stuff like DPI and pixel dimensions aren’t sent but that not really required for most uses). Took such a long time since while doing it I cleaned up a bit of the old code."}, {"post_id": 16228, "ts": "2026-06-26T11:19:01Z", "hours": 1.7592, "text": "ADDED SSH!!! You can now connect to the server’s terminal. Just click a button and the SSH will be ran locally on your machine with auto-forwarding to the relay Fixed various warnings Added demo button to top bar Added CLI args to change the relay host (both server and client) and to prefill the demo code (client) Demo has no SSH support yet, I will add it / block it on demo servers"}, {"post_id": 16160, "ts": "2026-06-26T08:27:06Z", "hours": 0.5089, "text": "Upload to pastebin feature. Also optimized the website removing an image download (since its not visible) that added 10mb to the bundle (and to the vercel bill). Also added the correct cursor on hover of the 3d buttons."}, {"post_id": 15902, "ts": "2026-06-25T20:56:03Z", "hours": 0.3736, "text": "Added a scripts modal and a button on the 3d scene to open it (design reminds a lot of those chinese websites that are clearly made to be rendered with chinese chars etc but look uncanny on our screens)"}, {"post_id": 15889, "ts": "2026-06-25T20:27:51Z", "hours": 0.3472, "text": "Continued the site a little bit with custom fonts and plaques for “server” and “client”. For now while I still develop it you can see the website at https://pointhole.vercel.app/"}, {"post_id": 15853, "ts": "2026-06-25T19:35:42Z", "hours": 0.2833, "text": "Added winres (also to CI): generates the windows executable resources file and applies it [assets converted and resized by AI agent, i made the original “art” (if you can call a black circle so…)]"}, {"post_id": 15798, "ts": "2026-06-25T17:56:48Z", "hours": 0.4217, "text": "Statically linked windows client binaries Added script to auto-update install scripts cache commit hash [AI] Made the script able to install commit hooks for itself Added Justfiles for compiling locally and general utils Future things to look into: more windows issues (I’d bet my house there are more) add win resources to client binaries for windows (Icon, description … with https://github.com/tc-hib/go-winres ) submit app for malware verification to https://www.microsoft.com/en-us/wdsi/filesubmission?persona=SoftwareDeveloper (Go binaries are usually flagged)"}, {"post_id": 15649, "ts": "2026-06-25T13:29:16Z", "hours": 3.3333, "text": "Made a big part of the site. Made all 3d models by hand on blender. Working with threejs and react is so hardddd (literally 3hrs of trial and errors). why did i decide to make a 3d site for a file browser ??? idk… Doing anything remotely fun in threejs is very hard so the site has some small interactive parts but its very limited as of now."}, {"post_id": 15299, "ts": "2026-06-24T20:59:06Z", "hours": 0.3156, "text": "Fixed a permission bug for editing files and also fixed a freeze problem that was pretty common on windows. Also started adding last commit hash to the scripts’s download urls since cloudflare caching is so aggressive!!!"}, {"post_id": 15280, "ts": "2026-06-24T20:27:19Z", "hours": 0.295, "text": "Added a simple about window and got the demo server running (mainly so that people who rate the project have an easy time doing so). Also there is a little easter egg in the demo server so if anyone reads this: the client binaries are already compiled so if you want to check it out it should be pretty easy (the demo code is in the readme)"}, {"post_id": 15256, "ts": "2026-06-24T19:28:11Z", "hours": 0.7814, "text": "Added install scripts! And updated readme. Took long since i switched from .bat to .ps1 and also whoever made env vars on windows should be subject to the same stuff i went truh. Apparently using “setx” on a long env var cuts it FROM THE BEGINNING so it bricked my PC (Removed system32 from path) and fortunately i had a vscode terminal with the old env vars still open so i was able to recover some but I had some more issues so I had to “nest” env vars. Everything is fixed except the recyle bin (shows random filenames when asking for deletion confirmation). For this and some other reasons I switched the scripts to powershell after I made them since the powershell API is much more mature. (shoutout to the guy who wants longer devlogs he finally has one with a story, the project is almost done tho!)"}, {"post_id": 15164, "ts": "2026-06-24T17:08:02Z", "hours": 0.3014, "text": "Added github mirror and made some github actions to build both client and server for linux and windows and upload them to my CDN (I will later make a nice install script that pulls them)"}, {"post_id": 14949, "ts": "2026-06-24T09:05:09Z", "hours": 0.7058, "text": "New theme (got it online) and Icons! (Used AI to convert from SVG to imgui.Drawlist)"}, {"post_id": 14933, "ts": "2026-06-24T07:57:22Z", "hours": 0.4814, "text": "Long story short yesterday’s UI improvements got lost (I was reverting a commit since the thing I added was broken but I forgot to commit the UI improvements before so they got lost) I re-made them quickly and added Demo mode (I will have a public demo instance so y’all can try it!)"}, {"post_id": 14272, "ts": "2026-06-23T09:59:14Z", "hours": 0.3664, "text": "UI Improvements: Disable viewports (caused issues) Disable Docking (I dont like it) Fix top bar bg-color and border Change window bg color (want to make it a nice shader in the future)"}, {"post_id": 14265, "ts": "2026-06-23T09:19:23Z", "hours": 1.0967, "text": "Fixed small bugs. Since yesterday I did all my changes on Linux they had lots of issues on linux (uploads and downloads had the most problems). Now it’s all fixed (hopefully)"}, {"post_id": 13780, "ts": "2026-06-22T16:12:46Z", "hours": 0.5706, "text": "Create folder"}, {"post_id": 13672, "ts": "2026-06-22T13:00:24Z", "hours": 0.6136, "text": "Transfers window with progress bar"}, {"post_id": 13634, "ts": "2026-06-22T11:20:35Z", "hours": 0.9744, "text": "git commit style editor!"}, {"post_id": 13620, "ts": "2026-06-22T10:15:42Z", "hours": 0.3769, "text": "Uploading and renaming"}, {"post_id": 13612, "ts": "2026-06-22T09:51:10Z", "hours": 0.8675, "text": "Random reads working! (ui bug: the thread segfaults when reading more than 9k bytes inside the debugging window, shouldnt be a problem since the usage of random reads will be pretty much automatic and will be done in chunks)"}, {"post_id": 13219, "ts": "2026-06-21T17:27:26Z", "hours": 1.5997, "text": "Uploads"}, {"post_id": 13171, "ts": "2026-06-21T15:38:34Z", "hours": 0.7217, "text": "Top bar menu, deletions and code cleanup/bug fixes"}, {"post_id": 12639, "ts": "2026-06-20T17:21:53Z", "hours": 1.2136, "text": "Copy paste working! (also fixed bugs and expanded the future types)"}, {"post_id": 8578, "ts": "2026-06-14T08:19:10Z", "hours": 3.4206, "text": "Basic file exploring working, implemented LS command and general networking"}, {"post_id": 7983, "ts": "2026-06-13T09:54:27Z", "hours": 1.5681, "text": "Initial types and websocket connection"}]...
|
Title: Pointhole by @lu2000luk | Stardance
Devlog Title: Pointhole by @lu2000luk | Stardance
Devlogs:
Initial types and websocket connection
Basic file exploring working, implemented LS command and general networking
Copy paste working! (also fixed bugs and expanded the future types)
Top bar menu, deletions and code cleanup/bug fixes
Uploads
Random reads working! (ui bug: the thread segfaults when reading more than 9k bytes inside the debugging window, shouldnt be a problem since the usage of random reads will be pretty much automatic and will be done in chunks)
Uploading and renaming
git commit style editor!
Transfers window with progress bar
Create folder
Fixed small bugs. Since yesterday I did all my changes on Linux they had lots of issues on linux (uploads and downloads had the most problems). Now it’s all fixed (hopefully)
UI Improvements: Disable viewports (caused issues) Disable Docking (I dont like it) Fix top bar bg-color and border Change window bg color (want to make it a nice shader in the future)
Long story short yesterday’s UI improvements got lost (I was reverting a commit since the thing I added was broken but I forgot to commit the UI improvements before so they got lost) I re-made them quickly and added Demo mode (I will have a public demo instance so y’all can try it!)
New theme (got it online) and Icons! (Used AI to convert from SVG to imgui.Drawlist)
Added github mirror and made some github actions to build both client and server for linux and windows and upload them to my CDN (I will later make a nice install script that pulls them)
Added install scripts! And updated readme. Took long since i switched from .bat to .ps1 and also whoever made env vars on windows should be subject to the same stuff i went truh. Apparently using “setx” on a long env var cuts it FROM THE BEGINNING so it bricked my PC (Removed system32 from path) and fortunately i had a vscode terminal with the old env vars still open so i was able to recover some but I had some more issues so I had to “nest” env vars. Everything is fixed except the recyle bin (shows random filenames when asking for deletion confirmation). For this and some other reasons I switched the scripts to powershell after I made them since the powershell API is much more mature. (shoutout to the guy who wants longer devlogs he finally has one with a story, the project is almost done tho!)
Added a simple about window and got the demo server running (mainly so that people who rate the project have an easy time doing so). Also there is a little easter egg in the demo server so if anyone reads this: the client binaries are already compiled so if you want to check it out it should be pretty easy (the demo code is in the readme)
Fixed a permission bug for editing files and also fixed a freeze problem that was pretty common on windows. Also started adding last commit hash to the scripts’s download urls since cloudflare caching is so aggressive!!!
Made a big part of the site. Made all 3d models by hand on blender. Working with threejs and react is so hardddd (literally 3hrs of trial and errors). why did i decide to make a 3d site for a file browser ??? idk… Doing anything remotely fun in threejs is very hard so the site has some small interactive parts but its very limited as of now.
Statically linked windows client binaries Added script to auto-update install scripts cache commit hash [AI] Made the script able to install commit hooks for itself Added Justfiles for compiling locally and general utils Future things to look into: more windows issues (I’d bet my house there are more) add win resources to client binaries for windows (Icon, description … with https://github.com/tc-hib/go-winres ) submit app for malware verification to https://www.microsoft.com/en-us/wdsi/filesubmission?persona=SoftwareDeveloper (Go binaries are usually flagged)
Added winres (also to CI): generates the windows executable resources file and applies it [assets converted and resized by AI agent, i made the original “art” (if you can call a black circle so…)]
Continued the site a little bit with custom fonts and plaques for “server” and “client”. For now while I still develop it you can see the website at https://pointhole.vercel.app/
Added a scripts modal and a button on the 3d scene to open it (design reminds a lot of those chinese websites that are clearly made to be rendered with chinese chars etc but look uncanny on our screens)
Upload to pastebin feature. Also optimized the website removing an image download (since its not visible) that added 10mb to the bundle (and to the vercel bill). Also added the correct cursor on hover of the 3d buttons.
ADDED SSH!!! You can now connect to the server’s terminal. Just click a button and the SSH will be ran locally on your machine with auto-forwarding to the relay Fixed various warnings Added demo button to top bar Added CLI args to change the relay host (both server and client) and to prefill the demo code (client) Demo has no SSH support yet, I will add it / block it on demo servers
PTY support! (Took a day break to do other life things such as going outside and playing CS2) Now pty is supported (stuff like DPI and pixel dimensions aren’t sent but that not really required for most uses). Took such a long time since while doing it I cleaned up a bit of the old code.
Ships:
Pointhole 1.0.0 A complete suite to explore and control your remote servers in a click! Tools like IDEs provide access to remote servers but it usually requires installing 100+ mbs clients and sometimes you just want to get the work done quickly… So to fix this I built Pointhole! Features: Explore files Download/Upload files Edit files with your own IDE ““SSH”” into your server (You can use any terminal!) Demo server for everyone to try out! Nice 3D website Install scripts Multiplatform (Win/Linux) All of the above without needing port forwarding! To connect to the demo server hover the “Demo” top bar option and click “Connect to demo server”...
|
1793127334.4977605
|
1793213734.4977605
|
|
17934
|
Live Desktop Info Widget by @Greg_ios | Stardance
|
Greg_ios
|
1
|
1.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T09:31:45Z", "hours": 1.0, "multiplier": 4.54, "payout": 6, "blessing": "neutral", "text": "A lightweight, real-time system monitoring widget for your desktop. Keep track of your system’s vital stats with a clean, draggable interface that stays out of your way but keeps you informed.", "repo": "https://github.com/travletothefurureprogramming/Live-Desktop-Info-Widget", "demo": "https://github.com/travletothefurureprogramming/Live-Desktop-Info-Widget/releases/tag/v1.0.0"}]...
|
[{"post_id": 27588, "ts": "202 [{"post_id": 27588, "ts": "2026-07-13T09:30:52Z", "hours": 0.3808, "text": "Fix some bugs and create a clean repository with a good README and the github release."}, {"post_id": 8014, "ts": "2026-06-13T11:35:32Z", "hours": 0.2869, "text": "Add process count, disk usage and make window dragable."}, {"post_id": 8009, "ts": "2026-06-13T11:15:11Z", "hours": 0.2808, "text": "Add download speed metrics"}, {"post_id": 8002, "ts": "2026-06-13T10:53:27Z", "hours": 0.3703, "text": "Make the main logic and inferance"}]...
|
Title: Live Desktop Info Widget by @Greg_ios | Sta Title: Live Desktop Info Widget by @Greg_ios | Stardance
Devlogs:
Make the main logic and inferance
Add download speed metrics
Add process count, disk usage and make window dragable.
Fix some bugs and create a clean repository with a good README and the github release.
Ships:
A lightweight, real-time system monitoring widget for your desktop. Keep track of your system’s vital stats with a clean, draggable interface that stays out of your way but keeps you informed....
|
1793249535.486174
|
1793335935.486174
|
|
17954
|
Devenv by @janekmusin | Stardance
|
janekmusin
|
1
|
3.0
|
23
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T20:08:15Z", "hours": 3.0, "multiplier": 7.24, "payout": 23, "blessing": "neutral", "text": "Got it! I hope I don’t have to reship, because I don’t know what else can I do in this project. It has been an interesting experience. It’s my first time contributing to a real, established project and I couldn’t be more proud. If you haven’t already done that, you must try it! Happy hacking Image: Not a symlink!", "repo": "https://github.com/First-Non-Interesting-Username/devenv", "demo": "https://github.com/cachix/devenv/pull/2951"}]...
|
[{"post_id": 14526, "ts": "202 [{"post_id": 14526, "ts": "2026-06-23T17:47:59Z", "hours": 0.3222, "text": "The project is ready for a ship! I created a README, compliant with stardance instructions"}, {"post_id": 14504, "ts": "2026-06-23T17:22:46Z", "hours": 0.3625, "text": "Merged! My second PR got merged into the upstream. I’m really proud of what I did, even if the change took only 19 minutes to code and test. The change wasn’t that hard to make, thanks to the fact the main contributor allowed for coping generated files instead of linking them."}, {"post_id": 14426, "ts": "2026-06-23T15:34:05Z", "hours": 2.5056, "text": "My PR has been closed, because the main contributor created a better solution for the issue I was trying to fix. Does that sucks? Maybe, but it’s better for the project to have their, better and more mature solution, over mine. A link to the PR for the curious: https://github.com/cachix/devenv/pull/2932"}]...
|
Title: Devenv by @janekmusin | Stardance
Devlogs: Title: Devenv by @janekmusin | Stardance
Devlogs:
My PR has been closed, because the main contributor created a better solution for the issue I was trying to fix. Does that sucks? Maybe, but it’s better for the project to have their, better and more mature solution, over mine. A link to the PR for the curious: https://github.com/cachix/devenv/pull/2932
Merged! My second PR got merged into the upstream. I’m really proud of what I did, even if the change took only 19 minutes to code and test. The change wasn’t that hard to make, thanks to the fact the main contributor allowed for coping generated files instead of linking them.
The project is ready for a ship! I created a README, compliant with stardance instructions
Ships:
Got it! I hope I don’t have to reship, because I don’t know what else can I do in this project. It has been an interesting experience. It’s my first time contributing to a real, established project and I couldn’t be more proud. If you haven’t already done that, you must try it! Happy hacking Image: Not a symlink!...
|
1793289238.8082163
|
1793375638.8082163
|
|
17959
|
InkFlow by @Ved | Stardance
|
Ved
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T18:34:18Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "InkFlow A modern infinite whiteboard application built with Python and PySide6 . 🚀 Project Status InkFlow is currently in active development. The foundation of the application has been built, focusing on creating a scalable architecture that will support multiple drawing tools and future features. Features Implemented till date Pen Tool Smooth freehand drawing Rounded stroke caps Rounded joins for natural handwriting Adjustable pen width Automatic stroke creation using QPainterPath • Single Click Dot Drawing InkFlow automatically detects when the mouse is clicked without movement and draws a perfectly centered filled dot instead of creating an empty stroke. Infinite Canvas The application currently provides a large virtual drawing area using QGraphicsScene , allowing users to freely move around while drawing. Current scene size: 5000 × 5000 px This will later evolve into a dynamically expanding infinite canvas. Panning Navigate around the canvas using: Middle Mouse Button + Drag Hold Space + Left Mouse Drag The camera moves independently of the drawing system, allowing a smooth workflow similar to professional whiteboard applications. Zoom Implemented mouse-wheel zoom with: Zoom centered around the mouse cursor Geometric zoom progression Minimum zoom limit Maximum zoom limit This provides smooth navigation without distortion. Architecture One of the major goals of InkFlow is maintaining a clean and extensible architecture. Instead of placing all functionality inside a single Canvas class, responsibilities have been separated. MainWindow │ └── Canvas │ ├── Camera (Pan & Zoom) ├── Scene Management └── Tool System │ └── Active Tool Tool System InkFlow has a modular tool architecture, which makes it easier to maintain. Current hierarchy: BaseTool │ └── PenTool Each tool is responsible for implementing its own: Mouse Press Mouse Move Mouse Release This allows future tools to be added without modifying the core canvas. Tool Registry Canvas maintains a registry of available tools. Example: self . tools = { \" pen \" : PenTool ( self ) } The active tool is simply a reference to one of these objects. self . active_tool = self . tools [ \" pen \" ] This makes switching tools straightforward while preserving each tool’s internal state. Current Project Structure InkFlow/ │ ├── main.py │ ├── ui/ │ ├── main_window.py │ └── canvas.py │ ├── tools/ │ ├── base_tool.py │ └── pen_tool.py │ └── assets/ Current Development Goals Build a modular tool system Keep the codebase clean and scalable Separate UI logic from drawing logic Prepare the project for future expansion Planned Features The following features are planned for future versions: Tool Toolbar Eraser Tool Rectangle Tool Circle Tool Line Tool Arrow Tool Text Tool Selection Tool Color Picker Brush Size Controls Undo / Redo Layers Infinite Dynamic Canvas Save / Load Projects Export to PNG Export to PDF Keyboard Shortcuts Custom Themes Design Philosophy InkFlow is being designed with long-term maintainability in mind. Instead of building features as one large class, the project follows an object-oriented architecture where each component has a single responsibility. This approach makes adding new tools and features significantly easier while keeping the codebase organized and maintainable. Controls:- Panning = Mouse scroll wheel button = space bar + mouse left click button Drawing = left mouse button", "repo": "https://github.com/VedDevs/InkFlow", "demo": "https://github.com/VedDevs/InkFlow/"}]...
|
[{"post_id": 18523, "ts": "202 [{"post_id": 18523, "ts": "2026-06-29T18:21:35Z", "hours": 0.9094, "text": "Devlog #3 - Improved the code formatting I divided the the working of the code into different pipelines I also added new folders to organize everything I added the folders UI and tools to organize the pipelines I divided the tools from the main Canvas.py to sub scripts in the Tools Folder, like base_tool.py and pen_tool.py Then in canvas.py I added a simple method to check the current active tool and how to call it actively."}, {"post_id": 17708, "ts": "2026-06-28T16:56:15Z", "hours": 1.0828, "text": "Devlog #2 - making it Pan and Zoom and Adding infinite space I implemented infinite panning, precision scroll-wheel zooming, and smoother pen aesthetics along with Infinite Canvas Challenges and Solutions The problem I faced was that It was difficult to add support for both space bar and left click(of the mouse) being pressed at the same time So to solve it I introduced 3 variables self.panning = False , self.pan_start = None and self.space_pressed = False then while checking for the key press, we check for space bar and set the variable self.space_pressed to true and then while checking for the mouse press event we set the variable self.panning to True And then finally in the mouse move event we actually pan in the canvas by moving the camera self.horizontalScrollBar().setValue( self.horizontalScrollBar().value() - int(delta.x())) self.verticalScrollBar().setValue(self.verticalScrollBar().value() - int(delta.y()))"}, {"post_id": 17436, "ts": "2026-06-28T06:43:14Z", "hours": 2.2492, "text": "Devlog #1 - Making it Click, Draw lines & Dots Today I created a window on the screen that scales nicely to the user’s monitor and created a responsive digital canvas on which you can draw Lines and dots till now The Problem and solution I faced a problem that didn’t let me draw dots the problem was:- clicking on the canvas without dragging the mouse left absolutely nothing on the screen. The path-drawing logic expected continuous cursor updates to generate lines. Tapping the screen to place a single dot was functionally invisible. So I introduced a self.has_moved variable which is set to False by default and when the user presses the left button and moves the mouse it is set to True then we run a Check in the release event that if has_moved = False then it draws a dot otherwise it draws a line using self.last_point and self.current_point"}]...
|
Title: InkFlow by @Ved | Stardance
Devlogs:
Devlo Title: InkFlow by @Ved | Stardance
Devlogs:
Devlog #1 - Making it Click, Draw lines & Dots Today I created a window on the screen that scales nicely to the user’s monitor and created a responsive digital canvas on which you can draw Lines and dots till now The Problem and solution I faced a problem that didn’t let me draw dots the problem was:- clicking on the canvas without dragging the mouse left absolutely nothing on the screen. The path-drawing logic expected continuous cursor updates to generate lines. Tapping the screen to place a single dot was functionally invisible. So I introduced a self.has_moved variable which is set to False by default and when the user presses the left button and moves the mouse it is set to True then we run a Check in the release event that if has_moved = False then it draws a dot otherwise it draws a line using self.last_point and self.current_point
Devlog #2 - making it Pan and Zoom and Adding infinite space I implemented infinite panning, precision scroll-wheel zooming, and smoother pen aesthetics along with Infinite Canvas Challenges and Solutions The problem I faced was that It was difficult to add support for both space bar and left click(of the mouse) being pressed at the same time So to solve it I introduced 3 variables self.panning = False , self.pan_start = None and self.space_pressed = False then while checking for the key press, we check for space bar and set the variable self.space_pressed to true and then while checking for the mouse press event we set the variable self.panning to True And then finally in the mouse move event we actually pan in the canvas by moving the camera self.horizontalScrollBar().setValue( self.horizontalScrollBar().value() - int(delta.x())) self.verticalScrollBar().setValue(self.verticalScrollBar().value() - int(delta.y()))
Devlog #3 - Improved the code formatting I divided the the working of the code into different pipelines I also added new folders to organize everything I added the folders UI and tools to organize the pipelines I divided the tools from the main Canvas.py to sub scripts in the Tools Folder, like base_tool.py and pen_tool.py Then in canvas.py I added a simple method to check the current active tool and how to call it actively.
Ships:
InkFlow A modern infinite whiteboard application built with Python and PySide6 . 🚀 Project Status InkFlow is currently in active development. The foundation of the application has been built, focusing on creating a scalable architecture that will support multiple drawing tools and future features. Features Implemented till date Pen Tool Smooth freehand drawing Rounded stroke caps Rounded joins for natural handwriting Adjustable pen width Automatic stroke creation using QPainterPath • Single Click Dot Drawing InkFlow automatically detects when the mouse is clicked without movement and draws a perfectly centered filled dot instead of creating an empty stroke. Infinite Canvas The application currently provides a large virtual drawing area using QGraphicsScene , allowing users to freely move around while drawing. Current scene size: 5000 × 5000 px This will later evolve into a dynamically expanding infinite canvas. Panning Navigate around the canvas using: Middle Mouse Button + Drag Hold Space + Left Mouse Drag The camera moves independently of the drawing system, allowing a smooth workflow similar to professional whiteboard applications. Zoom Implemented mouse-wheel zoom with: Zoom centered around the mouse cursor Geometric zoom progression Minimum zoom limit Maximum zoom limit This provides smooth navigation without distortion. Architecture One of the major goals of InkFlow is maintaining a clean and extensible architecture. Instead of placing all functionality inside a single Canvas class, responsibilities have been separated. MainWindow │ └── Canvas │ ├── Camera (Pan & Zoom) ├── Scene Management └── Tool System │ └── Active Tool Tool System InkFlow has a modular tool architecture, which makes it easier to maintain. Current hierarchy: BaseTool │ └── PenTool Each tool is responsible for implementing its own: Mouse Press Mouse Move Mouse Release This allows future tools to be added without modifying the core canvas. Tool Registry Canvas maintains a registry of available tools. Example: self . tools = { " pen " : PenTool ( self ) } The active tool is simply a reference to one of these objects. self . active_tool = self . tools [ " pen " ] This makes switching tools straightforward while preserving each tool’s internal state. Current Project Structure InkFlow/ │ ├── main.py │ ├── ui/ │ ├── main_window.py │ └── canvas.py │ ├── tools/ │ ├── base_tool.py │ └── pen_tool.py │ └── assets/ Current Development Goals Build a modular tool system Keep the codebase clean and scalable Separate UI logic from drawing logic Prepare the project for future expansion Planned Features The following features are planned for future versions: Tool Toolbar Eraser Tool Rectangle Tool Circle Tool Line Tool Arrow Tool Text Tool Selection Tool Color Picker Brush Size Controls Undo / Redo Layers Infinite Dynamic Canvas Save / Load Projects Export to PNG Export to PDF Keyboard Shortcuts Custom Themes Design Philosophy InkFlow is being designed with long-term maintainability in mind. Instead of building features as one large class, the project follows an object-oriented architecture where each component has a single responsibility. This approach makes adding new tools and features significantly easier while keeping the codebase organized and maintainable. Controls:- Panning = Mouse scroll wheel button = space bar + mouse left click button Drawing = left mouse button...
|
1793134455.0523846
|
1793220855.0523846
|
|
17961
|
SpotOn by @nishanth05 | Stardance
|
nishanth05
|
1
|
2.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T19:07:30Z", "hours": 2.0, "multiplier": 7.23, "payout": 15, "blessing": "neutral", "text": "SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. It uses the free music brainz api and trivia api. Originally the project was supposed to use the spotify developer api , it’s been long since i used the api. When i tried to Implement the commands below, i encountered the error of not having a spotify premium account 😭. Finally ended up changing everyting to the music brainz api. Making a slack bot using javascript was definitely an experience, as once i’ve made a slack bot with python. Using the actions to handle the trivia was a headache second to the artist comparing So please sure do check out the /spoton-trivia and /spoton-vs commands. Of course there are other ones, make sure to try them before deciding ✌️", "repo": "https://github.com/Nishanth-S-A/SpotOn", "demo": "https://app.slack.com/client/E09V59WQY1E/C0B8P5DRDB3"}]...
|
[{"post_id": 8254, "ts": "2026 [{"post_id": 8254, "ts": "2026-06-13T18:47:25Z", "hours": 2.0511, "text": "Guess it’s done , SpotOn Project: SpotOn · Stack: Node.js, Slack Bolt, MusicBrainz API, OpenTDB Status: ✅ Working · Commands shipped: 6 What is SpotOn? SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. The goal was simple: a bot you can actually use casually in a team channel without it feeling like a chore. What I Built CommandWhat it does/spoton-trackRandom track pick from the MusicBrainz catalogue/spoton-similar Finds artists sharing genres/tags/spoton-vs vs Head-to-head stat battle/spoton-stats Full artist profile — genres, albums, recordings/spoton-triviaInteractive music trivia with Slack buttons/spoton-bandnameGenerates a random band name + debut album title The Spotify Problem I originally built everything on the Spotify Web API. No user OAuth needed — just client credentials for public catalog data. Seemed perfect. Then the /spoton-track command started throwing 403 Forbidden. The error body said it all: “Active premium subscription required for the owner of the app.” Spotify quietly tightened their API access in late 2024. Even the Search endpoint — purely public catalog data — now requires the app owner to have a Premium account. Every command I’d built against the Search API was dead. Scrapped Spotify entirely. Switched everything to MusicBrainz. Why MusicBrainz Completely free, no API key required Massive open music database Structured data: tags, release groups, recordings, artist relationships The only rule: identify your app in the User-Agent header and stay under ~1 req/sec The tradeoff is no popularity scores or audio previews, but for everything SpotOn actually needs — artist metadata, genres, recordings, album counts — it’s more than enough. Interesting Implementation Notes Similar artists without a “related” endpoint MusicBrainz has no direct “related artists” API. The workaround: fetch the source artist’s top tags, then search for other artists matching those same tags. It’s not perfect, but the results are surprisingly good — searching tag:alternative rock AND tag:indie for Radiohead surfaces exactly the kind of artists you’d expect. Parsing /spoton-vs input Getting two artist names from a single text field is messier than it looks. Users might type: Taylor Swift vs Drake Taylor Swift, Drake oasis blur (no separator at all) The final parsing tries vs split first, then comma, then a midpoint word split as a last resort. Not bulletproof, but handles the common cases. Documenting the preferred format in /spoton-help does the rest. Trivia with interactive buttons The /spoton-trivia command uses Slack’s Block Kit action buttons for the answer choices. Answer state is stored in a Map keyed by userId-channelId, so multiple people can have active questions at once. The map entry is deleted after the user answers, keeping memory clean. One gotcha: the OpenTDB API returns HTML-encoded strings (&, ', etc.) in question and answer text. Had to add a small decode() helper to strip those before sending to Slack, otherwise the blocks render raw HTML entities. MusicBrainz rate limiting MusicBrainz asks for 1 request/second max. Commands like /spoton-stats make 3 sequential API calls (artist detail, albums, recordings). Running them with Promise.all works fine most of the time, but under load it can trigger a 503. The safe pattern is sequential calls with a sleep(300) between each — slower, but reliable. Stack Runtime: Node.js Slack: Slack Bolt with Socket Mode (no public URL needed) Music data: MusicBrainz API (free, no key) Trivia: OpenTDB API (free, no key) HTTP: axios Config: dotenv"}]...
|
Title: SpotOn by @nishanth05 | Stardance
Devlogs: Title: SpotOn by @nishanth05 | Stardance
Devlogs:
Guess it’s done , SpotOn Project: SpotOn · Stack: Node.js, Slack Bolt, MusicBrainz API, OpenTDB Status: ✅ Working · Commands shipped: 6 What is SpotOn? SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. The goal was simple: a bot you can actually use casually in a team channel without it feeling like a chore. What I Built CommandWhat it does/spoton-trackRandom track pick from the MusicBrainz catalogue/spoton-similar Finds artists sharing genres/tags/spoton-vs vs Head-to-head stat battle/spoton-stats Full artist profile — genres, albums, recordings/spoton-triviaInteractive music trivia with Slack buttons/spoton-bandnameGenerates a random band name + debut album title The Spotify Problem I originally built everything on the Spotify Web API. No user OAuth needed — just client credentials for public catalog data. Seemed perfect. Then the /spoton-track command started throwing 403 Forbidden. The error body said it all: “Active premium subscription required for the owner of the app.” Spotify quietly tightened their API access in late 2024. Even the Search endpoint — purely public catalog data — now requires the app owner to have a Premium account. Every command I’d built against the Search API was dead. Scrapped Spotify entirely. Switched everything to MusicBrainz. Why MusicBrainz Completely free, no API key required Massive open music database Structured data: tags, release groups, recordings, artist relationships The only rule: identify your app in the User-Agent header and stay under ~1 req/sec The tradeoff is no popularity scores or audio previews, but for everything SpotOn actually needs — artist metadata, genres, recordings, album counts — it’s more than enough. Interesting Implementation Notes Similar artists without a “related” endpoint MusicBrainz has no direct “related artists” API. The workaround: fetch the source artist’s top tags, then search for other artists matching those same tags. It’s not perfect, but the results are surprisingly good — searching tag:alternative rock AND tag:indie for Radiohead surfaces exactly the kind of artists you’d expect. Parsing /spoton-vs input Getting two artist names from a single text field is messier than it looks. Users might type: Taylor Swift vs Drake Taylor Swift, Drake oasis blur (no separator at all) The final parsing tries vs split first, then comma, then a midpoint word split as a last resort. Not bulletproof, but handles the common cases. Documenting the preferred format in /spoton-help does the rest. Trivia with interactive buttons The /spoton-trivia command uses Slack’s Block Kit action buttons for the answer choices. Answer state is stored in a Map keyed by userId-channelId, so multiple people can have active questions at once. The map entry is deleted after the user answers, keeping memory clean. One gotcha: the OpenTDB API returns HTML-encoded strings (&, ', etc.) in question and answer text. Had to add a small decode() helper to strip those before sending to Slack, otherwise the blocks render raw HTML entities. MusicBrainz rate limiting MusicBrainz asks for 1 request/second max. Commands like /spoton-stats make 3 sequential API calls (artist detail, albums, recordings). Running them with Promise.all works fine most of the time, but under load it can trigger a 503. The safe pattern is sequential calls with a sleep(300) between each — slower, but reliable. Stack Runtime: Node.js Slack: Slack Bolt with Socket Mode (no public URL needed) Music data: MusicBrainz API (free, no key) Trivia: OpenTDB API (free, no key) HTTP: axios Config: dotenv
Ships:
SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. It uses the free music brainz api and trivia api. Originally the project was supposed to use the spotify developer api , it’s been long since i used the api. When i tried to Implement the commands below, i encountered the error of not having a spotify premium account 😭. Finally ended up changing everyting to the music brainz api. Making a slack bot using javascript was definitely an experience, as once i’ve made a slack bot with python. Using the actions to handle the trivia was a headache second to the artist comparing So please sure do check out the /spoton-trivia and /spoton-vs commands. Of course there are other ones, make sure to try them before deciding ✌️...
|
1793270873.948195
|
1793357273.948195
|
|
17962
|
My first slack bot! by @rhenisam2008 | Stardance
|
rhenisam2008
|
1
|
1.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T18:26:04Z", "hours": 1.0, "multiplier": 2.98, "payout": 2, "blessing": "neutral", "text": "I made a bot for fun and relaxing who have less than 5 minutes. Pushing and pulling the file with git is challenging for me. I am proud that this is my first completed project.", "repo": "https://github.com/rhenisam2008-max/Slack-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0B8P5DRDB3"}]...
|
[{"post_id": 8213, "ts": "2026 [{"post_id": 8213, "ts": "2026-06-13T17:39:43Z", "hours": 0.7911, "text": "JARVIS — A Fun ASCII Art Slack Bot We spend most of our workday inside Slack, and sometimes you just want something in your workspace that makes you smile. That’s the only reason JARVIS exists. No overthinking it, no big grand purpose — just a fun little bot that does cool things with text. JARVIS is a lightweight Slack bot built with Node.js and the Slack Bolt framework. It runs in socket mode and responds to slash commands. That’s it. It doesn’t manage your tasks, it doesn’t send you reminders, it doesn’t ping you about deadlines. It just does one thing really well — it makes text look awesome inside Slack. What It Actually Does Type /jarvis-shape and give it a shape name and a size — it draws a 3D ASCII cube, pyramid, prism, cylinder, diamond, or cone right inside a code block. The shapes are built character by character using pure JavaScript math, no libraries involved. They look surprisingly good in Slack’s monospace font. Type /jarvis-text with any name or word and it blows it up into giant 3D ASCII letters. Every letter from A to Z is hand-designed as a 4-row character glyph. You can pick from three styles — block, shadow, or banner. Type your name and suddenly you feel important. Type /jarvis-fun and pick from eight pre-built ASCII art pieces — a rocket, trophy, castle, robot, fire, crown, sword, or shield. It just drops it into the chat. No reason needed. And then there’s /jarvis-ping to check if the bot is alive, /jarvis-catfact for random cat facts, /jarvis-joke for a two-part joke from a live API, and /jarvis-help to list everything. Why We Built It Honestly? To learn. Building JARVIS gave us real hands-on experience with the Slack Bolt framework, slash command handling, socket mode setup, live API integration, and structuring a Node.js project properly with environment variables and a clean codebase. It’s a small project but it covers a lot of real ground. And beyond the learning — it’s just genuinely fun to type /jarvis-text with your name and see it explode into giant letters in your team channel. Built With Node.js · Slack Bolt · Socket Mode · Axios · dotenv · catfact.ninja API · Official Joke API"}]...
|
Title: My first slack bot! by @rhenisam2008 | Star Title: My first slack bot! by @rhenisam2008 | Stardance
Devlogs:
JARVIS — A Fun ASCII Art Slack Bot We spend most of our workday inside Slack, and sometimes you just want something in your workspace that makes you smile. That’s the only reason JARVIS exists. No overthinking it, no big grand purpose — just a fun little bot that does cool things with text. JARVIS is a lightweight Slack bot built with Node.js and the Slack Bolt framework. It runs in socket mode and responds to slash commands. That’s it. It doesn’t manage your tasks, it doesn’t send you reminders, it doesn’t ping you about deadlines. It just does one thing really well — it makes text look awesome inside Slack. What It Actually Does Type /jarvis-shape and give it a shape name and a size — it draws a 3D ASCII cube, pyramid, prism, cylinder, diamond, or cone right inside a code block. The shapes are built character by character using pure JavaScript math, no libraries involved. They look surprisingly good in Slack’s monospace font. Type /jarvis-text with any name or word and it blows it up into giant 3D ASCII letters. Every letter from A to Z is hand-designed as a 4-row character glyph. You can pick from three styles — block, shadow, or banner. Type your name and suddenly you feel important. Type /jarvis-fun and pick from eight pre-built ASCII art pieces — a rocket, trophy, castle, robot, fire, crown, sword, or shield. It just drops it into the chat. No reason needed. And then there’s /jarvis-ping to check if the bot is alive, /jarvis-catfact for random cat facts, /jarvis-joke for a two-part joke from a live API, and /jarvis-help to list everything. Why We Built It Honestly? To learn. Building JARVIS gave us real hands-on experience with the Slack Bolt framework, slash command handling, socket mode setup, live API integration, and structuring a Node.js project properly with environment variables and a clean codebase. It’s a small project but it covers a lot of real ground. And beyond the learning — it’s just genuinely fun to type /jarvis-text with your name and see it explode into giant letters in your team channel. Built With Node.js · Slack Bolt · Socket Mode · Axios · dotenv · catfact.ninja API · Official Joke API
Ships:
I made a bot for fun and relaxing who have less than 5 minutes. Pushing and pulling the file with git is challenging for me. I am proud that this is my first completed project....
|
1793242354.844029
|
1793328754.844029
|
|
17977
|
Lenny Face-er by @immaturegoat | Stardance
|
immaturegoat
|
1
|
2.0
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T15:07:56Z", "hours": 2.0, "multiplier": 2.88, "payout": 7, "blessing": "neutral", "text": "This is the Lenny Face-er, a python script that uses Tkinter and Pynput to allow you to open up a menu with 30 Lenny Faces at the press of Ctrl+Shift+Alt+L. On Mac, you can easily open up a menu for emojis, but it is much more difficult to use Lenny Faces. This project makes it much easier to find them and copy them, allowing for easy use in texting, projects, etc. Tkinter was used because I wanted a lightweight and small GUI, and Pygame seemed too heavy for this project. I used the Pynput library for detecting keypresses whenever. It works on Mac, Linux, and Windows thanks to the os library, which helps change settings of the project based on what OS you are running the script on.", "repo": "https://github.com/octaviustheking/lenny-face-er", "demo": "https://github.com/octaviustheking/lenny-face-er/releases/tag/v1.0.0"}]...
|
[{"post_id": 10637, "ts": "202 [{"post_id": 10637, "ts": "2026-06-17T14:25:20Z", "hours": 1.085, "text": "Holy cow, I fixed the scrolling issue! The code was working all along, it was just that I divided systems between Linux and Windows/Mac. I took delta and divided it by 120 for Windows AND Mac, but delta on Mac is so small that dividing it by 120 basically turns it into 0, so no scrolling occurred. I’ve fixed that, with the code shown below."}, {"post_id": 8645, "ts": "2026-06-14T11:28:58Z", "hours": 0.3194, "text": "The hotkey combination for opening the Lenny Face-er is Ctrl+Alt+Shift+L. Just added some (suspicious) code that makes it so when you press that combination again, it closes the popup. The highlighted sections in the screenshot show how it works, though it’s kind of suspicious as popup is set to None at first. (I wrote a lot in this devlog cuz the last one was… empty T-T)"}, {"post_id": 8052, "ts": "2026-06-13T13:08:13Z", "hours": 0.9331, "text": "Lenny Face-er Prototype complete"}]...
|
Title: Lenny Face-er by @immaturegoat | Stardance
Title: Lenny Face-er by @immaturegoat | Stardance
Devlogs:
Lenny Face-er Prototype complete
The hotkey combination for opening the Lenny Face-er is Ctrl+Alt+Shift+L. Just added some (suspicious) code that makes it so when you press that combination again, it closes the popup. The highlighted sections in the screenshot show how it works, though it’s kind of suspicious as popup is set to None at first. (I wrote a lot in this devlog cuz the last one was… empty T-T)
Holy cow, I fixed the scrolling issue! The code was working all along, it was just that I divided systems between Linux and Windows/Mac. I took delta and divided it by 120 for Windows AND Mac, but delta on Mac is so small that dividing it by 120 basically turns it into 0, so no scrolling occurred. I’ve fixed that, with the code shown below.
Ships:
This is the Lenny Face-er, a python script that uses Tkinter and Pynput to allow you to open up a menu with 30 Lenny Faces at the press of Ctrl+Shift+Alt+L. On Mac, you can easily open up a menu for emojis, but it is much more difficult to use Lenny Faces. This project makes it much easier to find them and copy them, allowing for easy use in texting, projects, etc. Tkinter was used because I wanted a lightweight and small GUI, and Pygame seemed too heavy for this project. I used the Pynput library for detecting keypresses whenever. It works on Mac, Linux, and Windows thanks to the os library, which helps change settings of the project based on what OS you are running the script on....
|
1793274534.3755023
|
1793360934.3755023
|
|
17979
|
The Remotepad! by @arthihalder | Stardance
|
arthihalder
|
1
|
2.15
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T10:42:23Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hackpad name: Remotepad GitHub Repo: https://github.com/bsastudio601/Remotepad Description: Its a 9 key macropad with an encoder and rgb lightning. I have planes to use it to control my rover and other projects.", "repo": "https://github.com/bsastudio601/Remotepad", "demo": ""}]...
|
[{"post_id": 69929, "ts": "202 [{"post_id": 69929, "ts": "2026-09-18T02:38:18Z", "hours": 0.9667, "text": "So this is the last dev log I received the kit a few days ago and finally put it all together though the firmware took ma a few tries. Im not installing the case right now cause i couldnnt find any priting sevice nearby but will print one once i get a 3d printer from hc !"}, {"post_id": 27667, "ts": "2026-07-13T13:11:37Z", "hours": 1.1861, "text": "hmm"}, {"post_id": 8802, "ts": "2026-06-14T16:49:18Z", "hours": 0.3014, "text": "starting the work on my custom macropad! this is my first iteration i might change the design in future :)"}]...
|
Title: The Remotepad! by @arthihalder | Stardance
Title: The Remotepad! by @arthihalder | Stardance
Devlogs:
starting the work on my custom macropad! this is my first iteration i might change the design in future :)
hmm
So this is the last dev log I received the kit a few days ago and finally put it all together though the firmware took ma a few tries. Im not installing the case right now cause i couldnnt find any priting sevice nearby but will print one once i get a 3d printer from hc !
Ships:
Hackpad name: Remotepad GitHub Repo: https://github.com/bsastudio601/Remotepad Description: Its a 9 key macropad with an encoder and rgb lightning. I have planes to use it to control my rover and other projects....
|
1793282046.101716
|
1793368446.101716
|
|
17994
|
Palette Forge by @DimensionLess | Stardance
|
DimensionLess
|
1
|
5.48
|
31
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T11:53:40Z", "hours": 4.0, "multiplier": 8.22, "payout": 31, "blessing": "neutral", "text": "Every time a developer builds a UI, they waste hours just picking colors. You look at a reference image, try to guess the hex codes, check if they look good together, test if the text is readable, and repeat until something works. It’s frustrating and eats into time that should be spent actually building. PaletteForge fixes this in one step. Upload any image and instantly get a complete color system — extracted colors, assigned roles, accessibility checks, font suggestions, and a presentation theme. Thirty seconds instead of two hours.", "repo": "https://github.com/6255127/Pallet-Forge", "demo": "https://6255127.github.io/Pallet-Forge/"}]...
|
[{"post_id": 19856, "ts": "202 [{"post_id": 19856, "ts": "2026-07-01T08:06:32Z", "hours": 0.4772, "text": "i added some new feature like figma tokens s as it is very useful when using figma and made sure all the export features are working properly"}, {"post_id": 19319, "ts": "2026-06-30T16:24:44Z", "hours": 1.0075, "text": "I fixed the Readme and also the UI , I used 21st.dev as for my UI and removed the unnecessary features and polished the app"}, {"post_id": 8604, "ts": "2026-06-14T09:40:04Z", "hours": 3.7442, "text": "Every time a developer builds a UI, they waste hours just picking colors. You look at a reference image, try to guess the hex codes, check if they look good together, test if the text is readable, and repeat until something works. It’s frustrating and eats into time that should be spent actually building. PaletteForge fixes this in one step. Upload any image and instantly get a complete color system — extracted colors, assigned roles, accessibility checks, font suggestions, and a presentation theme. Thirty seconds instead of two hours."}]...
|
Title: Palette Forge by @DimensionLess | Stardance Title: Palette Forge by @DimensionLess | Stardance
Devlogs:
Every time a developer builds a UI, they waste hours just picking colors. You look at a reference image, try to guess the hex codes, check if they look good together, test if the text is readable, and repeat until something works. It’s frustrating and eats into time that should be spent actually building. PaletteForge fixes this in one step. Upload any image and instantly get a complete color system — extracted colors, assigned roles, accessibility checks, font suggestions, and a presentation theme. Thirty seconds instead of two hours.
I fixed the Readme and also the UI , I used 21st.dev as for my UI and removed the unnecessary features and polished the app
i added some new feature like figma tokens s as it is very useful when using figma and made sure all the export features are working properly
Ships:
Every time a developer builds a UI, they waste hours just picking colors. You look at a reference image, try to guess the hex codes, check if they look good together, test if the text is readable, and repeat until something works. It’s frustrating and eats into time that should be spent actually building. PaletteForge fixes this in one step. Upload any image and instantly get a complete color system — extracted colors, assigned roles, accessibility checks, font suggestions, and a presentation theme. Thirty seconds instead of two hours....
|
1793123730.812512
|
1793210130.812512
|
|
17996
|
WiFi QR Generator by @Greg_ios | Stardance
|
Greg_ios
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T07:22:34Z", "hours": 2.0, "multiplier": 1.37, "payout": 3, "blessing": "neutral", "text": "A simple and efficient utility to generate QR codes for your WiFi network, allowing guests to connect instantly by scanning the code with their smartphones. This project comes in two versions: a Command Line Interface (CLI) and a Graphical User Interface (GUI).", "repo": "https://github.com/travletothefurureprogramming/WiFi-QR-Generator", "demo": "https://github.com/travletothefurureprogramming/WiFi-QR-Generator/releases/tag/v1.0.0"}]...
|
[{"post_id": 27596, "ts": "202 [{"post_id": 27596, "ts": "2026-07-13T09:54:32Z", "hours": 0.4175, "text": "Enchanse CLI app using questionary and start making a clean README with clear explanation on how to use it"}, {"post_id": 8672, "ts": "2026-06-14T12:31:46Z", "hours": 0.2517, "text": "Add some error handling⚠️ For example:"}, {"post_id": 8663, "ts": "2026-06-14T12:00:59Z", "hours": 0.45, "text": "I have add the ability to show the password and to print the QR but the print has some problems. Also from now you can select where to save the qr when you press generate"}, {"post_id": 8108, "ts": "2026-06-13T15:06:53Z", "hours": 0.4167, "text": "Make a basic GUI😀😀😀😀😀😀"}, {"post_id": 8088, "ts": "2026-06-13T14:41:36Z", "hours": 0.5336, "text": "Making the main generator in terminal!!!! Next Steps: GUI using CustomTkinter😀😀😀"}]...
|
Title: WiFi QR Generator by @Greg_ios | Stardance
Title: WiFi QR Generator by @Greg_ios | Stardance
Devlogs:
Making the main generator in terminal!!!! Next Steps: GUI using CustomTkinter😀😀😀
Make a basic GUI😀😀😀😀😀😀
I have add the ability to show the password and to print the QR but the print has some problems. Also from now you can select where to save the qr when you press generate
Add some error handling⚠️ For example:
Enchanse CLI app using questionary and start making a clean README with clear explanation on how to use it
Ships:
A simple and efficient utility to generate QR codes for your WiFi network, allowing guests to connect instantly by scanning the code with their smartphones. This project comes in two versions: a Command Line Interface (CLI) and a Graphical User Interface (GUI)....
|
1793145110.7552645
|
1793231510.7552645
|
|
18015
|
game by @arpanp590 | Stardance
|
arpanp590
|
1
|
5.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T11:22:34Z", "hours": 5.0, "multiplier": 1.12, "payout": 6, "blessing": "neutral", "text": "Just finished my first big push for Jump on Icy-Tower! I spent the last 5 hours getting the core movement down and figuring out how to make the platforms spawn randomly as you climb. The hardest part was definitely getting the character to actually land on the ice platforms without clipping through them—I had to mess around with the collision logic for a while until it finally clicked. I’m pretty happy with how the controls feel now. If you want to try it out, you can jump around on the platforms and see how high you can get! It’s still a work in progress, so feel free to let me know if it feels too hard or if you find any weird bugs. please control by arrow heys", "repo": "https://github.com/Pygame-Nepa/Jump-on-Ice", "demo": "https://jump-on-icebyarpan.netlify.app"}]...
|
[{"post_id": 13055, "ts": "202 [{"post_id": 13055, "ts": "2026-06-21T11:04:32Z", "hours": 5.0111, "text": "Just spent 5 hours grinding on my project, Jump on Icy-Tower. It’s definitely a work in progress, but I finally managed to get the main character moving and the platforms spawning randomly. It was super frustrating trying to get the hitboxes right, but it feels really rewarding to finally see it working in the browser. You can check it out here: jump-on-icebyarpan.netlify.app. Let me know what you think! But a note for you that if you need control opposite (tricky) then control by WASD but want not opposite control then control by arrow keys.I hope you like this game."}]...
|
Title: game by @arpanp590 | Stardance
Devlogs:
Ju Title: game by @arpanp590 | Stardance
Devlogs:
Just spent 5 hours grinding on my project, Jump on Icy-Tower. It’s definitely a work in progress, but I finally managed to get the main character moving and the platforms spawning randomly. It was super frustrating trying to get the hitboxes right, but it feels really rewarding to finally see it working in the browser. You can check it out here: jump-on-icebyarpan.netlify.app. Let me know what you think! But a note for you that if you need control opposite (tricky) then control by WASD but want not opposite control then control by arrow keys.I hope you like this game.
Ships:
Just finished my first big push for Jump on Icy-Tower! I spent the last 5 hours getting the core movement down and figuring out how to make the platforms spawn randomly as you climb. The hardest part was definitely getting the character to actually land on the ice platforms without clipping through them—I had to mess around with the collision logic for a while until it finally clicked. I’m pretty happy with how the controls feel now. If you want to try it out, you can jump around on the platforms and see how high you can get! It’s still a work in progress, so feel free to let me know if it feels too hard or if you find any weird bugs. please control by arrow heys...
|
1793220500.613026
|
1793306900.613026
|
|
18028
|
Remote PC Control & Monitoring Server by @Greg Remote PC Control & Monitoring Server by @Greg_ios | Stardance...
|
Greg_ios
|
1
|
3.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T11:42:16Z", "hours": 3.0, "multiplier": 5.99, "payout": 20, "blessing": "neutral", "text": "A web-based dashboard designed to monitor system performance and manage PC operations remotely. The Remote PC Control & Monitoring Server includes the following key features: System Monitoring Network Statistics System Uptime Power Management Media Control Process Tracking Battery Status Responsive UI", "repo": "https://github.com/travletothefurureprogramming/Remote-PC-Control---Monitoring-Server", "demo": "https://github.com/travletothefurureprogramming/Remote-PC-Control---Monitoring-Server/releases/tag/FirstRelease"}]...
|
[{"post_id": 13635, "ts": "202 [{"post_id": 13635, "ts": "2026-06-22T11:23:31Z", "hours": 0.3303, "text": "Start creating a clean README.md and publish the first github release of the project."}, {"post_id": 10835, "ts": "2026-06-17T19:36:33Z", "hours": 0.6656, "text": "New features on Remote PC Control & Monitoring Server 1. Add Uptime Card 2. Add processes track"}, {"post_id": 9300, "ts": "2026-06-15T16:50:01Z", "hours": 0.4303, "text": "Make a modern UI using bootstrap👍👍"}, {"post_id": 9286, "ts": "2026-06-15T16:17:20Z", "hours": 0.5197, "text": "Add volume control in the backend and in the UI😀😀👍👍"}, {"post_id": 9255, "ts": "2026-06-15T15:22:18Z", "hours": 0.4064, "text": "Add sleep pc option and the button in the UI"}, {"post_id": 9206, "ts": "2026-06-15T13:40:13Z", "hours": 0.3606, "text": "Add disk and net usage in the UI"}, {"post_id": 8913, "ts": "2026-06-14T20:46:40Z", "hours": 0.2975, "text": "Make a better UI"}, {"post_id": 8905, "ts": "2026-06-14T20:27:58Z", "hours": 0.4158, "text": "Make the main backend and a basic inferance"}]...
|
Title: Remote PC Control & Monitoring Server b Title: Remote PC Control & Monitoring Server by @Greg_ios | Stardance
Devlogs:
Make the main backend and a basic inferance
Make a better UI
Add disk and net usage in the UI
Add sleep pc option and the button in the UI
Add volume control in the backend and in the UI😀😀👍👍
Make a modern UI using bootstrap👍👍
New features on Remote PC Control & Monitoring Server 1. Add Uptime Card 2. Add processes track
Start creating a clean README.md and publish the first github release of the project.
Ships:
A web-based dashboard designed to monitor system performance and manage PC operations remotely. The Remote PC Control & Monitoring Server includes the following key features: System Monitoring Network Statistics System Uptime Power Management Media Control Process Tracking Battery Status Responsive UI...
|
1793134179.0076847
|
1793220579.0076847
|
|
18029
|
Chip8-Emulator by @ashish-raj-singh | Stardance
|
ashish-raj-singh
|
1
|
15.15
|
273
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T10:14:53Z", "hours": 14.0, "multiplier": 18.94, "payout": 273, "blessing": "neutral", "text": "Chip-8 Emulator I built a cross-platform CHIP-8 Emulator from the ground up using C++ and Raylib. It accurately emulates the original 1970s hardware, from the display rendering (60Hz) for authentic gameplay, complete with automated CI & releases for Windows, Mac, and Linux. Emulator Comes with some preloaded .ch8 binaries and you can import your own custom or internet downloaded binaries as well. Coming from High Level programing (Web Development), this low level project was new and i am now in love with low level concepts. What was challenging? Fighting the operating systems to actually let people play it! The C++ emulation logic was fun, but building the CI/CD pipeline to statically link Raylib from source to escape Windows “DLL Hell” was a nightmare. I also spent way too much time trying to hide the developer console to make it look “professional,” only to realize keeping the console is the only way to stop Windows Defender and Apple Gatekeeper from immediately flagging a statically-linked .exe as a virus. Other then just coding, a lot of time was invested in reading references, making the application actullay Runnable on different platforms Proud? Creating a GUI in c++, and actually implementing something in C++, not just doing Data Structure and Algorithm, but actually implemented something in C++. Leanrnign all these low level concepts about cpu, register, display screen, complier & linker, building cross platforn applications. The fully automated, zero-touch CI/CD pipeline. Right now, I can type git push origin v1.0, and GitHub Actions automatically spins up Mac, Windows, and Linux servers, clones the pure Raylib source code, compiles it from scratch, statically links it to my emulator, and spits out three perfectly zipped, ready-to-play release files. It feels like production ready.", "repo": "https://github.com/ashish757/Chip8-Emulator", "demo": "https://github.com/ashish757/Chip8-Emulator/releases"}]...
|
[{"post_id": 13769, "ts": "202 [{"post_id": 13769, "ts": "2026-06-22T15:55:36Z", "hours": 1.1486, "text": "Devlog Updated Readme files, and wrote down some technical details"}, {"post_id": 13341, "ts": "2026-06-21T21:13:02Z", "hours": 3.4903, "text": "Devlog 5: Making it Beep Last time, I talked about how Continuous Integration was eating my time, Windows was demanding my soul with missing DLLs, and Apple Gatekeeper was holding my app hostage for $99. This time, I fought back. The emulator is now completely polished, actually sounds like a retro console, and distributes like a real, professional application. Here is what went down. It Beeps now The CHIP-8 doesn’t have a sound card. It basically has a timer attached to a buzzer. If the soundTimer register is greater than 0, it beeps. It ticks down at exactly 60Hz. I basically wrote some code in c++ to generate a square wave, and used raylib’s audioPlayer to support classic beep sound of chip 8. Production (The Illusion of Polish) Originally, I hated that a black developer console popped up behind the Emulator. It screamed unfinished project. So, I spent hours engineering it out. On Windows, I added the -mwindows flag to the compiler to change it from a Console App to a pure GUI App . On Mac, I completely rewrote my CI pipeline to generate a standard Apple .app folder structure so it would look like a commercial application. the result? Total disaster. Because my newly polished Windows .exe was a standalone GUI application without a digital signature, Windows Defender immediately flagged it as a virus. Meanwhile, Apple’s Gatekeeper still blocked the .app bundle because I refuse to pay Tim Cook $99 a year. The Real Solution: I reverted it all. I am keeping the console. Git always has one more feature (Isn’t god’s another name linus?) This was my first time actually using the tag feature of git in practical life, i after git push v1.1.0 i was wondering the new releases are created, code editor says everything is uptpdate with remote, but why the hell my gihub does not shows new code, and guess waht branch and tags need to be updated seperately. Checkout latest release"}, {"post_id": 12675, "ts": "2026-06-20T18:21:32Z", "hours": 4.4206, "text": "Devlog - Almost completed this time (almostt) This time my goal was to convert this basic chip8 emulator in to something any user can use coming from web development background, creating ui in C++ raylib was completely new. No concept of ui elements here, cant just attach event listeners to button like we do in javascriot What happens here is - you create a rectangle, put some text in it, this becomes your button then there is a constant loop running, which erases and redraws everything on the screen 60 times per second, just like a game loop. now to detect mouse hover, or click, we need to constantly tract the mouse position 60 times a second , and check if it overlaps the coordinates of a button But i found an interesting piece of code raygui , written by the original creator of the raylib it basically removes the manual need of tracking the cursor position and checking them with the coordinates of the ui elements, it handles click and hovers. custom ROM import support I wanted users to be able to run any .ch8 program they wanted to run. I simply opened up a native dialog to select a .ch8 file and run it on the emulator. I used AppleScript on Mac to trigger the file picker, but on Windows , I had to pull up a shell in the background The Final Boss: CI and distribution This is actually a big time eater, while implementing Continuous Integration i did countless iterations solving dumb errors, adjusting platform depended configs and so on… but results are just as fin, now automatic releases are created for every tag. distribution macos blocks applications from unknown developer (i need to pay $99/yr to get verified, Best of luck with that Tim Cook ), to fix this i am thinking to create standard .app structure not sure but it might tame the apple gatekeeper. Apple wanted my money ($99), Windows won’t be happy without taking my soul Like hell, every here and there windows throws some error be it missing dll or path problems or linker issue. the biggest hurdle was that I don’t have access to a windows machine, I had to ping my non-tech friend with new .exe file each time. (aah friends are a blessing, aren’t they, my friend? huh?) Checkout lateset release (supports mac and windows, can’t say about linux for sure) running on mac open the executbale file inside the zip (i wont run, but it is required to open at least once) Open System Settings go to privacy and security scroll down there you will se option to open anyway each time you will have to run the application this way in mac (sorry i dont really have $99) Can anyone with linux please let me know if it works (i am to lazy to install VMWare ) one more thing supported keys are (inspired from original chip-8 keys) 1 2 3 4 q w e r a s d f z x c v use thses keys to give input, nothing else will work (other keys only work in launcher interface like backspace to get back to menu form emulator )"}, {"post_id": 12031, "ts": "2026-06-19T16:56:33Z", "hours": 3.5406, "text": "Devlog 3. The emulator is almost completed and and can run .ch8 binaries not fully complete it still requires some polishing like right now the graphics is flickering a bit, probably due to a bug in graphics engine logic or I might need to change how fast cycles are being executed. Checkout my previous devlogs to know what is chip8? What this time? This time I felt like nobody in the world can explain the logic to translate those opCodes. Coming from high level low level is absolute new, i thought I might find some resemblance (guess what?? I was wrong) I still can’t say in understand it 100%, but the struggle is on Here’s what I learnt and built. we load the ch8 binary file -> Save instruction in the RAM -> a continuous while loop which executes each instruction code How does the program even runs? Basically there is a while loop, which keeps on running unless user closes the program or program ends This is where we write logic to find which instruction code to execute next Control the execution speed (clock speed of cpu) Map keyboard events (more on this below) How do we know what code to run next? There is a function executeCycle , inside this funciotn we have - A variable programCounter which tracks the current instruction code position and calculates next one too. Then we have a huge switch case flow, which basically maps all the 35 standard instruction codes form chip8 to modern computer. Then based upon the code, we perform tasks like painting a pixel or change some data in RAM. To keep this short, I will not get into the details about translating the chip8 instruction. Biggest man in the room - Graphics Engine (XOR) we basically have black and white screen, 64px length and 32px height (we use multiplier so the size is not exactly 64x32, as that will be two small) we then have 1s, 0s to represent black and white pixels the engine basically deleted every pixel and re draws it again, this causes a flashing effect as moder screens are faster and also show the transition. Collision detection the value of a pixel is set to 1 (white) and 0 (black) We take XOR of the Current value of the pixel and the to be updated value if two pixels are white (1) the xor will be 0, and when this happens we set the Vf to 1, indicating a collision has occured. Vf is the 16th register which is left empty and use only to show collision. Keypad keypad The original chip8 keypad was like this Chip8 Modern keyboard 1 2 3 C 1 2 3 4 4 5 6 D ---> Q W E R 7 8 9 E A S D F A 0 B F Z X C V What’s left implement UI to control chip 8 settings like speed, screen size etc. Add a list of software that user can run, as well as option to run his own"}, {"post_id": 8594, "ts": "2026-06-14T09:16:53Z", "hours": 2.0333, "text": "Decades old Low level concepts are still haunting.. (Chip 8 Interpreter) This is my first time building a proper low level project. (Strong Man Crying 😭) its tough i had to study new architechures, understand memory bottlenecks, i spent aout 10% time writing code and rest learing , reading Chip8 technical references, banging head to AI to explain the low level memory concepts (So Exciting its an Automatic All-Nighter puller) And .. heres what i learnt waht is chip 8? chip 8 basically a a interpreted programing language of ancient times (70s). It kind of mimics a small computer (8 bit) , limiting its max memory to 4KB . But the special thing is, its not just a language, it mimics a CPU architecture, making it like a different computer system which doesnt exists phycally, but uses other physical computer to run its own acrhitecture. What is Emulator Well think of emulator as a extra added layer between the software and low level computer systems. which does some magic to run a software which is not ment to run on that system. Windows Application –> macOS (Won’t Run) Windows Application –> Emulator –> macOS (Will Run) Flow Lets say we have a software S, designed to run on System of type C1, but now we want to run the same software on a different system lets say C2, S –> C1 RUNs properly S –> C2 Fails as C2 cant understand the instruction that software S is trying to give to C2 Emulator in the picture Software S (instruction codes for C1 ) –> Emulator (Translates Instruction code for C1 to C2) –> now C2 can run (Translated instructions). Now Chip8 Emulator Lets say you have a program which was designed in and for Chip8, but now you dont have a chip8 system, how do you run this program? We basically use an emulator to trick the software to thing that its running in the old Chip8 system but its acctually running on moder computers. Howwwwww? well Chip8 has 35 standard instructions and only 4096 bytes of memory, so its faily easy to map each and every of its instruction and instead do it in the modern langauges (like i have used C++). We store the data in modern C++ Data Structures , but we trick the target software to thing that it has dorect acces to the RAM of the computer. Current Status implemnted the basic template to mimic real RAM for chip 8, which is basicaly an array of size 4096 , weher first 200 are reserved for the chip8 system use, rest is opent to softwares running on it. I have translated some basic codes, more on this in next devlog A black window with raylib for now"}, {"post_id": 8183, "ts": "2026-06-13T17:09:05Z", "hours": 1.0097, "text": "Building an Chip 8 Emulator This is like my first proper project in low level programing I wanted to take on the low level for a long time, took the chance this time I know only the basics of chip 8 interpreter , I read cowgod’s chip8 technical reference last night this is gonna be a very learning and building like thing, been into the high level for over 5 (Full Stack) years now, hope I can find some similarities and help from my past experiences in to the low level is anyone of you guys (gods) know about low level or specifically chip8 , please drop a comment because I thing I am too going to need babysitting 😭"}]...
|
Title: Chip8-Emulator by @ashish-raj-singh | Stard Title: Chip8-Emulator by @ashish-raj-singh | Stardance
Devlogs:
Building an Chip 8 Emulator This is like my first proper project in low level programing I wanted to take on the low level for a long time, took the chance this time I know only the basics of chip 8 interpreter , I read cowgod’s chip8 technical reference last night this is gonna be a very learning and building like thing, been into the high level for over 5 (Full Stack) years now, hope I can find some similarities and help from my past experiences in to the low level is anyone of you guys (gods) know about low level or specifically chip8 , please drop a comment because I thing I am too going to need babysitting 😭
Decades old Low level concepts are still haunting.. (Chip 8 Interpreter) This is my first time building a proper low level project. (Strong Man Crying 😭) its tough i had to study new architechures, understand memory bottlenecks, i spent aout 10% time writing code and rest learing , reading Chip8 technical references, banging head to AI to explain the low level memory concepts (So Exciting its an Automatic All-Nighter puller) And .. heres what i learnt waht is chip 8? chip 8 basically a a interpreted programing language of ancient times (70s). It kind of mimics a small computer (8 bit) , limiting its max memory to 4KB . But the special thing is, its not just a language, it mimics a CPU architecture, making it like a different computer system which doesnt exists phycally, but uses other physical computer to run its own acrhitecture. What is Emulator Well think of emulator as a extra added layer between the software and low level computer systems. which does some magic to run a software which is not ment to run on that system. Windows Application –> macOS (Won’t Run) Windows Application –> Emulator –> macOS (Will Run) Flow Lets say we have a software S, designed to run on System of type C1, but now we want to run the same software on a different system lets say C2, S –> C1 RUNs properly S –> C2 Fails as C2 cant understand the instruction that software S is trying to give to C2 Emulator in the picture Software S (instruction codes for C1 ) –> Emulator (Translates Instruction code for C1 to C2) –> now C2 can run (Translated instructions). Now Chip8 Emulator Lets say you have a program which was designed in and for Chip8, but now you dont have a chip8 system, how do you run this program? We basically use an emulator to trick the software to thing that its running in the old Chip8 system but its acctually running on moder computers. Howwwwww? well Chip8 has 35 standard instructions and only 4096 bytes of memory, so its faily easy to map each and every of its instruction and instead do it in the modern langauges (like i have used C++). We store the data in modern C++ Data Structures , but we trick the target software to thing that it has dorect acces to the RAM of the computer. Current Status implemnted the basic template to mimic real RAM for chip 8, which is basicaly an array of size 4096 , weher first 200 are reserved for the chip8 system use, rest is opent to softwares running on it. I have translated some basic codes, more on this in next devlog A black window with raylib for now
Devlog 3. The emulator is almost completed and and can run .ch8 binaries not fully complete it still requires some polishing like right now the graphics is flickering a bit, probably due to a bug in graphics engine logic or I might need to change how fast cycles are being executed. Checkout my previous devlogs to know what is chip8? What this time? This time I felt like nobody in the world can explain the logic to translate those opCodes. Coming from high level low level is absolute new, i thought I might find some resemblance (guess what?? I was wrong) I still can’t say in understand it 100%, but the struggle is on Here’s what I learnt and built. we load the ch8 binary file -> Save instruction in the RAM -> a continuous while loop which executes each instruction code How does the program even runs? Basically there is a while loop, which keeps on running unless user closes the program or program ends This is where we write logic to find which instruction code to execute next Control the execution speed (clock speed of cpu) Map keyboard events (more on this below) How do we know what code to run next? There is a function executeCycle , inside this funciotn we have - A variable programCounter which tracks the current instruction code position and calculates next one too. Then we have a huge switch case flow, which basically maps all the 35 standard instruction codes form chip8 to modern computer. Then based upon the code, we perform tasks like painting a pixel or change some data in RAM. To keep this short, I will not get into the details about translating the chip8 instruction. Biggest man in the room - Graphics Engine (XOR) we basically have black and white screen, 64px length and 32px height (we use multiplier so the size is not exactly 64x32, as that will be two small) we then have 1s, 0s to represent black and white pixels the engine basically deleted every pixel and re draws it again, this causes a flashing effect as moder screens are faster and also show the transition. Collision detection the value of a pixel is set to 1 (white) and 0 (black) We take XOR of the Current value of the pixel and the to be updated value if two pixels are white (1) the xor will be 0, and when this happens we set the Vf to 1, indicating a collision has occured. Vf is the 16th register which is left empty and use only to show collision. Keypad keypad The original chip8 keypad was like this Chip8 Modern keyboard 1 2 3 C 1 2 3 4 4 5 6 D ---> Q W E R 7 8 9 E A S D F A 0 B F Z X C V What’s left implement UI to control chip 8 settings like speed, screen size etc. Add a list of software that user can run, as well as option to run his own
Devlog - Almost completed this time (almostt) This time my goal was to convert this basic chip8 emulator in to something any user can use coming from web development background, creating ui in C++ raylib was completely new. No concept of ui elements here, cant just attach event listeners to button like we do in javascriot What happens here is - you create a rectangle, put some text in it, this becomes your button then there is a constant loop running, which erases and redraws everything on the screen 60 times per second, just like a game loop. now to detect mouse hover, or click, we need to constantly tract the mouse position 60 times a second , and check if it overlaps the coordinates of a button But i found an interesting piece of code raygui , written by the original creator of the raylib it basically removes the manual need of tracking the cursor position and checking them with the coordinates of the ui elements, it handles click and hovers. custom ROM import support I wanted users to be able to run any .ch8 program they wanted to run. I simply opened up a native dialog to select a .ch8 file and run it on the emulator. I used AppleScript on Mac to trigger the file picker, but on Windows , I had to pull up a shell in the background The Final Boss: CI and distribution This is actually a big time eater, while implementing Continuous Integration i did countless iterations solving dumb errors, adjusting platform depended configs and so on… but results are just as fin, now automatic releases are created for every tag. distribution macos blocks applications from unknown developer (i need to pay $99/yr to get verified, Best of luck with that Tim Cook ), to fix this i am thinking to create standard .app structure not sure but it might tame the apple gatekeeper. Apple wanted my money ($99), Windows won’t be happy without taking my soul Like hell, every here and there windows throws some error be it missing dll or path problems or linker issue. the biggest hurdle was that I don’t have access to a windows machine, I had to ping my non-tech friend with new .exe file each time. (aah friends are a blessing, aren’t they, my friend? huh?) Checkout lateset release (supports mac and windows, can’t say about linux for sure) running on mac open the executbale file inside the zip (i wont run, but it is required to open at least once) Open System Settings go to privacy and security scroll down there you will se option to open anyway each time you will have to run the application this way in mac (sorry i dont really have $99) Can anyone with linux please let me know if it works (i am to lazy to install VMWare ) one more thing supported keys are (inspired from original chip-8 keys) 1 2 3 4 q w e r a s d f z x c v use thses keys to give input, nothing else will work (other keys only work in launcher interface like backspace to get back to menu form emulator )
Devlog 5: Making it Beep Last time, I talked about how Continuous Integration was eating my time, Windows was demanding my soul with missing DLLs, and Apple Gatekeeper was holding my app hostage for $99. This time, I fought back. The emulator is now completely polished, actually sounds like a retro console, and distributes like a real, professional application. Here is what went down. It Beeps now The CHIP-8 doesn’t have a sound card. It basically has a timer attached to a buzzer. If the soundTimer register is greater than 0, it beeps. It ticks down at exactly 60Hz. I basically wrote some code in c++ to generate a square wave, and used raylib’s audioPlayer to support classic beep sound of chip 8. Production (The Illusion of Polish) Originally, I hated that a black developer console popped up behind the Emulator. It screamed unfinished project. So, I spent hours engineering it out. On Windows, I added the -mwindows flag to the compiler to change it from a Console App to a pure GUI App . On Mac, I completely rewrote my CI pipeline to generate a standard Apple .app folder structure so it would look like a commercial application. the result? Total disaster. Because my newly polished Windows .exe was a standalone GUI application without a digital signature, Windows Defender immediately flagged it as a virus. Meanwhile, Apple’s Gatekeeper still blocked the .app bundle because I refuse to pay Tim Cook $99 a year. The Real Solution: I reverted it all. I am keeping the console. Git always has one more feature (Isn’t god’s another name linus?) This was my first time actually using the tag feature of git in practical life, i after git push v1.1.0 i was wondering the new releases are created, code editor says everything is uptpdate with remote, but why the hell my gihub does not shows new code, and guess waht branch and tags need to be updated seperately. Checkout latest release
Devlog Updated Readme files, and wrote down some technical details
Ships:
Chip-8 Emulator I built a cross-platform CHIP-8 Emulator from the ground up using C++ and Raylib. It accurately emulates the original 1970s hardware, from the display rendering (60Hz) for authentic gameplay, complete with automated CI & releases for Windows, Mac, and Linux. Emulator Comes with some preloaded .ch8 binaries and you can import your own custom or internet downloaded binaries as well. Coming from High Level programing (Web Development), this low level project was new and i am now in love with low level concepts. What was challenging? Fighting the operating systems to actually let people play it! The C++ emulation logic was fun, but building the CI/CD pipeline to statically link Raylib from source to escape Windows “DLL Hell” was a nightmare. I also spent way too much time trying to hide the developer console to make it look “professional,” only to realize keeping the console is the only way to stop Windows Defender and Apple Gatekeeper from immediately flagging a statically-linked .exe as a virus. Other then just coding, a lot of time was invested in reading references, making the application actullay Runnable on different platforms Proud? Creating a GUI in c++, and actually implementing something in C++, not just doing Data Structure and Algorithm, but actually implemented something in C++. Leanrnign all these low level concepts about cpu, register, display screen, complier & linker, building cross platforn applications. The fully automated, zero-touch CI/CD pipeline. Right now, I can type git push origin v1.0, and GitHub Actions automatically spins up Mac, Windows, and Linux servers, clones the pure Raylib source code, compiles it from scratch, statically links it to my emulator, and spits out three perfectly zipped, ready-to-play release files. It feels like production ready....
|
1793134102.4953122
|
1793220502.4953122
|
|
18041
|
columbus by @sivaprakashkrp | Stardance
|
sivaprakashkrp
|
1
|
3.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T11:49:38Z", "hours": 3.0, "multiplier": 12.09, "payout": 36, "blessing": "neutral", "text": "I worked on columbus which is a GUI like TUI file manager. I worked on implementing custom colour themes in columbus. With that, I refactored some code, fixed some bugs and released the stable version of columbus.", "repo": "https://github.com/sivaprakashkrp/columbus", "demo": "https://github.com/sivaprakashkrp/columbus/releases/latest"}]...
|
[{"post_id": 9333, "ts": "2026 [{"post_id": 9333, "ts": "2026-06-15T17:34:34Z", "hours": 2.1806, "text": "Implemented a way to customize color theme through a color_theme.toml file. Fixed some bugs that caused compilation errors in Linux. Added columbus to the awesome-ratatui list repository. Released 2 move versions of columbus in crates.io because the first release had a bug. Released the latest version to the AUR."}, {"post_id": 8121, "ts": "2026-06-13T15:43:04Z", "hours": 0.7953, "text": "Added “/” to the end of directory names in the Explorer. Added confirmation for delete feature. Refactored some old code."}]...
|
Title: columbus by @sivaprakashkrp | Stardance
De Title: columbus by @sivaprakashkrp | Stardance
Devlogs:
Added “/” to the end of directory names in the Explorer. Added confirmation for delete feature. Refactored some old code.
Implemented a way to customize color theme through a color_theme.toml file. Fixed some bugs that caused compilation errors in Linux. Added columbus to the awesome-ratatui list repository. Released 2 move versions of columbus in crates.io because the first release had a bug. Released the latest version to the AUR.
Ships:
I worked on columbus which is a GUI like TUI file manager. I worked on implementing custom colour themes in columbus. With that, I refactored some code, fixed some bugs and released the stable version of columbus....
|
1793119896.2886994
|
1793206296.2886994
|
|
18050
|
Game Website by @wrogers1616 | Stardance
|
wrogers1616
|
1
|
65.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T02:15:13Z", "hours": 65.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website that contains the games I made over the summer. This version isn’t fully functional without using external sites as I had trouble with conflicting variables.", "repo": "https://github.com/wrogers1616-byte/button-games", "demo": "https://onecompiler.com/html/44pfq4e8p"}]...
|
[{"post_id": 47254, "ts": "202 [{"post_id": 47254, "ts": "2026-08-15T01:51:39Z", "hours": 64.9825, "text": "I created a website with multiple games on it"}]...
|
Title: Game Website by @wrogers1616 | Stardance
D Title: Game Website by @wrogers1616 | Stardance
Devlogs:
I created a website with multiple games on it
Ships:
I made a website that contains the games I made over the summer. This version isn’t fully functional without using external sites as I had trouble with conflicting variables....
|
1793123255.7266753
|
1793209655.7266753
|
|
18061
|
My first slack bot! by @citunek22 | Stardance
|
citunek22
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T13:44:28Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slackbot for weather because it’s the most basic thing and i made a command called what is above me that is like which airplanes because i like planes. Then i made a command for currency exchange because when you travel you want to know how much it is. This is all hosted on Hackclub Nest which is good because it’s free. This project was like 50/50 because sometimes i didn’t understand something so gemini helped me with debugging i hope that you lik my idea and u use it thanks for your patience. And the funny thing is that i had to name my command the-original-weather because there were many weathers.", "repo": "https://github.com/ItsHonza48/The-Original-Slack-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BHTMNJM0B"}]...
|
[{"post_id": 29482, "ts": "202 [{"post_id": 29482, "ts": "2026-07-16T13:36:24Z", "hours": 1.8203, "text": "So i know i am late but it works and sorry i will make this devlog and right after that i will ship it because i forgot to ship it and write a devlog. I hope you like this and sorry that this is in czech."}]...
|
Title: My first slack bot! by @citunek22 | Stardan Title: My first slack bot! by @citunek22 | Stardance
Devlogs:
So i know i am late but it works and sorry i will make this devlog and right after that i will ship it because i forgot to ship it and write a devlog. I hope you like this and sorry that this is in czech.
Ships:
I made a slackbot for weather because it’s the most basic thing and i made a command called what is above me that is like which airplanes because i like planes. Then i made a command for currency exchange because when you travel you want to know how much it is. This is all hosted on Hackclub Nest which is good because it’s free. This project was like 50/50 because sometimes i didn’t understand something so gemini helped me with debugging i hope that you lik my idea and u use it thanks for your patience. And the funny thing is that i had to name my command the-original-weather because there were many weathers....
|
1793267649.0529647
|
1793354049.0529647
|
|
18063
|
The Family Plan by @28taidan | Stardance
|
28taidan
|
1
|
10.0
|
105
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:09:37Z", "hours": 10.0, "multiplier": 10.69, "payout": 105, "blessing": "neutral", "text": "The Family Plan helps manage logistics for families that have to manage driving their kids around to different extracurriculars all the time. Just put in when drivers are available, and when and where kids need to be, and it calculates the most optimal plan to get everyone where they need to be with as little time in the car as possible. I was inspired to make this project because my mom spends hours every weekend trying to come up with a plan for how to get me and my siblings to all of our various after school activities. I made this to try to simplify and speed up the process, and also include the rest of the family in that process (since they can simply put in when they are available and when they need to be picked up/dropped off). Something that was challenging was figuring out how to get the most optimal plan. I knew that it would involve getting people to spend the least amount of time in the car (adjusting for tiers, or how important a person’s time is), but it was complicated to figure out how to do that. The key realization was that you can’t decide who carpools by looking at directions on a map. Two kids heading “opposite” ways might still share a ride if one stop is on the road to the other. So instead the app asks a routing engine for real drive times and pools rides whenever the extra driving is small enough to be worth it. This breaks slightly whenever the destinations don’t have an address (since the engine I use for that, OSRM, is incomplete), since then it doesn’t have drive times. However, it works well enough for now. To use, just go to the website (hosted on Vercel), and create a new family. Add some drivers and kids, and play around with the routing system. Hopefully this is useful!", "repo": "https://github.com/Luchik28/TheFamilyPlan", "demo": "https://the-family-plan.vercel.app/"}]...
|
[{"post_id": 14477, "ts": "202 [{"post_id": 14477, "ts": "2026-06-23T16:39:32Z", "hours": 4.7769, "text": "Finished the planning logic, and some final bug fixes before shipping. The planning works by assigning tiers to each person, which prioritizes their time over other people’s time. So in case like someone really doesn’t like driving people around, you can give them a high tier and it will try to protect their time more. It then runs through all the possible plans (which is really inefficient but works, since there’s not too many possible plans), to find one that works well. I also did some bug fixes, cleaning up the UI and other things from the fixes. Some things I still might add in the future are allowing people to integrate their calendars, email/text all the per person weekly plans to people directly instead of just downloading the images, and better tracking for where each driver is (it assumes the driver starts from home, but this is unrealistic, since the driver probably goes to work or something in the middle of the day. But they wouldn’t put that in the plan, since it doesn’t have anything to do with driving their kid around), so I might try to find out how to fix that. But I want to ship it first to get feedback on the core process."}, {"post_id": 9019, "ts": "2026-06-15T01:31:30Z", "hours": 2.2608, "text": "Working on UX improvements! I fixed a bunch of bugs, for example overlapping events saying “I’m available” are combined into one, for simplicity. The idea is that each person goes in to put in their availability, so I made it that you choose a person and edit only their location/availability, so they don’t have to see stuff that’s not relevant to them (it gets greyed out). Next, I am working on the core of the project, the planning logic. The idea is to build an algorithm to find the lowest amount of total hours everyone. I think I’d probably need some kind of greedy algorithm, but I’m not sure yet."}, {"post_id": 8644, "ts": "2026-06-14T11:26:10Z", "hours": 1.9469, "text": "I did some UI improvements and bug fixes to putting down a kid’s dropoff/pickup time, and also added location data to each dropoff/pickup point using Photon and OSRM, so I can estimate the travel time and when the kid has to leave to get there on time."}, {"post_id": 8282, "ts": "2026-06-13T19:34:31Z", "hours": 0.8928, "text": "Setting up a basic calendar view, as well as Vercel. I’m using Vercel’s Neon for storage because of it’s great free tier."}]...
|
Title: The Family Plan by @28taidan | Stardance
D Title: The Family Plan by @28taidan | Stardance
Devlogs:
Setting up a basic calendar view, as well as Vercel. I’m using Vercel’s Neon for storage because of it’s great free tier.
I did some UI improvements and bug fixes to putting down a kid’s dropoff/pickup time, and also added location data to each dropoff/pickup point using Photon and OSRM, so I can estimate the travel time and when the kid has to leave to get there on time.
Working on UX improvements! I fixed a bunch of bugs, for example overlapping events saying “I’m available” are combined into one, for simplicity. The idea is that each person goes in to put in their availability, so I made it that you choose a person and edit only their location/availability, so they don’t have to see stuff that’s not relevant to them (it gets greyed out). Next, I am working on the core of the project, the planning logic. The idea is to build an algorithm to find the lowest amount of total hours everyone. I think I’d probably need some kind of greedy algorithm, but I’m not sure yet.
Finished the planning logic, and some final bug fixes before shipping. The planning works by assigning tiers to each person, which prioritizes their time over other people’s time. So in case like someone really doesn’t like driving people around, you can give them a high tier and it will try to protect their time more. It then runs through all the possible plans (which is really inefficient but works, since there’s not too many possible plans), to find one that works well. I also did some bug fixes, cleaning up the UI and other things from the fixes. Some things I still might add in the future are allowing people to integrate their calendars, email/text all the per person weekly plans to people directly instead of just downloading the images, and better tracking for where each driver is (it assumes the driver starts from home, but this is unrealistic, since the driver probably goes to work or something in the middle of the day. But they wouldn’t put that in the plan, since it doesn’t have anything to do with driving their kid around), so I might try to find out how to fix that. But I want to ship it first to get feedback on the core process.
Ships:
The Family Plan helps manage logistics for families that have to manage driving their kids around to different extracurriculars all the time. Just put in when drivers are available, and when and where kids need to be, and it calculates the most optimal plan to get everyone where they need to be with as little time in the car as possible. I was inspired to make this project because my mom spends hours every weekend trying to come up with a plan for how to get me and my siblings to all of our various after school activities. I made this to try to simplify and speed up the process, and also include the rest of the family in that process (since they can simply put in when they are available and when they need to be picked up/dropped off). Something that was challenging was figuring out how to get the most optimal plan. I knew that it would involve getting people to spend the least amount of time in the car (adjusting for tiers, or how important a person’s time is), but it was complicated to figure out how to do that. The key realization was that you can’t decide who carpools by looking at directions on a map. Two kids heading “opposite” ways might still share a ride if one stop is on the road to the other. So instead the app asks a routing engine for real drive times and pools rides whenever the extra driving is small enough to be worth it. This breaks slightly whenever the destinations don’t have an address (since the engine I use for that, OSRM, is incomplete), since then it doesn’t have drive times. However, it works well enough for now. To use, just go to the website (hosted on Vercel), and create a new family. Add some drivers and kids, and play around with the routing system. Hopefully this is useful!...
|
1792878594.033057
|
1793742594.033057
|
|
18068
|
My awesome macropad! by @ItaloJDev | Stardance
|
ItaloJDev
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T00:46:20Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a custom macropad with 6 keys, a rotary encoder, an OLED display, a custom PCB, and a 3D printed case. The most challenging part was designing the PCB and making sure all the components were connected correctly. I spent a lot of time learning KiCad and checking the schematic before finishing the board. I’m proud that I designed the hardware myself and turned the idea into a real project instead of using an existing design. To test the project, connect it to a computer using USB. The keys can be programmed for shortcuts and productivity tasks, while the encoder controls media functions such as volume. The OLED display provides visual feedback for the current mode and actions.", "repo": "https://github.com/neymardashopepaulwalker-blip/IronMind", "demo": ""}]...
|
[{"post_id": 10963, "ts": "202 [{"post_id": 10963, "ts": "2026-06-17T23:42:10Z", "hours": 0.3003, "text": "everyone here know how to get rate or rate others projects? I totaly new at that!"}, {"post_id": 9893, "ts": "2026-06-16T11:44:59Z", "hours": 0.3358, "text": "I’m finally finished!"}]...
|
Title: My awesome macropad! by @ItaloJDev | Starda Title: My awesome macropad! by @ItaloJDev | Stardance
Devlogs:
I’m finally finished!
everyone here know how to get rate or rate others projects? I totaly new at that!
Ships:
I built a custom macropad with 6 keys, a rotary encoder, an OLED display, a custom PCB, and a 3D printed case. The most challenging part was designing the PCB and making sure all the components were connected correctly. I spent a lot of time learning KiCad and checking the schematic before finishing the board. I’m proud that I designed the hardware myself and turned the idea into a real project instead of using an existing design. To test the project, connect it to a computer using USB. The keys can be programmed for shortcuts and productivity tasks, while the encoder controls media functions such as volume. The OLED display provides visual feedback for the current mode and actions....
|
1793253309.393516
|
1793339709.393516
|
|
18071
|
WinSentry by @Sgattix | Stardance
|
Sgattix
|
1
|
10.0
|
137
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:08:39Z", "hours": 10.0, "multiplier": 14.33, "payout": 137, "blessing": "neutral", "text": "Shipped: WinSentry v1.0 (Rust) Windows loves to treat power users like guests on their own hardware. Despite running an i7-12700K and 32GB of DDR5, I was sick of locked UI threads, disappearing taskbar icons, and silent disk-space bloating. So, I spent the last few hours building WinSentry—a lightweight, native Windows daemon built in Rust to force the OS to be clean, stable, and responsive. What it does: The 300ms UI Panic Button: A low-level global keyboard hook (Ctrl + Alt + W) that forcefully kills explorer.exe, deletes the corrupted IconCache.db file while the thread is dead, and instantly spawns a fresh shell instance. Frozen taskbars fixed instantly. Automated System Debloater: A highly optimized background runner that wakes up every 30 minutes to sweep system-generated trash paths (%TEMP%, crash dumps) without locking active files. Safe Developer Staging Queue: An on-demand CLI engine (winsentry –scan) that recursively walks user-specified workspace paths to look for massive black holes like node_modules and pycache . It stages them in a local queue.json file so you can safely review and approve the purge via winsentry –purge. Centralized Config: Everything is fully customizable via %APPDATA%/WinSentry/config.toml. Performance Profiles (Zero Bloat): Because this was built in Rust to combat OS sluggishness, it has a completely invisible footprint: Idle: 0% CPU | 2.4MB RAM (Sits quietly listening for the hotkey message loop). Peak Scan/Discovery Phase: Max 10% CPU | 5MB RAM (Even while recursively scanning thousands of developer subdirectories). Built with embedded UAC manifest integration so it automatically handles the administrative privileges required to clean up system directories right out of the box. Time to stop waiting for the OS.", "repo": "https://github.com/Sgattix/winsentry", "demo": "https://github.com/Sgattix/WinSentry/releases"}]...
|
[{"post_id": 9348, "ts": "2026 [{"post_id": 9348, "ts": "2026-06-15T18:03:32Z", "hours": 3.7375, "text": "It is finally done. After 3 hours and 40 minutes, WinSentry is complete, fully optimized, and running flawlessly. The final block of development focused entirely on the user-controlled workspace clearing engine and rigorous resource profiling. The Final Piece: The Safe Developer Staging Queue The automated system janitor is great for temp folders, but developer bloat like node_modules or pycache requires absolute user safety. How it works: I implemented a high-speed, sequential directory traversal engine. When triggered on-demand via the CLI (winsentry –scan), the tool walks through user-specified workspace paths looking for target directory names defined in the config. The Guardrail: Instead of deleting anything, the tool calculates the total directory size and flushes the data to a local state file inside %APPDATA%/WinSentry/queue.json. The Interactive Review: The user is notified via the terminal that bloat has been discovered. Running winsentry –purge loads the JSON queue and gives the user an interactive, explicit review prompt to check boxes or type all to confirm deletion. Absolute control, zero risk of accidental data loss. Production Performance Benchmarks Since this tool was built to fight Windows sluggishness, it could not afford to be heavy. Running a fast compiled systems language like Rust paid off massively. Here are the real-world metrics monitored via Windows Task Manager: Idle Footprint: 0% CPU and 0.9MB of RAM. It sits completely dormant in the background, listening for the global hotkey message loop and waiting for the 30-minute system interval. Peak Scan & Discovery Footprint: Maximum 10% CPU usage and a peak of 5MB of RAM while actively traversing thousands of subdirectories and calculating file sizes during a deep disk scan. On an NVMe and DDR5 setup, the scan completes in seconds, meaning the system never hitches and the user never has to wait for the utility. READY TO SHIP!"}, {"post_id": 8751, "ts": "2026-06-14T15:37:52Z", "hours": 3.8133, "text": "Two more hours in, and WinSentry now has a fully functioning debloating engine and a robust multi-threaded architecture. What’s new I ripped out the real-time event watcher and replaced it with a task that executes once every 30 minutes. It sleeps completely in between cycles. Performance dropped immediately back to 0% CPU on idle, achieving the exact “invisible” footprint a performance tool needs. Reworked Threading: Thread safety is locked down. The core engine now cleanly separates the global UI hotkey listener thread from the background debloating loop, ensuring a heavy system cleanup never hitches or delays the 300ms “Panic Button” response. System Debloater: The 30-minute janitor thread now actively sweeps system-generated trash paths (configured via %APPDATA%/WinSentry/config.toml). It safely bypasses active, locked files while cleanly executing deep purges on dead telemetry and crash dumps. Robust Logging & Documentation: Implemented a lightweight, structured local logging system to track exactly how many megabytes of ghost space are reclaimed over time. I also laid down the full README.md. Next Up Implementing the User-Specified Safe Queue (queue.json). I’ll be writing the directory traversal logic to detect massive developer black holes (node_modules, pycache ) and scaffolding the manual CLI review step so users can safely approve massive space reclamation."}, {"post_id": 8168, "ts": "2026-06-13T16:42:58Z", "hours": 2.1289, "text": "Windows has a bad habit of treating the user like a guest on their own machine. Despite running an i7-12700K, 32GB of DDR5, and a fast NVMe, I still run into locked UI threads, disappearing taskbar icons, and a persistent “waiting for the OS” feeling. Instead of dealing with it, I’m building WinSentry—a lightweight, native Windows daemon written in Rust designed to force the OS to be responsive and clean. What I Built (The First 2 Hours) Instead of cutting corners, I spent the first block of development setting up a bulletproof core architecture: The 300ms Panic Button: Implemented a low-level global keyboard hook using the Win32 API (RegisterHotKey). Pressing Ctrl + Alt + W forcefully kills explorer.exe, wipes the easily-corrupted local %localappdata%\\IconCache.db file while the thread is dead, clears the icons registry at HKEY_CURRENT_USER \\ Software \\ Classes \\ .png and instantly spawns a clean shell instance. Configuration System: Designed a centralized configuration system that initializes inside a specified directory. Users can customize their hotkeys and define exact target paths. Aggressive Binary Optimization: The background daemon sits completely idle at 0% CPU and takes up less than 1MB of RAM, making it practically invisible to the system. Next Up Moving on to the storage engine: Implementing ReadDirectoryChangesW for zero-overhead, real-time event tracking on high-bloat system folders (%TEMP%, crash dumps). Building the staging queue pipeline (queue.json) to safely scaffold and manually review massive developer black holes like node_modules and pycache before purging them."}]...
|
Title: WinSentry by @Sgattix | Stardance
Devlogs: Title: WinSentry by @Sgattix | Stardance
Devlogs:
Windows has a bad habit of treating the user like a guest on their own machine. Despite running an i7-12700K, 32GB of DDR5, and a fast NVMe, I still run into locked UI threads, disappearing taskbar icons, and a persistent “waiting for the OS” feeling. Instead of dealing with it, I’m building WinSentry—a lightweight, native Windows daemon written in Rust designed to force the OS to be responsive and clean. What I Built (The First 2 Hours) Instead of cutting corners, I spent the first block of development setting up a bulletproof core architecture: The 300ms Panic Button: Implemented a low-level global keyboard hook using the Win32 API (RegisterHotKey). Pressing Ctrl + Alt + W forcefully kills explorer.exe, wipes the easily-corrupted local %localappdata%\IconCache.db file while the thread is dead, clears the icons registry at HKEY_CURRENT_USER \ Software \ Classes \ .png and instantly spawns a clean shell instance. Configuration System: Designed a centralized configuration system that initializes inside a specified directory. Users can customize their hotkeys and define exact target paths. Aggressive Binary Optimization: The background daemon sits completely idle at 0% CPU and takes up less than 1MB of RAM, making it practically invisible to the system. Next Up Moving on to the storage engine: Implementing ReadDirectoryChangesW for zero-overhead, real-time event tracking on high-bloat system folders (%TEMP%, crash dumps). Building the staging queue pipeline (queue.json) to safely scaffold and manually review massive developer black holes like node_modules and pycache before purging them.
Two more hours in, and WinSentry now has a fully functioning debloating engine and a robust multi-threaded architecture. What’s new I ripped out the real-time event watcher and replaced it with a task that executes once every 30 minutes. It sleeps completely in between cycles. Performance dropped immediately back to 0% CPU on idle, achieving the exact “invisible” footprint a performance tool needs. Reworked Threading: Thread safety is locked down. The core engine now cleanly separates the global UI hotkey listener thread from the background debloating loop, ensuring a heavy system cleanup never hitches or delays the 300ms “Panic Button” response. System Debloater: The 30-minute janitor thread now actively sweeps system-generated trash paths (configured via %APPDATA%/WinSentry/config.toml). It safely bypasses active, locked files while cleanly executing deep purges on dead telemetry and crash dumps. Robust Logging & Documentation: Implemented a lightweight, structured local logging system to track exactly how many megabytes of ghost space are reclaimed over time. I also laid down the full README.md. Next Up Implementing the User-Specified Safe Queue (queue.json). I’ll be writing the directory traversal logic to detect massive developer black holes (node_modules, pycache ) and scaffolding the manual CLI review step so users can safely approve massive space reclamation.
It is finally done. After 3 hours and 40 minutes, WinSentry is complete, fully optimized, and running flawlessly. The final block of development focused entirely on the user-controlled workspace clearing engine and rigorous resource profiling. The Final Piece: The Safe Developer Staging Queue The automated system janitor is great for temp folders, but developer bloat like node_modules or pycache requires absolute user safety. How it works: I implemented a high-speed, sequential directory traversal engine. When triggered on-demand via the CLI (winsentry –scan), the tool walks through user-specified workspace paths looking for target directory names defined in the config. The Guardrail: Instead of deleting anything, the tool calculates the total directory size and flushes the data to a local state file inside %APPDATA%/WinSentry/queue.json. The Interactive Review: The user is notified via the terminal that bloat has been discovered. Running winsentry –purge loads the JSON queue and gives the user an interactive, explicit review prompt to check boxes or type all to confirm deletion. Absolute control, zero risk of accidental data loss. Production Performance Benchmarks Since this tool was built to fight Windows sluggishness, it could not afford to be heavy. Running a fast compiled systems language like Rust paid off massively. Here are the real-world metrics monitored via Windows Task Manager: Idle Footprint: 0% CPU and 0.9MB of RAM. It sits completely dormant in the background, listening for the global hotkey message loop and waiting for the 30-minute system interval. Peak Scan & Discovery Footprint: Maximum 10% CPU usage and a peak of 5MB of RAM while actively traversing thousands of subdirectories and calculating file sizes during a deep disk scan. On an NVMe and DDR5 setup, the scan completes in seconds, meaning the system never hitches and the user never has to wait for the utility. READY TO SHIP!
Ships:
Shipped: WinSentry v1.0 (Rust) Windows loves to treat power users like guests on their own hardware. Despite running an i7-12700K and 32GB of DDR5, I was sick of locked UI threads, disappearing taskbar icons, and silent disk-space bloating. So, I spent the last few hours building WinSentry—a lightweight, native Windows daemon built in Rust to force the OS to be clean, stable, and responsive. What it does: The 300ms UI Panic Button: A low-level global keyboard hook (Ctrl + Alt + W) that forcefully kills explorer.exe, deletes the corrupted IconCache.db file while the thread is dead, and instantly spawns a fresh shell instance. Frozen taskbars fixed instantly. Automated System Debloater: A highly optimized background runner that wakes up every 30 minutes to sweep system-generated trash paths (%TEMP%, crash dumps) without locking active files. Safe Developer Staging Queue: An on-demand CLI engine (winsentry –scan) that recursively walks user-specified workspace paths to look for massive black holes like node_modules and pycache . It stages them in a local queue.json file so you can safely review and approve the purge via winsentry –purge. Centralized Config: Everything is fully customizable via %APPDATA%/WinSentry/config.toml. Performance Profiles (Zero Bloat): Because this was built in Rust to combat OS sluggishness, it has a completely invisible footprint: Idle: 0% CPU | 2.4MB RAM (Sits quietly listening for the hotkey message loop). Peak Scan/Discovery Phase: Max 10% CPU | 5MB RAM (Even while recursively scanning thousands of developer subdirectories). Built with embedded UAC manifest integration so it automatically handles the administrative privileges required to clean up system directories right out of the box. Time to stop waiting for the OS....
|
1793137910.203388
|
1793224310.203388
|
|
18077
|
Personal Website by @supercoolcodinggirl | Stardan Personal Website by @supercoolcodinggirl | Stardance...
|
supercoolcodinggirl
|
1
|
6.0
|
68
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T07:11:45Z", "hours": 6.0, "multiplier": 12.05, "payout": 68, "blessing": "neutral", "text": "My project is a simple portfolio website. I would recommend using a computer to look at the project, rather than a phone. I did not work on the phone display, so thats cooked. I struggled with design so bad. I wanted to push myself out my comfort zone of familiarity. Glad I did! C:", "repo": "https://github.com/zoebiscuit/personalWebsite", "demo": "https://zoebiscuit.github.io/personalWebsite/"}]...
|
[{"post_id": 8553, "ts": "2026 [{"post_id": 8553, "ts": "2026-06-14T06:50:26Z", "hours": 3.5628, "text": "FINISHED MI MASTERPIECE it is currently 3am and i stayed up finishing this. the style change quite a bit from the original design. however, the organization changed completely. i decided to keep the website as one whole page and to only focus on who i am and my projects. i added my music in there too, since i learned from my friend how to play around with spotify features on websites. im very proud of this project and it def is a unique take on a website for me. now im going to go to sleep."}, {"post_id": 8382, "ts": "2026-06-13T22:52:38Z", "hours": 1.0758, "text": "changed the vibe alert! i tried implementing the blue background and honestly it was just blurry. i was listening to the new olivia rodrigo album “you seem pretty sad for a girl so in love” while playing around with the website in vs code. i think i like how its going. it kinda reminds me of the album’s aesthetic. also my lapse kept recording black videos. sonion"}, {"post_id": 8167, "ts": "2026-06-13T16:40:52Z", "hours": 1.0111, "text": "Working on a personal website! The intended feeling is like cut out pictures and watercolors. I played around and designed this in Canva. I felt a rush of motivation to do this after being inspired to see a lot of people’s portfolio websites while reviewing for another ysws. One thing I and my friends always notice when I make websites is that they all feel the same. It’s the same style or layout. That’s why I tried to branch out and tried something that leans more into aesthetic + pinterest style rather than professionalism. feel free to comment suggestions!"}]...
|
Title: Personal Website by @supercoolcodinggirl | Title: Personal Website by @supercoolcodinggirl | Stardance
Devlogs:
Working on a personal website! The intended feeling is like cut out pictures and watercolors. I played around and designed this in Canva. I felt a rush of motivation to do this after being inspired to see a lot of people’s portfolio websites while reviewing for another ysws. One thing I and my friends always notice when I make websites is that they all feel the same. It’s the same style or layout. That’s why I tried to branch out and tried something that leans more into aesthetic + pinterest style rather than professionalism. feel free to comment suggestions!
changed the vibe alert! i tried implementing the blue background and honestly it was just blurry. i was listening to the new olivia rodrigo album “you seem pretty sad for a girl so in love” while playing around with the website in vs code. i think i like how its going. it kinda reminds me of the album’s aesthetic. also my lapse kept recording black videos. sonion
FINISHED MI MASTERPIECE it is currently 3am and i stayed up finishing this. the style change quite a bit from the original design. however, the organization changed completely. i decided to keep the website as one whole page and to only focus on who i am and my projects. i added my music in there too, since i learned from my friend how to play around with spotify features on websites. im very proud of this project and it def is a unique take on a website for me. now im going to go to sleep.
Ships:
My project is a simple portfolio website. I would recommend using a computer to look at the project, rather than a phone. I did not work on the phone display, so thats cooked. I struggled with design so bad. I wanted to push myself out my comfort zone of familiarity. Glad I did! C:...
|
1793138075.5117614
|
1793224475.5117614
|
|
18078
|
Stardance beta by @CharlieGill | Stardance
|
CharlieGill
|
1
|
4.75
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T21:13:18Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made rough timelapse of the collision of the Milky Way and Andromeda galaxies with some fun (albeit not great) easter eggs. This is my first coding project ever-that is if I don’t count middle school coding for a website that I can’t remember. I think I have a total of 3 hours and 45ish minutes of work on it. It is with regret as well that I used some AI to help me with what I don’t know. Again, this is a beta version (or maybe final version if I don’t feel like coding more). I’m a little proud of my work, so I hope you enjoy!", "repo": "https://github.com/CharlieHasABigPP/stardanceproject", "demo": "https://charliehasabigpp.github.io/stardanceproject/"}]...
|
[{"post_id": 25647, "ts": "202 [{"post_id": 25647, "ts": "2026-07-10T01:52:36Z", "hours": 2.7453, "text": "YAY now we have a better camera that can reset :D"}, {"post_id": 16562, "ts": "2026-06-26T22:42:38Z", "hours": 1.8333, "text": "Trying to fix the camera positioning."}]...
|
Title: Stardance beta by @CharlieGill | Stardance
Title: Stardance beta by @CharlieGill | Stardance
Devlogs:
Trying to fix the camera positioning.
YAY now we have a better camera that can reset :D
Ships:
I made rough timelapse of the collision of the Milky Way and Andromeda galaxies with some fun (albeit not great) easter eggs. This is my first coding project ever-that is if I don’t count middle school coding for a website that I can’t remember. I think I have a total of 3 hours and 45ish minutes of work on it. It is with regret as well that I used some AI to help me with what I don’t know. Again, this is a beta version (or maybe final version if I don’t feel like coding more). I’m a little proud of my work, so I hope you enjoy!...
|
1793253251.7461407
|
1793339651.7461407
|
|
18084
|
Powerblock Games by @Powerblock | Stardance
|
Powerblock
|
1
|
40.95
|
580
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T21:37:29Z", "hours": 40.0, "multiplier": 17.07, "payout": 580, "blessing": "neutral", "text": "I FINALLY finished my Game Distribution and loading platform: Powerblock Games Here’s what it is: You can play other users games easily, just search and click Approved devs can publish their own games using our own tools Works in the Web If you know Godot, I encourage you to make a game!", "repo": "https://github.com/Powerblock2000/PowerblockGames", "demo": "https://games.powerblock2000.com/"}]...
|
[{"post_id": 31366, "ts": "202 [{"post_id": 31366, "ts": "2026-07-19T18:08:02Z", "hours": 0.9514, "text": "EDIT: The server was down for the last day or 2 but should be up now EDIT: The game should be working now Game is currently not working because nest is down or at least not working for me. Once this is fixed I should have it back up and running within a few hours!"}, {"post_id": 29060, "ts": "2026-07-15T18:28:38Z", "hours": 1.4111, "text": "Working on migrating all server code to nest. SO CLOSE! Ugly but I dont really care ¯ ( ツ)/¯"}, {"post_id": 28614, "ts": "2026-07-14T23:35:58Z", "hours": 1.4769, "text": "SOOO CLOSE TO BEING FINISHED JUST POLISH LEFT not much else 🤷♂️"}, {"post_id": 28459, "ts": "2026-07-14T18:27:22Z", "hours": 1.1892, "text": "FINALLY added being able to open games ALMOST DONE with this"}, {"post_id": 28386, "ts": "2026-07-14T16:44:47Z", "hours": 5.2564, "text": "Added a search feature and you can now request developer access!!!!"}, {"post_id": 21841, "ts": "2026-07-03T23:44:19Z", "hours": 3.1942, "text": "Finished Hackclub auth, also finished universal games list so people can search for games."}, {"post_id": 21119, "ts": "2026-07-02T22:22:49Z", "hours": 7.4269, "text": "Still trying to figure out nakama custom auth… I HATE THIS"}, {"post_id": 17793, "ts": "2026-06-28T18:39:16Z", "hours": 4.1983, "text": "Finally finished Dev panel. Almost done with UX. Working on the developer Godot plugin so they can make games and access Nakama features. Then I just have to work on downloading and loading games on the client!"}, {"post_id": 15188, "ts": "2026-06-24T18:06:10Z", "hours": 5.1853, "text": "Created a dev panel This will allow verified devs to publish their games to the whole platform You will be able to: Select your .pck (or .zip) file to upload and put onto the platform, check analytics, update your game, and more."}, {"post_id": 13254, "ts": "2026-06-21T18:20:49Z", "hours": 2.12, "text": "Finished friends tab FINALLY! Features: Add friends Accept requests Remove friends Cancel requests Everything you’d expect! This took SOO LONG!!!! I hope you like it :)"}, {"post_id": 10988, "ts": "2026-06-18T00:34:05Z", "hours": 1.0689, "text": "Working on settings rn, starting w/ frontend Current page ideas: Admin panel (me only) Privacy settings Video settings audio settings account settings so its looking kinda empty :( Also got a small menu working with different username sizes👍"}, {"post_id": 10765, "ts": "2026-06-17T17:48:18Z", "hours": 1.6572, "text": "Working on main menu, just got reviving an image from a Nakama storage object working (don’t worry these are just test images)"}, {"post_id": 10132, "ts": "2026-06-16T18:54:42Z", "hours": 1.3383, "text": "Finished onboarding, pretty simple, just updating some variables but it looks cool :)"}, {"post_id": 10059, "ts": "2026-06-16T17:10:51Z", "hours": 2.3383, "text": "Finally got authentication with Nakama working, at first, I have just had to fix SOOO many bugs where it would try to use an invalid session ID. Error handling is also a NIGHTMARE. But I think I got it working. (video shows auth via session tokens)"}, {"post_id": 8368, "ts": "2026-06-13T22:16:33Z", "hours": 2.0797, "text": "Working on authentication (it sucks)"}]...
|
Title: Powerblock Games by @Powerblock | Stardance Title: Powerblock Games by @Powerblock | Stardance
Devlogs:
Working on authentication (it sucks)
Finally got authentication with Nakama working, at first, I have just had to fix SOOO many bugs where it would try to use an invalid session ID. Error handling is also a NIGHTMARE. But I think I got it working. (video shows auth via session tokens)
Finished onboarding, pretty simple, just updating some variables but it looks cool :)
Working on main menu, just got reviving an image from a Nakama storage object working (don’t worry these are just test images)
Working on settings rn, starting w/ frontend Current page ideas: Admin panel (me only) Privacy settings Video settings audio settings account settings so its looking kinda empty :( Also got a small menu working with different username sizes👍
Finished friends tab FINALLY! Features: Add friends Accept requests Remove friends Cancel requests Everything you’d expect! This took SOO LONG!!!! I hope you like it :)
Created a dev panel This will allow verified devs to publish their games to the whole platform You will be able to: Select your .pck (or .zip) file to upload and put onto the platform, check analytics, update your game, and more.
Finally finished Dev panel. Almost done with UX. Working on the developer Godot plugin so they can make games and access Nakama features. Then I just have to work on downloading and loading games on the client!
Still trying to figure out nakama custom auth… I HATE THIS
Finished Hackclub auth, also finished universal games list so people can search for games.
Added a search feature and you can now request developer access!!!!
FINALLY added being able to open games ALMOST DONE with this
SOOO CLOSE TO BEING FINISHED JUST POLISH LEFT not much else 🤷♂️
Working on migrating all server code to nest. SO CLOSE! Ugly but I dont really care ¯ ( ツ)/¯
EDIT: The server was down for the last day or 2 but should be up now EDIT: The game should be working now Game is currently not working because nest is down or at least not working for me. Once this is fixed I should have it back up and running within a few hours!
Ships:
I FINALLY finished my Game Distribution and loading platform: Powerblock Games Here’s what it is: You can play other users games easily, just search and click Approved devs can publish their own games using our own tools Works in the Web If you know Godot, I encourage you to make a game!...
|
1793120102.5902307
|
1793206502.5902307
|
|
18092
|
Sumi The AI Powerd Open Sourced Slack Channel Summ Sumi The AI Powerd Open Sourced Slack Channel Summarizer by @Magic_X | Stardance...
|
Magic_X
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T16:38:00Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Slack bot that can filter,summarize,and chat with you about certain topics in a channel The most difficult part i think i faced was uploading the code to github using git.", "repo": "https://github.com/Magic-XY/Sumi", "demo": "https://hackclub.enterprise.slack.com/archives/C0BSFKXMZCN"}]...
|
[{"post_id": 8702, "ts": "2026 [{"post_id": 8702, "ts": "2026-06-14T13:38:53Z", "hours": 0.67, "text": "I just finished the filter command for Sumi so it can now filter messages within a given channel based on a topic or category"}, {"post_id": 8399, "ts": "2026-06-13T23:31:17Z", "hours": 1.1981, "text": "Sumi is looking good I just finished the summarize Cmd command so it actually summarizes channels now"}, {"post_id": 8309, "ts": "2026-06-13T20:26:58Z", "hours": 1.2719, "text": "I am working on Sumi a Mistral AI Powered slack bot that will be able to summarize channels and messages it will also be able to provide help with various tasks Today I finished writing most of the code, implementing the AI api and debugging it"}]...
|
Title: Sumi The AI Powerd Open Sourced Slack Chann Title: Sumi The AI Powerd Open Sourced Slack Channel Summarizer by @Magic_X | Stardance
Devlogs:
I am working on Sumi a Mistral AI Powered slack bot that will be able to summarize channels and messages it will also be able to provide help with various tasks Today I finished writing most of the code, implementing the AI api and debugging it
Sumi is looking good I just finished the summarize Cmd command so it actually summarizes channels now
I just finished the filter command for Sumi so it can now filter messages within a given channel based on a topic or category
Ships:
I made a Slack bot that can filter,summarize,and chat with you about certain topics in a channel The most difficult part i think i faced was uploading the code to github using git....
|
1793127113.4160397
|
1793213513.4160397
|
|
18107
|
Vi Encrypt by @violetdoesntexist | Stardance
|
violetdoesntexist
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T18:23:31Z", "hours": 2.0, "multiplier": 1.46, "payout": 3, "blessing": "neutral", "text": "i shipped vi encrypt a small tool i made to encrypt text in a pretty unsafe way, i randomly had the idea and tried to build it. you can test it yourself by running it locally or installing via pipx pipx install viencrypt", "repo": "https://github.com/violetdoesntexist/vi-encrypt", "demo": "https://github.com/violetdoesntexist/vi-encrypt/releases/tag/viencrypt"}]...
|
[{"post_id": 8210, "ts": "2026 [{"post_id": 8210, "ts": "2026-06-13T17:37:03Z", "hours": 2.2092, "text": "i made the tool!! i added encryption and decryption and did a lot of fixing to get it to actually work and now it fully does!!"}]...
|
Title: Vi Encrypt by @violetdoesntexist | Stardanc Title: Vi Encrypt by @violetdoesntexist | Stardance
Devlogs:
i made the tool!! i added encryption and decryption and did a lot of fixing to get it to actually work and now it fully does!!
Ships:
i shipped vi encrypt a small tool i made to encrypt text in a pretty unsafe way, i randomly had the idea and tried to build it. you can test it yourself by running it locally or installing via pipx pipx install viencrypt...
|
1793220710.9863045
|
1793307110.9863045
|
|
18113
|
Yu-Gi-Oh! Banlist API by @Karim_xyz | Stardance
|
Karim_xyz
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T22:50:10Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a pretty basic flask api that returns older yugioh banlists in JSON format (since I needed such thing but didn’t find so I made this), the banlists data was scraped from yugipedia then stored in MongoDB The most challenging part is that I made this in my phone (the only hardware I have), that prevented me from making a UI and improving the project in general I think there wouldn’t be so much yugioh players here, if you are I hope you like it and find it useful, otherwise you can give me feedback about the technical parts and stuff…", "repo": "https://github.com/karim-xyz/yugioh-banlists-api", "demo": "https://yugioh-banlists-api.onrender.com/api/v1/2005-04"}]...
|
[{"post_id": 11621, "ts": "202 [{"post_id": 11621, "ts": "2026-06-18T22:35:50Z", "hours": 2.6878, "text": "I am tired I tried to make a webpage guide for it but I can’t do frontend sice the only hardware I have is my phone"}, {"post_id": 9025, "ts": "2026-06-15T01:46:46Z", "hours": 4.2628, "text": "Finally implemented the api on render"}]...
|
Title: Yu-Gi-Oh! Banlist API by @Karim_xyz | Stard Title: Yu-Gi-Oh! Banlist API by @Karim_xyz | Stardance
Devlogs:
Finally implemented the api on render
I am tired I tried to make a webpage guide for it but I can’t do frontend sice the only hardware I have is my phone
Ships:
This is a pretty basic flask api that returns older yugioh banlists in JSON format (since I needed such thing but didn’t find so I made this), the banlists data was scraped from yugipedia then stored in MongoDB The most challenging part is that I made this in my phone (the only hardware I have), that prevented me from making a UI and improving the project in general I think there wouldn’t be so much yugioh players here, if you are I hope you like it and find it useful, otherwise you can give me feedback about the technical parts and stuff…...
|
1793123294.4544008
|
1793209694.4544008
|
|
18181
|
Custom Stardance Leaderboard by @The_Craw | Starda Custom Stardance Leaderboard by @The_Craw | Stardance...
|
The_Craw
|
1
|
5.38
|
33
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:31:28Z", "hours": 3.0, "multiplier": 12.05, "payout": 33, "blessing": "neutral", "text": "This is an unofficial Stardance Project Leaderboard, search for your project today to see how it stacks up!", "repo": "https://github.com/Jonah-Crawford/Stardance-Leaderboard", "demo": "https://stardance-leaderboard.ultimatecraw.xyz/"}]...
|
[{"post_id": 30930, "ts": "202 [{"post_id": 30930, "ts": "2026-07-18T22:35:59Z", "hours": 2.3758, "text": "Added a simple stack library to CSL, along with various smaller graphics programs, such as screen/rectangle_fill.craw"}, {"post_id": 9327, "ts": "2026-06-15T17:20:10Z", "hours": 0.2644, "text": "I’m going to ship this project, so people can use the leaderboard for reviewing their projects."}, {"post_id": 8739, "ts": "2026-06-14T15:17:57Z", "hours": 0.7644, "text": "All projects are now on the leaderboard with data correct as late as yesterday evening. I’ll try to find a way to get it to automatically update at some point"}, {"post_id": 8379, "ts": "2026-06-13T22:39:47Z", "hours": 0.6725, "text": "Website is ready! Just waiting for the projects to load."}, {"post_id": 8357, "ts": "2026-06-13T21:54:15Z", "hours": 0.8992, "text": "I had to reset the leaderboard because my script messed up the data, but now after doing all the projects now it should run properly"}, {"post_id": 8325, "ts": "2026-06-13T20:51:02Z", "hours": 0.3503, "text": "Stardance doesn’t have a project leaderboard yet, so I decided I’ll make one myself! This will be really simple, if you want to support me, please take a look at my main project, Crawssembly! https://stardance.hackclub.com/projects/8100"}]...
|
Title: Custom Stardance Leaderboard by @The_Craw | Title: Custom Stardance Leaderboard by @The_Craw | Stardance
Devlogs:
Stardance doesn’t have a project leaderboard yet, so I decided I’ll make one myself! This will be really simple, if you want to support me, please take a look at my main project, Crawssembly! https://stardance.hackclub.com/projects/8100
I had to reset the leaderboard because my script messed up the data, but now after doing all the projects now it should run properly
Website is ready! Just waiting for the projects to load.
All projects are now on the leaderboard with data correct as late as yesterday evening. I’ll try to find a way to get it to automatically update at some point
I’m going to ship this project, so people can use the leaderboard for reviewing their projects.
Added a simple stack library to CSL, along with various smaller graphics programs, such as screen/rectangle_fill.craw
Ships:
This is an unofficial Stardance Project Leaderboard, search for your project today to see how it stacks up!...
|
1793264029.1876633
|
1793350429.1876633
|
|
18188
|
Onara by @aarushk | Stardance
|
aarushk
|
1
|
103.77
|
504
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T22:28:48Z", "hours": 44.0, "multiplier": 19.06, "payout": 504, "blessing": "neutral", "text": "I made Onara, an AI website builder for local businesses. It helps contractors turn their Google Business Profile, or manually entered business info, into a live website with copy, design, SEO, photos, contact forms, and a public URL. The hardest part was connecting everything together: the Next.js app, Supabase auth/database, Stripe billing, the FastAPI AI pipeline, Cloudflare deployment, GitHub backups, and the revision system. Getting the AI output to be good and not broken was also challenging. I’m proud that it is not just a mockup anymore. Users can sign in, search or enter a business, generate a site, revise it, manage billing, and keep their generated code backed up. To test it, sign up, search for a local business, confirm the details, pick a style, and start a build. After the site generates, try the revision page and ask for a small change like “make the hero CTA bigger.”", "repo": "https://github.com/Ak123yay/Onara/", "demo": "https://onara.tech"}]...
|
[{"post_id": 27459, "ts": "202 [{"post_id": 27459, "ts": "2026-07-13T01:25:29Z", "hours": 9.7311, "text": "First generated site!!! Pipeline finally works!"}, {"post_id": 23034, "ts": "2026-07-05T19:25:57Z", "hours": 12.2622, "text": "turning onara into Google Business Profile → website → quote form → missed-call recovery → lead inbox → booked job follow-up"}, {"post_id": 17247, "ts": "2026-06-27T23:26:00Z", "hours": 37.7717, "text": "Trying to make the pipeline generate a proper output. Polishing up the application."}, {"post_id": 12202, "ts": "2026-06-19T22:22:13Z", "hours": 8.2644, "text": "devlog 003 - making Onara launch-ready Date: 2026-06-19 Since devlog 002, I mostly worked on turning Onara from “it works” into something closer to launch-ready. what I worked on billing + accounts I added more real account controls: cancel subscription from billing plan limits better account page better checkout layout Google-login warning if someone tries password login on a Google account Google account -> use Continue with Google Password account -> normal email/password login generated sites I worked on making the sites Onara creates more useful after launch: contact form lead emails better email HTML Pro code download cancellation placeholder pages Google Reviews refresh job support email surfaces contact form -> Onara lead email -> site owner inbox pipeline fixes I fixed more backend/build issues: longer pipeline timeout better health monitor support fixed /health HEAD checks fixed broken generated HTML cases improved Google Maps region filtering back toward DC / VA GET /health -> 200 OK HEAD /health -> 200 OK launch cleanup I added launch stuff that real products need: privacy policy terms of service support page favicon/logo polish SEO metadata .env.example updates docs for production fixes AI + training data I also added the start of a cleaner AI improvement system: user consent copy opt-out/delete handling training example storage QA-approved examples only no saving random bad generated sites into RAG good QA result -> redact -> save as training example bad result -> do not save biggest change Onara is not just generating sites now. It is starting to act like a real app with billing, support, cancellation, reviews, contact leads, account limits, and safer AI improvement rules. still left finish production deploy polish make generated site quality more consistent keep fixing slow render/build issues launch testing outreach assets"}, {"post_id": 11090, "ts": "2026-06-18T04:09:31Z", "hours": 26.8906, "text": "devlog 002 - the fake flow became the real app Date: 2026-06-18 Sorry abt not posting a devlog in a while, completely forgot i had to do them! (too locked in lol). Onara moved from prototype to real product system. Devlog 001 ended with the app shell, Supabase setup, and mock agent progress. Since then, the missing backend got built: FastAPI, real agents, deployment, revisions, billing, and account gating. Find -> Confirm -> Style -> Generate now connects to the actual pipeline. what I built FastAPI backend /generate and /health job queue + dedupe SSE progress stream dashboard build resume Cloudflare Tunnel + PM2 Next.js -> FastAPI -> agents -> Cloudflare -> Supabase AI pipeline I added the real 10-agent flow: Analyst, Content Writer, Style Agent, Planner, Prompt Engineer, Code Generator, Debugger, SEO Agent, QA, and Mobile check. Agent 6 now has a plan-gated model picker. Free -> Onara default Starter -> Copilot options Trial / Pro -> full access I also added shared AI clients for NVIDIA NIM, Ollama, and GitHub Copilot SDK. z-ai/glm-5.1 -> llama-4-maverick -> gemma4:e4b RAG and deployment I added RAG with ChromaDB, BM25 search, seeded HTML/CSS/JS patterns, and contractor layout examples. Deployment now does this: parse generated HTML split component files back up code to GitHub deploy to Cloudflare Pages save metadata in Supabase generated site -> GitHub -> Cloudflare -> Supabase revisions The revision page became a real workflow with: revision threads queued work log auto-pick or manual components changed-file summaries rollback UI retry without charging failed builds { instruction : \" make the hero CTA bigger \" , componentSelection : { mode : \" auto \" } } The UI also got cleaner: denser chat, better work log placement, flatter composer, and Onara styling. billing I added real billing: Stripe checkout sessions Starter monthly Starter annual at $99/year Pro checkout Stripe webhooks payment failed / succeeded handling reverse trial setup trial downgrade monthly revision reset STRIPE_STARTER_PRICE_ID=... STRIPE_STARTER_ANNUAL_PRICE_ID=... STRIPE_PRO_PRICE_ID=... Checkout now uses embedded Stripe Elements with PaymentElement , ExpressCheckoutElement , wallet buttons when available, and an Onara checkout page. account and limits I added plan display, trial days left, usage stats, upgrade CTAs, Starter / Pro cards, and annual Starter. Free -> 1 active site Starter -> 1 active site Pro / Trial -> 3 active sites Limits are checked before generation and enforced in Supabase. cancellation flow When Stripe sends customer.subscription.deleted or invoice.payment_failed , Onara now: updates the account sets show_url=false deploys a Cloudflare placeholder marks projects as suspended keeps Supabase records and GitHub backups cancel -> hide URL -> placeholder -> suspended project Cancellation hides the site but does not delete the generated code. what changed from devlog 001 Now the pipeline runs, agents generate sites, previews stream status, sites deploy, code backs up, projects persist, revisions work, billing is wired, trials downgrade, limits are enforced, and canceled sites get suspended. still missing lead SMS Pro code download weekly Google Reviews badge refresh monitoring privacy / terms cleanup support / consent copy launch outreach assets"}, {"post_id": 8868, "ts": "2026-06-14T19:21:29Z", "hours": 8.4192, "text": "devlog 001 - i started making the app Date: 2026-06-14 This update was big because Onara is not just plans anymore. I added real app code inside Onara_Code . Before this, it was mostly wiki pages, task lists, and design references. Now it has a real frontend and Supabase setup. what I built Next.js app landing page auth pages dashboard business build flow Google Places search agent progress screen Supabase migrations Supabase edge functions The app now has login, signup, password reset, protected dashboard routes, a contractor landing page, and a 4-step build flow: Find -> Confirm -> Style -> Generate I also added the mock agent progress screen. It shows the 10 agents running, streams progress, updates a preview, and has a fake retry moment. It is not the real backend yet, but it makes the frontend flow feel real. Supabase now has migrations for users, projects, pipeline jobs, revisions, RLS, auth triggers, and cron jobs. I also added edge functions for trial downgrade, revision reset, and Stripe webhook handling. what is still missing The big missing thing is: Onara_Code/pipeline/ That is where the FastAPI server needs to go. Still needed: FastAPI app /generate endpoint /health endpoint real agents AI client RAG deployment code account/billing pages Stripe checkout route verification I tried: npm run type-check but it failed because dependencies are not installed: tsc: not found next Next step: Build the FastAPI server. That is what turns the fake agent progress flow into the real Onara AI pipeline."}]...
|
Title: Onara by @aarushk | Stardance
Devlogs:
dev Title: Onara by @aarushk | Stardance
Devlogs:
devlog 001 - i started making the app Date: 2026-06-14 This update was big because Onara is not just plans anymore. I added real app code inside Onara_Code . Before this, it was mostly wiki pages, task lists, and design references. Now it has a real frontend and Supabase setup. what I built Next.js app landing page auth pages dashboard business build flow Google Places search agent progress screen Supabase migrations Supabase edge functions The app now has login, signup, password reset, protected dashboard routes, a contractor landing page, and a 4-step build flow: Find -> Confirm -> Style -> Generate I also added the mock agent progress screen. It shows the 10 agents running, streams progress, updates a preview, and has a fake retry moment. It is not the real backend yet, but it makes the frontend flow feel real. Supabase now has migrations for users, projects, pipeline jobs, revisions, RLS, auth triggers, and cron jobs. I also added edge functions for trial downgrade, revision reset, and Stripe webhook handling. what is still missing The big missing thing is: Onara_Code/pipeline/ That is where the FastAPI server needs to go. Still needed: FastAPI app /generate endpoint /health endpoint real agents AI client RAG deployment code account/billing pages Stripe checkout route verification I tried: npm run type-check but it failed because dependencies are not installed: tsc: not found next Next step: Build the FastAPI server. That is what turns the fake agent progress flow into the real Onara AI pipeline.
devlog 002 - the fake flow became the real app Date: 2026-06-18 Sorry abt not posting a devlog in a while, completely forgot i had to do them! (too locked in lol). Onara moved from prototype to real product system. Devlog 001 ended with the app shell, Supabase setup, and mock agent progress. Since then, the missing backend got built: FastAPI, real agents, deployment, revisions, billing, and account gating. Find -> Confirm -> Style -> Generate now connects to the actual pipeline. what I built FastAPI backend /generate and /health job queue + dedupe SSE progress stream dashboard build resume Cloudflare Tunnel + PM2 Next.js -> FastAPI -> agents -> Cloudflare -> Supabase AI pipeline I added the real 10-agent flow: Analyst, Content Writer, Style Agent, Planner, Prompt Engineer, Code Generator, Debugger, SEO Agent, QA, and Mobile check. Agent 6 now has a plan-gated model picker. Free -> Onara default Starter -> Copilot options Trial / Pro -> full access I also added shared AI clients for NVIDIA NIM, Ollama, and GitHub Copilot SDK. z-ai/glm-5.1 -> llama-4-maverick -> gemma4:e4b RAG and deployment I added RAG with ChromaDB, BM25 search, seeded HTML/CSS/JS patterns, and contractor layout examples. Deployment now does this: parse generated HTML split component files back up code to GitHub deploy to Cloudflare Pages save metadata in Supabase generated site -> GitHub -> Cloudflare -> Supabase revisions The revision page became a real workflow with: revision threads queued work log auto-pick or manual components changed-file summaries rollback UI retry without charging failed builds { instruction : " make the hero CTA bigger " , componentSelection : { mode : " auto " } } The UI also got cleaner: denser chat, better work log placement, flatter composer, and Onara styling. billing I added real billing: Stripe checkout sessions Starter monthly Starter annual at $99/year Pro checkout Stripe webhooks payment failed / succeeded handling reverse trial setup trial downgrade monthly revision reset STRIPE_STARTER_PRICE_ID=... STRIPE_STARTER_ANNUAL_PRICE_ID=... STRIPE_PRO_PRICE_ID=... Checkout now uses embedded Stripe Elements with PaymentElement , ExpressCheckoutElement , wallet buttons when available, and an Onara checkout page. account and limits I added plan display, trial days left, usage stats, upgrade CTAs, Starter / Pro cards, and annual Starter. Free -> 1 active site Starter -> 1 active site Pro / Trial -> 3 active sites Limits are checked before generation and enforced in Supabase. cancellation flow When Stripe sends customer.subscription.deleted or invoice.payment_failed , Onara now: updates the account sets show_url=false deploys a Cloudflare placeholder marks projects as suspended keeps Supabase records and GitHub backups cancel -> hide URL -> placeholder -> suspended project Cancellation hides the site but does not delete the generated code. what changed from devlog 001 Now the pipeline runs, agents generate sites, previews stream status, sites deploy, code backs up, projects persist, revisions work, billing is wired, trials downgrade, limits are enforced, and canceled sites get suspended. still missing lead SMS Pro code download weekly Google Reviews badge refresh monitoring privacy / terms cleanup support / consent copy launch outreach assets
devlog 003 - making Onara launch-ready Date: 2026-06-19 Since devlog 002, I mostly worked on turning Onara from “it works” into something closer to launch-ready. what I worked on billing + accounts I added more real account controls: cancel subscription from billing plan limits better account page better checkout layout Google-login warning if someone tries password login on a Google account Google account -> use Continue with Google Password account -> normal email/password login generated sites I worked on making the sites Onara creates more useful after launch: contact form lead emails better email HTML Pro code download cancellation placeholder pages Google Reviews refresh job support email surfaces contact form -> Onara lead email -> site owner inbox pipeline fixes I fixed more backend/build issues: longer pipeline timeout better health monitor support fixed /health HEAD checks fixed broken generated HTML cases improved Google Maps region filtering back toward DC / VA GET /health -> 200 OK HEAD /health -> 200 OK launch cleanup I added launch stuff that real products need: privacy policy terms of service support page favicon/logo polish SEO metadata .env.example updates docs for production fixes AI + training data I also added the start of a cleaner AI improvement system: user consent copy opt-out/delete handling training example storage QA-approved examples only no saving random bad generated sites into RAG good QA result -> redact -> save as training example bad result -> do not save biggest change Onara is not just generating sites now. It is starting to act like a real app with billing, support, cancellation, reviews, contact leads, account limits, and safer AI improvement rules. still left finish production deploy polish make generated site quality more consistent keep fixing slow render/build issues launch testing outreach assets
Trying to make the pipeline generate a proper output. Polishing up the application.
turning onara into Google Business Profile → website → quote form → missed-call recovery → lead inbox → booked job follow-up
First generated site!!! Pipeline finally works!
Ships:
I made Onara, an AI website builder for local businesses. It helps contractors turn their Google Business Profile, or manually entered business info, into a live website with copy, design, SEO, photos, contact forms, and a public URL. The hardest part was connecting everything together: the Next.js app, Supabase auth/database, Stripe billing, the FastAPI AI pipeline, Cloudflare deployment, GitHub backups, and the revision system. Getting the AI output to be good and not broken was also challenging. I’m proud that it is not just a mockup anymore. Users can sign in, search or enter a business, generate a site, revise it, manage billing, and keep their generated code backed up. To test it, sign up, search for a local business, confirm the details, pick a style, and start a build. After the site generates, try the revision page and ask for a small change like “make the hero CTA bigger.”...
|
1793123623.7004077
|
1793210023.7004077
|
|
18192
|
Sayo Device by @Minh_Quang | Stardance
|
Minh_Quang
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T02:46:42Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a macropad to fullfil the role of a Sayo Device since I’m too broke for one. It has 3 keys and 1 OLED display. The hardest part of all of that was definitely creating the case since it isn’t really easy to get the hang of Fusion360. Couldn’t get hackatime run at the start so that’s why I don’t have too much devlog.", "repo": "https://github.com/minhquangd0103-ship-it/Macropad", "demo": ""}]...
|
[{"post_id": 43032, "ts": "202 [{"post_id": 43032, "ts": "2026-08-08T02:36:02Z", "hours": 1.8706, "text": "I finished"}]...
|
Title: Sayo Device by @Minh_Quang | Stardance
Dev Title: Sayo Device by @Minh_Quang | Stardance
Devlogs:
I finished
Ships:
I made a macropad to fullfil the role of a Sayo Device since I’m too broke for one. It has 3 keys and 1 OLED display. The hardest part of all of that was definitely creating the case since it isn’t really easy to get the hang of Fusion360. Couldn’t get hackatime run at the start so that’s why I don’t have too much devlog....
|
1793116300.8251598
|
1793202700.8251598
|
|
18206
|
Lume Tufte by @ethmarks | Stardance
|
ethmarks
|
1
|
15.0
|
246
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T01:30:57Z", "hours": 15.0, "multiplier": 16.18, "payout": 246, "blessing": "neutral", "text": "This is a theme for the Lume static site generator based on Tufte CSS . To try the Tufte theme, visit the demo page: https://ethmarks.github.io/lume_tufte/ . I submitted this PR to the official Lume theme registry to add the Tufte theme, which was accepted. It has its own page on the official Lume site: https://lume.land/theme/tufte/ I used several optimization tricks, such as statically analyzing the content of each page at build time to infer which font files to preload, to maximize performance, accessibility, best practices, and SEO. Because of this, the theme earns perfect 100s on Google Lighthouse , which the official Lighthouse documentation describes as “extremely challenging to achieve and not expected” . I wrote 5000+ words of documentation across the README and demo articles. I wrote Lume CMS config for every aspect of the theme to allow for no-code content management.", "repo": "https://github.com/ethmarks/lume_tufte", "demo": "https://ethmarks.github.io/lume_tufte/"}]...
|
[{"post_id": 10827, "ts": "202 [{"post_id": 10827, "ts": "2026-06-17T19:27:41Z", "hours": 3.2611, "text": "1.0.0 Unless I think of more stuff to add, this is probably my last devlog before shipping. Lume Theme Registry A few hours ago, the PR that I created last devlog was merged into the official Lume theme registry, so you can now install my theme with a single command using Lume init, and it now has its own dedicated page on the official Lume website: https://lume.land/theme/tufte/ . README I added a How it Works section that explains how the Lume theme architecture works behind-the-scenes (spoiler: it’s just remote files) and explains what each of the 18 included plugins do. I updated the quickstart to use the Lume init command. I added a Showcase section that lists the sites that use this theme. It seemed kind of weird to exclusively list the Tufte theme site itself, so I also switched one of my documentation sites to use the Tufte theme. I added a shields.io badge to the top of the README that links to the theme’s page on the Lume website. shields.io relies on simple-icons for its logos, but simple-icons doesn’t have the Lume logo for some reason, so had to Base64-encode an SVG of the Lume logo in order to get the badge to work. Next steps I’m not going to ship this project juuuuust yet in case I think of any missing features that I ought to add, but I probably will soon."}, {"post_id": 10144, "ts": "2026-06-16T19:07:43Z", "hours": 0.5644, "text": "Theme Registry PR I just created a PR to add my theme to the official theme registry for Lume: https://github.com/lumeland/themes/pull/10 . Why If my theme isn’t in the official registry, the best way for users install it is to clone my entire repo, which is silly, bad for separation of concerns, and just generally worse for UX. git clone https://github.com/ethmarks/lume_tufte.git cd lume_tufte deno task serve But if I get my theme into the theme registry, users can install it using the official Lume init command, which is much better in every way: deno run -A https://lume.land/init.ts --theme = tufte Conclusion From my interactions with him in the past, the Lume maintainer (Oscar) seems like an extremely nice dude who seems to respond fairly quickly, so I shouldn’t have to wait too long before he either accepts my PR or suggests changes that I can go implement. Meanwhile, I’ll probably continue working on the README."}, {"post_id": 9742, "ts": "2026-06-16T05:10:31Z", "hours": 6.5114, "text": "README, optimizations, and more Since my last devlog: I wrote the README. I optimized the theme until it earned perfect 100s in every category on Lighthouse on every page. I added a light mode. I added support for tables of contents. I added RSS feed generation. I rewrote one of the demo blog posts. I added styles for HTML tables Link to the diff between last devlog and this one Optimization Most of the work I did today is pretty self-explanatory from my little summary, but the optimization work probably merits elaboration. So while I was writing the README, I had the idea to include the Lighthouse scores. When I checked, they were 100/100/100/92 on mobile and 92/100/100/92 on desktop. “100s on Lighthouse in some fields” doesn’t sound nearly as nice as “100s on Lighthouse in every field”, so I decided to start optimizing. Lighthouse told me that the SEO problem was a lack of descriptions, and the desktop performance problem was excessive network requests and chained network requests. SEO problem I fixed the lack of descriptions by adding descriptions. Simple as that. I wrote descriptions for all of the existing pages, added a description field to the CMS config, and added a mention of it in the usage guide. The network requests and chained requests were a bit trickier to solve. Performance problems The cause of the excessive network requests was that, even though the homepage didn’t use the KaTeX or Nueglow styles, they were still being imported. I solved that with a per-page check that runs at build time. Each page only imports the Nueglow stylesheet if it contains code blocks, and it only imports the KaTeX stylesheet if the page contains math blocks. Here’s a link to the relevant section of code . I think that it’s a pretty clever solution because it selectively removes the unnecessary CSS requests without using client-side JS or anything like that. I used a similar approach to solve the chained requests. What was happening is that in order to download the woff2 files, the browser first had to download the CSS files, so it took twice as long because they couldn’t be downloaded in parallel. Font preloads are the way to solve this. The only problem is that if I preload too many font files, the browser will have download font files even if they aren’t used on the page. But if I preload too few, then the network requests are still chained. My solution was to have it check which font files each page needs and selectively preload only those font files. Here’s the relevant code if you want to see my implementation. Again, this solves the problem of unnecessary requests and chained requests without adding any client-side JS. I’m glad that Lume and Vento are such powerful tools that I can easily do programmatic optimizations like this. Next Steps I think that the next thing I should do is submit my theme to the official Lume theme repo. That way I can simplify the installation process down to one command."}, {"post_id": 8924, "ts": "2026-06-14T20:55:26Z", "hours": 5.1553, "text": "Hi there! This is a project I’ve been working on for the past week. It’s a theme for Lume SSG based on Tufte CSS. Btw, I did the majority of the work before I started using Hackatime, so I’ve been working on it for a lot longer than 5 hours. I’m just going to briefly tell you about everything that I did before I started tracking with Hackatime. I looked through the Lume source code to figure out how the poorly-documented theme APIs work. I copied the tufte.css file into the project. Then I downloaded the font .tff files, compressed them into .woff2 files, and wrote css font-face rules for them. I made some Vento layouts. I created, styled, and wrote the logic for the site header. I wrote the blog post and blog index layouts and created the BlogList component. I started installing Lume plugins like KaTeX and Nueglow. I started writing the “Using this theme” post. I created the tufte-sections and tufte-notes plugins for markdown-it. I began heavily tweaking and customizing tufte.css. I transcribed every word of the TufteCSS homepage from HTML to Markdown. I started configuring LumeCMS. Most of what I’ve done since then (what’s reflected in the 5 hours I’ve logged with this devlog) has been a lot of writing, mainly in the Using this theme post. I’ve also been adjusting the LumeCMS config a lot. I think that the next thing that I’ll do is write the README. Thanks for reading!"}]...
|
Title: Lume Tufte by @ethmarks | Stardance
Devlog Title: Lume Tufte by @ethmarks | Stardance
Devlogs:
Hi there! This is a project I’ve been working on for the past week. It’s a theme for Lume SSG based on Tufte CSS. Btw, I did the majority of the work before I started using Hackatime, so I’ve been working on it for a lot longer than 5 hours. I’m just going to briefly tell you about everything that I did before I started tracking with Hackatime. I looked through the Lume source code to figure out how the poorly-documented theme APIs work. I copied the tufte.css file into the project. Then I downloaded the font .tff files, compressed them into .woff2 files, and wrote css font-face rules for them. I made some Vento layouts. I created, styled, and wrote the logic for the site header. I wrote the blog post and blog index layouts and created the BlogList component. I started installing Lume plugins like KaTeX and Nueglow. I started writing the “Using this theme” post. I created the tufte-sections and tufte-notes plugins for markdown-it. I began heavily tweaking and customizing tufte.css. I transcribed every word of the TufteCSS homepage from HTML to Markdown. I started configuring LumeCMS. Most of what I’ve done since then (what’s reflected in the 5 hours I’ve logged with this devlog) has been a lot of writing, mainly in the Using this theme post. I’ve also been adjusting the LumeCMS config a lot. I think that the next thing that I’ll do is write the README. Thanks for reading!
README, optimizations, and more Since my last devlog: I wrote the README. I optimized the theme until it earned perfect 100s in every category on Lighthouse on every page. I added a light mode. I added support for tables of contents. I added RSS feed generation. I rewrote one of the demo blog posts. I added styles for HTML tables Link to the diff between last devlog and this one Optimization Most of the work I did today is pretty self-explanatory from my little summary, but the optimization work probably merits elaboration. So while I was writing the README, I had the idea to include the Lighthouse scores. When I checked, they were 100/100/100/92 on mobile and 92/100/100/92 on desktop. “100s on Lighthouse in some fields” doesn’t sound nearly as nice as “100s on Lighthouse in every field”, so I decided to start optimizing. Lighthouse told me that the SEO problem was a lack of descriptions, and the desktop performance problem was excessive network requests and chained network requests. SEO problem I fixed the lack of descriptions by adding descriptions. Simple as that. I wrote descriptions for all of the existing pages, added a description field to the CMS config, and added a mention of it in the usage guide. The network requests and chained requests were a bit trickier to solve. Performance problems The cause of the excessive network requests was that, even though the homepage didn’t use the KaTeX or Nueglow styles, they were still being imported. I solved that with a per-page check that runs at build time. Each page only imports the Nueglow stylesheet if it contains code blocks, and it only imports the KaTeX stylesheet if the page contains math blocks. Here’s a link to the relevant section of code . I think that it’s a pretty clever solution because it selectively removes the unnecessary CSS requests without using client-side JS or anything like that. I used a similar approach to solve the chained requests. What was happening is that in order to download the woff2 files, the browser first had to download the CSS files, so it took twice as long because they couldn’t be downloaded in parallel. Font preloads are the way to solve this. The only problem is that if I preload too many font files, the browser will have download font files even if they aren’t used on the page. But if I preload too few, then the network requests are still chained. My solution was to have it check which font files each page needs and selectively preload only those font files. Here’s the relevant code if you want to see my implementation. Again, this solves the problem of unnecessary requests and chained requests without adding any client-side JS. I’m glad that Lume and Vento are such powerful tools that I can easily do programmatic optimizations like this. Next Steps I think that the next thing I should do is submit my theme to the official Lume theme repo. That way I can simplify the installation process down to one command.
Theme Registry PR I just created a PR to add my theme to the official theme registry for Lume: https://github.com/lumeland/themes/pull/10 . Why If my theme isn’t in the official registry, the best way for users install it is to clone my entire repo, which is silly, bad for separation of concerns, and just generally worse for UX. git clone https://github.com/ethmarks/lume_tufte.git cd lume_tufte deno task serve But if I get my theme into the theme registry, users can install it using the official Lume init command, which is much better in every way: deno run -A https://lume.land/init.ts --theme = tufte Conclusion From my interactions with him in the past, the Lume maintainer (Oscar) seems like an extremely nice dude who seems to respond fairly quickly, so I shouldn’t have to wait too long before he either accepts my PR or suggests changes that I can go implement. Meanwhile, I’ll probably continue working on the README.
1.0.0 Unless I think of more stuff to add, this is probably my last devlog before shipping. Lume Theme Registry A few hours ago, the PR that I created last devlog was merged into the official Lume theme registry, so you can now install my theme with a single command using Lume init, and it now has its own dedicated page on the official Lume website: https://lume.land/theme/tufte/ . README I added a How it Works section that explains how the Lume theme architecture works behind-the-scenes (spoiler: it’s just remote files) and explains what each of the 18 included plugins do. I updated the quickstart to use the Lume init command. I added a Showcase section that lists the sites that use this theme. It seemed kind of weird to exclusively list the Tufte theme site itself, so I also switched one of my documentation sites to use the Tufte theme. I added a shields.io badge to the top of the README that links to the theme’s page on the Lume website. shields.io relies on simple-icons for its logos, but simple-icons doesn’t have the Lume logo for some reason, so had to Base64-encode an SVG of the Lume logo in order to get the badge to work. Next steps I’m not going to ship this project juuuuust yet in case I think of any missing features that I ought to add, but I probably will soon.
Ships:
This is a theme for the Lume static site generator based on Tufte CSS . To try the Tufte theme, visit the demo page: https://ethmarks.github.io/lume_tufte/ . I submitted this PR to the official Lume theme registry to add the Tufte theme, which was accepted. It has its own page on the official Lume site: https://lume.land/theme/tufte/ I used several optimization tricks, such as statically analyzing the content of each page at build time to infer which font files to preload, to maximize performance, accessibility, best practices, and SEO. Because of this, the theme earns perfect 100s on Google Lighthouse , which the official Lighthouse documentation describes as “extremely challenging to achieve and not expected” . I wrote 5000+ words of documentation across the README and demo articles. I wrote Lume CMS config for every aspect of the theme to allow for no-code content management....
|
1793253153.408546
|
1793339553.408546
|
|
18209
|
StardustArm by @Praknoor | Stardance
|
Praknoor
|
1
|
23.29
|
63
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T12:58:26Z", "hours": 7.0, "multiplier": 8.66, "payout": 63, "blessing": "neutral", "text": "StardustArm is a NASA-themed zero-gravity robotic arm simulator built with MuJoCo — a 6-DOF MEPhi arm on a spaceship reaching and grabbing floating target spheres, with both a hand-coded IK controller and a SAC+HER reinforcement learning pipeline. The hardest problems were getting the IK to actually converge (joint angles were only set as PD targets, never applied directly to qpos, so the arm would approach then drift away), hiding the obstacle spheres so they didn’t look like extra target balls, and keeping the ball from slipping and flying out of the single-jaw gripper. I’m most proud of the full-stack integration — damped least-squares IK, minimum-jerk trajectories, floating base thrusters, vision detection, obstacle avoidance, and RL training all working together for a cohesive on-orbit servicing demo. To test it, cd stardance, pip install mujoco gymnasium stable-baselines3 sb3-contrib tensorboard glfw PyOpenGL, then python main.py for the IK controller or python train_sac.py –run my_run –timesteps 500000 for RL training; left-drag orbits the camera, right-drag zooms, ESC exits.", "repo": "https://github.com/GurnoorLog/StardustArm", "demo": "https://stardustarm.gurnoor.hackclub.app/"}]...
|
[{"post_id": 47533, "ts": "202 [{"post_id": 47533, "ts": "2026-08-15T14:41:04Z", "hours": 12.5214, "text": "just mad esome improvments gng, now u can place the ball…. i need to make it also live in the website now……damn it took me so much time to figure out this 😭😭😭😭"}, {"post_id": 37505, "ts": "2026-07-30T09:33:34Z", "hours": 3.7692, "text": "just made it online…….and tweaked a bit……… https://stardustarm.gurnoor.hackclub.app/"}, {"post_id": 14656, "ts": "2026-06-23T20:48:55Z", "hours": 7.2478, "text": "this is stardust____a robotic arm simulator in MuJoCo……..it took me so much time just to figure out the phy behind it , and also how to apply it to the model…..oh well hope u like it…….had fun"}]...
|
Title: StardustArm by @Praknoor | Stardance
Devlo Title: StardustArm by @Praknoor | Stardance
Devlogs:
this is stardust____a robotic arm simulator in MuJoCo……..it took me so much time just to figure out the phy behind it , and also how to apply it to the model…..oh well hope u like it…….had fun
just made it online…….and tweaked a bit……… https://stardustarm.gurnoor.hackclub.app/
just mad esome improvments gng, now u can place the ball…. i need to make it also live in the website now……damn it took me so much time to figure out this 😭😭😭😭
Ships:
StardustArm is a NASA-themed zero-gravity robotic arm simulator built with MuJoCo — a 6-DOF MEPhi arm on a spaceship reaching and grabbing floating target spheres, with both a hand-coded IK controller and a SAC+HER reinforcement learning pipeline. The hardest problems were getting the IK to actually converge (joint angles were only set as PD targets, never applied directly to qpos, so the arm would approach then drift away), hiding the obstacle spheres so they didn’t look like extra target balls, and keeping the ball from slipping and flying out of the single-jaw gripper. I’m most proud of the full-stack integration — damped least-squares IK, minimum-jerk trajectories, floating base thrusters, vision detection, obstacle avoidance, and RL training all working together for a cohesive on-orbit servicing demo. To test it, cd stardance, pip install mujoco gymnasium stable-baselines3 sb3-contrib tensorboard glfw PyOpenGL, then python main.py for the IK controller or python train_sac.py –run my_run –timesteps 500000 for RL training; left-drag orbits the camera, right-drag zooms, ESC exits....
|
1793119972.6243138
|
1793206372.6243138
|