|
251
|
WarioWare Game by @mani | Stardance
|
mani
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @mani | Stardance
|
1792903754.5518827
|
1793767754.5518827
|
|
252
|
Momentum by @glitch_purge | Stardance
|
glitch_purge
|
0
|
3.64
|
0
|
[]
|
[{"post_id": 22888, "ts": "202 [{"post_id": 22888, "ts": "2026-07-05T15:01:40Z", "hours": 1.0428, "text": "Momentum Devlog 4 - Upcoming Assignments, and bug fixes So I’ve started work on the upcoming assignments part of the dashboard and it looks good. The assignments I’ve put are just random stuff I made up and I spent quite a while trying to get good sizing for mobile and it went well to say the least. As before, nothing is dynamic (aka work with real values and the user) but I think I will start work on that after I finish the calendar on the side that I want to add & after I finish the Assignments tab. I like how its coming out so far and I’ve reduced the AI mockup usage a lot so the mockup and my website are wayyy different now!"}, {"post_id": 15177, "ts": "2026-06-24T17:36:24Z", "hours": 1.3464, "text": "Momentum Devlog 3 - Topbar, hamburger sidebar, 4/4 cards I added the topbar in detail like the hello, date and time text and the quick utilities buttons + user logo. Started on the cards info system so 4 cards that give you info on your current stats. Finsihed all 4. There is a hamburger menu when u go on smaller devices but I did that using Claude. Hear me out - I’m lazy to do that and I just didn’t want to break my whole system for that T-T. I will add quotes next devlog, and soon enough will start linking everything into a dynamic website using JS!"}, {"post_id": 14226, "ts": "2026-06-23T07:32:30Z", "hours": 0.5975, "text": "Momentum Devlog 2 - Built this sidebar for the app. Changed the style to be a bit more modern and sleek. Used AI to generate a mockup and building using that. The mockup messed up a bit so some features are not where I want them but that gives me a lot of creativity to add my own stuff. Idea was mine, mockup was chatgpt’s and I’m only using the mockup for dashboard. Rest all pages will be made using that."}, {"post_id": 13775, "ts": "2026-06-22T16:04:40Z", "hours": 0.6492, "text": "Devlog 01 - Sidebar and topbar Worked on the sidebar and topbar after spending 2+ hours designing a mockup in figma. Haven’t done HTML & CSS in a long time so this was a bit of a struggle but relatively easy. Building every component static rn, will use only JS (normal JS) to build the proper website with information. Tryna store every data on cookies"}]...
|
Title: Momentum by @glitch_purge | Stardance
Devl Title: Momentum by @glitch_purge | Stardance
Devlogs:
Devlog 01 - Sidebar and topbar Worked on the sidebar and topbar after spending 2+ hours designing a mockup in figma. Haven’t done HTML & CSS in a long time so this was a bit of a struggle but relatively easy. Building every component static rn, will use only JS (normal JS) to build the proper website with information. Tryna store every data on cookies
Momentum Devlog 2 - Built this sidebar for the app. Changed the style to be a bit more modern and sleek. Used AI to generate a mockup and building using that. The mockup messed up a bit so some features are not where I want them but that gives me a lot of creativity to add my own stuff. Idea was mine, mockup was chatgpt’s and I’m only using the mockup for dashboard. Rest all pages will be made using that.
Momentum Devlog 3 - Topbar, hamburger sidebar, 4/4 cards I added the topbar in detail like the hello, date and time text and the quick utilities buttons + user logo. Started on the cards info system so 4 cards that give you info on your current stats. Finsihed all 4. There is a hamburger menu when u go on smaller devices but I did that using Claude. Hear me out - I’m lazy to do that and I just didn’t want to break my whole system for that T-T. I will add quotes next devlog, and soon enough will start linking everything into a dynamic website using JS!
Momentum Devlog 4 - Upcoming Assignments, and bug fixes So I’ve started work on the upcoming assignments part of the dashboard and it looks good. The assignments I’ve put are just random stuff I made up and I spent quite a while trying to get good sizing for mobile and it went well to say the least. As before, nothing is dynamic (aka work with real values and the user) but I think I will start work on that after I finish the calendar on the side that I want to add & after I finish the Assignments tab. I like how its coming out so far and I’ve reduced the AI mockup usage a lot so the mockup and my website are wayyy different now!...
|
1792634111.5515468
|
1793238911.5515468
|
|
253
|
explosion by @z | Stardance
|
z
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: explosion by @z | Stardance
|
1792652074.6653073
|
1793256874.6653073
|
|
254
|
GitPilot-n8n: The Autonomous Open Source AI Agent GitPilot-n8n: The Autonomous Open Source AI Agent by @jawadhasan | Stardance...
|
jawadhasan
|
1
|
6.33
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T15:18:40Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a Multi-Agentic workflow that constantly monitors any issues on Github and notifies its developers. It is set up on a repository. I still don’t know how I built it. When I planned it first. it seemed so hard. and when I was building this project, I saw some errors that I never saw before and even after that I had to alter my initial plan. But it works now fortunately.", "repo": "https://github.com/Jawad2011/GitPilot-n8n-The-Autonomous-Open-Source-AI-Agent", "demo": "https://github.com/Jawad2011/Gitpilot-test-sandbox/issues"}]...
|
[{"post_id": 5384, "ts": "2026 [{"post_id": 5384, "ts": "2026-06-09T04:02:28Z", "hours": 0.3336, "text": "Made it demoable, added demo instructions and fixed some typos. Readt re reship."}, {"post_id": 3533, "ts": "2026-06-06T14:52:48Z", "hours": 0.51, "text": "Finally finished writing my README. Now, it’s time to ship my project. I don’t know if it will be good or not but I will try. Let’s see what happens."}, {"post_id": 2787, "ts": "2026-06-05T16:29:50Z", "hours": 2.4467, "text": "Hello, i don’t know but I am struggling a lot. The tool I use is n8n which is an open-source AI Automation tool. But it has many problems and especially I face more struggles because of my server being rented. Firstly, I wanted to use MCP server and built it on my own but unfortunately due to some errors and proxies on which I had no control over, i was unable to connect it. Then, I directly connected it directly my main AI Agent node."}, {"post_id": 1952, "ts": "2026-06-04T06:19:14Z", "hours": 2.5161, "text": "Hello, I worked for about 2 and a half hours trying to write a Python script to parse the data to only find out that Python isn’t installed in the n8n server. I use a student-only n8n server which charges $17 per 3 years. Python3 wasn’t installed there. So, I had to find an alternative and used a Set Node instead. And also added an AI Agent and build a MCP Server so the AI Agent can use the tools without creating a mess in the original workflow."}, {"post_id": 656, "ts": "2026-06-02T05:52:21Z", "hours": 0.4222, "text": "Built the initial phase successfully after debugging and learning that AI Model cannot take raw JSON and you have to stringify it."}]...
|
Title: GitPilot-n8n: The Autonomous Open Source AI Title: GitPilot-n8n: The Autonomous Open Source AI Agent by @jawadhasan | Stardance
Devlogs:
Built the initial phase successfully after debugging and learning that AI Model cannot take raw JSON and you have to stringify it.
Hello, I worked for about 2 and a half hours trying to write a Python script to parse the data to only find out that Python isn’t installed in the n8n server. I use a student-only n8n server which charges $17 per 3 years. Python3 wasn’t installed there. So, I had to find an alternative and used a Set Node instead. And also added an AI Agent and build a MCP Server so the AI Agent can use the tools without creating a mess in the original workflow.
Hello, i don’t know but I am struggling a lot. The tool I use is n8n which is an open-source AI Automation tool. But it has many problems and especially I face more struggles because of my server being rented. Firstly, I wanted to use MCP server and built it on my own but unfortunately due to some errors and proxies on which I had no control over, i was unable to connect it. Then, I directly connected it directly my main AI Agent node.
Finally finished writing my README. Now, it’s time to ship my project. I don’t know if it will be good or not but I will try. Let’s see what happens.
Made it demoable, added demo instructions and fixed some typos. Readt re reship.
Ships:
I built a Multi-Agentic workflow that constantly monitors any issues on Github and notifies its developers. It is set up on a repository. I still don’t know how I built it. When I planned it first. it seemed so hard. and when I was building this project, I saw some errors that I never saw before and even after that I had to alter my initial plan. But it works now fortunately....
|
1792842632.9401927
|
1792929032.9401927
|
|
255
|
WarioWare Game by @Shubhankar | Stardance
|
Shubhankar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @Shubhankar | Stardance
|
1792734623.282038
|
1793339423.282038
|
|
256
|
Frictionless by @lucasian | Stardance
|
lucasian
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @lucasian | Stardance
|
1792741825.5562634
|
1793346625.5562634
|
|
257
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1791826011.6558459
|
1792690011.6558459
|
|
258
|
Hmm… :thinkies: by @GB114 | Stardance
|
GB114
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hmm… :thinkies: by @GB114 | Stardance
|
1792569271.8056815
|
1793174071.8056815
|
|
259
|
something by @Alisha | Stardance
|
Alisha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: something by @Alisha | Stardance
|
1792741871.6439826
|
1793346671.6439826
|
|
260
|
Untitled project by @mustafa | Stardance
|
mustafa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @mustafa | Stardance
|
1792738436.8470793
|
1793343236.8470793
|
|
261
|
My website by @Jonas | Stardance
|
Jonas
|
0
|
0.34
|
0
|
[]
|
[{"post_id": 2974, "ts": "2026 [{"post_id": 2974, "ts": "2026-06-05T21:51:02Z", "hours": 0.3442, "text": "A bit terrible but it a start"}]...
|
Title: My website by @Jonas | Stardance
Devlogs:
Title: My website by @Jonas | Stardance
Devlogs:
A bit terrible but it a start...
|
1792651712.7489386
|
1793256512.7489386
|
|
262
|
Macropad V2 by @Tirthak | Stardance
|
Tirthak
|
0
|
3.74
|
0
|
[]
|
[{"post_id": 1480, "ts": "2026 [{"post_id": 1480, "ts": "2026-06-03T15:06:53Z", "hours": 1.4178, "text": "so basically completed the schematic and continued working on the PCB. a lot of parts and traces are still remaining but this is how it looks rn:"}, {"post_id": 1110, "ts": "2026-06-02T22:50:31Z", "hours": 2.325, "text": "So Basically i started by researching stuff as in what to use, then after finding the appropriate parts moved on to designing and making the PCB and schematic together."}]...
|
Title: Macropad V2 by @Tirthak | Stardance
Devlog Title: Macropad V2 by @Tirthak | Stardance
Devlogs:
So Basically i started by researching stuff as in what to use, then after finding the appropriate parts moved on to designing and making the PCB and schematic together.
so basically completed the schematic and continued working on the PCB. a lot of parts and traces are still remaining but this is how it looks rn:...
|
1792741767.4950216
|
1793346567.4950216
|
|
263
|
Untitled project by @miggy | Stardance
|
miggy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @miggy | Stardance
|
1792759662.126916
|
1793364462.126916
|
|
264
|
Untitled project by @shankkyyyy | Stardance
|
shankkyyyy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @shankkyyyy | Stardance
|
1792515142.28927
|
1793119942.28927
|
|
265
|
Gitindex by @Matthias | Stardance
|
Matthias
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Gitindex by @Matthias | Stardance
|
1792759677.9661965
|
1793364477.9661965
|
|
266
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1791823928.3926342
|
1792687928.3926342
|
|
267
|
Gitindex by @Matthias | Stardance
|
Matthias
|
0
|
4.47
|
0
|
[]
|
[{"post_id": 46810, "ts": "202 [{"post_id": 46810, "ts": "2026-08-14T10:09:39Z", "hours": 0.3667, "text": "Today I’m working on implementing an iconset for the github filetree, I asked myself where the best place was to get a bunch of developer icons and decided to use the vscode ones, wrote a helper to extract the extension -> icon manifest and set up a quick css query to make the icons monochrome for light and dark mode, like the one below"}, {"post_id": 46241, "ts": "2026-08-13T10:45:36Z", "hours": 1.0611, "text": "I added a new feature that makes the header sticky along with some polish"}, {"post_id": 46199, "ts": "2026-08-13T08:11:24Z", "hours": 1.9131, "text": "Ok, so after quite some time off I thought why not get back to hackclubbing and so I am continuing Gitindex, in the last commit I implemented an animation for the language diagram and adjusted some DOM-selectors so the extension doesn’t break. Honestly I am preparing for CWS release: implementing last features and polishing, bye"}, {"post_id": 321, "ts": "2026-06-01T16:33:16Z", "hours": 1.1294, "text": "Am currently building a prototype for the all actions menu, let’s see how this goes, will continue to develop now."}]...
|
Title: Gitindex by @Matthias | Stardance
Devlogs: Title: Gitindex by @Matthias | Stardance
Devlogs:
Am currently building a prototype for the all actions menu, let’s see how this goes, will continue to develop now.
Ok, so after quite some time off I thought why not get back to hackclubbing and so I am continuing Gitindex, in the last commit I implemented an animation for the language diagram and adjusted some DOM-selectors so the extension doesn’t break. Honestly I am preparing for CWS release: implementing last features and polishing, bye
I added a new feature that makes the header sticky along with some polish
Today I’m working on implementing an iconset for the github filetree, I asked myself where the best place was to get a bunch of developer icons and decided to use the vscode ones, wrote a helper to extract the extension -> icon manifest and set up a quick css query to make the icons monochrome for light and dark mode, like the one below...
|
1792565472.422445
|
1793170272.422445
|
|
268
|
Untitled project by @siemvk | Stardance
|
siemvk
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @siemvk | Stardance
|
1791822461.6394966
|
1792686461.6394966
|
|
269
|
School Manager by @xarber | Stardance
|
xarber
|
0
|
30.26
|
0
|
[]
|
[{"post_id": 50991, "ts": "202 [{"post_id": 50991, "ts": "2026-08-20T14:12:00Z", "hours": 1.1489, "text": "SideStore / LiveContainer source! Do you want to try School Manager yourself? You can now install the development builds through an AltSource, that you can add yourself from the School Manager github repo! You can also download the .ipa files manually from GitHub Releases. Just open the app and try it yourself!"}, {"post_id": 37594, "ts": "2026-07-30T13:03:30Z", "hours": 10.2097, "text": "Improved server-side security A few adjustments were made server-side: Tokens now expire much earlier, with a refresh token to keep users signed in. Other database endpoint updates were made to ensure safer data handling. Account security updates Together with the server side security enhancements, I also added a session management section in the Sign In & Security page: You can now manage your signed in devices, recognize them with their model or OS + browser, last seen date, and app version. You can easily sign out any of those devices, requiring another sign in. Passkey Renaming As mentioned in the previous devlog, I did add passkey renaming. Now passkeys detect the device you saved the passkey on to give a suggested name, which you can edit at any time. Fixed app themes For some reason app themes broke with an SDK update. I restored functionality, and extended it to the welcome screen. Multiple changes conventional commits I updated the workflow scripts to allow multiple changes inside of one commit: feat: Feature 1; fix: Fix 1; fix: Fix2 All inside of the same commit! These will then be parsed in the github release by the workflow. Switch app building to GitHub Actions server EAS Cloud was disabled. Now all app builds are ran through the GitHub Actions server. I also added an unsigned iOS build, which is installable with SideStore, LiveContainer, or any other similar sideloading app. The iOS builds are compiled with X-Code 27 beta, so the dynamic app resizing is enabled for iOS 27 (You can test by using iPhone mirroring, launching the sideloaded app, and trying to resize the window). Small reminder: You can either install the development build, OR, you can test the app by installing the PWA when opening the website version!"}, {"post_id": 32495, "ts": "2026-07-21T18:31:27Z", "hours": 4.8581, "text": "Passkeys are live! This took me a while to develop, but passkeys are finally live! There’s a passkey management screen in settings, with a list of all saved passkeys, when they were last used and when they were added. You can delete them, or add new ones using web authentication. This is a temporary workaround since Apple requires you to have a paid developer license to use passkeys in-app. What’s next? I’d like to add passkey renaming in settings (and regular passkey naming in the registration screen), OR a database with automatically detected names for each Passkey handler ID. I’m currently trying to get the app to build on X-Code 27 beta. This would use the new SDK and allow apps to dynamically resize when using iPhone mirroring or the xcode device hub. It would be a huge improvement for testing, since I would be able to test everything 100% from my mac without having an ipad simulator or have to bring a physical device around."}, {"post_id": 31140, "ts": "2026-07-19T09:45:17Z", "hours": 13.7719, "text": "Passkeys I’ve been working on this for a while. I’m currently adding passkeys and security keys support to the app! The app has been based on OTP codes since release, I’m also adding passkey support so that no waiting for emails is needed. You will still need a verified email in order to sign up, but you will be able to use passkeys for future authentications. I also think about adding an authenticator app OTP generator to replace email OTPs altogether (for added security in case of a stolen email account), but it’s a work in progress (PS: Again, you will still need a verified email address to sign up). GitHub Workflows! This took me ages to build. I implemented workflows and multiple branches: Master (Release) Beta Alpha Development Testing (no workflows here) On every push, two jobs run: One updates the website (only on master pushes), and also runs eas update to the specified update branch. The other job is the most interesting: It checks for version changes in the app.json file, and if the version changed, it starts building a new binary for the app: Signed iOS Simulator (.tar.gz app file), “Signed” Android APK (or AAB if the branch is Beta/Master), and unsigned iOS .ipa file (since I have no paid developer license yet). The first two are ran through EAS Cloud, and then downloaded by the workflow. The unsigned build runs directly on GitHub Actions’s servers. After having the artifacts, they get renamed to human readable names, and release notes are automatically generated with the adoption of conventional commits (fix: … | ci: … | feat: … | etc). The script later proceeds to create a release and a tag for said update, and draft it to the github repo. This means I no longer have to manage builds myself, which sometimes took several hours to fix environment issues and more. It also means that whenever I push an update, the app automatically reflects said update in an appropriate branch (we don’t like testing in production, right?)."}, {"post_id": 945, "ts": "2026-06-02T18:26:17Z", "hours": 0.2667, "text": "Now on Stardance! Hi everyone! Welcome to Stardance! I can’t wait to start seeing everyone’s amazing projects, and to start coding my own! I actually have a few ideas boiling in the pot, many of which I’ve already created projects for. Good coding to everyone! About School Manager The development of the app will be continued in Stardance! There aren’t many updates since the last devlog in Flavortown, I’m trying to organize my ideas and clean some code before continuing development. Have fun everyone!"}]...
|
Title: School Manager by @xarber | Stardance
Devl Title: School Manager by @xarber | Stardance
Devlogs:
Now on Stardance! Hi everyone! Welcome to Stardance! I can’t wait to start seeing everyone’s amazing projects, and to start coding my own! I actually have a few ideas boiling in the pot, many of which I’ve already created projects for. Good coding to everyone! About School Manager The development of the app will be continued in Stardance! There aren’t many updates since the last devlog in Flavortown, I’m trying to organize my ideas and clean some code before continuing development. Have fun everyone!
Passkeys I’ve been working on this for a while. I’m currently adding passkeys and security keys support to the app! The app has been based on OTP codes since release, I’m also adding passkey support so that no waiting for emails is needed. You will still need a verified email in order to sign up, but you will be able to use passkeys for future authentications. I also think about adding an authenticator app OTP generator to replace email OTPs altogether (for added security in case of a stolen email account), but it’s a work in progress (PS: Again, you will still need a verified email address to sign up). GitHub Workflows! This took me ages to build. I implemented workflows and multiple branches: Master (Release) Beta Alpha Development Testing (no workflows here) On every push, two jobs run: One updates the website (only on master pushes), and also runs eas update to the specified update branch. The other job is the most interesting: It checks for version changes in the app.json file, and if the version changed, it starts building a new binary for the app: Signed iOS Simulator (.tar.gz app file), “Signed” Android APK (or AAB if the branch is Beta/Master), and unsigned iOS .ipa file (since I have no paid developer license yet). The first two are ran through EAS Cloud, and then downloaded by the workflow. The unsigned build runs directly on GitHub Actions’s servers. After having the artifacts, they get renamed to human readable names, and release notes are automatically generated with the adoption of conventional commits (fix: … | ci: … | feat: … | etc). The script later proceeds to create a release and a tag for said update, and draft it to the github repo. This means I no longer have to manage builds myself, which sometimes took several hours to fix environment issues and more. It also means that whenever I push an update, the app automatically reflects said update in an appropriate branch (we don’t like testing in production, right?).
Passkeys are live! This took me a while to develop, but passkeys are finally live! There’s a passkey management screen in settings, with a list of all saved passkeys, when they were last used and when they were added. You can delete them, or add new ones using web authentication. This is a temporary workaround since Apple requires you to have a paid developer license to use passkeys in-app. What’s next? I’d like to add passkey renaming in settings (and regular passkey naming in the registration screen), OR a database with automatically detected names for each Passkey handler ID. I’m currently trying to get the app to build on X-Code 27 beta. This would use the new SDK and allow apps to dynamically resize when using iPhone mirroring or the xcode device hub. It would be a huge improvement for testing, since I would be able to test everything 100% from my mac without having an ipad simulator or have to bring a physical device around.
Improved server-side security A few adjustments were made server-side: Tokens now expire much earlier, with a refresh token to keep users signed in. Other database endpoint updates were made to ensure safer data handling. Account security updates Together with the server side security enhancements, I also added a session management section in the Sign In & Security page: You can now manage your signed in devices, recognize them with their model or OS + browser, last seen date, and app version. You can easily sign out any of those devices, requiring another sign in. Passkey Renaming As mentioned in the previous devlog, I did add passkey renaming. Now passkeys detect the device you saved the passkey on to give a suggested name, which you can edit at any time. Fixed app themes For some reason app themes broke with an SDK update. I restored functionality, and extended it to the welcome screen. Multiple changes conventional commits I updated the workflow scripts to allow multiple changes inside of one commit: feat: Feature 1; fix: Fix 1; fix: Fix2 All inside of the same commit! These will then be parsed in the github release by the workflow. Switch app building to GitHub Actions server EAS Cloud was disabled. Now all app builds are ran through the GitHub Actions server. I also added an unsigned iOS build, which is installable with SideStore, LiveContainer, or any other similar sideloading app. The iOS builds are compiled with X-Code 27 beta, so the dynamic app resizing is enabled for iOS 27 (You can test by using iPhone mirroring, launching the sideloaded app, and trying to resize the window). Small reminder: You can either install the development build, OR, you can test the app by installing the PWA when opening the website version!
SideStore / LiveContainer source! Do you want to try School Manager yourself? You can now install the development builds through an AltSource, that you can add yourself from the School Manager github repo! You can also download the .ipa files manually from GitHub Releases. Just open the app and try it yourself!...
|
1792511264.6086454
|
1793116064.6086454
|
|
270
|
BetterStandby by @Capy | Stardance
|
Capy
|
1
|
16.0
|
235
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T15:33:29Z", "hours": 16.0, "multiplier": 14.33, "payout": 235, "blessing": "neutral", "text": "I made BetterStandby! It’s a PWA that lets non-iPhones and any phones without an always-on display use a clock face inspired by Apple’s StandBy! It’s highly customisable, featuring custom font size, font, and accent colour, alongside different layouts. It was really fun to build, so thanks for reading! Hope you like it as much as I do :D", "repo": "https://github.com/CapyGamesXD/BetterStandby", "demo": "https://betterstandby.capydesigns.com"}]...
|
[{"post_id": 8747, "ts": "2026 [{"post_id": 8747, "ts": "2026-06-14T15:30:47Z", "hours": 1.2781, "text": "Final Devlog! I (once again) redesigned the settings page, and I’m super happy with the outcome. I also adapted several other pages and made some smaller improvements. I made a README file showcasing some images of the project. I think this will be the last devlog before I ship, so see you guys in the next project, and thanks for reading!"}, {"post_id": 8272, "ts": "2026-06-13T19:20:33Z", "hours": 4.3236, "text": "WOW! Lot of work done! I’ll go through them quickly: 1: Capybara 404 page 2: Added GPS geolocation (no more IP :D) 3: Added a fancy new icon! (3 lines of AI code for the meta tags!!!) Speedrun time! Fixed small-screen layout issues, added a ‘hide location’ button in settings, totally revamped settings and customisation, fixed an inconsistency across the starting page and the customisation page, removed a useless button, added a ‘docs’ page talking about the project, spent a while debugging a ‘rogue import’ issue (XD), put default at the top for fonts, improved saving logic and ADDED 5 NEW FONTS! :D They all look great! Everybody welcome: Pliant, Montserrat, Oswald, Roboto Slab, and Pixelify Sans! This gives you up to 49 new combinations! :D Sorry for the long devlog and any mistakes, thanks for reading!"}, {"post_id": 4427, "ts": "2026-06-07T19:04:28Z", "hours": 2.8225, "text": "BIG devlog! A bunch of really nice features! In reverse order of my preference: Fixed bugs on Safari Some nice outlines for visibility if the user decides on light accent colours. I added a font sizing option in customisation! Added font customisation for both large and small text. Also updated the font styling to work across various screen sizes! And finally… FINALLY! I added ANIMATIONS! They’re really fluid and smooth. Plans: Improve reliability across browsers. Add a font sizing option to smaller text. I’m considering adding PWA detection, but not sure. Also considering some fun documentation for the user/tester to read regarding screen burn protection and the idea of the app. Add more pages! Improve UI. Thanks for reading! (Sorry for any grammar/spelling issues, I type all my devlogs manually lel)"}, {"post_id": 2835, "ts": "2026-06-05T17:52:25Z", "hours": 2.0106, "text": "2h devlog. So I fixed the bugs mentioned at the end of the last devlog, which is great :D I also redesigned the concept of the settings, now there are separate pages for customisation and actual settings. I also implemented that new settings menu, featuring control over storage (locally held variables) and input for lat/lon, which is currently entirely manual to avoid any privacy concerns. I made sure not to add this to the intro, as it helps the user learn about the settings. :D I also improved the screen burn protection, and experimented a bit with that. The last (and largest) improvement I made was the UI of the ‘info’ page, and I plan to do a similar thing to all other pages. There’s a screenshot below. Plans: Total overhaul of other pages, general UI and ANIMATIONS! Also, I plan to add a ‘reading’ section, kinda like a blog based on the work I’ve done and my idea behind it, with the screen-burn protection. Thanks for reading!"}, {"post_id": 2286, "ts": "2026-06-04T18:00:20Z", "hours": 2.7808, "text": "Added a bunch more stuff! I implemented the other pages, added a ‘customisation’ page (settings) where the user can change the styling and screen, and added a bunch more improvements across pages. This isn’t all I added, but I’m trying to keep the devlog short to not be boring. Plans: Fix some things with Safari, fix the location fetching for weather data, and revamp the UI for the customisation page. Also add tons more screens and animations (I still haven’t! XD). I also need to fix a bug where the dark mode is somewhat inconsistent. Thanks for reading, happy coding!"}, {"post_id": 421, "ts": "2026-06-01T20:28:40Z", "hours": 2.0664, "text": "I added tons of cool stuff! I modified and improved the ‘intro’ experience, adding styling pages, alongside a tutorial page for customisation! I also added a system for styling, which looks really nice IMHO! I’d love to hear your feedback on it. I very slightly modified the icons on the first page, but not significantly aside from adding the actual views, rather than placeholders. I added an image of the final page showing the user how to enter the customisation menu, although I plan to modify that a LOT! XD After you click on that, it takes you to the main home page, where I added a CSS-based system protecting against screen burn! (I chose CSS because it’s more reliable against memory leaks and animations are widely supported with very little overhead! :D) There’s a LOT I plan to add still! I want to make the customisation menu, massively improve the UI, and add tons of nice animations and details (like I said I’d do in the previous entry) If you’re interested, I’m using a Trello board to keep track of things! I find it really helpful to organise everything into an ‘ideas’, ‘to-do’, ‘improve’ and ‘done’. :D Thanks for reading my (probably excessively long) devlog! Happy hacking! :)"}, {"post_id": 124, "ts": "2026-05-31T21:05:24Z", "hours": 1.135, "text": "Hey! Excited to make my first devlog! I worked for a few untracked hours on the UI in Figma. I also plotted a nice intro/disclaimer message for the user about screen burn. I’m really happy with the intro page, although I plan to modify the customisation page. :) After that I started coding! I’ve managed to get a working version of the UI for the first two screens, which are both visible below. I’ve added some basic animations, but plan to go quite big on the nice zoom-ey ones for the buttons and stuff, in case anyone (like the people testing!) use a PC. :D Thanks for reading the devlog! Have fun. :D"}]...
|
Title: BetterStandby by @Capy | Stardance
Devlogs Title: BetterStandby by @Capy | Stardance
Devlogs:
Hey! Excited to make my first devlog! I worked for a few untracked hours on the UI in Figma. I also plotted a nice intro/disclaimer message for the user about screen burn. I’m really happy with the intro page, although I plan to modify the customisation page. :) After that I started coding! I’ve managed to get a working version of the UI for the first two screens, which are both visible below. I’ve added some basic animations, but plan to go quite big on the nice zoom-ey ones for the buttons and stuff, in case anyone (like the people testing!) use a PC. :D Thanks for reading the devlog! Have fun. :D
I added tons of cool stuff! I modified and improved the ‘intro’ experience, adding styling pages, alongside a tutorial page for customisation! I also added a system for styling, which looks really nice IMHO! I’d love to hear your feedback on it. I very slightly modified the icons on the first page, but not significantly aside from adding the actual views, rather than placeholders. I added an image of the final page showing the user how to enter the customisation menu, although I plan to modify that a LOT! XD After you click on that, it takes you to the main home page, where I added a CSS-based system protecting against screen burn! (I chose CSS because it’s more reliable against memory leaks and animations are widely supported with very little overhead! :D) There’s a LOT I plan to add still! I want to make the customisation menu, massively improve the UI, and add tons of nice animations and details (like I said I’d do in the previous entry) If you’re interested, I’m using a Trello board to keep track of things! I find it really helpful to organise everything into an ‘ideas’, ‘to-do’, ‘improve’ and ‘done’. :D Thanks for reading my (probably excessively long) devlog! Happy hacking! :)
Added a bunch more stuff! I implemented the other pages, added a ‘customisation’ page (settings) where the user can change the styling and screen, and added a bunch more improvements across pages. This isn’t all I added, but I’m trying to keep the devlog short to not be boring. Plans: Fix some things with Safari, fix the location fetching for weather data, and revamp the UI for the customisation page. Also add tons more screens and animations (I still haven’t! XD). I also need to fix a bug where the dark mode is somewhat inconsistent. Thanks for reading, happy coding!
2h devlog. So I fixed the bugs mentioned at the end of the last devlog, which is great :D I also redesigned the concept of the settings, now there are separate pages for customisation and actual settings. I also implemented that new settings menu, featuring control over storage (locally held variables) and input for lat/lon, which is currently entirely manual to avoid any privacy concerns. I made sure not to add this to the intro, as it helps the user learn about the settings. :D I also improved the screen burn protection, and experimented a bit with that. The last (and largest) improvement I made was the UI of the ‘info’ page, and I plan to do a similar thing to all other pages. There’s a screenshot below. Plans: Total overhaul of other pages, general UI and ANIMATIONS! Also, I plan to add a ‘reading’ section, kinda like a blog based on the work I’ve done and my idea behind it, with the screen-burn protection. Thanks for reading!
BIG devlog! A bunch of really nice features! In reverse order of my preference: Fixed bugs on Safari Some nice outlines for visibility if the user decides on light accent colours. I added a font sizing option in customisation! Added font customisation for both large and small text. Also updated the font styling to work across various screen sizes! And finally… FINALLY! I added ANIMATIONS! They’re really fluid and smooth. Plans: Improve reliability across browsers. Add a font sizing option to smaller text. I’m considering adding PWA detection, but not sure. Also considering some fun documentation for the user/tester to read regarding screen burn protection and the idea of the app. Add more pages! Improve UI. Thanks for reading! (Sorry for any grammar/spelling issues, I type all my devlogs manually lel)
WOW! Lot of work done! I’ll go through them quickly: 1: Capybara 404 page 2: Added GPS geolocation (no more IP :D) 3: Added a fancy new icon! (3 lines of AI code for the meta tags!!!) Speedrun time! Fixed small-screen layout issues, added a ‘hide location’ button in settings, totally revamped settings and customisation, fixed an inconsistency across the starting page and the customisation page, removed a useless button, added a ‘docs’ page talking about the project, spent a while debugging a ‘rogue import’ issue (XD), put default at the top for fonts, improved saving logic and ADDED 5 NEW FONTS! :D They all look great! Everybody welcome: Pliant, Montserrat, Oswald, Roboto Slab, and Pixelify Sans! This gives you up to 49 new combinations! :D Sorry for the long devlog and any mistakes, thanks for reading!
Final Devlog! I (once again) redesigned the settings page, and I’m super happy with the outcome. I also adapted several other pages and made some smaller improvements. I made a README file showcasing some images of the project. I think this will be the last devlog before I ship, so see you guys in the next project, and thanks for reading!
Ships:
I made BetterStandby! It’s a PWA that lets non-iPhones and any phones without an always-on display use a clock face inspired by Apple’s StandBy! It’s highly customisable, featuring custom font size, font, and accent colour, alongside different layouts. It was really fun to build, so thanks for reading! Hope you like it as much as I do :D...
|
1792846310.0322657
|
1792932710.0322657
|
|
271
|
Pathway by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pathway by @xarber | Stardance
|
1792716706.067727
|
1793321506.067727
|
|
272
|
Untitled by @ishowspeed | Stardance
|
ishowspeed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @ishowspeed | Stardance
|
1791825245.4276354
|
1792689245.4276354
|
|
273
|
Unmasked by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Unmasked by @xarber | Stardance
|
1792684106.8443542
|
1793288906.8443542
|
|
274
|
Echo by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Echo by @xarber | Stardance
|
1792605009.5089886
|
1793209809.5089886
|
|
275
|
Fetch by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Fetch by @xarber | Stardance
|
1792637567.6617815
|
1793242367.6617815
|
|
276
|
Tempo by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Tempo by @xarber | Stardance
|
1792518904.6851594
|
1793123704.6851594
|
|
277
|
Kadent by @hacha-mouse | Stardance
|
hacha-mouse
|
1
|
231.72
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-01T15:24:36Z", "hours": 229.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Kadent Kadent is a cross-platform DAW featuring KASL, a domain-specific audio language, and node-graph processing system. Features Create music with familiar track-based UI Two track types: Note Track & Audio Track Node graph for every track KASL language with syntax similar to Swift The node graph allows you to combine multiple KASL programs to perform much more complex processing. What Is a Node Graph? Kadent uses node graph for track processing. A Node is a processing unit that calculates the output. In node graph, an output of one node can be connected to an input of another node. This allows you to connect multiple inputs and outputs freely to other nodes to create sound. Then, why did I adopt node graph? KASL programs can have multiple inputs and outputs, and their types may also vary. So placing them in order does not work because the DAW cannot know which output is connected to the specific input. That’s why Kadent uses node graph. Characteristics of KASL Utilizes Cranelift as a backend for quicker JIT compilation Specialized type of variables such as input , output and state Supports fixed-length arrays and structs Fixed-count loop syntax for predictable execution time Module system influenced by Python Custom infix/prefix/postfix operators (even normal arithmetic operators are defined and provided by std ) KASL Sample Program audio module is built-in module provided by Kadent. Note that these programs below won’t work outside the DAW. Gain Node import audio import std input in = audio.zero_sample() input gain = 0.0 output out = audio.zero_sample() func main() { out = in * [gain; audio.max_channels] } Mix Node import std import std/math/float as f import audio input input_1 = audio.zero_sample() input input_2 = audio.zero_sample() input factor = 0.0 output out = audio.zero_sample() func main() { let clamped_factor = f.clamp(factor, 0.0, 1.0) let multiplied_input_1: audio.Sample = input_1 * [clamped_factor; audio.max_channels] let multiplied_input_2: audio.Sample = input_2 * [1.0 - clamped_factor; audio.max_channels] out = multiplied_input_1 + multiplied_input_2 } Sawtooth Wave Synthesizer import audio as a import std import std/math/float as f input notes = a.EventSlot() input pitch = 1.0 output out = a.zero_sample() state allocator = a.Allocator() let base_freq = 440.0 let volume = 0.1 func main() { allocator.update(notes) var i = 0 loop a.max_voices { let voice = allocator.voices[i] let freq = pitch * base_freq * f.pow(2.0, (voice.pitch - 69.0) / 12.0) if voice.is_active { let t = voice.age let sample = saw(freq: freq, time: t) out = out + [sample * volume; a.max_channels] } i = i + 1 } } func saw(freq f = 440.0, time t: Float) -> Float { return 2.0 * (t * f) % 1.0 - 1.0 } Installation Go to the Releases page of my GitHub repository to download the latest precompiled binary, or compile the binary yourself. Detailed installation steps are described in README .", "repo": "https://github.com/hatya-mouse/kadent", "demo": "https://github.com/hatya-mouse/kadent/releases/tag/v0.1.1"}]...
|
[{"post_id": 81784, "ts": "202 [{"post_id": 81784, "ts": "2026-10-22T14:10:13Z", "hours": 0.8664, "text": "How to add Note Region You can add note region by double-clicking in the timeline. To add notes to it, you need to select the region by clicking it first. Code Editor Error .kdp files are serialized project files, not a source code. You can create a new source file by clicking the src/ directory in the Code Editor. To add a source code to the note track, first open a node graph and add a KASL node to it. In the Inspector, you can specify the path to the source code (e.g. src/example.kasl). Added Some More Documentation I’ve added documentation with screenshots of each panels: Timeline Inspector Automation Node Graph Piano Roll Code Editor"}, {"post_id": 81773, "ts": "2026-10-22T13:18:48Z", "hours": 1.8489, "text": "Added Documentation I saw that the reviewer tried to open the binary project file in the code editor and failed so I’ve decided to add a some sort of tutorial or a documentation. I really wanted to add an interactive tutorial so that the reviewers and the users can know how Kadent works, but I didn’t have time to do so so I’ve just added a few documentation."}, {"post_id": 59408, "ts": "2026-09-01T06:49:17Z", "hours": 17.1803, "text": "Added License Browser It’s been a while since my last devlog! During this time I’ve added an Acknowledgements view where you can look at license text and other informations of the Fonts and Crates that I’ve used. It was a bit difficult to implement because there are so many crates, but I’m satisfied with the result."}, {"post_id": 56435, "ts": "2026-08-28T06:22:03Z", "hours": 41.4536, "text": "Improved code editor I’ve implemented error highlighting in the code editor. I also added a list of errors at the bottom of the code editor, and I can jump to the position of the error by clicking the error. TextEdit in egui does not support highlighting character by character and instead it only highlighting by each sections, so red underlined part may be bigger than the actual error range, but I guess it still looks nice."}, {"post_id": 52794, "ts": "2026-08-23T04:24:09Z", "hours": 10.9353, "text": "sode I’ve created a simple binary serialization crate called “sode” for Kadent. This guarantees that the output binary won’t change even if the struct is modified so I thought it would be better than serde or that sort of serialization library. impl Encode for Note { fn encode ( & self , e : & mut Encoder ) -> Result < (), EncodeError > { e .field ( 0 , & self .start ) ? ; e .field ( 1 , & self .duration ) ? ; e .field ( 2 , & self .pitch ) ? ; e .field ( 3 , & self .velocity ) ? ; Ok (()) } } impl Decode for Note { fn decode ( d : & mut ValueDecoder ) -> Result < Self , DecodeError > { let d = d .to_field_decoder () ? ; Ok ( Note :: new ( d .field ( 0 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 1 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 2 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 3 ) ? .ok_or ( DecodeError :: InvalidData ) ? , )) } }"}, {"post_id": 51188, "ts": "2026-08-20T18:06:44Z", "hours": 4.3567, "text": "Curve type selection I’ve implemented a selection dropdown for three curve types: linear, step, and smooth. Next thing to do is to add a text field to adjust the curve tension"}, {"post_id": 50847, "ts": "2026-08-20T09:11:52Z", "hours": 8.7028, "text": "Automation Automation is here. I’ve implemented an automation node, which is associated with an automation track that you can add keyframes to value that changes over time. You can even connect automation nodes to KASL Node to use the value for calculation!"}, {"post_id": 49569, "ts": "2026-08-18T13:30:07Z", "hours": 4.8889, "text": "Refactored codebase It looks exactly the same as the previous devlog, but I refactored the codebase, primarily the EditorUiState. I separated many members of EditorUiState to multiple small structs for better readability"}, {"post_id": 48851, "ts": "2026-08-17T12:25:43Z", "hours": 7.1642, "text": "Added ruler to piano roll I’ve added the ruler to the piano roll. This will make note placement easier and more intuitive than before. Also I refactored the codebase a little bit, but honestly I thought the previous implementation would be better so I may be putting it back soon."}, {"post_id": 47876, "ts": "2026-08-16T04:17:12Z", "hours": 11.8714, "text": "Add seconds support for region placement I’ve added TimePosition and TimeBounds to store the position of the region. They have two modes: one stores the position in Ticks, and another one stores it in seconds. Ticks and seconds can be calculated from each other using TempoMap."}, {"post_id": 46767, "ts": "2026-08-14T08:06:59Z", "hours": 11.5078, "text": "On-demamd resampling for audio tracks Audio regions require resampling because the sample rate of the source data may differ from the required sample rate. So far, the audio engine for Kadent has been resampling the entire audio data before playback or exporting. However, resampling audio data in advance takes a lot of CPU and increases the time it takes to prepare for playback. This time I made it resample the audio data on demand during playback. This makes audio thread not to store the massive resampled audio data. *sample rate: a value that indicates how many samples are in a single second *sample: a value that represents the sound wave’s loudness at a specific moment in time"}, {"post_id": 45991, "ts": "2026-08-12T20:39:49Z", "hours": 49.1206, "text": "Waveform Rendering & Scroll Bar This time, I’ve mainly implemented two features: waveform rendering and timeline scroll bar. Waveform I’ve added a waveform rendering logic to the timeline. I handled it by generating peak value data to render it quicker than calculating the peak value while rendering. After all, it looks pretty nice and scales perfectly when zooming with my trackpad. Timeline Scroll Bar Another feature I’ve added is a timeline scroll bar. It may not look appealing, but its calculation was quite hard actually. I had to calculate the ratio of the visible area and the entire timeline to get the width of the scroll bar. I think it is lot better than egui’s builtin scroll bar, so I’m quite satisfied with the outcome!"}, {"post_id": 20035, "ts": "2026-07-01T15:15:14Z", "hours": 1.9881, "text": "Ability to adjust project range I’ve implemented a feature that the user can adjust the project’s export range just by dragging the handle in the ruler. Also the actual number is shown in the status bar while the handle is being dragged so the user can know the exact beat where is going to be exported."}, {"post_id": 19709, "ts": "2026-07-01T03:15:36Z", "hours": 23.7522, "text": "Refactored the audio engine I’ve streamlined the note processing logic in the audio engine. So far, the audio engine handled sequenced notes (notes that you can see in the editor) and the realtime MIDI notes that you can play using some MIDI controllers differently. It also lacked maintainability. That’s why I’ve completely rebuilt the logic to unify the process. It also contributed to reduce the amount of code, and I’m happy with that."}, {"post_id": 16801, "ts": "2026-06-27T08:53:19Z", "hours": 3.0306, "text": "Added Status Bar I’ve added a new status bar, which shows some informations such as sample rate, buffer size and the selected content, at the bottom of the window. Fixed Node Graph Rendering Bug The node graph used to be rendered on the front of the header, but I finally fixed this by using Panel to limit the area where painter can draw the graph."}, {"post_id": 15135, "ts": "2026-06-24T16:22:43Z", "hours": 7.1325, "text": "Improved menu design I’ve improved the design of the menu by adjusting the button style. It took quite a long time because of egui’s a little bit confusing styling API. Refactor and optimize the audio engine I’ve refactored the audio engine by using integer ticks to manage time instead of f32 beats. By using integer ticks, it can be calculated even faster and more accurately."}, {"post_id": 12564, "ts": "2026-06-20T14:55:28Z", "hours": 1.1906, "text": "Nested dropdown menu for device selection I’ve improved a device selection feature by nesting the menu. Thanks to this, users can click a single headphones button to change the MIDI ports and output devices. Also I added some icons for these."}, {"post_id": 12510, "ts": "2026-06-20T13:06:52Z", "hours": 1.2117, "text": "Selectable audio output I’ve added a feature to select audio output! It may seem simple but it actually needed refactoring the audio engine and it took a lot of time."}, {"post_id": 12455, "ts": "2026-06-20T10:23:24Z", "hours": 2.4333, "text": "Replacing audio stream when switching devices I’ve implemented a logic in the audio engine, that allows the Kadent DAW to switch the output device. It was challenging because Mixer and MPSC consumers cannot be cloned. Finally I used Arc and Mutex in order to share the context with multiple threads. let callback_ctx = Arc::new(Mutex::new(OutputCallbackContext { mixer, command_cons, midi_cons, vu_prod, pending_project: pending_arc, })); I used try_lock instead of normal lock , which may block the thread, as you can see in the screenshot."}, {"post_id": 9312, "ts": "2026-06-15T16:59:09Z", "hours": 5.6553, "text": "KASL module system improvement So far, KASL compiler didn’t allow us to import external programs with the same name, because the name of the namespace conflicts. Today I have added new alias feature, which can be used like this: import foo as bar With this syntax, you can import a program named foo.kasl and refer to it with bar . This can also improve readability when importing a file with a long name! Streamline compilation I wanted to try compiling Kadent to application that can be installed using an installer, instead of a simple executable binary. I found Taskfile, which is a build tool similar to make but uses a yaml file to define workflows. I found it very useful so I adopted it and it worked very well! Currently I only have workflow for macOS compilation but I want to add Windows and Linux support soon!"}, {"post_id": 8724, "ts": "2026-06-14T14:21:32Z", "hours": 2.6775, "text": "Project creation dialog I’ve implemented new project creation dialog. You can specify the name of the project and select the folder using a picker from the system."}, {"post_id": 8532, "ts": "2026-06-14T06:06:41Z", "hours": 2.6142, "text": "Implemented splash screen I’ve finally finished implementing the splash screen for Kadent. On the left side, there are two buttons for creating or opening a project. The right panel shows the recent projects. Challenge The biggest challenge in implementing the splash screen was to layout UI components. It was quite hard to center the logo and the buttons. I spent around 1hrs dealing with that problem. Here’s how I solved it: const BUTTON_WIDTH : f32 = 300.0 ; const BUTTON_HEIGHT : f32 = 42.0 ; const CONTENT_HEIGHT : f32 = 60.0 + 12.0 + 16.0 + 24.0 + 12.0 + BUTTON_HEIGHT * 2.0 ; impl SplashUi { pub ( super ) fn splash_controls ( & mut self , ui : & mut egui :: Ui ) -> Option < EditorTransition > { ui .vertical_centered (| ui | { // Add space to vertically center the UI parts ui .add_space ( full_height / 2.0 - CONTENT_HEIGHT / 2.0 ); // UI Components }) .inner } } Since centering both horizontally and vertically while calculating the height of the inner content is painful, I eventually hardcoded the height of the UI components in order to center the UI vertically. Logo I’ve also designed a logo for Kadent in the meantime. I tweaked the font called “Inter”, which is available on Google Fonts, for the logo."}, {"post_id": 8172, "ts": "2026-06-13T16:50:03Z", "hours": 7.3775, "text": "Kadent — A DAW with custom language to create synths and effects Refactored project strucure As my codebase became bigger, it started to be a bit complicated, so I’ve refactored the codebase. New folder structure is consist of four directories in src/ directory: commands , core , storage , and ui . commands directory contains the audio engine communication logic. It has some functions like add_note that adds a new note to the specified track and sends the updated project to the audio thread. core directory contains KASLNode implementation and some metadata. KASLNode is a specific node that can literally execute KASL programs. Metadata is a data that are not necessarily tied to audio engine. It includes track colors, track names, region names, etc. storage directory contains some implementation for storing and loading files. It has a logic to save and load the Kadent project file. ui directory contains the UI implementation. Inside the ui directory, there are components , theme , and workspaces directories. components directory has some common UI parts used in various parts of the DAW. theme defines colors and size used in the UI. workspaces contains the UI implementation for the editor and the splash screen. Splash screen I’m currently implementing a splash screen for Kadent. It used to have just two buttons to create or open a project. I’ve just finished implementing “Recent Projects” list. (shown on the right side)"}, {"post_id": 4027, "ts": "2026-06-07T06:23:01Z", "hours": 1.4083, "text": "Implemented multithread track processing for the audio engine using Rayon ! I used to think implementing multithreading would be a nightmare, but I utilized Rayon which was actually very intuitive and easy to use. The screenshot shows the exact code where the tracks are being processed in parallel."}, {"post_id": 30, "ts": "2026-05-31T09:44:30Z", "hours": 1.7811, "text": "I am working on a WASM backend for my KASL language!"}]...
|
Title: Kadent by @hacha-mouse | Stardance
Devlogs Title: Kadent by @hacha-mouse | Stardance
Devlogs:
I am working on a WASM backend for my KASL language!
Implemented multithread track processing for the audio engine using Rayon ! I used to think implementing multithreading would be a nightmare, but I utilized Rayon which was actually very intuitive and easy to use. The screenshot shows the exact code where the tracks are being processed in parallel.
Kadent — A DAW with custom language to create synths and effects Refactored project strucure As my codebase became bigger, it started to be a bit complicated, so I’ve refactored the codebase. New folder structure is consist of four directories in src/ directory: commands , core , storage , and ui . commands directory contains the audio engine communication logic. It has some functions like add_note that adds a new note to the specified track and sends the updated project to the audio thread. core directory contains KASLNode implementation and some metadata. KASLNode is a specific node that can literally execute KASL programs. Metadata is a data that are not necessarily tied to audio engine. It includes track colors, track names, region names, etc. storage directory contains some implementation for storing and loading files. It has a logic to save and load the Kadent project file. ui directory contains the UI implementation. Inside the ui directory, there are components , theme , and workspaces directories. components directory has some common UI parts used in various parts of the DAW. theme defines colors and size used in the UI. workspaces contains the UI implementation for the editor and the splash screen. Splash screen I’m currently implementing a splash screen for Kadent. It used to have just two buttons to create or open a project. I’ve just finished implementing “Recent Projects” list. (shown on the right side)
Implemented splash screen I’ve finally finished implementing the splash screen for Kadent. On the left side, there are two buttons for creating or opening a project. The right panel shows the recent projects. Challenge The biggest challenge in implementing the splash screen was to layout UI components. It was quite hard to center the logo and the buttons. I spent around 1hrs dealing with that problem. Here’s how I solved it: const BUTTON_WIDTH : f32 = 300.0 ; const BUTTON_HEIGHT : f32 = 42.0 ; const CONTENT_HEIGHT : f32 = 60.0 + 12.0 + 16.0 + 24.0 + 12.0 + BUTTON_HEIGHT * 2.0 ; impl SplashUi { pub ( super ) fn splash_controls ( & mut self , ui : & mut egui :: Ui ) -> Option < EditorTransition > { ui .vertical_centered (| ui | { // Add space to vertically center the UI parts ui .add_space ( full_height / 2.0 - CONTENT_HEIGHT / 2.0 ); // UI Components }) .inner } } Since centering both horizontally and vertically while calculating the height of the inner content is painful, I eventually hardcoded the height of the UI components in order to center the UI vertically. Logo I’ve also designed a logo for Kadent in the meantime. I tweaked the font called “Inter”, which is available on Google Fonts, for the logo.
Project creation dialog I’ve implemented new project creation dialog. You can specify the name of the project and select the folder using a picker from the system.
KASL module system improvement So far, KASL compiler didn’t allow us to import external programs with the same name, because the name of the namespace conflicts. Today I have added new alias feature, which can be used like this: import foo as bar With this syntax, you can import a program named foo.kasl and refer to it with bar . This can also improve readability when importing a file with a long name! Streamline compilation I wanted to try compiling Kadent to application that can be installed using an installer, instead of a simple executable binary. I found Taskfile, which is a build tool similar to make but uses a yaml file to define workflows. I found it very useful so I adopted it and it worked very well! Currently I only have workflow for macOS compilation but I want to add Windows and Linux support soon!
Replacing audio stream when switching devices I’ve implemented a logic in the audio engine, that allows the Kadent DAW to switch the output device. It was challenging because Mixer and MPSC consumers cannot be cloned. Finally I used Arc and Mutex in order to share the context with multiple threads. let callback_ctx = Arc::new(Mutex::new(OutputCallbackContext { mixer, command_cons, midi_cons, vu_prod, pending_project: pending_arc, })); I used try_lock instead of normal lock , which may block the thread, as you can see in the screenshot.
Selectable audio output I’ve added a feature to select audio output! It may seem simple but it actually needed refactoring the audio engine and it took a lot of time.
Nested dropdown menu for device selection I’ve improved a device selection feature by nesting the menu. Thanks to this, users can click a single headphones button to change the MIDI ports and output devices. Also I added some icons for these.
Improved menu design I’ve improved the design of the menu by adjusting the button style. It took quite a long time because of egui’s a little bit confusing styling API. Refactor and optimize the audio engine I’ve refactored the audio engine by using integer ticks to manage time instead of f32 beats. By using integer ticks, it can be calculated even faster and more accurately.
Added Status Bar I’ve added a new status bar, which shows some informations such as sample rate, buffer size and the selected content, at the bottom of the window. Fixed Node Graph Rendering Bug The node graph used to be rendered on the front of the header, but I finally fixed this by using Panel to limit the area where painter can draw the graph.
Refactored the audio engine I’ve streamlined the note processing logic in the audio engine. So far, the audio engine handled sequenced notes (notes that you can see in the editor) and the realtime MIDI notes that you can play using some MIDI controllers differently. It also lacked maintainability. That’s why I’ve completely rebuilt the logic to unify the process. It also contributed to reduce the amount of code, and I’m happy with that.
Ability to adjust project range I’ve implemented a feature that the user can adjust the project’s export range just by dragging the handle in the ruler. Also the actual number is shown in the status bar while the handle is being dragged so the user can know the exact beat where is going to be exported.
Waveform Rendering & Scroll Bar This time, I’ve mainly implemented two features: waveform rendering and timeline scroll bar. Waveform I’ve added a waveform rendering logic to the timeline. I handled it by generating peak value data to render it quicker than calculating the peak value while rendering. After all, it looks pretty nice and scales perfectly when zooming with my trackpad. Timeline Scroll Bar Another feature I’ve added is a timeline scroll bar. It may not look appealing, but its calculation was quite hard actually. I had to calculate the ratio of the visible area and the entire timeline to get the width of the scroll bar. I think it is lot better than egui’s builtin scroll bar, so I’m quite satisfied with the outcome!
On-demamd resampling for audio tracks Audio regions require resampling because the sample rate of the source data may differ from the required sample rate. So far, the audio engine for Kadent has been resampling the entire audio data before playback or exporting. However, resampling audio data in advance takes a lot of CPU and increases the time it takes to prepare for playback. This time I made it resample the audio data on demand during playback. This makes audio thread not to store the massive resampled audio data. *sample rate: a value that indicates how many samples are in a single second *sample: a value that represents the sound wave’s loudness at a specific moment in time
Add seconds support for region placement I’ve added TimePosition and TimeBounds to store the position of the region. They have two modes: one stores the position in Ticks, and another one stores it in seconds. Ticks and seconds can be calculated from each other using TempoMap.
Added ruler to piano roll I’ve added the ruler to the piano roll. This will make note placement easier and more intuitive than before. Also I refactored the codebase a little bit, but honestly I thought the previous implementation would be better so I may be putting it back soon.
Refactored codebase It looks exactly the same as the previous devlog, but I refactored the codebase, primarily the EditorUiState. I separated many members of EditorUiState to multiple small structs for better readability
Automation Automation is here. I’ve implemented an automation node, which is associated with an automation track that you can add keyframes to value that changes over time. You can even connect automation nodes to KASL Node to use the value for calculation!
Curve type selection I’ve implemented a selection dropdown for three curve types: linear, step, and smooth. Next thing to do is to add a text field to adjust the curve tension
sode I’ve created a simple binary serialization crate called “sode” for Kadent. This guarantees that the output binary won’t change even if the struct is modified so I thought it would be better than serde or that sort of serialization library. impl Encode for Note { fn encode ( & self , e : & mut Encoder ) -> Result < (), EncodeError > { e .field ( 0 , & self .start ) ? ; e .field ( 1 , & self .duration ) ? ; e .field ( 2 , & self .pitch ) ? ; e .field ( 3 , & self .velocity ) ? ; Ok (()) } } impl Decode for Note { fn decode ( d : & mut ValueDecoder ) -> Result < Self , DecodeError > { let d = d .to_field_decoder () ? ; Ok ( Note :: new ( d .field ( 0 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 1 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 2 ) ? .ok_or ( DecodeError :: InvalidData ) ? , d .field ( 3 ) ? .ok_or ( DecodeError :: InvalidData ) ? , )) } }
Improved code editor I’ve implemented error highlighting in the code editor. I also added a list of errors at the bottom of the code editor, and I can jump to the position of the error by clicking the error. TextEdit in egui does not support highlighting character by character and instead it only highlighting by each sections, so red underlined part may be bigger than the actual error range, but I guess it still looks nice.
Added License Browser It’s been a while since my last devlog! During this time I’ve added an Acknowledgements view where you can look at license text and other informations of the Fonts and Crates that I’ve used. It was a bit difficult to implement because there are so many crates, but I’m satisfied with the result.
Added Documentation I saw that the reviewer tried to open the binary project file in the code editor and failed so I’ve decided to add a some sort of tutorial or a documentation. I really wanted to add an interactive tutorial so that the reviewers and the users can know how Kadent works, but I didn’t have time to do so so I’ve just added a few documentation.
How to add Note Region You can add note region by double-clicking in the timeline. To add notes to it, you need to select the region by clicking it first. Code Editor Error .kdp files are serialized project files, not a source code. You can create a new source file by clicking the src/ directory in the Code Editor. To add a source code to the note track, first open a node graph and add a KASL node to it. In the Inspector, you can specify the path to the source code (e.g. src/example.kasl). Added Some More Documentation I’ve added documentation with screenshots of each panels: Timeline Inspector Automation Node Graph Piano Roll Code Editor
Ships:
Kadent Kadent is a cross-platform DAW featuring KASL, a domain-specific audio language, and node-graph processing system. Features Create music with familiar track-based UI Two track types: Note Track & Audio Track Node graph for every track KASL language with syntax similar to Swift The node graph allows you to combine multiple KASL programs to perform much more complex processing. What Is a Node Graph? Kadent uses node graph for track processing. A Node is a processing unit that calculates the output. In node graph, an output of one node can be connected to an input of another node. This allows you to connect multiple inputs and outputs freely to other nodes to create sound. Then, why did I adopt node graph? KASL programs can have multiple inputs and outputs, and their types may also vary. So placing them in order does not work because the DAW cannot know which output is connected to the specific input. That’s why Kadent uses node graph. Characteristics of KASL Utilizes Cranelift as a backend for quicker JIT compilation Specialized type of variables such as input , output and state Supports fixed-length arrays and structs Fixed-count loop syntax for predictable execution time Module system influenced by Python Custom infix/prefix/postfix operators (even normal arithmetic operators are defined and provided by std ) KASL Sample Program audio module is built-in module provided by Kadent. Note that these programs below won’t work outside the DAW. Gain Node import audio import std input in = audio.zero_sample() input gain = 0.0 output out = audio.zero_sample() func main() { out = in * [gain; audio.max_channels] } Mix Node import std import std/math/float as f import audio input input_1 = audio.zero_sample() input input_2 = audio.zero_sample() input factor = 0.0 output out = audio.zero_sample() func main() { let clamped_factor = f.clamp(factor, 0.0, 1.0) let multiplied_input_1: audio.Sample = input_1 * [clamped_factor; audio.max_channels] let multiplied_input_2: audio.Sample = input_2 * [1.0 - clamped_factor; audio.max_channels] out = multiplied_input_1 + multiplied_input_2 } Sawtooth Wave Synthesizer import audio as a import std import std/math/float as f input notes = a.EventSlot() input pitch = 1.0 output out = a.zero_sample() state allocator = a.Allocator() let base_freq = 440.0 let volume = 0.1 func main() { allocator.update(notes) var i = 0 loop a.max_voices { let voice = allocator.voices[i] let freq = pitch * base_freq * f.pow(2.0, (voice.pitch - 69.0) / 12.0) if voice.is_active { let t = voice.age let sample = saw(freq: freq, time: t) out = out + [sample * volume; a.max_channels] } i = i + 1 } } func saw(freq f = 440.0, time t: Float) -> Float { return 2.0 * (t * f) % 1.0 - 1.0 } Installation Go to the Releases page of my GitHub repository to download the latest precompiled binary, or compile the binary yourself. Detailed installation steps are described in README ....
|
1792821302.779773
|
1792907702.779773
|
|
278
|
six seven by @qcoral | Stardance
|
qcoral
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: six seven by @qcoral | Stardance
|
1792691341.2436485
|
1793296141.2436485
|
|
279
|
My first slack bot! by @Will | Stardance
|
Will
|
0
|
0.44
|
0
|
[]
|
[{"post_id": 8776, "ts": "2026 [{"post_id": 8776, "ts": "2026-06-14T16:14:23Z", "hours": 0.4419, "text": "Start working"}]...
|
Title: My first slack bot! by @Will | Stardance
D Title: My first slack bot! by @Will | Stardance
Devlogs:
Start working...
|
1792594508.6439064
|
1793199308.6439064
|
|
280
|
Ks' Corner by @Ks | Stardance
|
Ks
|
2
|
37.14
|
325
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-12T22:34:46Z", "hours": 15.0, "multiplier": 12.18, "payout": 177, "blessing": "neutral", "text": "This website is still a work in progress, but am shipping right now for Playground [I don’t know how to add it to the mission though] (Note: Find Lavender though Games -> Lavender’s Home -> Lavender) I hated doing the phone version, couldn’t get patting for the phone in any single way, but it works well on PC, (hover the mouse and move it a bit) In this update you also have the main Math page, still working on the smaller pages, might have to bring up Manim or something soon for them, and added a calculator!", "repo": "https://github.com/Ks-Marbs/ks-corner", "demo": "https://ks-marbs.github.io/ks-corner/"}, {"ship_num": 2, "ts": "2026-06-29T19:55:54Z", "hours": 20.0, "multiplier": 7.33, "payout": 148, "blessing": "neutral", "text": "My first website attempt Honestly too lazy to learn HTML so made it in Godot ’o-o Any and all feedback is appreciated", "repo": "https://github.com/Ks-Marbs/ks-corner", "demo": "https://ks-marbs.github.io/ks-corner/"}]...
|
[{"post_id": 81479, "ts": "202 [{"post_id": 81479, "ts": "2026-10-21T12:45:22Z", "hours": 2.1442, "text": "Added small pages for all three of my [old] series Tweaked Lavender a bit too"}, {"post_id": 79180, "ts": "2026-10-12T22:28:17Z", "hours": 2.5675, "text": "Finished adding Lavender, And her game page! Will ship for now so it qualifyies for Playground but ill still finish the other pages 🪻"}, {"post_id": 77385, "ts": "2026-10-06T19:00:40Z", "hours": 2.8272, "text": "Added the Lavender’s home page, and just added… Lavender?"}, {"post_id": 76020, "ts": "2026-10-02T02:34:12Z", "hours": 2.265, "text": "Made pages for room sokoban and Unn Rhyhtm game, as well as bugfixed the calculator on phone, as it was coming too small for the screen"}, {"post_id": 73376, "ts": "2026-09-25T01:17:36Z", "hours": 2.6642, "text": "Oh hey, we actually did a calculator… [sort of, its just a fancy keyboard and parcing in godot but i’m too lazy to make a full calculator] No idea what to do next except writing… ‘– It’s so boooooorinng"}, {"post_id": 70148, "ts": "2026-09-18T15:41:53Z", "hours": 2.2397, "text": "Added the Math page! Planning on adding a calculator “page” later, and maybe adding more articles written by myself when i have time ;-;"}, {"post_id": 65673, "ts": "2026-09-10T23:44:19Z", "hours": 2.0031, "text": "Updated godot from 4.5 to 4.7 It broke the image sizing so i fixed it ( ’–)"}, {"post_id": 18596, "ts": "2026-06-29T19:41:44Z", "hours": 4.6339, "text": "Finished the website (mostly) I think its nice enough to ship :] Should update with photos and irl prizes when i’m more comfortable sharing my irl name but except that, it works Added a very nice BG and pictures and audios"}, {"post_id": 13493, "ts": "2026-06-22T02:49:40Z", "hours": 4.1911, "text": "Week 15 to 21 worked mostly on getting the site phone ready. also began developing some features/Easter eggs. I’m develoging through phone and it does not have the enter key to type \\n"}, {"post_id": 9607, "ts": "2026-06-16T00:23:39Z", "hours": 5.5392, "text": "Week: 8->14/6 I’m not home so I hope this goes in time for the weekly stickers T-T This week I worked mostly on phone adaptation, also looked how to make each of the pages actual pages, and made the start screen text! Also discovered that images can go directly on text so will use that to my advantage :]"}, {"post_id": 4360, "ts": "2026-06-07T17:32:43Z", "hours": 0.7628, "text": "Images are now working! plans for the future is making the site diferent for phone i.e. vertical"}, {"post_id": 3881, "ts": "2026-06-06T23:37:48Z", "hours": 0.6258, "text": "Am I wrong for doing exactly 30 minutes everyday just so I can get all da stickers? But yeah, somehow typing all this and making it work for more than 1 mini page took 35 minutes"}, {"post_id": 3220, "ts": "2026-06-06T01:33:03Z", "hours": 3.0619, "text": "So in these last few days: Updated the site to make it scalable Made it so text exists Figuring out how to add images that move with the text (Hackatime changed the name of the project so I didn’t devlog since I didn’t see it did, please don’t remove my stickers)"}, {"post_id": 1014, "ts": "2026-06-02T20:06:21Z", "hours": 0.8453, "text": "Began building the website in Godot, and am creating the github repo (before i forget) Figured out how to make the mouse do the thingy where it turns into a “you can click here” thingy (unable to screenshot that but most of y’all know it) Began searching for how to turn scenes into pages in Godot -> HTML"}, {"post_id": 496, "ts": "2026-06-01T23:38:07Z", "hours": 0.5667, "text": "Heyyyy🟡 idk why but i can only type the title? Anyway, began doing a sketch at canva for reference"}]...
|
Title: Ks' Corner by @Ks | Stardance
Devlogs: Title: Ks' Corner by @Ks | Stardance
Devlogs:
Heyyyy🟡 idk why but i can only type the title? Anyway, began doing a sketch at canva for reference
Began building the website in Godot, and am creating the github repo (before i forget) Figured out how to make the mouse do the thingy where it turns into a “you can click here” thingy (unable to screenshot that but most of y’all know it) Began searching for how to turn scenes into pages in Godot -> HTML
So in these last few days: Updated the site to make it scalable Made it so text exists Figuring out how to add images that move with the text (Hackatime changed the name of the project so I didn’t devlog since I didn’t see it did, please don’t remove my stickers)
Am I wrong for doing exactly 30 minutes everyday just so I can get all da stickers? But yeah, somehow typing all this and making it work for more than 1 mini page took 35 minutes
Images are now working! plans for the future is making the site diferent for phone i.e. vertical
Week: 8->14/6 I’m not home so I hope this goes in time for the weekly stickers T-T This week I worked mostly on phone adaptation, also looked how to make each of the pages actual pages, and made the start screen text! Also discovered that images can go directly on text so will use that to my advantage :]
Week 15 to 21 worked mostly on getting the site phone ready. also began developing some features/Easter eggs. I’m develoging through phone and it does not have the enter key to type \n
Finished the website (mostly) I think its nice enough to ship :] Should update with photos and irl prizes when i’m more comfortable sharing my irl name but except that, it works Added a very nice BG and pictures and audios
Updated godot from 4.5 to 4.7 It broke the image sizing so i fixed it ( ’–)
Added the Math page! Planning on adding a calculator “page” later, and maybe adding more articles written by myself when i have time ;-;
Oh hey, we actually did a calculator… [sort of, its just a fancy keyboard and parcing in godot but i’m too lazy to make a full calculator] No idea what to do next except writing… ‘– It’s so boooooorinng
Made pages for room sokoban and Unn Rhyhtm game, as well as bugfixed the calculator on phone, as it was coming too small for the screen
Added the Lavender’s home page, and just added… Lavender?
Finished adding Lavender, And her game page! Will ship for now so it qualifyies for Playground but ill still finish the other pages 🪻
Added small pages for all three of my [old] series Tweaked Lavender a bit too
Ships:
My first website attempt Honestly too lazy to learn HTML so made it in Godot ’o-o Any and all feedback is appreciated
This website is still a work in progress, but am shipping right now for Playground [I don’t know how to add it to the mission though] (Note: Find Lavender though Games -> Lavender’s Home -> Lavender) I hated doing the phone version, couldn’t get patting for the phone in any single way, but it works well on PC, (hover the mouse and move it a bit) In this update you also have the main Math page, still working on the smaller pages, might have to bring up Manim or something soon for them, and added a calculator!...
|
1792835772.2337348
|
1792922172.2337348
|
|
281
|
Pond Extended by @hatya-mouse | Stardance
|
hatya-mouse
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pond Extended by @hatya-mouse | Stardance
|
1791825448.7977889
|
1792689448.7977889
|
|
282
|
Hlack by @ee | Stardance
|
ee
|
0
|
0.67
|
0
|
[]
|
[{"post_id": 2699, "ts": "2026 [{"post_id": 2699, "ts": "2026-06-05T12:17:47Z", "hours": 0.2544, "text": "i hate websockets. i hate websockets. i hate websockets geniunely why does ts need to be this complicated. First I needed to make a venv bcz the download was being weird, that’s fine. THEN THEN THEN when i started running the extremely basic chat app, it just kept immediatly dropping the connection, which is normal cuz chrome right? BUT THEN i download the extension that’s supposed to make it work and it jst doesn’t uh what i made wise, I followed a W3 schools guide to make a basic websockets chat app."}, {"post_id": 737, "ts": "2026-06-02T11:13:45Z", "hours": 0.4197, "text": "hiya! I’ve decided what “framework” I will be using and I’m here to share. I won’t be using one! I went through like 5 of them, and none of them worked. Flutter - Demoing didn’t work React Native - Started deleting files Lynx - Demo was crashing my computer Sparkling (lynx kotlin ig) - Same as before So uh yeah! I’ll be using python to take and send requests to a database, then I’ll probably make the actual application with html/css or use tkui or wtv it’s called. So uh, yeah! I don’t really have a screenshot but uh this is the amount of times i tried to download the lynx explorer :c"}]...
|
Title: Hlack by @ee | Stardance
Devlogs:
hiya! I’ Title: Hlack by @ee | Stardance
Devlogs:
hiya! I’ve decided what “framework” I will be using and I’m here to share. I won’t be using one! I went through like 5 of them, and none of them worked. Flutter - Demoing didn’t work React Native - Started deleting files Lynx - Demo was crashing my computer Sparkling (lynx kotlin ig) - Same as before So uh yeah! I’ll be using python to take and send requests to a database, then I’ll probably make the actual application with html/css or use tkui or wtv it’s called. So uh, yeah! I don’t really have a screenshot but uh this is the amount of times i tried to download the lynx explorer :c
i hate websockets. i hate websockets. i hate websockets geniunely why does ts need to be this complicated. First I needed to make a venv bcz the download was being weird, that’s fine. THEN THEN THEN when i started running the extremely basic chat app, it just kept immediatly dropping the connection, which is normal cuz chrome right? BUT THEN i download the extension that’s supposed to make it work and it jst doesn’t uh what i made wise, I followed a W3 schools guide to make a basic websockets chat app....
|
1792572561.4086773
|
1793177361.4086773
|
|
283
|
Welle by @lumentae | Stardance
|
lumentae
|
0
|
33.46
|
0
|
[]
|
[{"post_id": 43224, "ts": "202 [{"post_id": 43224, "ts": "2026-08-08T11:14:05Z", "hours": 0.61, "text": "I updated the artist list and the song list to look better by adding margin between each entry and rounding the images a bit!"}, {"post_id": 39465, "ts": "2026-08-02T13:03:47Z", "hours": 2.0208, "text": "The artists page is now implemented! Also I kinda forgot about this project lol"}, {"post_id": 27904, "ts": "2026-07-13T20:34:56Z", "hours": 1.2594, "text": "I added some code to request all the playlists for the current user and also wrote some QML to display it in the sidebar! Currently they don’t have any icons or cover art, but I’m going to implement that soon™"}, {"post_id": 27747, "ts": "2026-07-13T16:04:28Z", "hours": 2.4331, "text": "I kinda forgot to post a devlog, but I have implemented support for a database and now they’re loaded from there first instead of having to request them all the time from the Navidrome server. Also I fixed the annoying QML error that a class couldn’t be instantiated if it didn’t match the constructor or something like that (I forgot…)"}, {"post_id": 21794, "ts": "2026-07-03T22:13:19Z", "hours": 1.3036, "text": "I have implemented a simple queue list at the right side! It’s still pretty useless and only serves the purpose of being able to see what will be played, but it’s still nice to have and expanded on in the future! Also sorry again for a long time between updates…"}, {"post_id": 17313, "ts": "2026-06-28T01:14:48Z", "hours": 0.6122, "text": "I added a simple context menu! (I’m way more productive with the todo list…)"}, {"post_id": 17256, "ts": "2026-06-27T23:37:42Z", "hours": 1.3014, "text": "I added a volume slider! Not much to add but that I was working on another project the last few days so development was halted for a short bit, but will now pick up again!"}, {"post_id": 13307, "ts": "2026-06-21T19:43:59Z", "hours": 3.0239, "text": "I added support for MPRIS and I found out that it’s actually a quite interesting protocol (uses microseconds instead of milliseconds, which I found out the hard way…). Also I moved everything audio related to medialib so I can reuse most code for a future TUI or web interface!"}, {"post_id": 13030, "ts": "2026-06-21T09:39:29Z", "hours": 0.8406, "text": "I fixed a bug with cmake downloading the Material Symbols font as a css stylesheet and QML was trying to load it as a font, but kept failing… Also I made a todo list with a few entries so I don’t forget what to work on 😭"}, {"post_id": 11972, "ts": "2026-06-19T15:22:31Z", "hours": 0.6294, "text": "I added a repeat and shuffle button! I also fixed the queue, since it didn’t add new songs when scrolling and only the first 100 songs were loaded!"}, {"post_id": 11536, "ts": "2026-06-18T20:41:36Z", "hours": 1.2825, "text": "I added a really simple queue that you cant view anywhere and not add songs right now, but works and the pause button now shows the current state of the song (playing and paused). Also I added skip buttons to play the previous or next song!"}, {"post_id": 10766, "ts": "2026-06-17T17:53:20Z", "hours": 2.0261, "text": "There’s now a pause and play button and I fixed a bug that crashed the program after playing another song after one finished 😭. I’ll add more media buttons like skipping or shuffle/repeat next!"}, {"post_id": 8415, "ts": "2026-06-13T23:57:44Z", "hours": 1.0186, "text": "Dragging works for seeking now. Also I’m sorry for not posting any devlogs the last week since I’ve been really busy with school lately (due to having to run shows…)"}, {"post_id": 3426, "ts": "2026-06-06T11:10:26Z", "hours": 1.2039, "text": "The text is now being elided correctly and the progress bar is finally centered! Also I started working on showing the song progress, but haven’t made it interactive yet"}, {"post_id": 3229, "ts": "2026-06-06T01:50:59Z", "hours": 2.5819, "text": "I improved the bottom bar, but the progress bar is still not how I like it. This has also made me realise how much I HATE layouts in QML"}, {"post_id": 2793, "ts": "2026-06-05T16:35:09Z", "hours": 2.2756, "text": "Music can now be played and I added an incomplete player bar at the bottom that doesn’t show much yet 😭. I first started working on the bottom bar without having done the player before so I was kinda stuck and had to implement the player so I could add the media controls like seek, current media information or the pause, play and stop buttons aswell as the volume slider (which I really need…)"}, {"post_id": 2483, "ts": "2026-06-05T00:09:40Z", "hours": 2.0244, "text": "The song list now infinitely scrolls and song cover art is now shown!"}, {"post_id": 2026, "ts": "2026-06-04T09:42:51Z", "hours": 0.9128, "text": "I remade the songlist and was inspired from Feishin’s design. I’ll implement the song covers and the home page next!"}, {"post_id": 1753, "ts": "2026-06-03T22:50:33Z", "hours": 1.9433, "text": "I added a simple sidebar which currently only shows the song list because I haven’t added page switching yet, but content pages can be loaded dynamically now!!"}, {"post_id": 1001, "ts": "2026-06-02T19:44:19Z", "hours": 2.1475, "text": "I reworked the OpenSubsonic API, added support for QML and created a simple song list. It was really hard to implement QML models and found out that QList::fromVector does not convert a std::vector to a QList 😭"}, {"post_id": 427, "ts": "2026-06-01T20:38:24Z", "hours": 1.5978, "text": "I got the authentication working and also its now possible to search for songs, artists and albums. Still no GUI or music player yet… 😅"}, {"post_id": 114, "ts": "2026-05-31T20:20:28Z", "hours": 0.4119, "text": "I created the rough project structure and already included dependencies for the Open Subsonic client, but have not written any code for it yet 😭. I will work on it tomorrow when I have more time and focus on getting the authorization and other things to work!"}]...
|
Title: Welle by @lumentae | Stardance
Devlogs:
I Title: Welle by @lumentae | Stardance
Devlogs:
I created the rough project structure and already included dependencies for the Open Subsonic client, but have not written any code for it yet 😭. I will work on it tomorrow when I have more time and focus on getting the authorization and other things to work!
I got the authentication working and also its now possible to search for songs, artists and albums. Still no GUI or music player yet… 😅
I reworked the OpenSubsonic API, added support for QML and created a simple song list. It was really hard to implement QML models and found out that QList::fromVector does not convert a std::vector to a QList 😭
I added a simple sidebar which currently only shows the song list because I haven’t added page switching yet, but content pages can be loaded dynamically now!!
I remade the songlist and was inspired from Feishin’s design. I’ll implement the song covers and the home page next!
The song list now infinitely scrolls and song cover art is now shown!
Music can now be played and I added an incomplete player bar at the bottom that doesn’t show much yet 😭. I first started working on the bottom bar without having done the player before so I was kinda stuck and had to implement the player so I could add the media controls like seek, current media information or the pause, play and stop buttons aswell as the volume slider (which I really need…)
I improved the bottom bar, but the progress bar is still not how I like it. This has also made me realise how much I HATE layouts in QML
The text is now being elided correctly and the progress bar is finally centered! Also I started working on showing the song progress, but haven’t made it interactive yet
Dragging works for seeking now. Also I’m sorry for not posting any devlogs the last week since I’ve been really busy with school lately (due to having to run shows…)
There’s now a pause and play button and I fixed a bug that crashed the program after playing another song after one finished 😭. I’ll add more media buttons like skipping or shuffle/repeat next!
I added a really simple queue that you cant view anywhere and not add songs right now, but works and the pause button now shows the current state of the song (playing and paused). Also I added skip buttons to play the previous or next song!
I added a repeat and shuffle button! I also fixed the queue, since it didn’t add new songs when scrolling and only the first 100 songs were loaded!
I fixed a bug with cmake downloading the Material Symbols font as a css stylesheet and QML was trying to load it as a font, but kept failing… Also I made a todo list with a few entries so I don’t forget what to work on 😭
I added support for MPRIS and I found out that it’s actually a quite interesting protocol (uses microseconds instead of milliseconds, which I found out the hard way…). Also I moved everything audio related to medialib so I can reuse most code for a future TUI or web interface!
I added a volume slider! Not much to add but that I was working on another project the last few days so development was halted for a short bit, but will now pick up again!
I added a simple context menu! (I’m way more productive with the todo list…)
I have implemented a simple queue list at the right side! It’s still pretty useless and only serves the purpose of being able to see what will be played, but it’s still nice to have and expanded on in the future! Also sorry again for a long time between updates…
I kinda forgot to post a devlog, but I have implemented support for a database and now they’re loaded from there first instead of having to request them all the time from the Navidrome server. Also I fixed the annoying QML error that a class couldn’t be instantiated if it didn’t match the constructor or something like that (I forgot…)
I added some code to request all the playlists for the current user and also wrote some QML to display it in the sidebar! Currently they don’t have any icons or cover art, but I’m going to implement that soon™
The artists page is now implemented! Also I kinda forgot about this project lol
I updated the artist list and the song list to look better by adding margin between each entry and rounding the images a bit!...
|
1792770758.5210757
|
1793375558.5210757
|
|
284
|
Untitled by @SeradedStripes | Stardance
|
SeradedStripes
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @SeradedStripes | Stardance
|
1792533264.9991643
|
1793138064.9991643
|
|
285
|
Garden Produce Checker by @Ventengo | Stardance
|
Ventengo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Garden Produce Checker by @Ventengo | Stard Title: Garden Produce Checker by @Ventengo | Stardance...
|
1792522250.6616337
|
1793127050.6616337
|
|
286
|
My Website by @stefdp | Stardance
|
stefdp
|
2
|
7.75
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T10:49:14Z", "hours": 3.0, "multiplier": 5.13, "payout": 16, "blessing": "neutral", "text": "I updated the webring code so that now: The webring is on the bottom right (moved neko credits from bottom right to bottom center), a bit more above the bottom so that on small screens like phones it doesn’t overlap with the credits It’s now vertical Added a new webring ( https://horser.ing , only for friends) and so i added a select to choose the ring and also a ?webring query that auto selects given ring (currently as values there’s hackclub for hc ring and horsering for the horsering) it’s wasn’t really challenging, only thing that took me a bit was find out which class added a horizontal padding to the select cuz none of my tailwind classes added it, then i found out it was DaisyUI’s btn class", "repo": "https://git.stefdp.com/Stef/personal-site", "demo": "https://stefdp.com"}, {"ship_num": 2, "ts": "2026-06-06T12:53:05Z", "hours": 1.0, "multiplier": 8.07, "payout": 12, "blessing": "neutral", "text": "I added a switch for plain text & code in the about me section and switched from nix webring to hackclub webring nothnig was really challenging, only issue i had was that the webring iframe for some reason looked good on my laptop but when i pushed to prod it got some weird white bg, couldn’t figure out how to fix it so i just ended up making my own buttons (and also added a random page button which official webring doesn’t have! :D)", "repo": "https://git.stefdp.com/Stef/personal-site", "demo": "https://stefdp.com"}]...
|
[{"post_id": 71777, "ts": "202 [{"post_id": 71777, "ts": "2026-09-21T15:03:47Z", "hours": 2.6286, "text": "Updated the main embed to add social links and page specific text/images too and also fix buttons’ urls"}, {"post_id": 70204, "ts": "2026-09-18T18:12:30Z", "hours": 1.1197, "text": "Added the new discord embed with components v2"}, {"post_id": 36934, "ts": "2026-07-29T10:42:29Z", "hours": 0.4753, "text": "Made the horizontal padding of the select smaller I legit couldn’t find what that padding was caused by cuz i didn’t have any p* classes and after like 20 mins i found out that it was the DaisyUI’s btn class that added padding-inline 🥀 so i fixed it with px-2 (which in tailwind stands for 0.5rem or 8px"}, {"post_id": 36485, "ts": "2026-07-28T16:54:50Z", "hours": 2.4244, "text": "Added the Horsering in the rings (friend only ring) Moved the neko credits in the middle Moved the webring on the right and made it vertical"}, {"post_id": 3493, "ts": "2026-06-06T13:36:40Z", "hours": 0.2644, "text": "Updated the README.md (I had forgot to update it before shipping 😭)"}, {"post_id": 3467, "ts": "2026-06-06T12:47:26Z", "hours": 1.4947, "text": "Added a “Switch to Code/Plain Text” in the about me so people who don’t know Typescript can just read it as plain text Moved from Nix Webring to Hack Club Webring since i don’t use NixOS anymore"}]...
|
Title: My Website by @stefdp | Stardance
Devlogs: Title: My Website by @stefdp | Stardance
Devlogs:
Added a “Switch to Code/Plain Text” in the about me so people who don’t know Typescript can just read it as plain text Moved from Nix Webring to Hack Club Webring since i don’t use NixOS anymore
Updated the README.md (I had forgot to update it before shipping 😭)
Added the Horsering in the rings (friend only ring) Moved the neko credits in the middle Moved the webring on the right and made it vertical
Made the horizontal padding of the select smaller I legit couldn’t find what that padding was caused by cuz i didn’t have any p* classes and after like 20 mins i found out that it was the DaisyUI’s btn class that added padding-inline 🥀 so i fixed it with px-2 (which in tailwind stands for 0.5rem or 8px
Added the new discord embed with components v2
Updated the main embed to add social links and page specific text/images too and also fix buttons’ urls
Ships:
I added a switch for plain text & code in the about me section and switched from nix webring to hackclub webring nothnig was really challenging, only issue i had was that the webring iframe for some reason looked good on my laptop but when i pushed to prod it got some weird white bg, couldn’t figure out how to fix it so i just ended up making my own buttons (and also added a random page button which official webring doesn’t have! :D)
I updated the webring code so that now: The webring is on the bottom right (moved neko credits from bottom right to bottom center), a bit more above the bottom so that on small screens like phones it doesn’t overlap with the credits It’s now vertical Added a new webring ( https://horser.ing , only for friends) and so i added a select to choose the ring and also a ?webring query that auto selects given ring (currently as values there’s hackclub for hc ring and horsering for the horsering) it’s wasn’t really challenging, only thing that took me a bit was find out which class added a horizontal padding to the select cuz none of my tailwind classes added it, then i found out it was DaisyUI’s btn class...
|
1792846170.3531263
|
1792932570.3531263
|
|
287
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1791822927.184674
|
1792686927.184674
|
|
288
|
stardisco by @simonpth | Stardance
|
simonpth
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: stardisco by @simonpth | Stardance
|
1792687659.249788
|
1793292459.249788
|
|
289
|
Untitled project by @technodot | Stardance
|
technodot
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @technodot | Stardance
|
1792608874.4977226
|
1793213674.4977226
|
|
290
|
Dawn of space by @abtheinnovator | Stardance
|
abtheinnovator
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Dawn of space by @abtheinnovator | Stardanc Title: Dawn of space by @abtheinnovator | Stardance...
|
1792479038.7145078
|
1793083838.7145078
|
|
291
|
YouTweaks by @kanavv | Stardance
|
kanavv
|
2
|
36.0
|
646
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T15:48:19Z", "hours": 8.0, "multiplier": 14.56, "payout": 113, "blessing": "neutral", "text": "YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. For this Ship I added the color themes feature fixed a LOT of bugs and I also created a custom playback speed feature which im super proud of and finally I incorporated feedback from the first ship (fixing the readme). This project has been super fun and this is going to be my last ship for stardance but I will probably keep working on this! Also im super happy my extension got approved to be on the firefox store so if you like it you can add it here: https://addons.mozilla.org/en-US/firefox/addon/youtweaks/", "repo": "https://github.com/KanAvR/YouTweaks", "demo": "https://github.com/KanAvR/YouTweaks/releases"}, {"ship_num": 2, "ts": "2026-09-19T14:15:30Z", "hours": 28.0, "multiplier": 18.99, "payout": 533, "blessing": "neutral", "text": "YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. Overall this has been a really fun project to work on. I never thought I would have fun coding in javascript.", "repo": "https://github.com/KanAvR/YouTweaks", "demo": "https://github.com/KanAvR/YouTweaks/releases"}]...
|
[{"post_id": 75193, "ts": "202 [{"post_id": 75193, "ts": "2026-09-29T13:29:09Z", "hours": 1.3944, "text": "Bug Fixes I fixed another bug with the stop hover effects feature that used to show the effect if you hovered over the title of the video. Blur Slider I added a blur slider so people can adjust the amount of thumbnail blur. Feedback I incorporated the better readme feedback from the first ship where many people said I should explain why each feature is added. Sry for the camera photo I just reinstalled linux."}, {"post_id": 72184, "ts": "2026-09-22T12:40:55Z", "hours": 2.1672, "text": "Custom themes fixes I fixed some parts of the website that were not changing colors. I should have thought of this earlier but its going to be such a pain to keep the themes feature up to date with youtubes ui hence I am going to mark it as an experimental feature until I figure out how to change the themes in a better way. Playback speed controls without premium I am super happy with how this feature turned out it looks exactly like youtubes ui."}, {"post_id": 71663, "ts": "2026-09-21T08:21:31Z", "hours": 4.2158, "text": "Whole lotta bugs I thought I was done with everything but I found so many bugs. The shorts blocker was broken, the blocking youtube games dint work, and there was a bug where the video you were watching just stopped playing when you went into full screen. Shorts and game blocker So first the shorts bug would just delete the whole fyp if it found a short. This was was quite an easy fix since I just had to change what got deleted. Next the youtube games blocker was searching for text with “youtube games” which I changed to work the same way as the shorts blocker and then it started working properly. Full screen bug I fixed the full screen bug by only stopping the effects on objects we know are video tiles and nothing else. Themes Finally I also started working on a themes feature which looks so cool!! but its such a pain to work on. Theres so many tiny things I need to sit and edit so it looks right."}, {"post_id": 70604, "ts": "2026-09-19T13:15:26Z", "hours": 0.7297, "text": "Made the final commit before shipping Soo now the hide shorts feature works without bugs and I also finished adding the hide merch store feature. Now I just need to figure out how to publish my extension to the firefox and chrome store. Oh I also made a readme."}, {"post_id": 52261, "ts": "2026-08-22T11:20:45Z", "hours": 1.0539, "text": "View count and Publish date I moved the view count and publish dates to be next to the like button instead of the stupid tiny text it was before. To do this I made a new file called videometa.js it uses two functions one to extract the abbreviated views/ publish date and another one to extract the full views/ publish date which shows up when you hover over the information. Additionally I also fixed some Issues with the stop autoplay on hover and stop effects on hover functions, which I merged into one function earlier."}, {"post_id": 47509, "ts": "2026-08-15T13:57:57Z", "hours": 1.5306, "text": "Finished the time tracking feature!!! I haven’t gotten any time to update the project since my summer break ended. But I finally got some time to work on the project because of the time constraints I used AI to write code for this feature :( Im not proud of it but at least the feature works with no dumb bugs (for now at least) Daily limit So I added a daily limit and a bed time cut off so people dont waste the whole day on YouTube. I also added a snooze feature that appears when the YouTube limit has been reached since I often need YouTube for school work and it would become an issue if there was no way to bypass the limit. Time counter badge The concept time counter I made in a previous devlog works now and changes colors based on how much of the daily limit you have used. Stats And finally I also added a stats feature for fun since I love looking at my stats on leech block and wanted something similar for this project."}, {"post_id": 33955, "ts": "2026-07-24T09:42:36Z", "hours": 2.2917, "text": "Everything is such a mess right now I’m working on so many features at once its getting to much too handle. And I dint even make separate branches or make commits per feature so its getting so messy . I’m working on Refactoring all the code to change the deleting elements code to use css instead of JS so it has better performance hopefully . A time tracking feature. Moving the view count and date of upload up to the like button. This feature has had so many random unexpected issues its pmo. hiding the annoying red little bar below videos on the homescreen. some good progress: I merged the stopAutoPlayOnHover and stopHoverEffects into one function and I also fixed all the bugs with the function such as it not working on pages other then the homepage. Next time I should work on things in order AND AT LEAST MAKE BRANCHES ALSO MY COMMITS RN ARE HUGE I SHOULD MAKE THEM SMALLER; ONE FOR EACH FEATURE."}, {"post_id": 32345, "ts": "2026-07-21T13:35:52Z", "hours": 2.7347, "text": "Fixed Blur Again Instead of sitting and excluding things from the thumbnail blur I changed the code to only blur thumbnails. This is so stupid idk how I came up with that nonsense earlier. Stopped auto play when you hover over videos This feature works along with the other hover feature to make you a little more mindful while choosing a video to watch. Time tracking Im working on a whole new set of features to actually add something new for once since this project has just been removing stuff till now. The feature will track your time on youtube and allow you to set limits so you don’t waste your whole day on youtube. The feature will look something like the image. The current image is just a mock up ."}, {"post_id": 24678, "ts": "2026-07-08T12:58:53Z", "hours": 2.5467, "text": "Bugs The hide notification toggle worked visually but if you clicked in that spot the panel still opened so for now I came up with a temporary fix of using a new function to stop the button form working. Also the thumbnail blur still has issues 😭 . For some reason it blurs emojis now. I will fix that later. New Feature I added a feature so when you hover on video you don’t get that distracting ambient color around the thumbnail. This helps because the glow acts like a tiny visual reward before you’ve actually decided anything; it makes a thumbnail feel “chosen” the moment you hover over it. Without that glow, your judgement has to do the work the color was doing for them; so you can be a little more mindful about what you click on. Popup ui Added a background, added the logo, aligned all the elements, and tested out a few fonts before finally choosing Geist . I used this Article to understand css."}, {"post_id": 24303, "ts": "2026-07-07T19:46:42Z", "hours": 2.9003, "text": "First time features actually work as intended!! The blur had a lot of bugs as mentioned in the first devlog I slowly managed to fix all of them in different ways and now its complete. The hardest issue was if you scrolled too fast then you would still get a glimpse of the thumbnail. I fixed this by creating a <style> element which applies the blur before the thumbnails load. So now there’s no need of a mutation or scroll observer either. Logo I created the logo for this project using free form on my ipad then I used claude to make different versions of it for all the resolutions (16,32,48,128) and for the project banner. New Features I added two new features to hide the create button and the notifications button because who ever clicks those. At first I made to separate functions for this but that was really stupid so then I made a generic function that just removes any element. Also I used el.style.display = hidden instead of el.remove since the element can instantly be unhidden if the user wants without needing a refresh."}, {"post_id": 22143, "ts": "2026-07-04T13:28:00Z", "hours": 4.3089, "text": "Major Progress Okay so a lot happened since the last devlog. I paused my progress on the auto play feature and instead moved on to some small changes. I also made a lot of random commits for testing small things which was kinda tedious to revert later (Image shows the graph after all the random stuff was removed). Hide Shorts This feature was pretty simple to implement as I just used querySelectorAll to select the elements with the youtube shorts buttons then I just checked for the text “shorts” so the function doesn’t accidentally delete something else. Finally I used element.remove() to delete the buttons. Also added a mutation observer so the button stays deleted. Hiding unnecessary buttons I basically just did the same thing as above to hide other buttons that clutter up the screen like the create button and the voice search button. Branches This is the first time I learnt how to properly use branches in git. I made two separate branches for the two features I worked on so the variable names are not an issue for now."}, {"post_id": 16405, "ts": "2026-06-26T18:04:27Z", "hours": 2.8767, "text": "Improving file structure First off I fixed the mess of files that were just dropped into the project folder; this would become an issue in the future as I kept on creating new files. Creating the popup I stared off by creating popup.html popup.css and popup.js files after which I went back to the manifest.json to link the popup files but here I realized that the whole JSON file was broken because all the items were inside \"action\" this had not caused any issues so far but it could have led to many problems in the future. After fixing the JSON file I linked the popup files and added storage and scripting permissions to the extension which will be needed later. Next I read a blog post of how to write HTML. Then I created a toggle switch for which I borrowed copied the css from w3schools . Now for the toggle switch to work I had to make a few changes to youtweaks.js . Now it checks the browser storage to see if thumbnail blur is toggled on/off and also continuous checks to see if the toggle switch has been changed which accordingly turns on/off the blur. Other changes I started working on the next feature to stop the auto play of videos when you hover over them as the only purpose of this is to get you hooked onto a video before you even click on it. Which often results in wasted time. While working on that feature I also managed to fix the blur so now it works everywhere on youtube but as a side effect it also blurs youtubers profile pictures which ill fix later."}, {"post_id": 12135, "ts": "2026-06-19T20:37:08Z", "hours": 3.2972, "text": "Fixing the three issues: I first implemented a mutation observer which reapplies the blur every time something on the page changes, this solved issues 1 and 3 but did so in a very sloppy way as a “mutation” was only detected when you hover the mouse on a thumbnail. To fix the problems in a more optimal way I tried a lot of things: I started learning about intersection observers, scroll observers, and started a 3 hour crash course on js to understand what in the world I was doing. I spent a lot of time tinkering and then my problem was solved with a simple search on Mozilla’s developer docs . I used a scroll event listener which fixed the scrolling issue but the other issues still remain. At this point I was so tired I started setting up the gui for the extension which involved making some changes to the manifest.json file."}, {"post_id": 3002, "ts": "2026-06-05T22:40:05Z", "hours": 3.8056, "text": "So the aim of this project is to improve youtube’s usage experience through small tweaks. This is my first time doing anything related to websites I know nothing 😭 So I started off the project by creating a manifest.json file which contains all the data required to run the extension. For this the Mozilla docs were a huge help. Next, I started by creating the first feature of blurring thumbnails. I somehow managed to inspect element the youtube website and select the correct element id to select the thumbnails ig. But this came with three issues: The blur stops working after a refresh The blur only works on the home page The blur stops working after scrolling a lot To fix these Issues I first searched for the issue on w3schools but I dint understand anything I found; so after a bit more digging I came across someone facing a similar issue on stack overflow and after a very long while of trying to understand his code I managed to modify it to work for my extension. This fixed the third issue but not the other 2."}]...
|
Title: YouTweaks by @kanavv | Stardance
Devlogs:
Title: YouTweaks by @kanavv | Stardance
Devlogs:
So the aim of this project is to improve youtube’s usage experience through small tweaks. This is my first time doing anything related to websites I know nothing 😭 So I started off the project by creating a manifest.json file which contains all the data required to run the extension. For this the Mozilla docs were a huge help. Next, I started by creating the first feature of blurring thumbnails. I somehow managed to inspect element the youtube website and select the correct element id to select the thumbnails ig. But this came with three issues: The blur stops working after a refresh The blur only works on the home page The blur stops working after scrolling a lot To fix these Issues I first searched for the issue on w3schools but I dint understand anything I found; so after a bit more digging I came across someone facing a similar issue on stack overflow and after a very long while of trying to understand his code I managed to modify it to work for my extension. This fixed the third issue but not the other 2.
Fixing the three issues: I first implemented a mutation observer which reapplies the blur every time something on the page changes, this solved issues 1 and 3 but did so in a very sloppy way as a “mutation” was only detected when you hover the mouse on a thumbnail. To fix the problems in a more optimal way I tried a lot of things: I started learning about intersection observers, scroll observers, and started a 3 hour crash course on js to understand what in the world I was doing. I spent a lot of time tinkering and then my problem was solved with a simple search on Mozilla’s developer docs . I used a scroll event listener which fixed the scrolling issue but the other issues still remain. At this point I was so tired I started setting up the gui for the extension which involved making some changes to the manifest.json file.
Improving file structure First off I fixed the mess of files that were just dropped into the project folder; this would become an issue in the future as I kept on creating new files. Creating the popup I stared off by creating popup.html popup.css and popup.js files after which I went back to the manifest.json to link the popup files but here I realized that the whole JSON file was broken because all the items were inside "action" this had not caused any issues so far but it could have led to many problems in the future. After fixing the JSON file I linked the popup files and added storage and scripting permissions to the extension which will be needed later. Next I read a blog post of how to write HTML. Then I created a toggle switch for which I borrowed copied the css from w3schools . Now for the toggle switch to work I had to make a few changes to youtweaks.js . Now it checks the browser storage to see if thumbnail blur is toggled on/off and also continuous checks to see if the toggle switch has been changed which accordingly turns on/off the blur. Other changes I started working on the next feature to stop the auto play of videos when you hover over them as the only purpose of this is to get you hooked onto a video before you even click on it. Which often results in wasted time. While working on that feature I also managed to fix the blur so now it works everywhere on youtube but as a side effect it also blurs youtubers profile pictures which ill fix later.
Major Progress Okay so a lot happened since the last devlog. I paused my progress on the auto play feature and instead moved on to some small changes. I also made a lot of random commits for testing small things which was kinda tedious to revert later (Image shows the graph after all the random stuff was removed). Hide Shorts This feature was pretty simple to implement as I just used querySelectorAll to select the elements with the youtube shorts buttons then I just checked for the text “shorts” so the function doesn’t accidentally delete something else. Finally I used element.remove() to delete the buttons. Also added a mutation observer so the button stays deleted. Hiding unnecessary buttons I basically just did the same thing as above to hide other buttons that clutter up the screen like the create button and the voice search button. Branches This is the first time I learnt how to properly use branches in git. I made two separate branches for the two features I worked on so the variable names are not an issue for now.
First time features actually work as intended!! The blur had a lot of bugs as mentioned in the first devlog I slowly managed to fix all of them in different ways and now its complete. The hardest issue was if you scrolled too fast then you would still get a glimpse of the thumbnail. I fixed this by creating a <style> element which applies the blur before the thumbnails load. So now there’s no need of a mutation or scroll observer either. Logo I created the logo for this project using free form on my ipad then I used claude to make different versions of it for all the resolutions (16,32,48,128) and for the project banner. New Features I added two new features to hide the create button and the notifications button because who ever clicks those. At first I made to separate functions for this but that was really stupid so then I made a generic function that just removes any element. Also I used el.style.display = hidden instead of el.remove since the element can instantly be unhidden if the user wants without needing a refresh.
Bugs The hide notification toggle worked visually but if you clicked in that spot the panel still opened so for now I came up with a temporary fix of using a new function to stop the button form working. Also the thumbnail blur still has issues 😭 . For some reason it blurs emojis now. I will fix that later. New Feature I added a feature so when you hover on video you don’t get that distracting ambient color around the thumbnail. This helps because the glow acts like a tiny visual reward before you’ve actually decided anything; it makes a thumbnail feel “chosen” the moment you hover over it. Without that glow, your judgement has to do the work the color was doing for them; so you can be a little more mindful about what you click on. Popup ui Added a background, added the logo, aligned all the elements, and tested out a few fonts before finally choosing Geist . I used this Article to understand css.
Fixed Blur Again Instead of sitting and excluding things from the thumbnail blur I changed the code to only blur thumbnails. This is so stupid idk how I came up with that nonsense earlier. Stopped auto play when you hover over videos This feature works along with the other hover feature to make you a little more mindful while choosing a video to watch. Time tracking Im working on a whole new set of features to actually add something new for once since this project has just been removing stuff till now. The feature will track your time on youtube and allow you to set limits so you don’t waste your whole day on youtube. The feature will look something like the image. The current image is just a mock up .
Everything is such a mess right now I’m working on so many features at once its getting to much too handle. And I dint even make separate branches or make commits per feature so its getting so messy . I’m working on Refactoring all the code to change the deleting elements code to use css instead of JS so it has better performance hopefully . A time tracking feature. Moving the view count and date of upload up to the like button. This feature has had so many random unexpected issues its pmo. hiding the annoying red little bar below videos on the homescreen. some good progress: I merged the stopAutoPlayOnHover and stopHoverEffects into one function and I also fixed all the bugs with the function such as it not working on pages other then the homepage. Next time I should work on things in order AND AT LEAST MAKE BRANCHES ALSO MY COMMITS RN ARE HUGE I SHOULD MAKE THEM SMALLER; ONE FOR EACH FEATURE.
Finished the time tracking feature!!! I haven’t gotten any time to update the project since my summer break ended. But I finally got some time to work on the project because of the time constraints I used AI to write code for this feature :( Im not proud of it but at least the feature works with no dumb bugs (for now at least) Daily limit So I added a daily limit and a bed time cut off so people dont waste the whole day on YouTube. I also added a snooze feature that appears when the YouTube limit has been reached since I often need YouTube for school work and it would become an issue if there was no way to bypass the limit. Time counter badge The concept time counter I made in a previous devlog works now and changes colors based on how much of the daily limit you have used. Stats And finally I also added a stats feature for fun since I love looking at my stats on leech block and wanted something similar for this project.
View count and Publish date I moved the view count and publish dates to be next to the like button instead of the stupid tiny text it was before. To do this I made a new file called videometa.js it uses two functions one to extract the abbreviated views/ publish date and another one to extract the full views/ publish date which shows up when you hover over the information. Additionally I also fixed some Issues with the stop autoplay on hover and stop effects on hover functions, which I merged into one function earlier.
Made the final commit before shipping Soo now the hide shorts feature works without bugs and I also finished adding the hide merch store feature. Now I just need to figure out how to publish my extension to the firefox and chrome store. Oh I also made a readme.
Whole lotta bugs I thought I was done with everything but I found so many bugs. The shorts blocker was broken, the blocking youtube games dint work, and there was a bug where the video you were watching just stopped playing when you went into full screen. Shorts and game blocker So first the shorts bug would just delete the whole fyp if it found a short. This was was quite an easy fix since I just had to change what got deleted. Next the youtube games blocker was searching for text with “youtube games” which I changed to work the same way as the shorts blocker and then it started working properly. Full screen bug I fixed the full screen bug by only stopping the effects on objects we know are video tiles and nothing else. Themes Finally I also started working on a themes feature which looks so cool!! but its such a pain to work on. Theres so many tiny things I need to sit and edit so it looks right.
Custom themes fixes I fixed some parts of the website that were not changing colors. I should have thought of this earlier but its going to be such a pain to keep the themes feature up to date with youtubes ui hence I am going to mark it as an experimental feature until I figure out how to change the themes in a better way. Playback speed controls without premium I am super happy with how this feature turned out it looks exactly like youtubes ui.
Bug Fixes I fixed another bug with the stop hover effects feature that used to show the effect if you hovered over the title of the video. Blur Slider I added a blur slider so people can adjust the amount of thumbnail blur. Feedback I incorporated the better readme feedback from the first ship where many people said I should explain why each feature is added. Sry for the camera photo I just reinstalled linux.
Ships:
YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. Overall this has been a really fun project to work on. I never thought I would have fun coding in javascript.
YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. For this Ship I added the color themes feature fixed a LOT of bugs and I also created a custom playback speed feature which im super proud of and finally I incorporated feedback from the first ship (fixing the readme). This project has been super fun and this is going to be my last ship for stardance but I will probably keep working on this! Also im super happy my extension got approved to be on the firefox store so if you like it you can add it here: https://addons.mozilla.org/en-US/firefox/addon/youtweaks/...
|
1792853377.3051844
|
1792939777.3051844
|
|
292
|
Connie the conentbot by @AloneAlex | Stardance
|
AloneAlex
|
1
|
4.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T14:11:25Z", "hours": 4.0, "multiplier": 5.98, "payout": 26, "blessing": "neutral", "text": "Connie is a Slack bot that can fetch a random interesting article or video submitted by another hackclubber, and to which you can submit any interesting videos and articles you find! Featuring simple commands and a nice pfp for the bot!", "repo": "https://github.com/thealonealex/contentbot", "demo": "https://hackclub.enterprise.slack.com/archives/C0B78BSN086"}]...
|
[{"post_id": 2141, "ts": "2026 [{"post_id": 2141, "ts": "2026-06-04T14:05:59Z", "hours": 0.6419, "text": "Slack links create an extra newline on the database, which would mean that if the bot tried to fetch that row, it’d be empty and it would just no reply. Fixed that! Also added a proper readme and license file. Project is ready to ship!"}, {"post_id": 1385, "ts": "2026-06-03T11:55:51Z", "hours": 0.5164, "text": "Drew a nice pfp for Connie! It’s so nice that Lapse can count art and hardware time too"}, {"post_id": 1057, "ts": "2026-06-02T21:16:58Z", "hours": 0.5361, "text": "I was wrong, it did work after a restart of the nest service. Hooray! The first version is basically done? /article or /video fetches a random video or article a hackclubber has submitted to the bot /submit-article or /submit-video let’s you add to the list of articles and videos! You can try it right now using /cn-help to view all commands!"}, {"post_id": 1038, "ts": "2026-06-02T20:33:10Z", "hours": 2.0692, "text": "Would you believe me if I said writing this line properly took me two full hours of testing and failing? sadly it now doesn’t work on the server side I’ll have to rewrite this again"}, {"post_id": 773, "ts": "2026-06-02T13:10:11Z", "hours": 0.5469, "text": "To begin the project, I followed the slack bot mission’s tutorial! I’ll build on top of that as a base"}]...
|
Title: Connie the conentbot by @AloneAlex | Starda Title: Connie the conentbot by @AloneAlex | Stardance
Devlogs:
To begin the project, I followed the slack bot mission’s tutorial! I’ll build on top of that as a base
Would you believe me if I said writing this line properly took me two full hours of testing and failing? sadly it now doesn’t work on the server side I’ll have to rewrite this again
I was wrong, it did work after a restart of the nest service. Hooray! The first version is basically done? /article or /video fetches a random video or article a hackclubber has submitted to the bot /submit-article or /submit-video let’s you add to the list of articles and videos! You can try it right now using /cn-help to view all commands!
Drew a nice pfp for Connie! It’s so nice that Lapse can count art and hardware time too
Slack links create an extra newline on the database, which would mean that if the bot tried to fetch that row, it’d be empty and it would just no reply. Fixed that! Also added a proper readme and license file. Project is ready to ship!
Ships:
Connie is a Slack bot that can fetch a random interesting article or video submitted by another hackclubber, and to which you can submit any interesting videos and articles you find! Featuring simple commands and a nice pfp for the bot!...
|
1792832142.014068
|
1792918542.014068
|
|
293
|
Server Dashboard by @hardikgupta2232 | Stardance
|
hardikgupta2232
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Server Dashboard by @hardikgupta2232 | Star Title: Server Dashboard by @hardikgupta2232 | Stardance...
|
1792533216.052642
|
1793138016.052642
|
|
294
|
redaptcha by @redac1ed | Stardance
|
redac1ed
|
0
|
0.53
|
0
|
[]
|
[{"post_id": 857, "ts": "2026- [{"post_id": 857, "ts": "2026-06-02T15:49:32Z", "hours": 0.5281, "text": "Heya! This is the starting of this captcha that I am making in Rust! Changes: added a frontend to test the captcha added a backend to make the prototype Commits: cbad970 Now, I am going to lock in to make a plan for the backend."}]...
|
Title: redaptcha by @redac1ed | Stardance
Devlogs Title: redaptcha by @redac1ed | Stardance
Devlogs:
Heya! This is the starting of this captcha that I am making in Rust! Changes: added a frontend to test the captcha added a backend to make the prototype Commits: cbad970 Now, I am going to lock in to make a plan for the backend....
|
1792522300.2747133
|
1793127100.2747133
|
|
295
|
kasl.hatya.dev by @hatya-mouse | Stardance
|
hatya-mouse
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: kasl.hatya.dev by @hatya-mouse | Stardance
|
1791824474.3292022
|
1792688474.3292022
|
|
296
|
Realistic Sticky Notes by @rx76d | Stardance
|
rx76d
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Realistic Sticky Notes by @rx76d | Stardanc Title: Realistic Sticky Notes by @rx76d | Stardance...
|
1791824160.5656502
|
1792688160.5656502
|
|
297
|
Eye classifier by @miku | Stardance
|
miku
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Eye classifier by @miku | Stardance
|
1792907439.5785377
|
1793771439.5785377
|
|
298
|
Personal Website by @shravs | Stardance
|
shravs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal Website by @shravs | Stardance
|
1792767215.3303115
|
1793372015.3303115
|
|
299
|
Signal.fm by @shravs | Stardance
|
shravs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Signal.fm by @shravs | Stardance
|
1792590879.9595098
|
1793195679.9595098
|
|
300
|
cool project by @zvan | Stardance
|
zvan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: cool project by @zvan | Stardance
|
1792493719.05231
|
1793098519.05231
|