|
49647
|
ReplyFlow by @Shivamxcode | Stardance
|
Shivamxcode
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T18:26:11Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built ReplyFlow, a small Windows utility that helps turn Hindi and Hinglish messages into natural English replies. The main challenge was making it feel like a real desktop tool instead of just another AI wrapper, especially with the background tray workflow, global shortcut, auto-convert, context, and different reply styles. I’m most proud of the overall workflow: you can copy a message, press Ctrl+Shift+R, and get a reply without having to constantly keep the app open in front of you. I also spent a lot of time making sure failed requests don’t lose the user’s text and that the API key stays out of the frontend. To test it, install the Windows app from the Demo URL, add your own Groq API key in Settings, then copy a Hindi/Hinglish message and press Ctrl+Shift+R. You can also try the different modes, reply styles, context, quick rewrites, and Copy & Clear.", "repo": "https://github.com/shivamxcode2008/ReplyFlow", "demo": "https://github.com/shivamxcode2008/ReplyFlow/releases"}]...
|
[{"post_id": 48380, "ts": "202 [{"post_id": 48380, "ts": "2026-08-16T18:17:41Z", "hours": 2.5169, "text": "I’m building Replyflow, a lightweight Windows app that turns Hindi and Hinglish messages into natural English replies you’d actually send. The idea is to make everyday conversations less frustrating when you know what you want to say but don’t know how to phares it naturally in English."}]...
|
Title: ReplyFlow by @Shivamxcode | Stardance
Devl Title: ReplyFlow by @Shivamxcode | Stardance
Devlogs:
I’m building Replyflow, a lightweight Windows app that turns Hindi and Hinglish messages into natural English replies you’d actually send. The idea is to make everyday conversations less frustrating when you know what you want to say but don’t know how to phares it naturally in English.
Ships:
I built ReplyFlow, a small Windows utility that helps turn Hindi and Hinglish messages into natural English replies. The main challenge was making it feel like a real desktop tool instead of just another AI wrapper, especially with the background tray workflow, global shortcut, auto-convert, context, and different reply styles. I’m most proud of the overall workflow: you can copy a message, press Ctrl+Shift+R, and get a reply without having to constantly keep the app open in front of you. I also spent a lot of time making sure failed requests don’t lose the user’s text and that the API key stays out of the frontend. To test it, install the Windows app from the Demo URL, add your own Groq API key in Settings, then copy a Hindi/Hinglish message and press Ctrl+Shift+R. You can also try the different modes, reply styles, context, quick rewrites, and Copy & Clear....
|
1793688799.0446033
|
1793775199.0446033
|
|
54345
|
Os sus by @mazobot | Stardance
|
mazobot
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T20:47:20Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made very susy os nad it baka. My unique os has many unuseful features and it took too many hours.", "repo": "https://github.com/mazobot/mazobot", "demo": "https://mazobot.github.io/mazobot/"}]...
|
[{"post_id": 59178, "ts": "202 [{"post_id": 59178, "ts": "2026-08-31T20:28:10Z", "hours": 0.6794, "text": "Who are you? How did you get here?"}, {"post_id": 57609, "ts": "2026-08-29T20:21:42Z", "hours": 4.5083, "text": "I added a very susy baka easter egg (kinda looks like virsus but it isn’t I promise )"}, {"post_id": 54779, "ts": "2026-08-25T21:50:12Z", "hours": 1.2019, "text": "working on a welcome screen and I have no idea what am I doing pls help"}]...
|
Title: Os sus by @mazobot | Stardance
Devlogs:
wo Title: Os sus by @mazobot | Stardance
Devlogs:
working on a welcome screen and I have no idea what am I doing pls help
I added a very susy baka easter egg (kinda looks like virsus but it isn’t I promise )
Who are you? How did you get here?
Ships:
I made very susy os nad it baka. My unique os has many unuseful features and it took too many hours....
|
1793688800.7241092
|
1793775200.7241092
|
|
19656
|
Anukrama by @aashvik | Stardance
|
aashvik
|
2
|
21.0
|
180
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T02:47:47Z", "hours": 14.0, "multiplier": 8.67, "payout": 119, "blessing": "neutral", "text": "What did you make? Anukrama is a gita chapter 15 chanting game where you get part of a verse and try to chant the rest. I also made an ai that scores your chanting. What was challenging? Getting the ai running in the browser was the hardest part. I had to move the pytorch model to onnx and recreate the audio processing in JavaScript. What are you proud of? Prob getting the entire ai pipeline working in the actual website. It literally took most of my time and I couldn’t get it to work for like an hour :sob-spin: What should people know when testing? The AI is meant to mainly be a gimmick in beta. It’s only based on around 30 recordings per verse because there is absolutely no gita chanting data. You should test without bg noise and actually chant the verse if u want the best results.", "repo": "https://github.com/koditra/Anukrama", "demo": "https://koditra.github.io/Anukrama/"}, {"ship_num": 2, "ts": "2026-07-04T06:22:09Z", "hours": 7.0, "multiplier": 8.95, "payout": 61, "blessing": "neutral", "text": "Anukrama is a nintendo Switch homebrew app that helps people memorize and practice chanting Bhagavad Gita verses. It gives you the previous quarter of a verse as a clue, and you have to chant the next part from memory. Right now it includes all 20 verses of Chapter 15 with audio prompts and easy controller navigation. The biggest challenge was getting the audio system and verse progression working smoothly on the Switch. I also spent a lot of time organizing the verse metadata and making everything load quickly. Thanks for following my journey!", "repo": "https://github.com/koditra/Anukrama", "demo": "https://koditra.github.io/Anukrama/"}]...
|
[{"post_id": 67766, "ts": "202 [{"post_id": 67766, "ts": "2026-09-14T00:35:29Z", "hours": 4.8522, "text": "Final update/devlog !!!! I finally finished integrating the AI pronunciation system into Anukrama. This ended up being way more complicated than I originally thought. The model itself was trained in PyTorch using MFCCs, spectral features, and DTW comparisons against multiple good chanting recordings. The problem was that the .pt model couldn’t just be dropped into a website, so I had to export everything to ONNX and basically rebuild the preprocessing pipeline in JavaScript so the browser could generate the same kind of audio features from a recording. I also changed how I stored the scaler data by putting the normalization values into the .npz files, then wrote the JavaScript to load the model, scaler, reference audio, process the recording, calculate the features, and pass everything through the ONNX model. There were a bunch of stupid issues along the way too, including the ONNX runtime conflicting with a variable in my JS and the scaler data not loading correctly lol. After all of that I added the actual score display to the site, so the recording can go through the whole pipeline and come back as a pronunciation score out of 100. This took way longer than I expected lol, but I finally got it working. This is prob the end of this project!!!!"}, {"post_id": 53354, "ts": "2026-08-23T21:13:09Z", "hours": 3.5311, "text": "AI Pronunciation Model I worked on the AI pronunciation system for Anukrama! I used PyTorch to train models that compare your chanting to good reference recordings and give u a score out of 100. I made models for Verse 1 and Verse 2 using things like MFCCs and DTW. The models are trained, but I need way more data because there isn’t really a big dataset of Bhagavad Gita chanting recordings. I still need to record a lot of the data myself. I haven’t added the AI to the website yet. If u wanna help me record data for the model, pls DM me ( @aashvik )!"}, {"post_id": 47192, "ts": "2026-08-14T22:33:31Z", "hours": 3.0061, "text": "Devlog Update Today I worked on the browser version of Anukrama. i added: A browser demo at game.html GitHub-hosted verse data using the meta , verses , and audio folders Devanagari support in the browser Automatic prompt audio Special handling for Verse 1 since it has no prompt Audio fade-outs when switching verses quickly Fade animations between game states i also updated the landing page with a Try Browser Demo button. i added a short explanation of what the Bhagavad Gita is, including a comparison to the Bible to help people unfamiliar with Hinduism understand it. i might need to fix the landing page css because the buttons look a bit squished also, i learned how to type in markdown recently so tell me if u have any advice! :)"}, {"post_id": 32324, "ts": "2026-07-21T12:51:13Z", "hours": 2.3922, "text": "Final Devlog! Hi! whats up? So basically, I worked on the website and worked on rewriting it in my style because I used way too much AI for the last one, so it seemed vibecoded. I started out with a really basic page and slowly added more css. I chose a paper brown color scheme for the UI bc i think it fits the Bhagavad Gita app idea better. I also spent a while practicing css and finally understand flexbox. here are the things i added: navbar hack club flag that waves around chinmaya mission logo hover animations gameplay section with a youtube video minimalist layout i made the hack club logo wave constantly, then stop and get a little bigger when you hover over it. that was fun. Thats all! I also wanted to thank and give Chinmaya Mission credit for the audio recordings. (They didn’t even want recognition!)"}, {"post_id": 21407, "ts": "2026-07-03T10:20:08Z", "hours": 1.8864, "text": "I made a landing page for the website! I tried to make my own css but it looked kinda ahh so i ended up using a mixture of ChatGPT and Gemini to make the effects look way better. I still changed a bunch of stuff myself and messed around with the layout until it looked how i wanted. I also added my own screenshots to the website so people could actually see what it looks like instead of just reading about it. I spent some time changing little things like the spacing, colors, and animations to make it feel nicer overall. After i finished everything, i used git to upload all of the code to github so i could keep track of my changes and have it all backed up. Thats pretty much everything i worked on for the landing page!"}, {"post_id": 12464, "ts": "2026-06-20T11:03:02Z", "hours": 4.3567, "text": "Today ended up being a much bigger update than I originally planned. The original goal was simply to improve audio playback and make the application a little easier to use, but it gradually turned into a complete overhaul of the project. Earlier versions of Anukrama were entirely terminal-based and focused mainly on functionality rather than presentation. While they worked well enough for testing and practicing verses, they did not really feel like a finished Nintendo Switch application. As I continued working on the project, I decided it was time to build a proper interface. I started by experimenting with a few graphics libraries, but that quickly became frustrating due to dependency problems, linker errors, and build issues that consumed far more development time than expected. After spending a considerable amount of time trying to make those libraries cooperate, I eventually decided to take a different approach and build the rendering system myself using the Switch framebuffer along with FreeType for font rendering. This ended up being a much better solution because it gave me direct control over how text and graphics were displayed. One of the most important improvements from this change was proper Unicode support. Earlier versions struggled with Sanskrit transliteration characters, often displaying missing glyphs, incorrect symbols, or unreadable text. The new rendering system finally allowed me to render Unicode properly, which means verses and prompts can now appear correctly on screen. During the process I also redesigned the entire user interface, added larger text, created menu screens, introduced animated backgrounds, improved readability, added color-coded sections, and included a “Made by Aashvik Goel” credit within the application. Looking back, the difference between the original terminal version and the new interface is much larger than I expected when I first started making changes. The audio system also received significant improvements during this update. The application now supports separate prompt and answer recordings, allowing users to hear a prompt before revealing the complete verse. Implementing this required converting recordings into the correct PCM format, debugging playback issues, testing different audio configurations, and tracking down several recordings that did not behave as expected. While a small number of recordings still need additional work, the overall system is now much more reliable. Alongside the audio improvements, I added multiple study modes to make practice sessions more engaging. There is now a Solo Practice mode as well as a pass-and-play VS Mode where two players can take turns answering verses and earning points. Another major focus was testing on actual hardware rather than relying entirely on emulation. Although Ryujinx was extremely useful throughout development, I regularly installed builds directly onto my Nintendo Switch to verify that rendering, controls, performance, and audio behaved correctly on the real device. This helped uncover issues that would have been easy to miss in an emulator and made the project feel much more like a genuine homebrew application. By the end of this development cycle, Anukrama had gained a completely new rendering engine, proper Unicode support, improved audio playback, multiple study modes, a full menu system, animated visual effects, and a far more polished overall presentation. What originally started as a simple terminal-based study tool has now begun to feel like a complete Switch application designed specifically for practicing Bhagavad Gita verses."}, {"post_id": 9784, "ts": "2026-06-16T07:02:35Z", "hours": 0.3319, "text": "hi again, i finally got a proper shell/menu system working for the app now. right now it’s still really basic and mostly just a text UI, but it’s the first version where everything is structured properly instead of just random test code. you can move up and down with the dpad, press A to select options, and it switches between different states like practice, quiz, and settings. it doesn’t actually do much yet in those modes, but that’s kind of the point of this step. i basically wanted to build a shell first so all the core navigation and input handling is stable before i start adding the real features. before this, everything was just separate test snippets, but now it’s all inside one loop with proper states, so it’s way easier to expand without breaking things. pressing + still quits the app, and i made sure the input system is using the correct libnx setup from the examples, so the controls actually work properly on real hardware instead of randomly failing like before. now that this shell is done, i can actually start building the real parts of the project. the plan is to plug in the verse system into practice mode first, where it shows a prompt and then eventually makes you continue the verse. quiz mode will probably come after that once the structure is solid. Anyways, here is a pic of the shell from an emulator:"}, {"post_id": 9770, "ts": "2026-06-16T06:33:48Z", "hours": 0.6058, "text": "Hi everyone! I just started this project so i can get more comfortable with making my own games/apps, and I rlly wanted to make a switch app! So here’s my plan: I want to make a fully interactive and immersive 2d UI but i think ill make a text shell first so all the features work and ill make the UI later. when i was starting to make the code, I made a screen which said press + to exit. I pressed plus, but the game didn’t quit like it was supposed to. After making a test code to print all buttons pressed, I found out my code wasn’t even receiving any inputs. I had to ask on reddit and I still couldn’t find any answers so i looked in the demo folder of the library I installed and was able to fix my code after reading the proper controller initialization that I should have used. Here is a picture from an emulator of what the output is supposed to look like:"}]...
|
Title: Anukrama by @aashvik | Stardance
Devlogs:
Title: Anukrama by @aashvik | Stardance
Devlogs:
Hi everyone! I just started this project so i can get more comfortable with making my own games/apps, and I rlly wanted to make a switch app! So here’s my plan: I want to make a fully interactive and immersive 2d UI but i think ill make a text shell first so all the features work and ill make the UI later. when i was starting to make the code, I made a screen which said press + to exit. I pressed plus, but the game didn’t quit like it was supposed to. After making a test code to print all buttons pressed, I found out my code wasn’t even receiving any inputs. I had to ask on reddit and I still couldn’t find any answers so i looked in the demo folder of the library I installed and was able to fix my code after reading the proper controller initialization that I should have used. Here is a picture from an emulator of what the output is supposed to look like:
hi again, i finally got a proper shell/menu system working for the app now. right now it’s still really basic and mostly just a text UI, but it’s the first version where everything is structured properly instead of just random test code. you can move up and down with the dpad, press A to select options, and it switches between different states like practice, quiz, and settings. it doesn’t actually do much yet in those modes, but that’s kind of the point of this step. i basically wanted to build a shell first so all the core navigation and input handling is stable before i start adding the real features. before this, everything was just separate test snippets, but now it’s all inside one loop with proper states, so it’s way easier to expand without breaking things. pressing + still quits the app, and i made sure the input system is using the correct libnx setup from the examples, so the controls actually work properly on real hardware instead of randomly failing like before. now that this shell is done, i can actually start building the real parts of the project. the plan is to plug in the verse system into practice mode first, where it shows a prompt and then eventually makes you continue the verse. quiz mode will probably come after that once the structure is solid. Anyways, here is a pic of the shell from an emulator:
Today ended up being a much bigger update than I originally planned. The original goal was simply to improve audio playback and make the application a little easier to use, but it gradually turned into a complete overhaul of the project. Earlier versions of Anukrama were entirely terminal-based and focused mainly on functionality rather than presentation. While they worked well enough for testing and practicing verses, they did not really feel like a finished Nintendo Switch application. As I continued working on the project, I decided it was time to build a proper interface. I started by experimenting with a few graphics libraries, but that quickly became frustrating due to dependency problems, linker errors, and build issues that consumed far more development time than expected. After spending a considerable amount of time trying to make those libraries cooperate, I eventually decided to take a different approach and build the rendering system myself using the Switch framebuffer along with FreeType for font rendering. This ended up being a much better solution because it gave me direct control over how text and graphics were displayed. One of the most important improvements from this change was proper Unicode support. Earlier versions struggled with Sanskrit transliteration characters, often displaying missing glyphs, incorrect symbols, or unreadable text. The new rendering system finally allowed me to render Unicode properly, which means verses and prompts can now appear correctly on screen. During the process I also redesigned the entire user interface, added larger text, created menu screens, introduced animated backgrounds, improved readability, added color-coded sections, and included a “Made by Aashvik Goel” credit within the application. Looking back, the difference between the original terminal version and the new interface is much larger than I expected when I first started making changes. The audio system also received significant improvements during this update. The application now supports separate prompt and answer recordings, allowing users to hear a prompt before revealing the complete verse. Implementing this required converting recordings into the correct PCM format, debugging playback issues, testing different audio configurations, and tracking down several recordings that did not behave as expected. While a small number of recordings still need additional work, the overall system is now much more reliable. Alongside the audio improvements, I added multiple study modes to make practice sessions more engaging. There is now a Solo Practice mode as well as a pass-and-play VS Mode where two players can take turns answering verses and earning points. Another major focus was testing on actual hardware rather than relying entirely on emulation. Although Ryujinx was extremely useful throughout development, I regularly installed builds directly onto my Nintendo Switch to verify that rendering, controls, performance, and audio behaved correctly on the real device. This helped uncover issues that would have been easy to miss in an emulator and made the project feel much more like a genuine homebrew application. By the end of this development cycle, Anukrama had gained a completely new rendering engine, proper Unicode support, improved audio playback, multiple study modes, a full menu system, animated visual effects, and a far more polished overall presentation. What originally started as a simple terminal-based study tool has now begun to feel like a complete Switch application designed specifically for practicing Bhagavad Gita verses.
I made a landing page for the website! I tried to make my own css but it looked kinda ahh so i ended up using a mixture of ChatGPT and Gemini to make the effects look way better. I still changed a bunch of stuff myself and messed around with the layout until it looked how i wanted. I also added my own screenshots to the website so people could actually see what it looks like instead of just reading about it. I spent some time changing little things like the spacing, colors, and animations to make it feel nicer overall. After i finished everything, i used git to upload all of the code to github so i could keep track of my changes and have it all backed up. Thats pretty much everything i worked on for the landing page!
Final Devlog! Hi! whats up? So basically, I worked on the website and worked on rewriting it in my style because I used way too much AI for the last one, so it seemed vibecoded. I started out with a really basic page and slowly added more css. I chose a paper brown color scheme for the UI bc i think it fits the Bhagavad Gita app idea better. I also spent a while practicing css and finally understand flexbox. here are the things i added: navbar hack club flag that waves around chinmaya mission logo hover animations gameplay section with a youtube video minimalist layout i made the hack club logo wave constantly, then stop and get a little bigger when you hover over it. that was fun. Thats all! I also wanted to thank and give Chinmaya Mission credit for the audio recordings. (They didn’t even want recognition!)
Devlog Update Today I worked on the browser version of Anukrama. i added: A browser demo at game.html GitHub-hosted verse data using the meta , verses , and audio folders Devanagari support in the browser Automatic prompt audio Special handling for Verse 1 since it has no prompt Audio fade-outs when switching verses quickly Fade animations between game states i also updated the landing page with a Try Browser Demo button. i added a short explanation of what the Bhagavad Gita is, including a comparison to the Bible to help people unfamiliar with Hinduism understand it. i might need to fix the landing page css because the buttons look a bit squished also, i learned how to type in markdown recently so tell me if u have any advice! :)
AI Pronunciation Model I worked on the AI pronunciation system for Anukrama! I used PyTorch to train models that compare your chanting to good reference recordings and give u a score out of 100. I made models for Verse 1 and Verse 2 using things like MFCCs and DTW. The models are trained, but I need way more data because there isn’t really a big dataset of Bhagavad Gita chanting recordings. I still need to record a lot of the data myself. I haven’t added the AI to the website yet. If u wanna help me record data for the model, pls DM me ( @aashvik )!
Final update/devlog !!!! I finally finished integrating the AI pronunciation system into Anukrama. This ended up being way more complicated than I originally thought. The model itself was trained in PyTorch using MFCCs, spectral features, and DTW comparisons against multiple good chanting recordings. The problem was that the .pt model couldn’t just be dropped into a website, so I had to export everything to ONNX and basically rebuild the preprocessing pipeline in JavaScript so the browser could generate the same kind of audio features from a recording. I also changed how I stored the scaler data by putting the normalization values into the .npz files, then wrote the JavaScript to load the model, scaler, reference audio, process the recording, calculate the features, and pass everything through the ONNX model. There were a bunch of stupid issues along the way too, including the ONNX runtime conflicting with a variable in my JS and the scaler data not loading correctly lol. After all of that I added the actual score display to the site, so the recording can go through the whole pipeline and come back as a pronunciation score out of 100. This took way longer than I expected lol, but I finally got it working. This is prob the end of this project!!!!
Ships:
Anukrama is a nintendo Switch homebrew app that helps people memorize and practice chanting Bhagavad Gita verses. It gives you the previous quarter of a verse as a clue, and you have to chant the next part from memory. Right now it includes all 20 verses of Chapter 15 with audio prompts and easy controller navigation. The biggest challenge was getting the audio system and verse progression working smoothly on the Switch. I also spent a lot of time organizing the verse metadata and making everything load quickly. Thanks for following my journey!
What did you make? Anukrama is a gita chapter 15 chanting game where you get part of a verse and try to chant the rest. I also made an ai that scores your chanting. What was challenging? Getting the ai running in the browser was the hardest part. I had to move the pytorch model to onnx and recreate the audio processing in JavaScript. What are you proud of? Prob getting the entire ai pipeline working in the actual website. It literally took most of my time and I couldn’t get it to work for like an hour :sob-spin: What should people know when testing? The AI is meant to mainly be a gimmick in beta. It’s only based on around 30 recordings per verse because there is absolutely no gita chanting data. You should test without bg noise and actually chant the verse if u want the best results....
|
1793688801.9109428
|
1793775201.9109428
|
|
6148
|
nothelp by @Ruben | Stardance
|
Ruben
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-10T09:40:50Z", "hours": 1.0, "multiplier": 1.64, "payout": 1, "blessing": "neutral", "text": "I made a cool bot for people who aren’t on the help team to add a disclaimer to a message.", "repo": "https://github.com/code2344/helpbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0B5WQKC0F8"}]...
|
[{"post_id": 6129, "ts": "2026 [{"post_id": 6129, "ts": "2026-06-10T09:38:09Z", "hours": 0.3356, "text": "fixed bot so it sends for the right button but then realised i broke rules in like 4 channels (dw theyre getting removed) also got a icon :)"}, {"post_id": 6106, "ts": "2026-06-10T08:35:10Z", "hours": 0.4453, "text": "Added more features and working on making it change the button name in different channels!"}]...
|
Title: nothelp by @Ruben | Stardance
Devlogs:
Add Title: nothelp by @Ruben | Stardance
Devlogs:
Added more features and working on making it change the button name in different channels!
fixed bot so it sends for the right button but then realised i broke rules in like 4 channels (dw theyre getting removed) also got a icon :)
Ships:
I made a cool bot for people who aren’t on the help team to add a disclaimer to a message....
|
1793688804.8008804
|
1793775204.8008804
|
|
52508
|
Card-OS by @DSK | Stardance
|
DSK
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T20:48:31Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is card-os an card themed os.In this i have added 3 draggable windows/apps , one is the information about the theme the second is the notes app and third is the calendar app. I have also added live clock and the current date.I have used HTML,CSS and JAVASCRIPT in this os and this os is made completely out of scrtach.I have used light ai for debugging and Javascript. the most difficult part of this os was the calendar, i had so many issues and errors with the calendar but i eventually figured it out. I hav also added my stardance link in the welcome to card os window. i even had alot of issues with the javascript but it all worked out. I have also added a feature in the calendar app where you can see the future/past dates.i plan on adding more apps and windows in my os and make it more advanced.", "repo": "https://github.com/dhyansandeep/nebula-os", "demo": "https://dhyansandeep.github.io/Card-os/"}]...
|
[{"post_id": 59172, "ts": "202 [{"post_id": 59172, "ts": "2026-08-31T20:03:06Z", "hours": 3.7461, "text": "So today i did alot of changes and i had a change of mind i shifted from nebulaOS to Card-OS and added like 3 windows changed the color the style and did css and major changes to my javascript plus i added calendar. i had so many problems with the calendar but i eventually figured it out"}, {"post_id": 58375, "ts": "2026-08-30T19:44:32Z", "hours": 1.3294, "text": "Hey there, today i finished part 3 and added a task bar and a dragable window plus did a little of changes in the content in the os."}, {"post_id": 58010, "ts": "2026-08-30T10:55:57Z", "hours": 1.5033, "text": "Hey there, I figured out how to space properly and completed placing a window I also finished designing a desktop and tracking time on java script and finally how to make it run every second.soon ill start part 3."}, {"post_id": 57653, "ts": "2026-08-29T21:18:54Z", "hours": 1.5197, "text": "Hey there, okay so today I started working on placing a window, designing a desktop and learned alot about customizing spacing but I’m having issues in spacing I don’t know where I went wrong but ill figure it out hopefully."}, {"post_id": 56630, "ts": "2026-08-28T13:48:49Z", "hours": 1.4175, "text": "Hey there, so today i added padding, borders, added content, changed the color to lavender and purple, changed the progress status to 25%, added margin and started working on creating a window"}, {"post_id": 51870, "ts": "2026-08-21T19:04:37Z", "hours": 0.4547, "text": "i have started learning html and followed the guide and have completed one tag so far. I’m working on adding more tags and colors."}]...
|
Title: Card-OS by @DSK | Stardance
Devlogs:
i hav Title: Card-OS by @DSK | Stardance
Devlogs:
i have started learning html and followed the guide and have completed one tag so far. I’m working on adding more tags and colors.
Hey there, so today i added padding, borders, added content, changed the color to lavender and purple, changed the progress status to 25%, added margin and started working on creating a window
Hey there, okay so today I started working on placing a window, designing a desktop and learned alot about customizing spacing but I’m having issues in spacing I don’t know where I went wrong but ill figure it out hopefully.
Hey there, I figured out how to space properly and completed placing a window I also finished designing a desktop and tracking time on java script and finally how to make it run every second.soon ill start part 3.
Hey there, today i finished part 3 and added a task bar and a dragable window plus did a little of changes in the content in the os.
So today i did alot of changes and i had a change of mind i shifted from nebulaOS to Card-OS and added like 3 windows changed the color the style and did css and major changes to my javascript plus i added calendar. i had so many problems with the calendar but i eventually figured it out
Ships:
This is card-os an card themed os.In this i have added 3 draggable windows/apps , one is the information about the theme the second is the notes app and third is the calendar app. I have also added live clock and the current date.I have used HTML,CSS and JAVASCRIPT in this os and this os is made completely out of scrtach.I have used light ai for debugging and Javascript. the most difficult part of this os was the calendar, i had so many issues and errors with the calendar but i eventually figured it out. I hav also added my stardance link in the welcome to card os window. i even had alot of issues with the javascript but it all worked out. I have also added a feature in the calendar app where you can see the future/past dates.i plan on adding more apps and windows in my os and make it more advanced....
|
1793688808.7642558
|
1793775208.7642558
|
|
36239
|
My APOD New Tab by @nicholas1023 | Stardance
|
nicholas1023
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T04:12:12Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom new tab which uses NASA’s APOD API as the wallpaper which refreshes everyday. It allows you to select a search engine for your queries with just a click. For example, you could select Google, Bing or DuckDuckGo for daily searches and GitHub to search for repositories. You can also add frequently visited URLs to the pin section which will store them in localStorage. It looks much like a normal new tab page, but it aims for a simple and minimalistic page without clutters that built-in new tab pages have with automatically added bookmarks. One feature I’m proud of is the search engine selection dropdown. Most browsers only allow you to change that in their settings, but mine can be switched easily to fit the context of your search! You can try it out at https://nicholas1023.github.io/new-tab/ !", "repo": "https://github.com/Nicholas1023/new-tab/", "demo": "https://nicholas1023.github.io/new-tab/"}]...
|
[{"post_id": 31046, "ts": "202 [{"post_id": 31046, "ts": "2026-07-19T03:59:07Z", "hours": 2.3839, "text": "Added URL Pin function to my new tab site! What’s New Added a function to pin your favourite URLs for easier access with localSotrage to ensure they stay even after reloads. Instead to showing the website’s name, it displays it’s favicon for a simpler UI. Problems I’ve Faced It took me quite a while to debug the localStorage function. It turned out that the issue was the parsing and storing URLs as an array."}, {"post_id": 29973, "ts": "2026-07-17T05:57:02Z", "hours": 3.0058, "text": "Finished the basic functions of my APOD new tab page! What I’ve done in this devlog Set up the API Key for APOD Create the basic UI and functionality for the new tab page. Problems I faced My site was initially deploying via pages-build-and-deployment , which led to the API not working. After some time and many git commit --allow-empty -m \"Trigger pages build\" , I finally found out what the problem was! I didn’t change it to build via GitHub Actions. After changing that, it worked quite well. Another problem I faced was the timezone difference with my country and APOD’s API. I received 500 errors when calling them. It worked in the end when i used yesterday’s date! What’s next I’ll be thinking of what other features I should add to my new tab page, and implement them in the next devlog!"}]...
|
Title: My APOD New Tab by @nicholas1023 | Stardanc Title: My APOD New Tab by @nicholas1023 | Stardance
Devlogs:
Finished the basic functions of my APOD new tab page! What I’ve done in this devlog Set up the API Key for APOD Create the basic UI and functionality for the new tab page. Problems I faced My site was initially deploying via pages-build-and-deployment , which led to the API not working. After some time and many git commit --allow-empty -m "Trigger pages build" , I finally found out what the problem was! I didn’t change it to build via GitHub Actions. After changing that, it worked quite well. Another problem I faced was the timezone difference with my country and APOD’s API. I received 500 errors when calling them. It worked in the end when i used yesterday’s date! What’s next I’ll be thinking of what other features I should add to my new tab page, and implement them in the next devlog!
Added URL Pin function to my new tab site! What’s New Added a function to pin your favourite URLs for easier access with localSotrage to ensure they stay even after reloads. Instead to showing the website’s name, it displays it’s favicon for a simpler UI. Problems I’ve Faced It took me quite a while to debug the localStorage function. It turned out that the issue was the parsing and storing URLs as an array.
Ships:
I made a custom new tab which uses NASA’s APOD API as the wallpaper which refreshes everyday. It allows you to select a search engine for your queries with just a click. For example, you could select Google, Bing or DuckDuckGo for daily searches and GitHub to search for repositories. You can also add frequently visited URLs to the pin section which will store them in localStorage. It looks much like a normal new tab page, but it aims for a simple and minimalistic page without clutters that built-in new tab pages have with automatically added bookmarks. One feature I’m proud of is the search engine selection dropdown. Most browsers only allow you to change that in their settings, but mine can be switched easily to fit the context of your search! You can try it out at https://nicholas1023.github.io/new-tab/ !...
|
1793688810.3838596
|
1793775210.3838596
|
|
29505
|
Snake.py by @rosandrox | Stardance
|
rosandrox
|
1
|
10.0
|
32
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T10:06:11Z", "hours": 10.0, "multiplier": 3.18, "payout": 32, "blessing": "neutral", "text": "So I added an index.html site to make it easier for the user to download the executable file. Pretty much all functions and the coding I did were fairly displayed on my previous devlogs. I formatted the text a bit better in the game over and start screen. But except from that everything else remains the same. Go to this site: https://prodevmod.github.io/MySnakeGame/ and click on the download button to download the game. This game is made with Pygame and all the graphics are made by me. I drew them in pixilart. It has three themes. It does keep track of the score. You can gain points by eating apples and lose points by eating poisoned ones. You lose the game if you collide with a part of your tail, with a wall, or with the borders of the screen. It’s just like the classic retro game but with a twist. Please rate me well. I put a lot of effort and creativity into this.", "repo": "https://github.com/prodevmod/MySnakeGame", "demo": "https://prodevmod.github.io/MySnakeGame/"}]...
|
[{"post_id": 21376, "ts": "202 [{"post_id": 21376, "ts": "2026-07-03T08:48:55Z", "hours": 2.4778, "text": "I just finished the game for now and deployed the first exe file so anyone can download it and play it. It has three themes that were made in the last devlog. A one in a ten chance of the apple being poisonous if the apple is poisonous, you can wait it out until it re-renders and teleports to another place where it most likely will be an apple. I also have added in the start and quit screens: a welcome prompt a quick instructions prompt a game over prompt a quick instructions prompt your final score It’s displayed. To leave the game, you press Escape in the game over screen. I also added a full screen when you open the game that’s black so now you get more of that retro feel."}, {"post_id": 20794, "ts": "2026-07-02T14:28:42Z", "hours": 2.5308, "text": "I added three themes. The classic one the classic Corretto one and the blue one. I added graphics for the snake. I also added a game over screen and the start screen. I meditate to leave the game by pressing Escape. I put a start and restart function."}, {"post_id": 20468, "ts": "2026-07-02T02:11:35Z", "hours": 1.6617, "text": "So I fixed a bit the colors, added a start screen, a game over screen. I ended up using a state machine instead of a Boolean value, which I was planning at the start of the project. For the handling of playing start and game over that is. I added the score counter. And now I’m thinking and going on and adding themes and better graphics."}, {"post_id": 20372, "ts": "2026-07-01T23:18:25Z", "hours": 1.9383, "text": "So I made MY core concept work and started to add graphics.I will most certainly add a snake graphic later on.Now I ll work on the Start and GAME OVER screens.Ill add some sounds and make better graphics later on.I ll keep yall updated.Explanation abt my code you ll find once I upload it on github."}, {"post_id": 20232, "ts": "2026-07-01T19:38:35Z", "hours": 1.6619, "text": "So I just finished the core concept of the original snake game. Right now I have three classes. A Python main class that’s to have a more readable script, a Snake class, and a fruit class there is no checking for the snake to be inside the window. So I haven’t yet made borders that would end the game and nor can it collide with itself. But is this is the core concept of the working game. Now I will go on to add the barriers, the collision to itself, and maybe a score. See you in two hours."}]...
|
Title: Snake.py by @rosandrox | Stardance
Devlogs Title: Snake.py by @rosandrox | Stardance
Devlogs:
So I just finished the core concept of the original snake game. Right now I have three classes. A Python main class that’s to have a more readable script, a Snake class, and a fruit class there is no checking for the snake to be inside the window. So I haven’t yet made borders that would end the game and nor can it collide with itself. But is this is the core concept of the working game. Now I will go on to add the barriers, the collision to itself, and maybe a score. See you in two hours.
So I made MY core concept work and started to add graphics.I will most certainly add a snake graphic later on.Now I ll work on the Start and GAME OVER screens.Ill add some sounds and make better graphics later on.I ll keep yall updated.Explanation abt my code you ll find once I upload it on github.
So I fixed a bit the colors, added a start screen, a game over screen. I ended up using a state machine instead of a Boolean value, which I was planning at the start of the project. For the handling of playing start and game over that is. I added the score counter. And now I’m thinking and going on and adding themes and better graphics.
I added three themes. The classic one the classic Corretto one and the blue one. I added graphics for the snake. I also added a game over screen and the start screen. I meditate to leave the game by pressing Escape. I put a start and restart function.
I just finished the game for now and deployed the first exe file so anyone can download it and play it. It has three themes that were made in the last devlog. A one in a ten chance of the apple being poisonous if the apple is poisonous, you can wait it out until it re-renders and teleports to another place where it most likely will be an apple. I also have added in the start and quit screens: a welcome prompt a quick instructions prompt a game over prompt a quick instructions prompt your final score It’s displayed. To leave the game, you press Escape in the game over screen. I also added a full screen when you open the game that’s black so now you get more of that retro feel.
Ships:
So I added an index.html site to make it easier for the user to download the executable file. Pretty much all functions and the coding I did were fairly displayed on my previous devlogs. I formatted the text a bit better in the game over and start screen. But except from that everything else remains the same. Go to this site: https://prodevmod.github.io/MySnakeGame/ and click on the download button to download the game. This game is made with Pygame and all the graphics are made by me. I drew them in pixilart. It has three themes. It does keep track of the score. You can gain points by eating apples and lose points by eating poisoned ones. You lose the game if you collide with a part of your tail, with a wall, or with the borders of the screen. It’s just like the classic retro game but with a twist. Please rate me well. I put a lot of effort and creativity into this....
|
1793688812.5202532
|
1793775212.5202532
|
|
24799
|
john computer by @yagmur | Stardance
|
yagmur
|
1
|
9.82
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T09:04:23Z", "hours": 5.0, "multiplier": 7.93, "payout": 42, "blessing": "neutral", "text": "well i wanted to make a “smaller” project before i ship my main thing (smb remake) buuut this turned out to be a challenge on its own. i had to learn how serial works (doubt i still understand it) how slack works (doubt again) not to eat my brains out overall it was very fun doing this, learned and suffered a lot :D it is held by duct tape, hopes and dreams so hopefully it fulfills the “24/7” requirement. i may or may not return to this to fix the rough edges…. (no promises!!)", "repo": "https://github.com/yagmurpog/john-computer", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BD7M7JUH3"}]...
|
[{"post_id": 22015, "ts": "202 [{"post_id": 22015, "ts": "2026-07-04T08:01:24Z", "hours": 3.0656, "text": "uggggggggggggghhhhh, trying to implement a restart capability to the script for a while now but haven’t been successful. uhghughhhhhhhhhhhhhg"}, {"post_id": 19773, "ts": "2026-07-01T05:03:59Z", "hours": 1.7592, "text": "merged everything to a single script so it can be run as a systemd service, cron job whatever and for a reset command in slack. looking at screenshots of code is boring, please enjoy this car"}, {"post_id": 16171, "ts": "2026-06-26T08:45:10Z", "hours": 1.8322, "text": "decided to switch to socket mode, because opening up ports is a pain in the bum. the bot is now alive at #john-computer in slack!! username: john password: john"}, {"post_id": 15240, "ts": "2026-06-24T19:04:21Z", "hours": 0.7872, "text": "ok update time, i was a bit too vague on the last post so i will explain what this is now. this is a slack bot that connects slack to a serial terminal, specifically to interface with an alpine install in qemu borrowed some regex from the internet to remove escape codes, needs hella more polish before releasing it into the wild"}, {"post_id": 15007, "ts": "2026-06-24T11:56:13Z", "hours": 2.7172, "text": "new terminal emulator"}]...
|
Title: john computer by @yagmur | Stardance
Devlo Title: john computer by @yagmur | Stardance
Devlogs:
new terminal emulator
ok update time, i was a bit too vague on the last post so i will explain what this is now. this is a slack bot that connects slack to a serial terminal, specifically to interface with an alpine install in qemu borrowed some regex from the internet to remove escape codes, needs hella more polish before releasing it into the wild
decided to switch to socket mode, because opening up ports is a pain in the bum. the bot is now alive at #john-computer in slack!! username: john password: john
merged everything to a single script so it can be run as a systemd service, cron job whatever and for a reset command in slack. looking at screenshots of code is boring, please enjoy this car
uggggggggggggghhhhh, trying to implement a restart capability to the script for a while now but haven’t been successful. uhghughhhhhhhhhhhhhg
Ships:
well i wanted to make a “smaller” project before i ship my main thing (smb remake) buuut this turned out to be a challenge on its own. i had to learn how serial works (doubt i still understand it) how slack works (doubt again) not to eat my brains out overall it was very fun doing this, learned and suffered a lot :D it is held by duct tape, hopes and dreams so hopefully it fulfills the “24/7” requirement. i may or may not return to this to fix the rough edges…. (no promises!!)...
|
1793688813.943302
|
1793775213.943302
|
|
2874
|
My Portfolio by @time | Stardance
|
time
|
1
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T22:31:15Z", "hours": 3.0, "multiplier": 1.09, "payout": 3, "blessing": "neutral", "text": "This is my Portfolio! I made it over the course of a few hours (some I accidentally didn’t log oops) and I’m so happy to finally ship it! Lets get into the features! Features: Top navigator Social media link Home page Art page Coding page (like the types of work I’ve done etc etc) It feels great to ship this quick test of my beginner abilities for you guys! Please feel free to use assets from it for your own work! Let me know if there are any issues or things I could do better next site! I’m still improving. See you guys in the next project!", "repo": "https://github.com/TimeWithNoTime/Portfolioproject/", "demo": "https://timewithnotime.github.io/Portfolioproject/"}]...
|
[{"post_id": 17108, "ts": "202 [{"post_id": 17108, "ts": "2026-06-27T19:42:00Z", "hours": 1.4467, "text": "Added the top layout to my coding work site and art site! might ship later this week!"}, {"post_id": 1140, "ts": "2026-06-02T23:53:07Z", "hours": 0.8033, "text": "Just made a large amount of progress on my portfolio! I added a name card and a link to social media Hopefully I can put in a few more hours and finish up the website"}, {"post_id": 943, "ts": "2026-06-02T18:21:51Z", "hours": 0.2694, "text": "I started making my website! Its simple for the time I spent but I’m kinda just relearning as I see the need to! (I have like 45 minutes of unlogged work because I accidentally forgot to start recording twice)"}]...
|
Title: My Portfolio by @time | Stardance
Devlogs: Title: My Portfolio by @time | Stardance
Devlogs:
I started making my website! Its simple for the time I spent but I’m kinda just relearning as I see the need to! (I have like 45 minutes of unlogged work because I accidentally forgot to start recording twice)
Just made a large amount of progress on my portfolio! I added a name card and a link to social media Hopefully I can put in a few more hours and finish up the website
Added the top layout to my coding work site and art site! might ship later this week!
Ships:
This is my Portfolio! I made it over the course of a few hours (some I accidentally didn’t log oops) and I’m so happy to finally ship it! Lets get into the features! Features: Top navigator Social media link Home page Art page Coding page (like the types of work I’ve done etc etc) It feels great to ship this quick test of my beginner abilities for you guys! Please feel free to use assets from it for your own work! Let me know if there are any issues or things I could do better next site! I’m still improving. See you guys in the next project!...
|
1793688817.61027
|
1793775217.61027
|
|
39477
|
My own site! by @olivia_w | Stardance
|
olivia_w
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T04:22:49Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first personal website :D It was really fun learning two new languages and it was not as hard as I expected. The design is really minimalistic. Link: https://wangziqiolivia.github.io/PlanetOliviaZiqiWang/", "repo": "https://github.com/wangziqiolivia/PlanetOliviaZiqiWang", "demo": "https://wangziqiolivia.github.io/PlanetOliviaZiqiWang/"}]...
|
[{"post_id": 34993, "ts": "202 [{"post_id": 34993, "ts": "2026-07-26T04:18:14Z", "hours": 0.7464, "text": "Log#2 I finished the website :-) Yay yay"}, {"post_id": 34971, "ts": "2026-07-26T03:19:34Z", "hours": 2.8797, "text": "Log#1 I almost finished the main page It was fun learning html and css for the first time!"}]...
|
Title: My own site! by @olivia_w | Stardance
Devl Title: My own site! by @olivia_w | Stardance
Devlogs:
Log#1 I almost finished the main page It was fun learning html and css for the first time!
Log#2 I finished the website :-) Yay yay
Ships:
I made my first personal website :D It was really fun learning two new languages and it was not as hard as I expected. The design is really minimalistic. Link: https://wangziqiolivia.github.io/PlanetOliviaZiqiWang/...
|
1793688818.9073527
|
1793775218.9073527
|
|
33598
|
Willem van Hulst by @not-willem | Stardance
|
not-willem
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T05:53:01Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a cool website for myself about myself and how cool i am of course I know i really didn’t make that many devlogs, i kinda just forgot to but yeah I like my site and i hope you do too!", "repo": "https://github.com/not-willem/willemvanhulst", "demo": "https://not-willem.github.io/willemvanhulst"}]...
|
[{"post_id": 27026, "ts": "202 [{"post_id": 27026, "ts": "2026-07-12T05:50:36Z", "hours": 0.4528, "text": "alright i added some games to the site lmao"}, {"post_id": 26390, "ts": "2026-07-11T04:44:46Z", "hours": 1.1947, "text": "started working on my site! added in a bunch of pages and made some cool css and i might change it a bunch to get ALL of the devlogs but yay"}]...
|
Title: Willem van Hulst by @not-willem | Stardance Title: Willem van Hulst by @not-willem | Stardance
Devlogs:
started working on my site! added in a bunch of pages and made some cool css and i might change it a bunch to get ALL of the devlogs but yay
alright i added some games to the site lmao
Ships:
I made a cool website for myself about myself and how cool i am of course I know i really didn’t make that many devlogs, i kinda just forgot to but yeah I like my site and i hope you do too!...
|
1793688820.0984325
|
1793775220.0984325
|
|
34924
|
KeyGlow CLI Tool by @Aeriss | Stardance
|
Aeriss
|
1
|
11.0
|
138
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T11:31:13Z", "hours": 11.0, "multiplier": 12.65, "payout": 138, "blessing": "neutral", "text": "KeyGlow is finally shipped! (The text there will be the same as the one in latest DevLog) Hello everyone, I hope you are all doing great! After a lot of coding, debugging, testing and polishing, KeyGlow is finally ready to be released. This project started as a simple idea: create a fun keyboard statistics tool that allows people to understand their keyboard usage without becoming a keylogger. The final development phase ʕ•ᴥ•ʔ The last stage of development was focused mostly on polishing the project and preparing everything for release. At this point, instead of adding more features, I decided to focus on reliability and making sure the existing features worked properly. Some of the final improvements included: Fixing edge cases Improving database handling Adding corrupted JSON detection Adding invalid database format detection Adding save error handling Improving reset behavior Adding automatic folder creation Testing installation in clean environments A big part of software development is not only creating new features, but making sure other people can actually use what you built. Making KeyGlow feel complete ʕ•ᴥ•ʔ During the final hours of development, I focused on improving the overall experience. Some smaller additions made KeyGlow feel much more like a complete application: ASCII KeyGlow logo keyglow logo keyglow info keyglow joke Better CLI experience Improved documentation Installation demo Project screenshots From a local project to a real package ʕ•ᴥ•ʔ One of the biggest milestones was turning KeyGlow from a project running only on my machine into a real Python package. The project went from: “A tool that works only for me” to: pip install keyglow And I am glad I managed to release it, as I have never done such thing before. AI Usage ʕ•ᴥ•ʔ I need to admit, that I used AI for this project, however, biggest part of it was done fully by myself. I used AI to learn about Typer library commands, and tables from Richer library, I also used it a little bit to validate the process of monitoring the keys, all that to ensure the project is indeed safe to deploy. Final Thoughts ʕ•ᴥ•ʔ It is a small project built around a simple idea: showing people interesting statistics about something they use every single day - their keyboard. But building it was a great experience. The project went through the full process: Idea Development Testing Documentation Packaging Release That’s quite a long devlog, isn’t it ʕ•ᴥ•ʔ I really hope you will like it and review it positively 🤍", "repo": "https://github.com/aerissdev-dotcom/KeyGlow", "demo": "https://pypi.org/project/keyglow/0.1.3/"}]...
|
[{"post_id": 30637, "ts": "202 [{"post_id": 30637, "ts": "2026-07-18T11:27:35Z", "hours": 1.7125, "text": "KeyGlow is finally shipping 🤍 Hello everyone, I hope you are all doing great! After a lot of coding, debugging, testing and polishing, KeyGlow is finally ready to be released. This project started as a simple idea: create a fun keyboard statistics tool that allows people to understand their keyboard usage without becoming a keylogger. The final development phase ʕ•ᴥ•ʔ The last stage of development was focused mostly on polishing the project and preparing everything for release. At this point, instead of adding more features, I decided to focus on reliability and making sure the existing features worked properly. Some of the final improvements included: Fixing edge cases Improving database handling Adding corrupted JSON detection Adding invalid database format detection Adding save error handling Improving reset behavior Adding automatic folder creation Testing installation in clean environments A big part of software development is not only creating new features, but making sure other people can actually use what you built. Making KeyGlow feel complete ʕ•ᴥ•ʔ During the final hours of development, I focused on improving the overall experience. Some smaller additions made KeyGlow feel much more like a complete application: ASCII KeyGlow logo keyglow logo keyglow info keyglow joke Better CLI experience Improved documentation Installation demo Project screenshots From a local project to a real package ʕ•ᴥ•ʔ One of the biggest milestones was turning KeyGlow from a project running only on my machine into a real Python package. The project went from: “A tool that works only for me” to: pip install keyglow And I am glad I managed to release it, as I have never done such thing before. AI Usage ʕ•ᴥ•ʔ I need to admit, that I used AI for this project, however, biggest part of it was done fully by myself. I used AI to learn about Typer library commands, and tables from Richer library, I also used it a little bit to validate the process of monitoring the keys, all that to ensure the project is indeed safe to deploy. Final Thoughts ʕ•ᴥ•ʔ It is a small project built around a simple idea: showing people interesting statistics about something they use every single day - their keyboard. But building it was a great experience. The project went through the full process: Idea Development Testing Documentation Packaging Release That’s quite a long devlog, isn’t it ʕ•ᴥ•ʔ I really hope you will like it and review it positively 🤍"}, {"post_id": 30293, "ts": "2026-07-17T19:02:27Z", "hours": 2.7906, "text": "Hello everyone 🤍 I hope you’re all doing great! Just a little development update on KeyGlow. Over the past few days I’ve been working on polishing the project instead of constantly adding new features. My goal from the very beginning has been to make KeyGlow feel like a real, reliable CLI tool rather than just another weekend prototype. For anyone who hasn’t seen it before, KeyGlow is a privacy-first keyboard usage analyzer. It generates keyboard usage statistics and a simple heatmap while never storing what you type. No typed text, no passwords, no key sequences - only anonymous key frequency counters stored locally on your own machine. Since the last update, quite a lot has changed: • I added real-time keyboard monitoring. • I implemented automatic saving while monitoring. • Added keyboard and mouse inactivity detection with configurable timeout. • Added the ability to disable automatic shutdown when desired. • Improved local storage by moving everything into a dedicated ~/KeyGlow/ directory. • Added JSON, CSV and TXT export support. • Added an information command displaying database size, stored keys, total presses and other useful details. • Added confirmation before deleting collected data, along with a –force / -f option for power users. • Improved error handling for corrupted databases and invalid data. • Added automatic creation of missing storage/export directories. • Cleaned up dozens of small edge cases and improved the overall stability of the application. • Wrote a complete README and documentation. • Added a completely unnecessary but absolutely essential keyglow joke command because every CLI deserves at least a little personality. At this point, most of my work isn’t about adding new features anymore (though it is tempting not gonna lie)-it’s about making sure the tool behaves correctly in every situation. That means testing fresh installations, handling invalid input gracefully, making the CLI feel polished, and improving the overall user experience. The project is now very close to its first public release. Before I publish it, there are only a few things left to finish: Debug a few remaining pieces of code. Update the KeyGlow ASCII logo. Package everything properly. Publish the project on PyPI. Once that’s done, anyone will be able to install it with a simple: “pip install keyglow” I’m genuinely excited to finally share this project. It started as a small idea and slowly grew into something that feels like a proper open-source tool. There’s still plenty of room for future improvements, but I’m really happy with where it is today. Thank you to everyone following the development so far. I can’t wait to release KeyGlow and hear what people think! 🤍"}, {"post_id": 29089, "ts": "2026-07-15T19:05:12Z", "hours": 1.0956, "text": "Devlog #3 Hello there again, what’s up? I managed to add KeyGlow inactivity detector 🤍 It basically detects whether you move your mouse or write anything with a keyboard, and if you don’t it disables keys monitoring. I added custom timeout in minutes. How cool is that ʕ•ᴥ•ʔ"}, {"post_id": 29023, "ts": "2026-07-15T17:51:05Z", "hours": 2.4789, "text": "Devlog #2 What’s up, I hope you all are doing great 🤍 Still working on my KeyGlow ʕ•ᴥ•ʔ I want to perfect it as much as I can. Recently, I added a privacy model, and inactivity detector which I will talk about in the next devlog! Here are some difficulties that I encountered: Mouse inactivity tracking, that involved checking movement, scroll and clicks. Explaining clearly to everyone what is my “privacy model” I did those things with ease: Writing new commands overall, I already learned how to do it fast and efficiently. Stay tuned for more if you like CLI Tools like this one ʕ•ᴥ•ʔ"}, {"post_id": 28433, "ts": "2026-07-14T17:51:44Z", "hours": 2.8547, "text": "Subtle Foreshadowing 👀🤍 I just finished the basics of my CLI Tool. Proud to say I did it mostly by myself ʕ•ᴥ•ʔ This will probably be kind of epic after release, though I still need to work a lot. Things I menaged to do easily: Reading data from file, loading it into a “buffer” Coloring TUI Making tables and ASCII Art (just needed to search for docs) Things I struggled with so far: The core mechanic such as receiving data from keyboard Converting that data into something easy to work with and making it file-attachable, and also human readable. We all love CLI, riiiiight?"}]...
|
Title: KeyGlow CLI Tool by @Aeriss | Stardance
De Title: KeyGlow CLI Tool by @Aeriss | Stardance
Devlogs:
Subtle Foreshadowing 👀🤍 I just finished the basics of my CLI Tool. Proud to say I did it mostly by myself ʕ•ᴥ•ʔ This will probably be kind of epic after release, though I still need to work a lot. Things I menaged to do easily: Reading data from file, loading it into a “buffer” Coloring TUI Making tables and ASCII Art (just needed to search for docs) Things I struggled with so far: The core mechanic such as receiving data from keyboard Converting that data into something easy to work with and making it file-attachable, and also human readable. We all love CLI, riiiiight?
Devlog #2 What’s up, I hope you all are doing great 🤍 Still working on my KeyGlow ʕ•ᴥ•ʔ I want to perfect it as much as I can. Recently, I added a privacy model, and inactivity detector which I will talk about in the next devlog! Here are some difficulties that I encountered: Mouse inactivity tracking, that involved checking movement, scroll and clicks. Explaining clearly to everyone what is my “privacy model” I did those things with ease: Writing new commands overall, I already learned how to do it fast and efficiently. Stay tuned for more if you like CLI Tools like this one ʕ•ᴥ•ʔ
Devlog #3 Hello there again, what’s up? I managed to add KeyGlow inactivity detector 🤍 It basically detects whether you move your mouse or write anything with a keyboard, and if you don’t it disables keys monitoring. I added custom timeout in minutes. How cool is that ʕ•ᴥ•ʔ
Hello everyone 🤍 I hope you’re all doing great! Just a little development update on KeyGlow. Over the past few days I’ve been working on polishing the project instead of constantly adding new features. My goal from the very beginning has been to make KeyGlow feel like a real, reliable CLI tool rather than just another weekend prototype. For anyone who hasn’t seen it before, KeyGlow is a privacy-first keyboard usage analyzer. It generates keyboard usage statistics and a simple heatmap while never storing what you type. No typed text, no passwords, no key sequences - only anonymous key frequency counters stored locally on your own machine. Since the last update, quite a lot has changed: • I added real-time keyboard monitoring. • I implemented automatic saving while monitoring. • Added keyboard and mouse inactivity detection with configurable timeout. • Added the ability to disable automatic shutdown when desired. • Improved local storage by moving everything into a dedicated ~/KeyGlow/ directory. • Added JSON, CSV and TXT export support. • Added an information command displaying database size, stored keys, total presses and other useful details. • Added confirmation before deleting collected data, along with a –force / -f option for power users. • Improved error handling for corrupted databases and invalid data. • Added automatic creation of missing storage/export directories. • Cleaned up dozens of small edge cases and improved the overall stability of the application. • Wrote a complete README and documentation. • Added a completely unnecessary but absolutely essential keyglow joke command because every CLI deserves at least a little personality. At this point, most of my work isn’t about adding new features anymore (though it is tempting not gonna lie)-it’s about making sure the tool behaves correctly in every situation. That means testing fresh installations, handling invalid input gracefully, making the CLI feel polished, and improving the overall user experience. The project is now very close to its first public release. Before I publish it, there are only a few things left to finish: Debug a few remaining pieces of code. Update the KeyGlow ASCII logo. Package everything properly. Publish the project on PyPI. Once that’s done, anyone will be able to install it with a simple: “pip install keyglow” I’m genuinely excited to finally share this project. It started as a small idea and slowly grew into something that feels like a proper open-source tool. There’s still plenty of room for future improvements, but I’m really happy with where it is today. Thank you to everyone following the development so far. I can’t wait to release KeyGlow and hear what people think! 🤍
KeyGlow is finally shipping 🤍 Hello everyone, I hope you are all doing great! After a lot of coding, debugging, testing and polishing, KeyGlow is finally ready to be released. This project started as a simple idea: create a fun keyboard statistics tool that allows people to understand their keyboard usage without becoming a keylogger. The final development phase ʕ•ᴥ•ʔ The last stage of development was focused mostly on polishing the project and preparing everything for release. At this point, instead of adding more features, I decided to focus on reliability and making sure the existing features worked properly. Some of the final improvements included: Fixing edge cases Improving database handling Adding corrupted JSON detection Adding invalid database format detection Adding save error handling Improving reset behavior Adding automatic folder creation Testing installation in clean environments A big part of software development is not only creating new features, but making sure other people can actually use what you built. Making KeyGlow feel complete ʕ•ᴥ•ʔ During the final hours of development, I focused on improving the overall experience. Some smaller additions made KeyGlow feel much more like a complete application: ASCII KeyGlow logo keyglow logo keyglow info keyglow joke Better CLI experience Improved documentation Installation demo Project screenshots From a local project to a real package ʕ•ᴥ•ʔ One of the biggest milestones was turning KeyGlow from a project running only on my machine into a real Python package. The project went from: “A tool that works only for me” to: pip install keyglow And I am glad I managed to release it, as I have never done such thing before. AI Usage ʕ•ᴥ•ʔ I need to admit, that I used AI for this project, however, biggest part of it was done fully by myself. I used AI to learn about Typer library commands, and tables from Richer library, I also used it a little bit to validate the process of monitoring the keys, all that to ensure the project is indeed safe to deploy. Final Thoughts ʕ•ᴥ•ʔ It is a small project built around a simple idea: showing people interesting statistics about something they use every single day - their keyboard. But building it was a great experience. The project went through the full process: Idea Development Testing Documentation Packaging Release That’s quite a long devlog, isn’t it ʕ•ᴥ•ʔ I really hope you will like it and review it positively 🤍
Ships:
KeyGlow is finally shipped! (The text there will be the same as the one in latest DevLog) Hello everyone, I hope you are all doing great! After a lot of coding, debugging, testing and polishing, KeyGlow is finally ready to be released. This project started as a simple idea: create a fun keyboard statistics tool that allows people to understand their keyboard usage without becoming a keylogger. The final development phase ʕ•ᴥ•ʔ The last stage of development was focused mostly on polishing the project and preparing everything for release. At this point, instead of adding more features, I decided to focus on reliability and making sure the existing features worked properly. Some of the final improvements included: Fixing edge cases Improving database handling Adding corrupted JSON detection Adding invalid database format detection Adding save error handling Improving reset behavior Adding automatic folder creation Testing installation in clean environments A big part of software development is not only creating new features, but making sure other people can actually use what you built. Making KeyGlow feel complete ʕ•ᴥ•ʔ During the final hours of development, I focused on improving the overall experience. Some smaller additions made KeyGlow feel much more like a complete application: ASCII KeyGlow logo keyglow logo keyglow info keyglow joke Better CLI experience Improved documentation Installation demo Project screenshots From a local project to a real package ʕ•ᴥ•ʔ One of the biggest milestones was turning KeyGlow from a project running only on my machine into a real Python package. The project went from: “A tool that works only for me” to: pip install keyglow And I am glad I managed to release it, as I have never done such thing before. AI Usage ʕ•ᴥ•ʔ I need to admit, that I used AI for this project, however, biggest part of it was done fully by myself. I used AI to learn about Typer library commands, and tables from Richer library, I also used it a little bit to validate the process of monitoring the keys, all that to ensure the project is indeed safe to deploy. Final Thoughts ʕ•ᴥ•ʔ It is a small project built around a simple idea: showing people interesting statistics about something they use every single day - their keyboard. But building it was a great experience. The project went through the full process: Idea Development Testing Documentation Packaging Release That’s quite a long devlog, isn’t it ʕ•ᴥ•ʔ I really hope you will like it and review it positively 🤍...
|
1793688821.3595083
|
1793775221.3595083
|
|
10493
|
Rojo Mojo (Encryptor-Decryptor) by @bvaan | Starda Rojo Mojo (Encryptor-Decryptor) by @bvaan | Stardance...
|
bvaan
|
1
|
8.0
|
68
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-08T16:49:01Z", "hours": 8.0, "multiplier": 8.58, "payout": 68, "blessing": "neutral", "text": "i made encryption and decryption tool using unique character generation or custom characters. Styling is a bit wonky because I am not a UI person. I learnt difference between randomness and true randomness in javascript.", "repo": "https://github.com/Bivaan10/ROJO-MOJO", "demo": "https://bivaan10.github.io/ROJO-MOJO/"}]...
|
[{"post_id": 4965, "ts": "2026 [{"post_id": 4965, "ts": "2026-06-08T16:46:17Z", "hours": 2.8408, "text": "fixed generation of 16 character key, added toast completed initial verson."}, {"post_id": 4770, "ts": "2026-06-08T08:10:32Z", "hours": 1.8758, "text": "Some of my CSS layout was rewritten and tidied up. I made the UI much more structured and clear by fixing the overlapping boxes and messy spacing from my previous build. I’m almost finished with the CSS and will be working on JavaScript later."}, {"post_id": 4341, "ts": "2026-06-07T16:58:22Z", "hours": 3.3611, "text": "I am currently building a cyberpunk style web tool that will let users to safely encrypt and decrypt secret messages within the browser. It is still a work in progress and not even half completed yet, but I am working on implementing strong security codes like SHA-256 to lock text with a password and create unique digital footprint. So far, I have only set up the basic layout of the interface to give it a hacker terminal look . I still have a lot more styles to add , I am eager to continue developing it and see the outcome."}]...
|
Title: Rojo Mojo (Encryptor-Decryptor) by @bvaan | Title: Rojo Mojo (Encryptor-Decryptor) by @bvaan | Stardance
Devlogs:
I am currently building a cyberpunk style web tool that will let users to safely encrypt and decrypt secret messages within the browser. It is still a work in progress and not even half completed yet, but I am working on implementing strong security codes like SHA-256 to lock text with a password and create unique digital footprint. So far, I have only set up the basic layout of the interface to give it a hacker terminal look . I still have a lot more styles to add , I am eager to continue developing it and see the outcome.
Some of my CSS layout was rewritten and tidied up. I made the UI much more structured and clear by fixing the overlapping boxes and messy spacing from my previous build. I’m almost finished with the CSS and will be working on JavaScript later.
fixed generation of 16 character key, added toast completed initial verson.
Ships:
i made encryption and decryption tool using unique character generation or custom characters. Styling is a bit wonky because I am not a UI person. I learnt difference between randomness and true randomness in javascript....
|
1793688822.538061
|
1793775222.538061
|
|
16734
|
BREGG.OS Flight Sim by @Bregg32 | Stardance
|
Bregg32
|
1
|
2.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T15:21:22Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a base flight simulator that is not fully done but will be done soon", "repo": "https://github.com/arasbregg-oss/Flightsim", "demo": "https://glowing-disco-77jqjrqgp793p49-8901.app.github.dev/"}]...
|
[{"post_id": 14770, "ts": "202 [{"post_id": 14770, "ts": "2026-06-24T00:06:20Z", "hours": 0.4014, "text": "The BREGG.OS Flight Sim this can only be tested when my codespace is running"}, {"post_id": 8680, "ts": "2026-06-14T12:48:41Z", "hours": 0.3081, "text": "Flight sim"}, {"post_id": 8206, "ts": "2026-06-13T17:29:04Z", "hours": 1.3972, "text": "I am working on my flight sim called the BREGG.OS Flight Sim"}]...
|
Title: BREGG.OS Flight Sim by @Bregg32 | Stardance Title: BREGG.OS Flight Sim by @Bregg32 | Stardance
Devlogs:
I am working on my flight sim called the BREGG.OS Flight Sim
Flight sim
The BREGG.OS Flight Sim this can only be tested when my codespace is running
Ships:
I made a base flight simulator that is not fully done but will be done soon...
|
1793688824.5103996
|
1793775224.5103996
|
|
12084
|
fraktalized by @swedishsplidney | Stardance
|
swedishsplidney
|
1
|
70.0
|
1361
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T06:36:27Z", "hours": 70.0, "multiplier": 19.43, "payout": 1361, "blessing": "neutral", "text": "fraktalized ship: fraktalized is an an open-source, cross-platform, ultra smooth real time fractal explorer built using a hybrid architecture of Qt6 (QML/C++) and openGL (GLSL 330 core / 4.3 compute shaders). fraktalized currently has 10 fractal sets: mandelbrot set: the classic fractal set julia set: cool swirly stuff, complete with adjustable constant coords burning ship set: cool pointy stuff newton set: kinda spidery looking buddhabrot: like the mandelbrot but galaxy looking anti-buddhabrot: reverse buddhabrot barnsley fern: looks very naturey mandelbulb: like the mandelbrot but 3d menger sponge: cube, but with infinite* surface ar a icebox: spiky box! there is both a set of 3 precompiled binaries on the github and a demo video: https://youtu.be/x9lH_pPzvbw", "repo": "https://github.com/swedishsplidney/fraktalized", "demo": "https://github.com/swedishsplidney/fraktalized/releases"}]...
|
[{"post_id": 20591, "ts": "202 [{"post_id": 20591, "ts": "2026-07-02T06:34:20Z", "hours": 0.7767, "text": "extra ui tweaks and readme updates added some images of 3d fractals to the readme, did some general ui tweaks, and some idiot proofing now its time to ship!!!"}, {"post_id": 20559, "ts": "2026-07-02T05:22:07Z", "hours": 4.9961, "text": "probably the final commit :o most of this was spent idiot proofing, going through all my code and making sure that everything works well and actually makes sense i also updated the tutorial to be a bit better a major amount of time was spent figuring out how to get windows to actually compile i swear windows is the bane of my entire existence its not reflected in the devlog hours, but i did also make a demo video to show off some of the features mystery link other than that, it was mostly ui and readme updates :)"}, {"post_id": 19733, "ts": "2026-07-01T03:52:28Z", "hours": 9.76, "text": "i set up a full tutorial system the hard part was doing the whole thing where it darkens everywhere except the thing the tutorial is yapping about… also, right now, the tutorial is really really easy to break, so i might have to implement some idiot proofing or something to be honest, adding the whole darkening thing was really simple, but actually getting it to work was really annoying for some reason. it essentially just gets the xy coord for each corner of the specified element, and then makes a dark block everywhere except inside those 4 corners. also, i made it so the tutorial saves to the same json file as the preset manager, so that you only have to do the tutorial one time and it doesnt just get in your way every single time you open it. aside from that, most of this time was spent trying to figure out how to get it to automatically build on github when i push a release. i did this successfully for my other project, but the problem so far has been linking the qml for the binaries on the different platforms. specifically, windows just really really doesnt want to behave, its starting to feel like getting a discord mod to eat anything other than gamersupps and pizza rolls overall, maybe getting close to shipping? it honestly just depends on how much more features and idiot proofing i want to add if this sounds interesting, check out (and star ) the repo here"}, {"post_id": 14222, "ts": "2026-06-23T07:20:06Z", "hours": 8.5239, "text": "3d wasd controls (wowie zowie) the math for this was super hard, especially because i want it to work alongside with the other classic orbit style controls lol i ended up adding a toggle in the sidebar, which felt like the cleanest way to do it, but did mean doing more qml also, i pretty much had to guess when setting up all my vectors so i spent like 15 presidential terms messing around with positives and negatives and 1.0f / 0.0f everywhere until doing stuff in the right directions actually did the right thing, which was hard also had to implement auto horizon correction so things d also added some live 3d settings, which took a while, but now theres a live slider for both the mandelbulb power (exponent), and the brightness (which was hard) and, theres now a math section in the readme, which i spent a lot of time pondering while making, but if you’re at all, check out the “mathy information” section of the readme https://github.com/swedishsplidney/fraktalized (also star the repo ) exploring the mandelbulb in wasd mode genuinely feels like exploring an alien planet in a spaceship, lowk super fun"}, {"post_id": 11771, "ts": "2026-06-19T04:47:05Z", "hours": 8.7492, "text": "3d is finally working!!!!! i have been having an epic samurai battle against opengl and 3d fractal math for what feels like forever, but it finally works, and I have a working 3d mandelbulb explorer!!! i have actually been working on getting 3d working for the past multiple devlogs, it just took me sooo incredibly long to actually figure it out that i never really mentioned it. the longest step was figuring out the controls. when i first started working on the 3d mode, then it was literally just a cube, and i had to figure out a good way to be able to rotate it the hard part wasn’t even trying to figure out how to do the math to rotate the vertices, the hard part was trying to figure out how the thing should actually rotate what i figured out how to do is having an orbit style camera, where dragging side to side rotates the model along its own local yaw, and then dragging up and down changes the camera’s global pitch. this way the model’s roll never changes (because that makes the model look tilted or skewed). i had to spend an embarassingly long amount of time trying to figure the logic of an orbital camera… the camera is also slerped (like lerping but 3d) so it feels smooth color mappping on the 3d was actually surprisingly easy, i just did it in a very similar way to the 2d escape time ones, except with an extra dimension (its not as hard as it sounds) one other major change was when i added the ability to add and remove gradient stops. this way, instead of always having 4 gradient stops, you can have anywhere from 2 to 16 stops, for more customizeability. also, the readme is updated, go check it out! (and star the repo ) https://github.com/swedishsplidney/fraktalized below: video demonstrating the 3d and camera system"}, {"post_id": 10469, "ts": "2026-06-17T06:25:16Z", "hours": 7.9178, "text": "added iterative function system fractals basically, iterative function fractals are fractals that start at a set point, then repeatedly apply the same affine transformations (scaling, rotating, shifting), making an infinitely repeating, self-same fractal. as far as actually getting this setup and working, i had to make a whole new compute shader that involves a lot of math and for loops to iterate forever getting ifs fractals to render was a particular challenge, and i almost exploded my gpu and accidentally caused a vram cache overflow causing my display output to break. in the end, it turns out the trick was to not send 4,000,000 worker threads to the gpu all at once, and to do them 3-4 at a time also finally got working on the whole 3d system, which will likely take forever, and completely does not work right now, but hopefully i will have figured out how in the world to get working 3d stuff by the next devlog 🙏 check out the github! -> https://github.com/swedishsplidney/fraktalized image: barnsley fern, rendered in 4k"}, {"post_id": 9130, "ts": "2026-06-15T08:45:47Z", "hours": 6.9228, "text": "added support for trajectory based fractals most people know the normal fractals (the ones ive covered so far), such as the mandelbrot and julia sets, that test wether or not a point escapes and maps how long it takes to escape trajectory fractals look really cool, and the difference is that they map the trajectory that 𝑧 takes on its way out, while incrementing a counter for every pixel it steps on. getting this to work was a lot of work, and required to write a whole new shader file from scratch, except instead of a .frag/.vert combo, it was a compute shader (.glsl). instead of simply running a loop and writing color data to each independent pixel like with the escape-time fractals do, the trajectory shader has to pick a random (x, y) starting coord, and then track its orbit across the complex plane, writing data to random pixels as it goes. this required me to use atomics, because if 2 orbits cross, instead of one overwriting each other, you have to use imageAtomicAdd() to make sure that the brightness stacks up. one other issue was that at first it was super grainy, which was fixed by assigning each gpu thread 50 random sampled to increase detail substantially. i also nearly exploded my gpu because i accidentally had the render system run 50+ compute sequences at the same time, so i now have each compute wait for the one before it to finish in other happenings, there is now a preset feature that writes your current color setup set, zoom, center, etc. to a JSON file to be loaded later also added the newton set, but its a less interesting escape-time fractal, so not covered in as much detail image: buddhabrot set, rendered at 4k"}, {"post_id": 7949, "ts": "2026-06-13T08:09:58Z", "hours": 5.9558, "text": "added the burning ship fractal, anti aliasing, and completely overhauled the color system to use a gradient input instead of one color. burning ship fractal: so the burning ship fractal is made when you take the mandelbrot equation, but you take the absolute value of the real and imaginary parts before squaring, basically destroying the symmetry: 𝑧ₙ₊₁ = (|𝑅𝑒(𝑍ₙ)| + 𝑖|𝐼𝑚(𝑍ₙ)|)² + 𝐶 this makes it look super duper cool (as seen in the image below) gradient-based color mapping so before, the color was just calculated using one color tint and boosting brightness quadratically near the edges. now, it takes in a gradient (calculated between 4 color inputs), and does the same color mapping but essentially moves what color it uses as the iterations increase. the hard part is figuring out how to get a good input system in qml with this, but I was able to do it using some colordialogues and a lot of trial and error. the new color input system is kinda like creating a gradient in photoshop or illustrator, with 4 little handles that you can drag across and change their colors. anti aliasing also added anti aliasing, or more specifically, ssaa (super sampling anti aliasing), with a selector to choose between off, 2x, and 3x so basically it renders the entire fractal at a higher resolution (2x or 3x) and then averages the color of every pixel block (2x2 or 3x3 respectively) and then displays that. this results in a much, much smoother image at the cost of much higher resource usage. while i was screwing around with dynamic resolutions, i also added a resolution slider to change the rendered resolution to anywhere from 25 to 150% of the window resolution. turning it up past 100% basically just gives the ssaa architecture more information to work with, making it even smoother my graphics card isnt very powerful and it basically stays pinned at 99% usage and 100% clock when i have anti aliasing turned on and the iterations above like 200. image: burning ship fractal, rendered at 4k with 150% resolution scale and 3x ssaa"}, {"post_id": 6713, "ts": "2026-06-11T07:42:55Z", "hours": 4.1331, "text": "now has a render to file feature basically you just import a custom resolution and it takes your current center and renders at that resolution with your current parameters. the hard part is that it uses a completely different framebuffer object from the regular viewport. while testing i did almost explode my gpu when pushing the resolution to almost 32k, which is kinda unreasonable, but this was a good opportunity to add a tiled render system basically it just splits up the image into 2000x2000 pixel sections and renders them, and then it does some math to position it the weird thing is that opengl is kinda goofy and likes to mirror stuff for some reason (literally no idea why) so theres some math to render it in reverse (which means that its actually correct) also increased the rendering to 64 bit, meaning it is now 536,870,912 times more accurate compared to the 32 bit one, and also means you can zoom in more than twice as far with better quality, but it is much more gpu intensive… this image is one of the cooler ones i rendered out at 4k, it kinda looks like colliding galaxies or something"}, {"post_id": 6139, "ts": "2026-06-10T10:13:47Z", "hours": 6.7264, "text": "is now fully interactive and honestly feels super great, especially compared to my last devlog where it was static and unchanging entirely added working real-time render parameters such as panning and zooming with mouse, and custom iteration setup and color setup on the sidebar. lots and lots and lots of quality of life features, such as: the reset button for if you get lost adjustable iteration slider min/max direct text enter for iterations hideable iteration min/max menu camera smoothing color clamping so it doesnt look deep fried also added the julia set (which is what is in the image) so basically, both the mandelbrot and julia sets are the same quadratic recurrence relation on the complex plane: 𝑧ₙ₊₁ = (𝑧ₙ)² + 𝑐 the main difference is that you start at the origin (𝑧₀ = 0) and change the constant 𝑐 for every single pixel on the screen based on its coordinates, but with the julia set the constant 𝑐 is the same everywhere, and the starting point 𝑧₀ changes based on the pixel’s coordinate, so you are testing how different starting points react to the same gravitational pull of 𝑐. the nice thing is that you can change the constant 𝑐 in the julia set, and completely change how the fractal looks, so i added that as an input field too looks really really cool lowk"}, {"post_id": 4855, "ts": "2026-06-08T12:00:00Z", "hours": 5.5808, "text": "working mandelbrot fractal rendering through opengl!!!!! using qt/qml and raw opengl shaders together was a mistake they really dont like working together and i had to spend 3 straight hours (its 5:42am at the time of this devlog) debugging an eternal tug of war between qt and opengl because qt kept overwriting what i wanted to happen the worst part is that an opengl fragment shader cant really debug to the log so if something is on fire over there i just kinda have to guess to fix it eventually i just gave up and switched to framebuffer objects, which i lowk should have done from the start the funnest part was actually writing the equations for the mandelbrot set lol (it also looks super pretty): so basically the Mandelbrot set is the set of all complex parameters 𝑐 ∈ ℂ for which the orbit of 𝑧₀ = 0 under quadratic recurrence remains bounded. in the shader, i just separate its multiplication into real and imaginary components: Re(𝑧ₙ₊₁) = 𝑥² + 𝑦² + Re(𝑐) Im(𝑧ₙ₊₁) = 2𝑥𝑦 + Im(𝑐) also infinity is impossible so the iterations are capped at 100 sorry if this was too nerdy or long lmao"}]...
|
Title: fraktalized by @swedishsplidney | Stardance Title: fraktalized by @swedishsplidney | Stardance
Devlogs:
working mandelbrot fractal rendering through opengl!!!!! using qt/qml and raw opengl shaders together was a mistake they really dont like working together and i had to spend 3 straight hours (its 5:42am at the time of this devlog) debugging an eternal tug of war between qt and opengl because qt kept overwriting what i wanted to happen the worst part is that an opengl fragment shader cant really debug to the log so if something is on fire over there i just kinda have to guess to fix it eventually i just gave up and switched to framebuffer objects, which i lowk should have done from the start the funnest part was actually writing the equations for the mandelbrot set lol (it also looks super pretty): so basically the Mandelbrot set is the set of all complex parameters 𝑐 ∈ ℂ for which the orbit of 𝑧₀ = 0 under quadratic recurrence remains bounded. in the shader, i just separate its multiplication into real and imaginary components: Re(𝑧ₙ₊₁) = 𝑥² + 𝑦² + Re(𝑐) Im(𝑧ₙ₊₁) = 2𝑥𝑦 + Im(𝑐) also infinity is impossible so the iterations are capped at 100 sorry if this was too nerdy or long lmao
is now fully interactive and honestly feels super great, especially compared to my last devlog where it was static and unchanging entirely added working real-time render parameters such as panning and zooming with mouse, and custom iteration setup and color setup on the sidebar. lots and lots and lots of quality of life features, such as: the reset button for if you get lost adjustable iteration slider min/max direct text enter for iterations hideable iteration min/max menu camera smoothing color clamping so it doesnt look deep fried also added the julia set (which is what is in the image) so basically, both the mandelbrot and julia sets are the same quadratic recurrence relation on the complex plane: 𝑧ₙ₊₁ = (𝑧ₙ)² + 𝑐 the main difference is that you start at the origin (𝑧₀ = 0) and change the constant 𝑐 for every single pixel on the screen based on its coordinates, but with the julia set the constant 𝑐 is the same everywhere, and the starting point 𝑧₀ changes based on the pixel’s coordinate, so you are testing how different starting points react to the same gravitational pull of 𝑐. the nice thing is that you can change the constant 𝑐 in the julia set, and completely change how the fractal looks, so i added that as an input field too looks really really cool lowk
now has a render to file feature basically you just import a custom resolution and it takes your current center and renders at that resolution with your current parameters. the hard part is that it uses a completely different framebuffer object from the regular viewport. while testing i did almost explode my gpu when pushing the resolution to almost 32k, which is kinda unreasonable, but this was a good opportunity to add a tiled render system basically it just splits up the image into 2000x2000 pixel sections and renders them, and then it does some math to position it the weird thing is that opengl is kinda goofy and likes to mirror stuff for some reason (literally no idea why) so theres some math to render it in reverse (which means that its actually correct) also increased the rendering to 64 bit, meaning it is now 536,870,912 times more accurate compared to the 32 bit one, and also means you can zoom in more than twice as far with better quality, but it is much more gpu intensive… this image is one of the cooler ones i rendered out at 4k, it kinda looks like colliding galaxies or something
added the burning ship fractal, anti aliasing, and completely overhauled the color system to use a gradient input instead of one color. burning ship fractal: so the burning ship fractal is made when you take the mandelbrot equation, but you take the absolute value of the real and imaginary parts before squaring, basically destroying the symmetry: 𝑧ₙ₊₁ = (|𝑅𝑒(𝑍ₙ)| + 𝑖|𝐼𝑚(𝑍ₙ)|)² + 𝐶 this makes it look super duper cool (as seen in the image below) gradient-based color mapping so before, the color was just calculated using one color tint and boosting brightness quadratically near the edges. now, it takes in a gradient (calculated between 4 color inputs), and does the same color mapping but essentially moves what color it uses as the iterations increase. the hard part is figuring out how to get a good input system in qml with this, but I was able to do it using some colordialogues and a lot of trial and error. the new color input system is kinda like creating a gradient in photoshop or illustrator, with 4 little handles that you can drag across and change their colors. anti aliasing also added anti aliasing, or more specifically, ssaa (super sampling anti aliasing), with a selector to choose between off, 2x, and 3x so basically it renders the entire fractal at a higher resolution (2x or 3x) and then averages the color of every pixel block (2x2 or 3x3 respectively) and then displays that. this results in a much, much smoother image at the cost of much higher resource usage. while i was screwing around with dynamic resolutions, i also added a resolution slider to change the rendered resolution to anywhere from 25 to 150% of the window resolution. turning it up past 100% basically just gives the ssaa architecture more information to work with, making it even smoother my graphics card isnt very powerful and it basically stays pinned at 99% usage and 100% clock when i have anti aliasing turned on and the iterations above like 200. image: burning ship fractal, rendered at 4k with 150% resolution scale and 3x ssaa
added support for trajectory based fractals most people know the normal fractals (the ones ive covered so far), such as the mandelbrot and julia sets, that test wether or not a point escapes and maps how long it takes to escape trajectory fractals look really cool, and the difference is that they map the trajectory that 𝑧 takes on its way out, while incrementing a counter for every pixel it steps on. getting this to work was a lot of work, and required to write a whole new shader file from scratch, except instead of a .frag/.vert combo, it was a compute shader (.glsl). instead of simply running a loop and writing color data to each independent pixel like with the escape-time fractals do, the trajectory shader has to pick a random (x, y) starting coord, and then track its orbit across the complex plane, writing data to random pixels as it goes. this required me to use atomics, because if 2 orbits cross, instead of one overwriting each other, you have to use imageAtomicAdd() to make sure that the brightness stacks up. one other issue was that at first it was super grainy, which was fixed by assigning each gpu thread 50 random sampled to increase detail substantially. i also nearly exploded my gpu because i accidentally had the render system run 50+ compute sequences at the same time, so i now have each compute wait for the one before it to finish in other happenings, there is now a preset feature that writes your current color setup set, zoom, center, etc. to a JSON file to be loaded later also added the newton set, but its a less interesting escape-time fractal, so not covered in as much detail image: buddhabrot set, rendered at 4k
added iterative function system fractals basically, iterative function fractals are fractals that start at a set point, then repeatedly apply the same affine transformations (scaling, rotating, shifting), making an infinitely repeating, self-same fractal. as far as actually getting this setup and working, i had to make a whole new compute shader that involves a lot of math and for loops to iterate forever getting ifs fractals to render was a particular challenge, and i almost exploded my gpu and accidentally caused a vram cache overflow causing my display output to break. in the end, it turns out the trick was to not send 4,000,000 worker threads to the gpu all at once, and to do them 3-4 at a time also finally got working on the whole 3d system, which will likely take forever, and completely does not work right now, but hopefully i will have figured out how in the world to get working 3d stuff by the next devlog 🙏 check out the github! -> https://github.com/swedishsplidney/fraktalized image: barnsley fern, rendered in 4k
3d is finally working!!!!! i have been having an epic samurai battle against opengl and 3d fractal math for what feels like forever, but it finally works, and I have a working 3d mandelbulb explorer!!! i have actually been working on getting 3d working for the past multiple devlogs, it just took me sooo incredibly long to actually figure it out that i never really mentioned it. the longest step was figuring out the controls. when i first started working on the 3d mode, then it was literally just a cube, and i had to figure out a good way to be able to rotate it the hard part wasn’t even trying to figure out how to do the math to rotate the vertices, the hard part was trying to figure out how the thing should actually rotate what i figured out how to do is having an orbit style camera, where dragging side to side rotates the model along its own local yaw, and then dragging up and down changes the camera’s global pitch. this way the model’s roll never changes (because that makes the model look tilted or skewed). i had to spend an embarassingly long amount of time trying to figure the logic of an orbital camera… the camera is also slerped (like lerping but 3d) so it feels smooth color mappping on the 3d was actually surprisingly easy, i just did it in a very similar way to the 2d escape time ones, except with an extra dimension (its not as hard as it sounds) one other major change was when i added the ability to add and remove gradient stops. this way, instead of always having 4 gradient stops, you can have anywhere from 2 to 16 stops, for more customizeability. also, the readme is updated, go check it out! (and star the repo ) https://github.com/swedishsplidney/fraktalized below: video demonstrating the 3d and camera system
3d wasd controls (wowie zowie) the math for this was super hard, especially because i want it to work alongside with the other classic orbit style controls lol i ended up adding a toggle in the sidebar, which felt like the cleanest way to do it, but did mean doing more qml also, i pretty much had to guess when setting up all my vectors so i spent like 15 presidential terms messing around with positives and negatives and 1.0f / 0.0f everywhere until doing stuff in the right directions actually did the right thing, which was hard also had to implement auto horizon correction so things d also added some live 3d settings, which took a while, but now theres a live slider for both the mandelbulb power (exponent), and the brightness (which was hard) and, theres now a math section in the readme, which i spent a lot of time pondering while making, but if you’re at all, check out the “mathy information” section of the readme https://github.com/swedishsplidney/fraktalized (also star the repo ) exploring the mandelbulb in wasd mode genuinely feels like exploring an alien planet in a spaceship, lowk super fun
i set up a full tutorial system the hard part was doing the whole thing where it darkens everywhere except the thing the tutorial is yapping about… also, right now, the tutorial is really really easy to break, so i might have to implement some idiot proofing or something to be honest, adding the whole darkening thing was really simple, but actually getting it to work was really annoying for some reason. it essentially just gets the xy coord for each corner of the specified element, and then makes a dark block everywhere except inside those 4 corners. also, i made it so the tutorial saves to the same json file as the preset manager, so that you only have to do the tutorial one time and it doesnt just get in your way every single time you open it. aside from that, most of this time was spent trying to figure out how to get it to automatically build on github when i push a release. i did this successfully for my other project, but the problem so far has been linking the qml for the binaries on the different platforms. specifically, windows just really really doesnt want to behave, its starting to feel like getting a discord mod to eat anything other than gamersupps and pizza rolls overall, maybe getting close to shipping? it honestly just depends on how much more features and idiot proofing i want to add if this sounds interesting, check out (and star ) the repo here
probably the final commit :o most of this was spent idiot proofing, going through all my code and making sure that everything works well and actually makes sense i also updated the tutorial to be a bit better a major amount of time was spent figuring out how to get windows to actually compile i swear windows is the bane of my entire existence its not reflected in the devlog hours, but i did also make a demo video to show off some of the features mystery link other than that, it was mostly ui and readme updates :)
extra ui tweaks and readme updates added some images of 3d fractals to the readme, did some general ui tweaks, and some idiot proofing now its time to ship!!!
Ships:
fraktalized ship: fraktalized is an an open-source, cross-platform, ultra smooth real time fractal explorer built using a hybrid architecture of Qt6 (QML/C++) and openGL (GLSL 330 core / 4.3 compute shaders). fraktalized currently has 10 fractal sets: mandelbrot set: the classic fractal set julia set: cool swirly stuff, complete with adjustable constant coords burning ship set: cool pointy stuff newton set: kinda spidery looking buddhabrot: like the mandelbrot but galaxy looking anti-buddhabrot: reverse buddhabrot barnsley fern: looks very naturey mandelbulb: like the mandelbrot but 3d menger sponge: cube, but with infinite* surface ar a icebox: spiky box! there is both a set of 3 precompiled binaries on the github and a demo video: https://youtu.be/x9lH_pPzvbw...
|
1793688832.9457364
|
1793775232.9457364
|
|
16473
|
Chill Record Player by @miles_s_aguilar | Stardanc Chill Record Player by @miles_s_aguilar | Stardance...
|
|
2
|
83.25
|
623
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T18:29:14Z", "hours": 30.0, "multiplier": 19.74, "payout": 466, "blessing": "neutral", "text": "I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive.", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}, {"ship_num": 2, "ts": "2026-06-21T07:05:21Z", "hours": 10.0, "multiplier": 16.59, "payout": 157, "blessing": "neutral", "text": "Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}]...
|
[{"post_id": 39588, "ts": "202 [{"post_id": 39588, "ts": "2026-08-02T17:44:39Z", "hours": 8.6531, "text": "Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…"}, {"post_id": 35320, "ts": "2026-07-26T17:17:22Z", "hours": 0.3014, "text": "CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something."}, {"post_id": 35076, "ts": "2026-07-26T08:21:15Z", "hours": 8.665, "text": "Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!"}, {"post_id": 33809, "ts": "2026-07-24T01:31:18Z", "hours": 7.1611, "text": "Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…"}, {"post_id": 27539, "ts": "2026-07-13T06:03:22Z", "hours": 1.7986, "text": "Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!"}, {"post_id": 26712, "ts": "2026-07-11T17:41:40Z", "hours": 10.0772, "text": "Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)"}, {"post_id": 26221, "ts": "2026-07-10T21:41:53Z", "hours": 6.5947, "text": "HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing."}, {"post_id": 24858, "ts": "2026-07-08T18:26:22Z", "hours": 0.8017, "text": "Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol"}, {"post_id": 24323, "ts": "2026-07-07T20:36:35Z", "hours": 12.4606, "text": "Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)"}, {"post_id": 23214, "ts": "2026-07-06T01:09:10Z", "hours": 14.3861, "text": "Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol."}, {"post_id": 22020, "ts": "2026-07-04T08:14:47Z", "hours": 2.7978, "text": "Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!"}, {"post_id": 12970, "ts": "2026-06-21T07:01:31Z", "hours": 0.865, "text": "Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…"}, {"post_id": 11517, "ts": "2026-06-18T20:15:15Z", "hours": 3.5244, "text": "Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting"}, {"post_id": 7310, "ts": "2026-06-12T05:42:23Z", "hours": 5.2231, "text": "A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)"}]...
|
Title: Chill Record Player by @miles_s_aguilar | S Title: Chill Record Player by @miles_s_aguilar | Stardance
Devlogs:
A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)
Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting
Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…
Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!
Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol.
Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)
Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol
HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing.
Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)
Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!
Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…
Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!
CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something.
Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…
Ships:
Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting
I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive....
|
1793688834.1423194
|
1793775234.1423194
|
|
52541
|
King of rock paper scissors by @busy_cheesy | Star King of rock paper scissors by @busy_cheesy | Stardance...
|
busy_cheesy
|
1
|
17.0
|
236
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T22:56:56Z", "hours": 17.0, "multiplier": 13.9, "payout": 236, "blessing": "neutral", "text": "This project is a real time rock, paper scissors ai predictor built entirely from scratch in python, displayed with a retro look made using pygame. Yes, this probably could’ve been a website to make it more accessible for more people, but I have absolutely no experience with js css or html, my experience is almost exclusively in python, so for the sake of goal of this project, which was to learn about how machine learning actually works, I made this project in python. To truly understand how these algorithms work, I decided to build one myself from scratch instead of relying on prebuilt machine learning libraries. This includes the full neural network with backpropagation and dynamic hidden layer scaling. I started with just one input given to the algorithm: the last 8 player choices. There were also just two parameters the bot had: number of games it receives (8) and the learning rate (how much it should learn from each move). I first experimented with different prediction strategies, starting from the simple highest likelyhood that the ai predicted, then opting for weighted choices (ex: if the ai predicted 40% for rock, 10% for paper and 50% for scissors, there would be a 40% chance it chose rock, 10% it chose paper, and 50% it chose scissors. this was decided randomly, with those weights). I finally settled on the epsilon-greedy strategy, which is like the highest likelyhood strategy except there is a 10% chance it takes a random choice to keep the bot a little unpredictable. I then added momentum, which accumulates the updates made to the model, which lets it notice patterns much quicker. Finally I added feature engineering, that adds more inputs that the bot could have made from the game histroy, but instead I give it to the bot. This gives more information to the bot such as shoft transitions, outcome history, and move frequencies, which it doesnt have to deduce on its own, which helps the bot find patterns quicker and predict better. The biggest challenge for me was tuning the bot by changing the parameters to find the best combination. I kept tweaking the values until it seemed like the bot was absolutely crushing me, but the next run it would be like I was playing against a toddler, an abysmal performace put on by the same values. To solve this problem, I ran a “championship” of bots, where i made 1400 combinations that then played 10 rounds of 100 games against the best bot I made so far. If they won more than 50%, they moved on. Around 140 bots made it to the second stage, a round-robin style tournament where each bot played the others in 20 rounds, each with 100 games. In total, there were about 13 000 000 games played. The winner was absolutely not who I was expecting: 2 game memory, 0.2 learning rate (pretty high) and 0.1 momentum. While the models with more game memomry and lower learning rate performed better in the q3 and q4, this proved that quick adaptation was much better suited for this project, and after testing that was certainly the case. I am most proud of how the interface turned out. In my humble opinion, the retro arcade aesthetic was perfectly executed (no glaze) with the scannlines, the font, and the pixel art. The prediction bars showing how the model predicted your next move are also a nice touch, giving a peek into the algorithm’s mind. When you play, expect some trash talk from the bot. From experience, it gets better and better the more you play. It varies from person to person, as some people are more predictable than others. That’s about the whole project! Thanks for having read the whole thing (if you did)!", "repo": "https://github.com/cream-of-wheat/RPS-King", "demo": "https://github.com/cream-of-wheat/RPS-King/releases/tag/v1.0.1"}]...
|
[{"post_id": 57736, "ts": "202 [{"post_id": 57736, "ts": "2026-08-30T00:13:49Z", "hours": 2.2383, "text": "This will probably be my last devlog before the ship. I have overhauled the manager to include feature engineering, which should help the model make connections much faster. It now receives choice shifts, match outcomes and overall move frequencies instead of just the history of past rounds. Changed the algorithm to predict the user’s next move instead of the counter. This makes it easier to understand how it was thinking that you would act. It still returns the counter to the player move tho. Also changed back from the probability weighted selection method to the epsilon greedy strategy (highest probability move is chosen 90% of the time and 10% is random). The only thing left is to tweak all the values until I am satisfied with the result and then off it goes into the sea."}, {"post_id": 56964, "ts": "2026-08-29T00:37:33Z", "hours": 2.35, "text": "Completely overhauled the UI and I think it looks much better now. The bot has taunts now, but performance is marginal at best right now. Taking all the different strategies I’ve tried to make the bot better and consolidating them to find the best possible parameters for it will be the next and probably final problem the project will face before shipping. Might try the round robbin style face offs with different parametered bots facing each other. Overall it’s been a very interesting journey learning about all these concepts in machine learning."}, {"post_id": 56328, "ts": "2026-08-28T01:49:44Z", "hours": 1.1167, "text": "So I did a lot of digging to find out how to improve the model and found some interesting stuff, but the main problem was that i was telling the model that the target move was a draw (immitating the player’s move) instead of beating them -_-. Also the idea of the round robbin to find the best bot parametersalso fell out because the models just trained to draw each other, but it took forever to execute so I don’t know if I should maybe retry it. There is still the very valid concern that the best bot would be the one that’s the best against other bots and not players so. On a more positive note, I introduced momentum. It keeps a running memory of the past updates, like a rolling bolder that builds speed. This enables it to recongnize patterns much quicker by stacking the past changes together. Caught onto patterns of length 1, 2, 3 and 4 in 1, 4, 12, and 17 moves, respectively. Below is a comparison (100 games of normal human rock paper scissors, not repeating a pattern, or atleast not conciously) vs random ouput (left) and the new bot (right). Glad to see it’s doing better. Will do more research on improving but polishing the game now is a better priority."}, {"post_id": 55336, "ts": "2026-08-27T02:27:30Z", "hours": 3.0167, "text": "So clearly what I said earlier about the algorithm was wrong. I tested it some more and it seems like sometimes it is just reading my mind and other attemps it’s like it’s not even trying. I have fiddled around with the number of games the algorithm sees and it’s learning rate, and every time I think I got it I ask my brother (unbiased third party) to test it where it promptly fails. So, I have devised a plan to find the ultimate round robbin with about 200 different algorithms playing a total of 30 000 000 games of rock paper scissors to find the true champion. Hopefully this will let me find the best learning rate and sample size for the ai, therefore improving it’s game. might take a little while to execute, so we’ll see when that happens. also if there’s anyone who knows more about machine learning, please don’t hesitate to tell me what i could try. Thanks!"}, {"post_id": 54086, "ts": "2026-08-24T21:26:27Z", "hours": 2.8667, "text": "Got the basic UI working with a simple animation, just need to transfer the text from the terminal to the app instead. Still have to work on making the algorithm better, as spamming the same move 20 times in a row, the AI was still picking the wrong options sometimes (maybe trying to predict when i would switch it up?). Cool to see everything coming together"}, {"post_id": 53348, "ts": "2026-08-23T20:48:03Z", "hours": 1.3167, "text": "Very scary progress, I am barely winning now. All it took was some minor adjustements to the layer sizes, learning rate, and number of games stored, as well as making the output a weighted random choice based on the probabilities given by the algorithm, and changing the input for the bot from just the human inputs to also include the bot inputs. I bet there’s even more to make it better which is even more scary. Very nice to see the progress showing though!"}, {"post_id": 52685, "ts": "2026-08-22T23:17:50Z", "hours": 2.0167, "text": "Second deblog working on the machine learning algorithm. I got the backpropagation working after some time, but clearly I have to tweak some things, like the learning rate, game history size, number of neurons per layer, etc. The issue probably also lies beyond that, so more research will have to be done. The algorithm easily gets outsmarted. So for now, humans still reign as rock paper scissors champions!"}, {"post_id": 52003, "ts": "2026-08-22T00:53:18Z", "hours": 2.0669, "text": "New project: a machine learning algorithm that plays rock paper scissors against you and learns in real time to predict your next move to beat you. Figured it was a pretty good way to get into machine learning as AI is on the rise, and coding my own will force me to truly understand how it works. I got the forward propagation working, and set everything up for back propagation for the next session. Can’t wait"}]...
|
Title: King of rock paper scissors by @busy_cheesy Title: King of rock paper scissors by @busy_cheesy | Stardance
Devlogs:
New project: a machine learning algorithm that plays rock paper scissors against you and learns in real time to predict your next move to beat you. Figured it was a pretty good way to get into machine learning as AI is on the rise, and coding my own will force me to truly understand how it works. I got the forward propagation working, and set everything up for back propagation for the next session. Can’t wait
Second deblog working on the machine learning algorithm. I got the backpropagation working after some time, but clearly I have to tweak some things, like the learning rate, game history size, number of neurons per layer, etc. The issue probably also lies beyond that, so more research will have to be done. The algorithm easily gets outsmarted. So for now, humans still reign as rock paper scissors champions!
Very scary progress, I am barely winning now. All it took was some minor adjustements to the layer sizes, learning rate, and number of games stored, as well as making the output a weighted random choice based on the probabilities given by the algorithm, and changing the input for the bot from just the human inputs to also include the bot inputs. I bet there’s even more to make it better which is even more scary. Very nice to see the progress showing though!
Got the basic UI working with a simple animation, just need to transfer the text from the terminal to the app instead. Still have to work on making the algorithm better, as spamming the same move 20 times in a row, the AI was still picking the wrong options sometimes (maybe trying to predict when i would switch it up?). Cool to see everything coming together
So clearly what I said earlier about the algorithm was wrong. I tested it some more and it seems like sometimes it is just reading my mind and other attemps it’s like it’s not even trying. I have fiddled around with the number of games the algorithm sees and it’s learning rate, and every time I think I got it I ask my brother (unbiased third party) to test it where it promptly fails. So, I have devised a plan to find the ultimate round robbin with about 200 different algorithms playing a total of 30 000 000 games of rock paper scissors to find the true champion. Hopefully this will let me find the best learning rate and sample size for the ai, therefore improving it’s game. might take a little while to execute, so we’ll see when that happens. also if there’s anyone who knows more about machine learning, please don’t hesitate to tell me what i could try. Thanks!
So I did a lot of digging to find out how to improve the model and found some interesting stuff, but the main problem was that i was telling the model that the target move was a draw (immitating the player’s move) instead of beating them -_-. Also the idea of the round robbin to find the best bot parametersalso fell out because the models just trained to draw each other, but it took forever to execute so I don’t know if I should maybe retry it. There is still the very valid concern that the best bot would be the one that’s the best against other bots and not players so. On a more positive note, I introduced momentum. It keeps a running memory of the past updates, like a rolling bolder that builds speed. This enables it to recongnize patterns much quicker by stacking the past changes together. Caught onto patterns of length 1, 2, 3 and 4 in 1, 4, 12, and 17 moves, respectively. Below is a comparison (100 games of normal human rock paper scissors, not repeating a pattern, or atleast not conciously) vs random ouput (left) and the new bot (right). Glad to see it’s doing better. Will do more research on improving but polishing the game now is a better priority.
Completely overhauled the UI and I think it looks much better now. The bot has taunts now, but performance is marginal at best right now. Taking all the different strategies I’ve tried to make the bot better and consolidating them to find the best possible parameters for it will be the next and probably final problem the project will face before shipping. Might try the round robbin style face offs with different parametered bots facing each other. Overall it’s been a very interesting journey learning about all these concepts in machine learning.
This will probably be my last devlog before the ship. I have overhauled the manager to include feature engineering, which should help the model make connections much faster. It now receives choice shifts, match outcomes and overall move frequencies instead of just the history of past rounds. Changed the algorithm to predict the user’s next move instead of the counter. This makes it easier to understand how it was thinking that you would act. It still returns the counter to the player move tho. Also changed back from the probability weighted selection method to the epsilon greedy strategy (highest probability move is chosen 90% of the time and 10% is random). The only thing left is to tweak all the values until I am satisfied with the result and then off it goes into the sea.
Ships:
This project is a real time rock, paper scissors ai predictor built entirely from scratch in python, displayed with a retro look made using pygame. Yes, this probably could’ve been a website to make it more accessible for more people, but I have absolutely no experience with js css or html, my experience is almost exclusively in python, so for the sake of goal of this project, which was to learn about how machine learning actually works, I made this project in python. To truly understand how these algorithms work, I decided to build one myself from scratch instead of relying on prebuilt machine learning libraries. This includes the full neural network with backpropagation and dynamic hidden layer scaling. I started with just one input given to the algorithm: the last 8 player choices. There were also just two parameters the bot had: number of games it receives (8) and the learning rate (how much it should learn from each move). I first experimented with different prediction strategies, starting from the simple highest likelyhood that the ai predicted, then opting for weighted choices (ex: if the ai predicted 40% for rock, 10% for paper and 50% for scissors, there would be a 40% chance it chose rock, 10% it chose paper, and 50% it chose scissors. this was decided randomly, with those weights). I finally settled on the epsilon-greedy strategy, which is like the highest likelyhood strategy except there is a 10% chance it takes a random choice to keep the bot a little unpredictable. I then added momentum, which accumulates the updates made to the model, which lets it notice patterns much quicker. Finally I added feature engineering, that adds more inputs that the bot could have made from the game histroy, but instead I give it to the bot. This gives more information to the bot such as shoft transitions, outcome history, and move frequencies, which it doesnt have to deduce on its own, which helps the bot find patterns quicker and predict better. The biggest challenge for me was tuning the bot by changing the parameters to find the best combination. I kept tweaking the values until it seemed like the bot was absolutely crushing me, but the next run it would be like I was playing against a toddler, an abysmal performace put on by the same values. To solve this problem, I ran a “championship” of bots, where i made 1400 combinations that then played 10 rounds of 100 games against the best bot I made so far. If they won more than 50%, they moved on. Around 140 bots made it to the second stage, a round-robin style tournament where each bot played the others in 20 rounds, each with 100 games. In total, there were about 13 000 000 games played. The winner was absolutely not who I was expecting: 2 game memory, 0.2 learning rate (pretty high) and 0.1 momentum. While the models with more game memomry and lower learning rate performed better in the q3 and q4, this proved that quick adaptation was much better suited for this project, and after testing that was certainly the case. I am most proud of how the interface turned out. In my humble opinion, the retro arcade aesthetic was perfectly executed (no glaze) with the scannlines, the font, and the pixel art. The prediction bars showing how the model predicted your next move are also a nice touch, giving a peek into the algorithm’s mind. When you play, expect some trash talk from the bot. From experience, it gets better and better the more you play. It varies from person to person, as some people are more predictable than others. That’s about the whole project! Thanks for having read the whole thing (if you did)!...
|
1793688835.3827817
|
1793775235.3827817
|
|
30393
|
StudyOS by @zhal | Stardance
|
zhal
|
1
|
24.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T17:29:04Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built StudyOS, an AI-powered student dashboard that connects with Google Calendar to display upcoming events and generate personalized daily briefings. Instead of checking multiple apps, students get a single dashboard with their schedule, upcoming deadlines, and AI-generated advice for the day. (AI is still in beta) What was challenging? The biggest challenge was integrating multiple technologies together. Setting up Google OAuth, retrieving events from every calendar, deploying the website, and running a local AI model with Ollama all required debugging and learning new tools. I also had to figure out how to make the AI generate useful daily briefings instead of generic responses. What are you proud of? I’m most proud that the project actually works end-to-end. Users can sign in with Google, view all of their upcoming calendar events, and receive an AI-generated morning briefing based on their real schedule. What should people know so they can test it? The live demo is available here: https://study-website-88jo-4xbo1kols-zhal8403s-projects.vercel.app/ To fully test the project: Sign in with a Google account. Allow Calendar permissions. Make sure your Google Calendar has a few upcoming events. The dashboard will display your upcoming events and generate a personalized daily briefing based on your schedule. Note: The AI runs locally using Ollama, so the hosted demo currently uses a placeholder briefing. Running the project locally with Ollama enabled provides the full AI experience.", "repo": "https://github.com/zhal8403/Study-Website", "demo": "https://study-website-941c.vercel.app/"}]...
|
[{"post_id": 28392, "ts": "202 [{"post_id": 28392, "ts": "2026-07-14T16:58:52Z", "hours": 1.3714, "text": "Dev Log #6 – Local AI Integration with Ollama Overview Today I addeed a completely local AI model using Ollama . I researched local large language models and decided to integrate the Llama 3.2 3B model through Ollama. What I Worked On Installed Ollama and downloaded the llama3.2:3b model. Fixed the issue where PowerShell could not recognize the ollama command by updating my system PATH . Learned that Ollama automatically starts its own server, so running ollama serve again caused a port conflict. Created a Node.js backend using Express and CORS . Connected the backend to Ollama’s local API. Updated the React frontend to send AI requests to my local backend instead of OpenRouter. Removed the dependency on paid AI APIs. Challenges One of the biggest challenges was getting the backend running correctly. I accidentally tried to run server.js before creating the file, which caused a MODULE_NOT_FOUND error. After creating the server and installing the required packages, I was able to start it successfully. Another challenge was that the AI initially hallucinated events like holidays and birthdays that weren’t actually on my calendar. To fix this, I rewrote the prompt to clearly instruct the model to only use the calendar events provided and never invent additional information. Improvements I redesigned the AI briefing prompt so it now: Uses only events from the next 7 days . Creates a structured daily briefing. Highlights upcoming due dates, tests, meetings, and deadlines. Suggests what to focus on for the day. Ends with a short motivational message. Avoids generating fake events. Result The AI summary feature now runs entirely on my own computer with: No API keys No usage limits Faster response times Better privacy because calendar data never leaves my computer. The morning briefing is much more useful and feels like a real student assistant instead of a generic chatbot."}, {"post_id": 25646, "ts": "2026-07-10T01:49:24Z", "hours": 3.4958, "text": "Devlog #5 — Calendar event control complete I focused on finishing the calendar management system for StudyOS. My goal was to make it possible to fully manage Google Calendar events without leaving the app. Building the Event Modal The first major feature I completed was the New Event Modal . Users can now enter: Event title Description Location Start date and time End date and time I originally built the modal using a standard HTML form, but I ran into issues where React would disconnect the form before it could submit. Instead of continuing to fight that problem, I redesigned the modal to use React state and button click handlers. This made creating events much more reliable. Editing and Deleting Events After creating events worked, I added the ability to edit them. Clicking an event now opens the same modal with all of the event information already filled in. Users can: Update event information Delete the event Cancel without making changes This required connecting the app to the Google Calendar Update and Delete API endpoints and refreshing the calendar after every change so the UI always stays up to date. Multiple Calendar Support One feature I really wanted was support for multiple calendars. Instead of always saving events in the primary calendar, the app now retrieves every calendar connected to the user’s Google account. A dropdown menu allows users to choose exactly where a new event should be saved. Bug Fixes Along the way I fixed several issues: Fixed React form submission problems by replacing the form with state-based inputs. Fixed the event modal not updating correctly when switching between events. Fixed the calendar not refreshing after creating, editing, or deleting events. Fixed event selection in the Today , Week , and Month views. Fixed creating events in calendars other than the primary calendar. Current Features The calendar now supports: Today , Week , and Month views Searching events Creating new events Editing existing events Deleting events Selecting which Google Calendar an event belongs to Automatic refresh after every change Next Steps Add recurring event support Add event color customization Add reminders and notifications Improve the calendar interface Add drag-and-drop scheduling I’m really happy with how this update turned out because the calendar has gone from being a read-only viewer to a fully functional event manager."}, {"post_id": 25103, "ts": "2026-07-09T02:57:29Z", "hours": 7.4456, "text": "Devlog #4 – Gmail, Google Classroom, and Calendar Improvements What I Worked On I focused on connecting more Google services to StudyOS and improving how calendar data is displayed. Google Classroom I created a new Classroom page that automatically loads my Google Classroom courses and displays assignments from each class. Features Added Connected to the Google Classroom API. Loaded all enrolled courses. Retrieved coursework from every class. Combined assignments into one list. Sorted assignments by due date. Displayed the class name with each assignment. Problems Solved Fixed OAuth authentication issues. Added the required Google Classroom scopes. Debugged 401 Unauthorized and 403 Permission Denied errors. Learned that teachers can restrict API access to coursework, causing some assignments to be unavailable. Gmail I continued improving Gmail integration. Improvements Better loading of Gmail messages. More reliable Google authentication. Cleaner organization for displaying emails. Google Calendar The calendar received several major improvements. Features Added Combined events from every calendar instead of only the primary calendar. Added search functionality. Added Today, Week, and Month views. Added Previous, Next, and Today navigation buttons. Added support for changing weeks and months without reloading. Sorted all events by date. Bug Fixes Fixed missing events caused by incorrect API parameters. Fixed events not appearing from shared calendars. Fixed date filtering logic. Corrected React state issues with currentDate . Fixed navigation bugs while switching between calendar views. Next Steps Create and edit calendar events directly from StudyOS. Add assignment completion tracking. Display Gmail labels and unread counts. Improve the calendar UI with drag-and-drop support. Connect Google Drive files to assignments."}, {"post_id": 22805, "ts": "2026-07-05T11:55:48Z", "hours": 9.0164, "text": "Devlog #3 — Making the Calendar Page and Dashboard This week, I worked on two of the biggest parts of StudyOS so far: the Calendar page and the Dashboard . Calendar Page I started turning the Calendar page into something more useful than a simple event list. I added different views for Today , Week , and Month , making it easier to see upcoming events in different ways. I also improved how events are displayed by adding: Expandable event descriptions A cleaner event layout A structure that’s easier to build on with more features later These changes make the calendar feel much closer to a real productivity app. Dashboard I also redesigned the Dashboard to work more like a student command center. One of the biggest improvements was turning the upcoming events section into a scrollable card . This keeps the dashboard clean even when there are lots of events and prevents long lists from stretching the page. This new layout also leaves room for future dashboard widgets, such as: AI daily briefing Assignment priority Recent activity What’s Next? Next, I plan to continue improving the Calendar page by adding: Creating events Editing events Deleting events After that, I’ll begin building more dashboard widgets to make StudyOS feel like a true all-in-one student workspace."}, {"post_id": 21852, "ts": "2026-07-04T00:14:51Z", "hours": 2.0331, "text": "Devlog #2 – Switching to React & Adding Google Authentication Today I upgraded StudyOS from a basic HTML/CSS/JavaScript project into a React (Vite) application, and then added Google Sign-In authentication. This was a major step toward turning StudyOS into a real student productivity platform instead of just a static UI. StudyOS is designed as a Student Command Center, where students can eventually manage Gmail, Google Calendar, Drive, Classroom, and assignments all in one place. Part 1 – Switching to React I migrated the project into React using Vite to make it more scalable and closer to how real production apps are built. What I changed Converted project from HTML/CSS/JS → React (Vite) Broke UI into reusable components: Sidebar Header Pages (Dashboard, Gmail, Calendar, etc.) Implemented single-page navigation (no page reloads) Why I switched React makes it much easier to: Manage multiple pages (like Gmail + Calendar + Drive) Handle user login state Build dynamic dashboards Scale the project into a real app Part 2 – Google Authentication After setting up React, I integrated Google Sign-In so users can log into StudyOS using their Google account. What I implemented Installed @react-oauth /google Added JWT decoding to extract user info Configured Google OAuth in React Created login flow using Google Identity Services Fixed OAuth issues including: Displayed user profile after login: Name Profile picture Restricted app access until user is signed in What works now Sidebar navigation between pages Dashboard layout structure Google Sign-In authentication system User session state (logged in / logged out) Profile display in header after login Challenges The biggest issue was Google OAuth configuration. I initially encountered: Error 400: origin_mismatch This happened because the correct localhost URLs were not added in the Google Cloud Console. Fix Added the following to Authorized JavaScript origins: http://localhost:5173 http://127.0.0.1:5173 After fixing this, Google Sign-In worked successfully. Next steps Connect Google Calendar API (real events) Connect Gmail API (inbox preview) Connect Google Drive API (file access) Build Assignment Workspace system Add AI Daily Briefing (smart planning system) Implement “Stay signed in” persistence Improve UI with modern styling (glassmorphism + animations)"}, {"post_id": 21721, "ts": "2026-07-03T20:14:35Z", "hours": 0.7917, "text": "Devlog #1 - Building the Base of StudyOS Time Spent: 45 minutes Today I started building StudyOS , a student productivity app that combines Google Classroom, Gmail, Calendar, Drive, and other Google services into one place. My goal is to reduce the number of tabs students need to keep open and make staying organized much easier. What I accomplished Created the project in VS Code. Built the basic dashboard layout. Added a sidebar for navigation. Created a top navigation bar with a search bar and a placeholder Google Sign-In button. Designed the first dashboard cards: Today’s Summary AI Briefing Focus Session Challenges I spent some time deciding how I wanted the app to be organized. Instead of making another simple dashboard, I decided to build it like a Student Command Center where everything can eventually be managed from one place. Next Steps Create a login page. Add Google Sign-In. Keep users signed in if they choose. Connect Google Calendar. Connect Gmail. Add the AI Daily Briefing. Begin building the Assignment Workspace. I’m really happy with the progress so far. Even though it’s only the first version, I now have a solid foundation to build on. Next I’ll start adding real functionality instead of placeholder content."}]...
|
Title: StudyOS by @zhal | Stardance
Devlogs:
Devl Title: StudyOS by @zhal | Stardance
Devlogs:
Devlog #1 - Building the Base of StudyOS Time Spent: 45 minutes Today I started building StudyOS , a student productivity app that combines Google Classroom, Gmail, Calendar, Drive, and other Google services into one place. My goal is to reduce the number of tabs students need to keep open and make staying organized much easier. What I accomplished Created the project in VS Code. Built the basic dashboard layout. Added a sidebar for navigation. Created a top navigation bar with a search bar and a placeholder Google Sign-In button. Designed the first dashboard cards: Today’s Summary AI Briefing Focus Session Challenges I spent some time deciding how I wanted the app to be organized. Instead of making another simple dashboard, I decided to build it like a Student Command Center where everything can eventually be managed from one place. Next Steps Create a login page. Add Google Sign-In. Keep users signed in if they choose. Connect Google Calendar. Connect Gmail. Add the AI Daily Briefing. Begin building the Assignment Workspace. I’m really happy with the progress so far. Even though it’s only the first version, I now have a solid foundation to build on. Next I’ll start adding real functionality instead of placeholder content.
Devlog #2 – Switching to React & Adding Google Authentication Today I upgraded StudyOS from a basic HTML/CSS/JavaScript project into a React (Vite) application, and then added Google Sign-In authentication. This was a major step toward turning StudyOS into a real student productivity platform instead of just a static UI. StudyOS is designed as a Student Command Center, where students can eventually manage Gmail, Google Calendar, Drive, Classroom, and assignments all in one place. Part 1 – Switching to React I migrated the project into React using Vite to make it more scalable and closer to how real production apps are built. What I changed Converted project from HTML/CSS/JS → React (Vite) Broke UI into reusable components: Sidebar Header Pages (Dashboard, Gmail, Calendar, etc.) Implemented single-page navigation (no page reloads) Why I switched React makes it much easier to: Manage multiple pages (like Gmail + Calendar + Drive) Handle user login state Build dynamic dashboards Scale the project into a real app Part 2 – Google Authentication After setting up React, I integrated Google Sign-In so users can log into StudyOS using their Google account. What I implemented Installed @react-oauth /google Added JWT decoding to extract user info Configured Google OAuth in React Created login flow using Google Identity Services Fixed OAuth issues including: Displayed user profile after login: Name Profile picture Restricted app access until user is signed in What works now Sidebar navigation between pages Dashboard layout structure Google Sign-In authentication system User session state (logged in / logged out) Profile display in header after login Challenges The biggest issue was Google OAuth configuration. I initially encountered: Error 400: origin_mismatch This happened because the correct localhost URLs were not added in the Google Cloud Console. Fix Added the following to Authorized JavaScript origins: http://localhost:5173 http://127.0.0.1:5173 After fixing this, Google Sign-In worked successfully. Next steps Connect Google Calendar API (real events) Connect Gmail API (inbox preview) Connect Google Drive API (file access) Build Assignment Workspace system Add AI Daily Briefing (smart planning system) Implement “Stay signed in” persistence Improve UI with modern styling (glassmorphism + animations)
Devlog #3 — Making the Calendar Page and Dashboard This week, I worked on two of the biggest parts of StudyOS so far: the Calendar page and the Dashboard . Calendar Page I started turning the Calendar page into something more useful than a simple event list. I added different views for Today , Week , and Month , making it easier to see upcoming events in different ways. I also improved how events are displayed by adding: Expandable event descriptions A cleaner event layout A structure that’s easier to build on with more features later These changes make the calendar feel much closer to a real productivity app. Dashboard I also redesigned the Dashboard to work more like a student command center. One of the biggest improvements was turning the upcoming events section into a scrollable card . This keeps the dashboard clean even when there are lots of events and prevents long lists from stretching the page. This new layout also leaves room for future dashboard widgets, such as: AI daily briefing Assignment priority Recent activity What’s Next? Next, I plan to continue improving the Calendar page by adding: Creating events Editing events Deleting events After that, I’ll begin building more dashboard widgets to make StudyOS feel like a true all-in-one student workspace.
Devlog #4 – Gmail, Google Classroom, and Calendar Improvements What I Worked On I focused on connecting more Google services to StudyOS and improving how calendar data is displayed. Google Classroom I created a new Classroom page that automatically loads my Google Classroom courses and displays assignments from each class. Features Added Connected to the Google Classroom API. Loaded all enrolled courses. Retrieved coursework from every class. Combined assignments into one list. Sorted assignments by due date. Displayed the class name with each assignment. Problems Solved Fixed OAuth authentication issues. Added the required Google Classroom scopes. Debugged 401 Unauthorized and 403 Permission Denied errors. Learned that teachers can restrict API access to coursework, causing some assignments to be unavailable. Gmail I continued improving Gmail integration. Improvements Better loading of Gmail messages. More reliable Google authentication. Cleaner organization for displaying emails. Google Calendar The calendar received several major improvements. Features Added Combined events from every calendar instead of only the primary calendar. Added search functionality. Added Today, Week, and Month views. Added Previous, Next, and Today navigation buttons. Added support for changing weeks and months without reloading. Sorted all events by date. Bug Fixes Fixed missing events caused by incorrect API parameters. Fixed events not appearing from shared calendars. Fixed date filtering logic. Corrected React state issues with currentDate . Fixed navigation bugs while switching between calendar views. Next Steps Create and edit calendar events directly from StudyOS. Add assignment completion tracking. Display Gmail labels and unread counts. Improve the calendar UI with drag-and-drop support. Connect Google Drive files to assignments.
Devlog #5 — Calendar event control complete I focused on finishing the calendar management system for StudyOS. My goal was to make it possible to fully manage Google Calendar events without leaving the app. Building the Event Modal The first major feature I completed was the New Event Modal . Users can now enter: Event title Description Location Start date and time End date and time I originally built the modal using a standard HTML form, but I ran into issues where React would disconnect the form before it could submit. Instead of continuing to fight that problem, I redesigned the modal to use React state and button click handlers. This made creating events much more reliable. Editing and Deleting Events After creating events worked, I added the ability to edit them. Clicking an event now opens the same modal with all of the event information already filled in. Users can: Update event information Delete the event Cancel without making changes This required connecting the app to the Google Calendar Update and Delete API endpoints and refreshing the calendar after every change so the UI always stays up to date. Multiple Calendar Support One feature I really wanted was support for multiple calendars. Instead of always saving events in the primary calendar, the app now retrieves every calendar connected to the user’s Google account. A dropdown menu allows users to choose exactly where a new event should be saved. Bug Fixes Along the way I fixed several issues: Fixed React form submission problems by replacing the form with state-based inputs. Fixed the event modal not updating correctly when switching between events. Fixed the calendar not refreshing after creating, editing, or deleting events. Fixed event selection in the Today , Week , and Month views. Fixed creating events in calendars other than the primary calendar. Current Features The calendar now supports: Today , Week , and Month views Searching events Creating new events Editing existing events Deleting events Selecting which Google Calendar an event belongs to Automatic refresh after every change Next Steps Add recurring event support Add event color customization Add reminders and notifications Improve the calendar interface Add drag-and-drop scheduling I’m really happy with how this update turned out because the calendar has gone from being a read-only viewer to a fully functional event manager.
Dev Log #6 – Local AI Integration with Ollama Overview Today I addeed a completely local AI model using Ollama . I researched local large language models and decided to integrate the Llama 3.2 3B model through Ollama. What I Worked On Installed Ollama and downloaded the llama3.2:3b model. Fixed the issue where PowerShell could not recognize the ollama command by updating my system PATH . Learned that Ollama automatically starts its own server, so running ollama serve again caused a port conflict. Created a Node.js backend using Express and CORS . Connected the backend to Ollama’s local API. Updated the React frontend to send AI requests to my local backend instead of OpenRouter. Removed the dependency on paid AI APIs. Challenges One of the biggest challenges was getting the backend running correctly. I accidentally tried to run server.js before creating the file, which caused a MODULE_NOT_FOUND error. After creating the server and installing the required packages, I was able to start it successfully. Another challenge was that the AI initially hallucinated events like holidays and birthdays that weren’t actually on my calendar. To fix this, I rewrote the prompt to clearly instruct the model to only use the calendar events provided and never invent additional information. Improvements I redesigned the AI briefing prompt so it now: Uses only events from the next 7 days . Creates a structured daily briefing. Highlights upcoming due dates, tests, meetings, and deadlines. Suggests what to focus on for the day. Ends with a short motivational message. Avoids generating fake events. Result The AI summary feature now runs entirely on my own computer with: No API keys No usage limits Faster response times Better privacy because calendar data never leaves my computer. The morning briefing is much more useful and feels like a real student assistant instead of a generic chatbot.
Ships:
What did you make? I built StudyOS, an AI-powered student dashboard that connects with Google Calendar to display upcoming events and generate personalized daily briefings. Instead of checking multiple apps, students get a single dashboard with their schedule, upcoming deadlines, and AI-generated advice for the day. (AI is still in beta) What was challenging? The biggest challenge was integrating multiple technologies together. Setting up Google OAuth, retrieving events from every calendar, deploying the website, and running a local AI model with Ollama all required debugging and learning new tools. I also had to figure out how to make the AI generate useful daily briefings instead of generic responses. What are you proud of? I’m most proud that the project actually works end-to-end. Users can sign in with Google, view all of their upcoming calendar events, and receive an AI-generated morning briefing based on their real schedule. What should people know so they can test it? The live demo is available here: https://study-website-88jo-4xbo1kols-zhal8403s-projects.vercel.app/ To fully test the project: Sign in with a Google account. Allow Calendar permissions. Make sure your Google Calendar has a few upcoming events. The dashboard will display your upcoming events and generate a personalized daily briefing based on your schedule. Note: The AI runs locally using Ollama, so the hosted demo currently uses a placeholder briefing. Running the project locally with Ollama enabled provides the full AI experience....
|
1793688839.1996312
|
1793775239.1996312
|
|
23588
|
LighterWebUI by @Capy | Stardance
|
Capy
|
1
|
45.0
|
838
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T20:45:07Z", "hours": 45.0, "multiplier": 18.87, "payout": 838, "blessing": "neutral", "text": "I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database.", "repo": "https://github.com/CapyGamesXD/LighterWebUI", "demo": "https://lighterwebui.capydesigns.com/home/"}]...
|
[{"post_id": 39117, "ts": "202 [{"post_id": 39117, "ts": "2026-08-01T20:30:17Z", "hours": 0.5122, "text": "Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3"}, {"post_id": 39022, "ts": "2026-08-01T18:00:21Z", "hours": 0.5603, "text": "Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!"}, {"post_id": 38970, "ts": "2026-08-01T16:18:24Z", "hours": 5.4911, "text": "HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!"}, {"post_id": 36518, "ts": "2026-07-28T18:00:34Z", "hours": 3.0181, "text": "# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!"}, {"post_id": 35324, "ts": "2026-07-26T17:20:30Z", "hours": 4.8344, "text": "The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!"}, {"post_id": 34728, "ts": "2026-07-25T18:01:16Z", "hours": 4.57, "text": "URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently."}, {"post_id": 31736, "ts": "2026-07-20T11:36:36Z", "hours": 4.4872, "text": "Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!"}, {"post_id": 30631, "ts": "2026-07-18T11:01:58Z", "hours": 3.1933, "text": "MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them."}, {"post_id": 29011, "ts": "2026-07-15T17:39:29Z", "hours": 3.2464, "text": "I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!"}, {"post_id": 28412, "ts": "2026-07-14T17:27:24Z", "hours": 4.5658, "text": "More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!"}, {"post_id": 22863, "ts": "2026-07-05T14:16:18Z", "hours": 5.1, "text": "I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!"}, {"post_id": 22148, "ts": "2026-07-04T13:42:08Z", "hours": 4.6039, "text": "Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!"}, {"post_id": 17631, "ts": "2026-06-28T14:44:42Z", "hours": 0.4275, "text": "First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️"}]...
|
Title: LighterWebUI by @Capy | Stardance
Devlogs: Title: LighterWebUI by @Capy | Stardance
Devlogs:
First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️
Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!
I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!
More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!
I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!
MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them.
Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!
URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently.
The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!
# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!
HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!
Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!
Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3
Ships:
I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database....
|
1793688840.548518
|
1793775240.548518
|
|
19167
|
Custom Stardance API by @The_Craw | Stardance
|
The_Craw
|
1
|
4.33
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T12:47:45Z", "hours": 4.0, "multiplier": 9.67, "payout": 36, "blessing": "neutral", "text": "Stardance API is my own attempt at making Stardance Projects queryable. Because the official Stardance API isn’t released yet, this serves as a bridge between that and no API at all.", "repo": "https://github.com/Jonah-Crawford/Stardance-API", "demo": "https://stardance-api.ultimatecraw.xyz/docs"}]...
|
[{"post_id": 45045, "ts": "202 [{"post_id": 45045, "ts": "2026-08-11T09:07:07Z", "hours": 0.3306, "text": "I’m back from camping! (RIP my 60+ day streak) My plans going forward immediately is improving program counter modifications to allow for higher-level concepts to be bootstrapped onto Crawssembly instruction sets. (Image unrelated)"}, {"post_id": 9877, "ts": "2026-06-16T10:56:13Z", "hours": 1.5172, "text": "Finished the quirks, history now works properly."}, {"post_id": 9288, "ts": "2026-06-15T16:20:54Z", "hours": 0.5208, "text": "Added a history marker. Every pass will add to a history logger, so data over time can be tracked"}, {"post_id": 9267, "ts": "2026-06-15T15:42:44Z", "hours": 0.9881, "text": "The database now scrapes stardance every 6 hours"}, {"post_id": 9230, "ts": "2026-06-15T14:37:39Z", "hours": 0.6647, "text": "Barebones FastAPI website made for SDAPI"}]...
|
Title: Custom Stardance API by @The_Craw | Stardan Title: Custom Stardance API by @The_Craw | Stardance
Devlogs:
Barebones FastAPI website made for SDAPI
The database now scrapes stardance every 6 hours
Added a history marker. Every pass will add to a history logger, so data over time can be tracked
Finished the quirks, history now works properly.
I’m back from camping! (RIP my 60+ day streak) My plans going forward immediately is improving program counter modifications to allow for higher-level concepts to be bootstrapped onto Crawssembly instruction sets. (Image unrelated)
Ships:
Stardance API is my own attempt at making Stardance Projects queryable. Because the official Stardance API isn’t released yet, this serves as a bridge between that and no API at all....
|
1793688841.8289633
|
1793775241.8289633
|
|
20336
|
bigbot by @arjundakshin | Stardance
|
arjundakshin
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T13:23:39Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slack bot named big bot that has some useful features but mostly just pure fun. But one is extremely dangerous do not do the forbidden command.", "repo": "https://github.com/DrivingStork3952/bigbot_slack/", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 11027, "ts": "202 [{"post_id": 11027, "ts": "2026-06-18T01:49:20Z", "hours": 0.3392, "text": "My first ever DevLog I built my Slack bot. I used Node.js for the first time,e and it was really interesting using APIs with JavaScript. For reference,e my main language is Python, that’s what I usually code everything in. The project started as just a ping and joke, and cat fact, but I started looking into more APIs and kept adding. Bigbott isn’t live is because I still have to apply for a nest container. Hackatime is also being weird and said I only worked on it for 20 minutes, but it was actually a lot more, at least 1 hour. As soon as my Nest Container gets approved, Bigbot will be available for everyone to use (if you want to)."}]...
|
Title: bigbot by @arjundakshin | Stardance
Devlog Title: bigbot by @arjundakshin | Stardance
Devlogs:
My first ever DevLog I built my Slack bot. I used Node.js for the first time,e and it was really interesting using APIs with JavaScript. For reference,e my main language is Python, that’s what I usually code everything in. The project started as just a ping and joke, and cat fact, but I started looking into more APIs and kept adding. Bigbott isn’t live is because I still have to apply for a nest container. Hackatime is also being weird and said I only worked on it for 20 minutes, but it was actually a lot more, at least 1 hour. As soon as my Nest Container gets approved, Bigbot will be available for everyone to use (if you want to).
Ships:
I made a slack bot named big bot that has some useful features but mostly just pure fun. But one is extremely dangerous do not do the forbidden command....
|
1793688843.0367014
|
1793775243.0367014
|
|
18107
|
Vi Encrypt by @violetdoesntexist | Stardance
|
violetdoesntexist
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T18:23:31Z", "hours": 2.0, "multiplier": 1.46, "payout": 3, "blessing": "neutral", "text": "i shipped vi encrypt a small tool i made to encrypt text in a pretty unsafe way, i randomly had the idea and tried to build it. you can test it yourself by running it locally or installing via pipx pipx install viencrypt", "repo": "https://github.com/violetdoesntexist/vi-encrypt", "demo": "https://github.com/violetdoesntexist/vi-encrypt/releases/tag/viencrypt"}]...
|
[{"post_id": 8210, "ts": "2026 [{"post_id": 8210, "ts": "2026-06-13T17:37:03Z", "hours": 2.2092, "text": "i made the tool!! i added encryption and decryption and did a lot of fixing to get it to actually work and now it fully does!!"}]...
|
Title: Vi Encrypt by @violetdoesntexist | Stardanc Title: Vi Encrypt by @violetdoesntexist | Stardance
Devlogs:
i made the tool!! i added encryption and decryption and did a lot of fixing to get it to actually work and now it fully does!!
Ships:
i shipped vi encrypt a small tool i made to encrypt text in a pretty unsafe way, i randomly had the idea and tried to build it. you can test it yourself by running it locally or installing via pipx pipx install viencrypt...
|
1793688844.1884367
|
1793775244.1884367
|
|
26437
|
Wireless Piano by @zhal | Stardance
|
zhal
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T13:24:53Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built a 12-key ESP32-powered Piano that has a WIFI Mode that hosts its own webpage. Users can connect to the ESP32 from any device on the same network and play piano notes through their web browser. Also it has a Standalone Mode were you can directly connect it to a speaker. The project combines 3D printing, electronics, programming, and web development into a portable instrument. What was challenging? The biggest challenge was getting the ESP32 and the web interface to communicate reliably while keeping the piano responsive. Designing and fitting the 3D-printed enclosure around all the electronics and wiring also required several iterations. What are you proud of? I’m most proud of creating a system that feels simple to use despite combining several technologies. Instead of needing a dedicated app or speaker, anyone on the same Wi-Fi network can open a browser and immediately start playing. I’m also proud that the project combines hardware, software, and 3D design into one product. What should people know so they can test your project? To test the project: Power on the ESP32. Ensure your device is connected to the same Wi-Fi network as the ESP32. Open the IP address shown in the Serial Monitor. (if not shown press the enable button on the ESP32) Press the physical keys or use the on-screen piano keyboard. Your device’s volume should be turned on since the audio is generated by the web browser rather than the ESP32 itself if in WIFI Mode.", "repo": "https://github.com/zhal8403/Piano", "demo": ""}]...
|
[{"post_id": 20486, "ts": "202 [{"post_id": 20486, "ts": "2026-07-02T02:52:09Z", "hours": 3.955, "text": "I have assembled the 12 key piano and I have adjusted code in the site to fit it I also have fixed many bugs and I’ve also made it have 2 modes. It has a Wi-Fi mode where you can connect to the site, but you can also use the site with your mouse and play or you can open it on your phone and use touchscreen. The second mode is the standalone mode which you can connect to a speaker to play with the board without using a device and I have fully enclosed the piano so you can transport it"}, {"post_id": 18775, "ts": "2026-06-29T23:50:44Z", "hours": 1.9331, "text": "added audio thats plays when keys are pressed connected to the keys and that"}, {"post_id": 18349, "ts": "2026-06-29T13:52:34Z", "hours": 0.7556, "text": "finished printing and assembling the mini version of the piano"}, {"post_id": 18043, "ts": "2026-06-29T00:35:35Z", "hours": 2.5472, "text": "Designed 12 key and 5 key pianos planning on adding more for electronic storage next"}, {"post_id": 17542, "ts": "2026-06-28T11:31:19Z", "hours": 1.2561, "text": "created simple webpage to receive esp32 signals from switches and a starter keyboard display taht shows what keys been pressed"}, {"post_id": 17344, "ts": "2026-06-28T02:57:20Z", "hours": 0.8108, "text": "ESP32 code that hosts a web server and sends piano key states to a browser."}]...
|
Title: Wireless Piano by @zhal | Stardance
Devlog Title: Wireless Piano by @zhal | Stardance
Devlogs:
ESP32 code that hosts a web server and sends piano key states to a browser.
created simple webpage to receive esp32 signals from switches and a starter keyboard display taht shows what keys been pressed
Designed 12 key and 5 key pianos planning on adding more for electronic storage next
finished printing and assembling the mini version of the piano
added audio thats plays when keys are pressed connected to the keys and that
I have assembled the 12 key piano and I have adjusted code in the site to fit it I also have fixed many bugs and I’ve also made it have 2 modes. It has a Wi-Fi mode where you can connect to the site, but you can also use the site with your mouse and play or you can open it on your phone and use touchscreen. The second mode is the standalone mode which you can connect to a speaker to play with the board without using a device and I have fully enclosed the piano so you can transport it
Ships:
What did you make? I built a 12-key ESP32-powered Piano that has a WIFI Mode that hosts its own webpage. Users can connect to the ESP32 from any device on the same network and play piano notes through their web browser. Also it has a Standalone Mode were you can directly connect it to a speaker. The project combines 3D printing, electronics, programming, and web development into a portable instrument. What was challenging? The biggest challenge was getting the ESP32 and the web interface to communicate reliably while keeping the piano responsive. Designing and fitting the 3D-printed enclosure around all the electronics and wiring also required several iterations. What are you proud of? I’m most proud of creating a system that feels simple to use despite combining several technologies. Instead of needing a dedicated app or speaker, anyone on the same Wi-Fi network can open a browser and immediately start playing. I’m also proud that the project combines hardware, software, and 3D design into one product. What should people know so they can test your project? To test the project: Power on the ESP32. Ensure your device is connected to the same Wi-Fi network as the ESP32. Open the IP address shown in the Serial Monitor. (if not shown press the enable button on the ESP32) Press the physical keys or use the on-screen piano keyboard. Your device’s volume should be turned on since the audio is generated by the web browser rather than the ESP32 itself if in WIFI Mode....
|
1793688845.354033
|
1793775245.354033
|
|
8920
|
GLSL converter by @kuba_ch101 | Stardance
|
kuba_ch101
|
1
|
8.0
|
96
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T20:44:58Z", "hours": 7.0, "multiplier": 14.37, "payout": 96, "blessing": "neutral", "text": "I made a program and a website based on it that converts shaders written in GLSL into a C string that is easier to use in a program with OpenGL, becaose you have everything in one file. For me the most challenging thing was to make the the website look good, also working with more complicated paths to input and output files was a new thing for me. My program saves me time when writing all the quotation marks which also reduces a probability of errors. The website was designed to use when you need shaders up and running fast.", "repo": "https://github.com/kubach101/GLSL-converter", "demo": "https://kubach101.github.io/GLSL-to-C/"}]...
|
[{"post_id": 29120, "ts": "202 [{"post_id": 29120, "ts": "2026-07-15T19:44:59Z", "hours": 0.9953, "text": "I added this thing in the top-right corner which indicates you how your camera is orinted."}, {"post_id": 10816, "ts": "2026-06-17T19:10:15Z", "hours": 0.6567, "text": "Website deployed and my project is ready for shipping. I added an information panel and checked everything."}, {"post_id": 9460, "ts": "2026-06-15T20:24:06Z", "hours": 2.0611, "text": "I made a website from my previous code. I spend a lot of time on the design but I think it was worth it. If I don’t find any bugs, I think this will be my last devlog before shipping."}, {"post_id": 9178, "ts": "2026-06-15T12:18:16Z", "hours": 1.345, "text": "I made a rework and added few features. What I changed: Program checks when file ends(beafore i needed to type “///” and didn’t know this was possible). Improved the files menagment: now there is a folder called “io”, makes program cleaner i think. Now works both: in bash and as an app on windows."}, {"post_id": 5609, "ts": "2026-06-09T14:00:51Z", "hours": 2.7506, "text": "I added a coments ignoring, now the comment will no longer be written in the final string."}]...
|
Title: GLSL converter by @kuba_ch101 | Stardance
Title: GLSL converter by @kuba_ch101 | Stardance
Devlogs:
I added a coments ignoring, now the comment will no longer be written in the final string.
I made a rework and added few features. What I changed: Program checks when file ends(beafore i needed to type “///” and didn’t know this was possible). Improved the files menagment: now there is a folder called “io”, makes program cleaner i think. Now works both: in bash and as an app on windows.
I made a website from my previous code. I spend a lot of time on the design but I think it was worth it. If I don’t find any bugs, I think this will be my last devlog before shipping.
Website deployed and my project is ready for shipping. I added an information panel and checked everything.
I added this thing in the top-right corner which indicates you how your camera is orinted.
Ships:
I made a program and a website based on it that converts shaders written in GLSL into a C string that is easier to use in a program with OpenGL, becaose you have everything in one file. For me the most challenging thing was to make the the website look good, also working with more complicated paths to input and output files was a new thing for me. My program saves me time when writing all the quotation marks which also reduces a probability of errors. The website was designed to use when you need shaders up and running fast....
|
1793688846.5855331
|
1793775246.5855331
|
|
36685
|
My own site! by @alinanoman | Stardance
|
alinanoman
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T03:38:09Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a personal portfolio using HTML and CSS in Visual Studio. The goal of my website was to create a place where people can learn more about me, my interests, my activities, my projects and my future goals. I built it from scratch using an index.html file for the structure and content and a style.css file for the appearance. For the design I created a soft pastel lilac theme because lilac is my favorite color. One of the biggest challenges was learning how HTML and CSS work together. I had to trouble shoot my problems in VS Code. Such as figuring out why certain files were not operating correctly, understand files types and learn how to properly formate my code. I experimented with different color, spacingd and fonts. I am most proud that I was able to create my first and very own website from the ground up. I was also proud that I was able to apply my css and html skills. When testing my site people should know that they can explore each section using the navigation bar at top. they can click different links to jump between the about me, activities, projects and goals section. The website is made to be viewed on a computer browser through the index.html file. users should make sure that both index.html and style.css are kept in the same folder.", "repo": "https://github.com/tommorrownoon/personal-site", "demo": "https://tommorrownoon.github.io/personal-site/#activities"}]...
|
[{"post_id": 33833, "ts": "202 [{"post_id": 33833, "ts": "2026-07-24T02:15:30Z", "hours": 0.8981, "text": "Coded my Site! Today I made significant progress on my personal website using Visual Studio Code. I began by setting up the project structure and creating the two main files required for the website: index.html and style.css. While working on the setup, I learned the difference between HTML and CSS and how they work together to create a functional and visually appealing website. I spent time troubleshooting file organization issues, ensuring that both files were located in the same project folder and correctly linked using the stylesheet reference in the HTML file.After completing the basic setup, I developed the structure of my website in HTML. I created a header section that introduces me and includes navigation links to different parts of the site. I then added several sections containing information about myself, including an About Me section, activities and extracurricular involvement, engineering projects, and future goals. This allowed me to organize my content into a clear and professional layout while practicing the use of HTML elements such as headings, paragraphs, navigation bars, sections, and div containers.Once the content was in place, I focused on the visual design of the website by working extensively with CSS. I customized the appearance of the page by creating a lilac and pastel color scheme that matched the aesthetic I wanted. I adjusted the background colors, text colors, spacing, borders, and corner radii to create a softer and more welcoming design. I also added rounded cards for project information, styled navigation buttons, and implemented a gradient header to improve the overall appearance of the site. Throughout this process, I learned how CSS properties such as background-color, padding, margin, border-radius, font-family, and box-shadow affect the user interface.In addition to improving the visual design, I spent time troubleshooting coding errors and learning how to navigate Visual Studio Code more effectively. I learned how to create and rename files, distinguish between HTML and CSS files, interpret file icons, and resolve warnings related to empty CSS rule sets. These challenges helped me gain a stronger understanding of how web development projects are organized and how different technologies interact within a website.By the end of today’s work session, I successfully created a functional personal portfolio website with multiple sections, custom styling, and a cohesive visual theme. The website now highlights my interests, activities, engineering projects, and future aspirations in an organized and professional format. This progress provided valuable experience in both HTML and CSS while helping me build confidence in web development and problem-solving skills."}]...
|
Title: My own site! by @alinanoman | Stardance
De Title: My own site! by @alinanoman | Stardance
Devlogs:
Coded my Site! Today I made significant progress on my personal website using Visual Studio Code. I began by setting up the project structure and creating the two main files required for the website: index.html and style.css. While working on the setup, I learned the difference between HTML and CSS and how they work together to create a functional and visually appealing website. I spent time troubleshooting file organization issues, ensuring that both files were located in the same project folder and correctly linked using the stylesheet reference in the HTML file.After completing the basic setup, I developed the structure of my website in HTML. I created a header section that introduces me and includes navigation links to different parts of the site. I then added several sections containing information about myself, including an About Me section, activities and extracurricular involvement, engineering projects, and future goals. This allowed me to organize my content into a clear and professional layout while practicing the use of HTML elements such as headings, paragraphs, navigation bars, sections, and div containers.Once the content was in place, I focused on the visual design of the website by working extensively with CSS. I customized the appearance of the page by creating a lilac and pastel color scheme that matched the aesthetic I wanted. I adjusted the background colors, text colors, spacing, borders, and corner radii to create a softer and more welcoming design. I also added rounded cards for project information, styled navigation buttons, and implemented a gradient header to improve the overall appearance of the site. Throughout this process, I learned how CSS properties such as background-color, padding, margin, border-radius, font-family, and box-shadow affect the user interface.In addition to improving the visual design, I spent time troubleshooting coding errors and learning how to navigate Visual Studio Code more effectively. I learned how to create and rename files, distinguish between HTML and CSS files, interpret file icons, and resolve warnings related to empty CSS rule sets. These challenges helped me gain a stronger understanding of how web development projects are organized and how different technologies interact within a website.By the end of today’s work session, I successfully created a functional personal portfolio website with multiple sections, custom styling, and a cohesive visual theme. The website now highlights my interests, activities, engineering projects, and future aspirations in an organized and professional format. This progress provided valuable experience in both HTML and CSS while helping me build confidence in web development and problem-solving skills.
Ships:
I created a personal portfolio using HTML and CSS in Visual Studio. The goal of my website was to create a place where people can learn more about me, my interests, my activities, my projects and my future goals. I built it from scratch using an index.html file for the structure and content and a style.css file for the appearance. For the design I created a soft pastel lilac theme because lilac is my favorite color. One of the biggest challenges was learning how HTML and CSS work together. I had to trouble shoot my problems in VS Code. Such as figuring out why certain files were not operating correctly, understand files types and learn how to properly formate my code. I experimented with different color, spacingd and fonts. I am most proud that I was able to create my first and very own website from the ground up. I was also proud that I was able to apply my css and html skills. When testing my site people should know that they can explore each section using the navigation bar at top. they can click different links to jump between the about me, activities, projects and goals section. The website is made to be viewed on a computer browser through the index.html file. users should make sure that both index.html and style.css are kept in the same folder....
|
1793688847.7818792
|
1793775247.7818792
|
|
4022
|
TAR Macropad by @Hridum | Stardance
|
Hridum
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T19:51:26Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a macropad with a 9x9 switch matrix, 1 rotary encoder, a 0.91” OLED screen as well as LEDs. I found the hardest part of this project to be designing the PCB, as I had never done that before. On the other hand, the CAD was fairly simple and I just had to remember to space everything properly so that components such as the microcontroller and diodes could fit in the case.", "repo": "https://github.com/HridumD/TAR-Macropad", "demo": ""}]...
|
[{"post_id": 15846, "ts": "202 [{"post_id": 15846, "ts": "2026-06-25T19:25:55Z", "hours": 3.2153, "text": "Finished CAD for Casing Cad was pretty simple, added a bottom body, middle plate and top plate to cover everything up Forgot about the required spacing for components such as diodes and the controller board so I added those as well."}, {"post_id": 2317, "ts": "2026-06-04T19:04:49Z", "hours": 3.01, "text": "Since last devlog, Added rotary encoder, OLED screen, LEDs and re-designed layout to follow scanning matrix layout rather than direct connections for each switches Because of added complexity as well as additional components, PCB was much more complex and a lot of time was used to make sure no traces were overlapping or spacing issues between components. LEDs were not through-hole so they could only use one trace side, which made process also much more complex."}, {"post_id": 1169, "ts": "2026-06-03T00:43:58Z", "hours": 1.2161, "text": "Finished basic design for Hackpad PCB I have never designed a PCB before so it was a challenge, especially routing the PCB and making sure no connections shorted, but the hackpad guide helped a lot."}]...
|
Title: TAR Macropad by @Hridum | Stardance
Devlog Title: TAR Macropad by @Hridum | Stardance
Devlogs:
Finished basic design for Hackpad PCB I have never designed a PCB before so it was a challenge, especially routing the PCB and making sure no connections shorted, but the hackpad guide helped a lot.
Since last devlog, Added rotary encoder, OLED screen, LEDs and re-designed layout to follow scanning matrix layout rather than direct connections for each switches Because of added complexity as well as additional components, PCB was much more complex and a lot of time was used to make sure no traces were overlapping or spacing issues between components. LEDs were not through-hole so they could only use one trace side, which made process also much more complex.
Finished CAD for Casing Cad was pretty simple, added a bottom body, middle plate and top plate to cover everything up Forgot about the required spacing for components such as diodes and the controller board so I added those as well.
Ships:
I made a macropad with a 9x9 switch matrix, 1 rotary encoder, a 0.91” OLED screen as well as LEDs. I found the hardest part of this project to be designing the PCB, as I had never done that before. On the other hand, the CAD was fairly simple and I just had to remember to space everything properly so that components such as the microcontroller and diodes could fit in the case....
|
1793688848.9678264
|
1793775248.9678264
|
|
4353
|
InviteHub by @Mrithul_E | Stardance
|
Mrithul_E
|
2
|
85.0
|
1614
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T15:04:05Z", "hours": 4.0, "multiplier": 12.49, "payout": 49, "blessing": "neutral", "text": "I made a website for creating digital invitation webpages by simply selecting a template and filling out a form. This can help reduce paper usage by decreasing printed inviation lol .. I faced many challenges during the development: Building the logic for creating different different forms for each and every templates Limiting the total file size in http request Building a UI for creating forms by Drag-and-Droping Couldn’t host in vercel because vercel blocks requests more that ~4 MB Admin centralized working (only admin can create templates, this ensures security) I am proud of dedecating 3 months to complete this project, without doing any other project. To run my project my project you will need firebase api key, and hackclub cdn api. But you can’t get the already created templates because those are stored in firebase. what’s new in this ship 2 fixed some security vulnerability as per github code scan Added assets completely handmade with canva replaced many fonts in home page with cursive fonts added our mission section in the home page", "repo": "https://github.com/Mrithul-E/InviteHub", "demo": "https://invitehub.mrithul.in/"}, {"ship_num": 2, "ts": "2026-09-06T13:06:11Z", "hours": 81.0, "multiplier": 19.23, "payout": 1565, "blessing": "neutral", "text": "I made a website for creating digital invitation webpages by simply selecting a template and filling out a form. This can help reduce paper usage by decreasing printed inviation lol .. I faced many challenges during the development: Building the logic for creating different different forms for each and every templates Limiting the total file size in http request Building a UI for creating forms by Drag-and-Droping Couldn’t host in vercel because vercel blocks requests more that ~4 MB Admin centralized working (only admin can create templates, this ensures security) I am proud of dedecating 3 months to complete this project, without doing any other project. To run my project my project you will need firebase api key, and hackclub cdn api. But you can’t get the already created templates because those are stored in firebase.", "repo": "https://github.com/Mrithul-E/InviteHub", "demo": "https://invitehub.mrithul.in/"}]...
|
[{"post_id": 66105, "ts": "202 [{"post_id": 66105, "ts": "2026-09-11T18:10:15Z", "hours": 0.3892, "text": "Minor security fixes as per GitHub security scan Inclusion of functionality from an untrusted source Client-side URL redirect using query in URL"}, {"post_id": 66022, "ts": "2026-09-11T15:47:24Z", "hours": 1.2178, "text": "Some reworks readme updated added more gap in between the template card added the github link to the navbar changed some fonts in homepage and added some paragraph sections there"}, {"post_id": 64908, "ts": "2026-09-09T16:58:28Z", "hours": 1.6047, "text": "full css and ui rework: Changed the background image Made the design and animation minimalistic updated the navbar and footer removed unwanted styling in css removed unwanted gradient from text made minimal footer"}, {"post_id": 63600, "ts": "2026-09-07T14:55:46Z", "hours": 0.7089, "text": "Minor css fix removed many useless css code. Made it more good. not that the gradients are not generated by AI, instead it is generated by online CSS gradient maker. Don’t this that this is a AI generated/AI styled project. This site doesn’t have that much huge css to use AI. The Login with Google button is copied by some article in Medium. The gradient used in the home page Get Started button is custom made using CSS gradient generator The background image and the animated phone image is generated by Chatgpt. I don’t know whether this is contributing to the AI feel 🥲🥲😭😭 UPDATE: : By asking to shipwrights, they say that it was flagged and AI because it used AI generated images, which is not allowed. So i made it my self using canva, here it is:"}, {"post_id": 62873, "ts": "2026-09-06T12:22:58Z", "hours": 0.3833, "text": "Fix: Chrome media hub staying active even when video stops fixed this by removing the src and loading the video again into chrome’s memory, this solves the problem ."}, {"post_id": 62835, "ts": "2026-09-06T11:22:25Z", "hours": 1.3864, "text": "Added demo video to the home page Updated README.md and also fixed many minor css and html issues"}, {"post_id": 62397, "ts": "2026-09-05T18:51:00Z", "hours": 1.4019, "text": "Added README.md !! *Not comleted yet, no images and videos are added yet"}, {"post_id": 62092, "ts": "2026-09-05T10:41:55Z", "hours": 1.1986, "text": "Added the pages such as About, privacy-policies etc… Added About, Privacy policies , Terms of service page in hbs and added the corresponding routers for it"}, {"post_id": 62018, "ts": "2026-09-05T07:10:46Z", "hours": 0.5586, "text": "Added confirmation for logout and Added redirect to the last visited URL in login Added redirect to the last visited URL in login Added confirmation for logout, and made the logout route a long random string"}, {"post_id": 61684, "ts": "2026-09-04T18:32:50Z", "hours": 3.3572, "text": "Added ‘My invitations’ section in website Added My invitations section that shows the invitations created by that user. From here user can see the invitation, creation date, and user can also delete the invitation. Delete option will delete all files that are part of that invitation from the cdn, then delete the complete invitation from the db. And also added some minor fixes such as: webpage title issues added favicon etc…"}, {"post_id": 61049, "ts": "2026-09-03T19:19:07Z", "hours": 1.6256, "text": "User experience improvement implemented: made the created invitation url return fron server to frontend removed unwanted console.log used for debugging made the “Get started” button in frontend functional Added: invitation link and copy button in invitation creation form submission page"}, {"post_id": 60427, "ts": "2026-09-02T18:50:07Z", "hours": 1.5317, "text": "Added search option in templates Implemented using Fuse.js *images are placeholders"}, {"post_id": 60264, "ts": "2026-09-02T15:01:57Z", "hours": 1.1522, "text": "Reached initial working stage First working template added Added: render of hbs from cdn rendering of custom form from database"}, {"post_id": 59313, "ts": "2026-09-01T01:12:28Z", "hours": 2.1864, "text": "added template and form rendering from Database"}, {"post_id": 58317, "ts": "2026-08-30T18:12:36Z", "hours": 4.9681, "text": "Added a option to write the template(HBS) and the form from frontend implemented: option to write the template(HBS) and the form from frontend hbs to CDN script 10 MB fields limit in template creation router (multer) Invitation total file size limit 50 MB (formidable) Invitation data processing and cleanup"}, {"post_id": 56814, "ts": "2026-08-28T18:55:14Z", "hours": 1.57, "text": "Connected the form created using jquery forms to HackClub CDN My website is basically a site that have many templates for different kind of event. A user can select a template , this will redirect to a form. Each template have entirely different forms , each form is created by the Admin using a jquery form builder ui. Because these form structures are unknow to the server, the server dont know how much file input fields are there. so we cant set a limit on number of file input fields and per input size. So I set a 50 MB total upload limit using formidable before sending files to hackclub cdn. This makes the usage fair."}, {"post_id": 56609, "ts": "2026-08-28T13:05:06Z", "hours": 1.4072, "text": "Handle multipart uploads with file size limits using busboy formidable ✓ In the last devlog I shared a very large code to limit max total requiest size using busboy. Yesterday , In a simple google search , the Google AI mode suggested me of Formidable previously idk formidable … So I learned about that , it made my code so tiny frontend logic was already there"}, {"post_id": 54984, "ts": "2026-08-26T12:38:33Z", "hours": 2.4072, "text": "Handle multipart uploads with file size limits using busboy i want to limit the max total file upload to 50 MB, multer cant have this feature so I use busboy and wrote long long code to solve this problem code :"}, {"post_id": 54621, "ts": "2026-08-25T17:23:09Z", "hours": 0.6072, "text": "Research: How to limit the total file size in a multipart/formData (Express.js) After many searches I found out that multer don’t support this I am planning to use Busboy directly"}, {"post_id": 54387, "ts": "2026-08-25T11:35:57Z", "hours": 2.1842, "text": "Added error messages in data submissions in rendered template form Added a 50 MB file size limit in file upload (for now only frontend checks are implemented, backend check is TODO)."}, {"post_id": 51711, "ts": "2026-08-21T15:19:40Z", "hours": 2.8461, "text": "Added delete template option for admin The delete option will delete the template from the database and also delete the thumbnail image stored in hackclub CDN"}, {"post_id": 34488, "ts": "2026-07-25T07:52:12Z", "hours": 4.4856, "text": "Switched from formeo to jquery form builder formeo doesn’t support many input types"}, {"post_id": 30066, "ts": "2026-07-17T10:51:07Z", "hours": 1.1742, "text": "Researching on custom form builder On deep research on making a custom form builder form my each templates , I found : formeo, jquery form builder and survayJS"}, {"post_id": 28398, "ts": "2026-07-14T17:08:38Z", "hours": 4.6656, "text": "connected the admin only template creation form to the firestore AND also made the template cards load dynamically currently provided image is a placeholder This is admin page , only admin page have create template button"}, {"post_id": 25450, "ts": "2026-07-09T18:43:35Z", "hours": 1.7492, "text": "Added hackclub cdn to the project !!! At first it didn’t worked because of compatibly issue of new nodejs’s fetch and npm form-data module fixed using new build-in formData()"}, {"post_id": 23622, "ts": "2026-07-06T18:04:21Z", "hours": 2.0433, "text": "new knoledge unlocked: I can use : app . use ( ' /admin ' , requireAdmin , adminRouter ) instead of : app . use ( requireAdmin ) app . use ( ' /admin ' , adminRouter ) I know everybody knows this, but this is a knowledge to me"}, {"post_id": 21534, "ts": "2026-07-03T15:40:01Z", "hours": 1.2683, "text": "added a very very cool text area for entering description for each field completely build on bootstrap accordion check it out !!!"}, {"post_id": 20136, "ts": "2026-07-01T17:55:02Z", "hours": 1.2319, "text": "First template design completed !!! fully using Bootstrap , and some css"}, {"post_id": 19898, "ts": "2026-07-01T10:16:49Z", "hours": 1.5828, "text": "Continuing the writting of the first template for the site !!! basically my project is a invitation page builder, it needs a lot of custom template. | ▽ not complete yet"}, {"post_id": 18554, "ts": "2026-06-29T18:58:19Z", "hours": 6.7694, "text": "Devlog 6 - Template creation form In this 6h 44m, I made a lot of features but the main highlight was the work on the template creation form ( continuation of previous devlog) Story Time: Basically my project is a wedding invitation page generator. My website will have a lot of prebuild invitation template(HBS) for different different events So the point is different templates require different forms should be filled by the user. Therefore when the admin create different template, the admin should list the require fields for the form of the specific template. Problems faced: My thoughts was to make a prebuild list of fields, from that the admin should list them in specific order. Problem - 1 The first problem was there is no form element to do these. So i used a select element with a ‘Add’ btn. For the sorting, at first i used up/down button, but that wasn’t smooth. After researching I found sortable js. At first sortable js also was not smooth, I fixed that by removing some bootstrap classes from the tag. Problem - 2 The next problem I faced was I cant use required in the custom fields list maker, So I can’t make that field mandatory. Solution (simple) The solution was simple, I made a invisible <textarea required .....> , and add the list of fields to that in json string when the admin edited the list. Thank you for reading ❤️, Mrithul."}, {"post_id": 15040, "ts": "2026-06-24T12:54:36Z", "hours": 4.9608, "text": "Devlog 5 - Templates Page Spent 4 hours and 52 minutes working on the templates page today. This page is going to be the main place where all invitation templates are managed, so I wanted to get the basic structure done before moving on to creating more templates. Templates Grid The first thing I worked on was the layout. I switched the page to a responsive grid system and started building the actual templates page. I also added a Create Template card that is only visible to admins. Clicking the card opens a modal for creating new templates. Template Creation Modal The modal is still incomplete, but the basic flow is now working. Currently it has fields for: Template name HTML file name Preview image Template category Template fields There’s still quite a bit of work left to do here, but at least the structure is finally in place. Template Categories & Fields One thing I didn’t want to do was create a completely separate form for every invitation type. Instead, I’m building a system where templates can be configured using categories and predefined fields. const templateCategories = [ { id : \" wedding \" , name : \" Wedding \" }, { id : \" engagement \" , name : \" Engagement \" }, { id : \" birthday \" , name : \" Birthday \" } .... ] const templateFields = [ { id : \" eventTitle \" , label : \" Event Title \" , type : \" text \" , category : \" common \" }, { id : \" groomName \" , label : \" Groom Name \" , type : \" text \" , category : \" wedding \" } .... ] Right now I’ve added categories for weddings, birthdays, engagements, housewarmings, baby showers and several other event types. The field system should make adding future templates a lot easier. Small UI Improvements I also spent some time cleaning up the page and added a footer. The site is slowly starting to look more like an actual product instead of a collection of pages. Next The next step is finishing the template creation page and making the field selection system fully functional. Once that’s done, adding new templates should be much faster than it is right now."}, {"post_id": 8246, "ts": "2026-06-13T18:26:46Z", "hours": 1.1044, "text": "Devlog - 4 Today I connected my website to firestore for database I have implemented the saving of login information of user to user collection of firestore database This is the implementation code: service\\userService.js : async function saveUserLogin ( userRecord ) { return db . collection ( \" users \" ) . doc ( userRecord . uid ) . set ( { displayName : userRecord . displayName || null , email : userRecord . email , photoURL : userRecord . photoURL || null , lastLoginAt : new Date ( userRecord . metadata . lastSignInTime ) }, { merge : true } ) } service\\userService.js : router . post ( \" /sessionLogin \" , async ( req , res ) => { const idToken = req . body . idToken ; const expiresIn = 60 * 60 * 24 * 13 * 1000 ; try { const sessionCookie = await admin . auth (). createSessionCookie ( idToken , { expiresIn : expiresIn }); const options = { maxAge : expiresIn , httpOnly : true , secure : false }; const decodedClaims = await admin . auth (). verifySessionCookie ( sessionCookie , true ); const userRecord = await admin . auth (). getUser ( decodedClaims . uid ); await saveUserLogin ( userRecord ) res . cookie ( ' session ' , sessionCookie , options ) res . status ( 200 ). send ({ status : \" success \" }) } catch ( err ) { console . error ( err ) res . status ( 401 ). send ( ' Unauthorized request! ' ); } }) I also created the redirect from login page if login successful / refresh in login fail (these things where previously missing) Also there are many UI improvements made, that’s not written in this Devlog (●’◡’●)"}, {"post_id": 7934, "ts": "2026-06-13T07:31:13Z", "hours": 8.3672, "text": "Devlog Time spent: 8 hours 15 minutes across ~6 days This week I mostly worked on security-related improvements and continued work on the invitation template system. Security Fixes When I opened GitHub, I got a security notification. After checking it, I found that a Firebase client-side API key was present in the repository. I know Firebase client API keys are not secret credentials by themselves, but leaving them exposed can still make abuse easier, especially if other protections are missing. Since the project is still in development, I decided to clean it up now rather than later. What I did: Revoked the old API key Generated a new one Moved the configuration into environment variables Made sure sensitive files are not pushed to GitHub res . locals . firebaseClientCred = Buffer . from ( process . env . firebaseClientCred , \" base64 \" ) . toString ( \" utf-8 \" ); The long-term plan is to separate development and production configurations. Right now localhost access is required for development, so strict domain restrictions are not practical yet. Once the project is deployed, I plan to have: A development API configuration that allows localhost A production API configuration that only allows requests from the final website domain The developer configuration will stay out of production deployments. Even if development code is accidentally pushed, it should fail instead of exposing access that was never intended for production. The backend Firebase SDK setup was already safe, so most of this work was focused on the client-side configuration. Navbar Improvements I also implemented automatic navbar link highlighting. Instead of manually setting the active page for every route, the navbar now checks the current URL and highlights the correct link automatically. function highlightCurrentPageLink () { const currentPageUrl = window . location . pathname ; const links = document . querySelectorAll ( \" #navbar-ul li a \" ); links . forEach (( link ) => { const href = link . getAttribute ( \" href \" ); if ( href . split ( \" / \" )[ 1 ] === currentPageUrl . split ( \" / \" )[ 1 ]) { link . classList . add ( \" active \" ); } else { link . classList . remove ( \" active \" ); } }); } Small change, but it makes maintaining the navigation much easier. User Menu Worked on the user menu and logout functionality. Nothing huge here, but it is another piece of the authentication flow that is now coming together. Template System I created the HBS file structure for the template page and spent a lot of time thinking about how templates should actually be implemented. This is currently the biggest blocker. There are several ways to handle template rendering and customization, and I don’t want to lock myself into a design that becomes difficult to maintain later. A lot of the development time this week went into planning, experimenting, and changing approaches rather than writing large amounts of code. Next Create separate Firebase development and production configurations Add domain restrictions after deployment Continue work on the invitation template system Finish the template rendering workflow Improve user account features There is still a lot to do, but the project is becoming more stable and secure before moving further into feature development."}, {"post_id": 3693, "ts": "2026-06-06T18:57:54Z", "hours": 2.5967, "text": "Devlog-2: Today , I added a beautiful animation to the home page made the home page overall beautiful Also fixed a authentication error : the fix was simple - I accidently wrote (res, req) instead of (req, res) in express router Also completed the login page design What’s next : Surely build a footer tomorrow 😁 Also planning to create a template creation tool for Admin Note: the PHONE image have a cool animation effect. completely done by hands , no AI only used AI for clearing doubt"}, {"post_id": 2855, "ts": "2026-06-05T18:18:17Z", "hours": 8.5736, "text": "Login Page within 8h 33m , I made the home page, firebase auth, designed logo etc.. currently I am working on designing the ‘Login with google’ page I thought I should only submit and link the project after completing the full project … 😟 but I didn’t forget to connect hackatime 😁🥳"}]...
|
Title: InviteHub by @Mrithul_E | Stardance
Devlog Title: InviteHub by @Mrithul_E | Stardance
Devlogs:
Login Page within 8h 33m , I made the home page, firebase auth, designed logo etc.. currently I am working on designing the ‘Login with google’ page I thought I should only submit and link the project after completing the full project … 😟 but I didn’t forget to connect hackatime 😁🥳
Devlog-2: Today , I added a beautiful animation to the home page made the home page overall beautiful Also fixed a authentication error : the fix was simple - I accidently wrote (res, req) instead of (req, res) in express router Also completed the login page design What’s next : Surely build a footer tomorrow 😁 Also planning to create a template creation tool for Admin Note: the PHONE image have a cool animation effect. completely done by hands , no AI only used AI for clearing doubt
Devlog Time spent: 8 hours 15 minutes across ~6 days This week I mostly worked on security-related improvements and continued work on the invitation template system. Security Fixes When I opened GitHub, I got a security notification. After checking it, I found that a Firebase client-side API key was present in the repository. I know Firebase client API keys are not secret credentials by themselves, but leaving them exposed can still make abuse easier, especially if other protections are missing. Since the project is still in development, I decided to clean it up now rather than later. What I did: Revoked the old API key Generated a new one Moved the configuration into environment variables Made sure sensitive files are not pushed to GitHub res . locals . firebaseClientCred = Buffer . from ( process . env . firebaseClientCred , " base64 " ) . toString ( " utf-8 " ); The long-term plan is to separate development and production configurations. Right now localhost access is required for development, so strict domain restrictions are not practical yet. Once the project is deployed, I plan to have: A development API configuration that allows localhost A production API configuration that only allows requests from the final website domain The developer configuration will stay out of production deployments. Even if development code is accidentally pushed, it should fail instead of exposing access that was never intended for production. The backend Firebase SDK setup was already safe, so most of this work was focused on the client-side configuration. Navbar Improvements I also implemented automatic navbar link highlighting. Instead of manually setting the active page for every route, the navbar now checks the current URL and highlights the correct link automatically. function highlightCurrentPageLink () { const currentPageUrl = window . location . pathname ; const links = document . querySelectorAll ( " #navbar-ul li a " ); links . forEach (( link ) => { const href = link . getAttribute ( " href " ); if ( href . split ( " / " )[ 1 ] === currentPageUrl . split ( " / " )[ 1 ]) { link . classList . add ( " active " ); } else { link . classList . remove ( " active " ); } }); } Small change, but it makes maintaining the navigation much easier. User Menu Worked on the user menu and logout functionality. Nothing huge here, but it is another piece of the authentication flow that is now coming together. Template System I created the HBS file structure for the template page and spent a lot of time thinking about how templates should actually be implemented. This is currently the biggest blocker. There are several ways to handle template rendering and customization, and I don’t want to lock myself into a design that becomes difficult to maintain later. A lot of the development time this week went into planning, experimenting, and changing approaches rather than writing large amounts of code. Next Create separate Firebase development and production configurations Add domain restrictions after deployment Continue work on the invitation template system Finish the template rendering workflow Improve user account features There is still a lot to do, but the project is becoming more stable and secure before moving further into feature development.
Devlog - 4 Today I connected my website to firestore for database I have implemented the saving of login information of user to user collection of firestore database This is the implementation code: service\userService.js : async function saveUserLogin ( userRecord ) { return db . collection ( " users " ) . doc ( userRecord . uid ) . set ( { displayName : userRecord . displayName || null , email : userRecord . email , photoURL : userRecord . photoURL || null , lastLoginAt : new Date ( userRecord . metadata . lastSignInTime ) }, { merge : true } ) } service\userService.js : router . post ( " /sessionLogin " , async ( req , res ) => { const idToken = req . body . idToken ; const expiresIn = 60 * 60 * 24 * 13 * 1000 ; try { const sessionCookie = await admin . auth (). createSessionCookie ( idToken , { expiresIn : expiresIn }); const options = { maxAge : expiresIn , httpOnly : true , secure : false }; const decodedClaims = await admin . auth (). verifySessionCookie ( sessionCookie , true ); const userRecord = await admin . auth (). getUser ( decodedClaims . uid ); await saveUserLogin ( userRecord ) res . cookie ( ' session ' , sessionCookie , options ) res . status ( 200 ). send ({ status : " success " }) } catch ( err ) { console . error ( err ) res . status ( 401 ). send ( ' Unauthorized request! ' ); } }) I also created the redirect from login page if login successful / refresh in login fail (these things where previously missing) Also there are many UI improvements made, that’s not written in this Devlog (●’◡’●)
Devlog 5 - Templates Page Spent 4 hours and 52 minutes working on the templates page today. This page is going to be the main place where all invitation templates are managed, so I wanted to get the basic structure done before moving on to creating more templates. Templates Grid The first thing I worked on was the layout. I switched the page to a responsive grid system and started building the actual templates page. I also added a Create Template card that is only visible to admins. Clicking the card opens a modal for creating new templates. Template Creation Modal The modal is still incomplete, but the basic flow is now working. Currently it has fields for: Template name HTML file name Preview image Template category Template fields There’s still quite a bit of work left to do here, but at least the structure is finally in place. Template Categories & Fields One thing I didn’t want to do was create a completely separate form for every invitation type. Instead, I’m building a system where templates can be configured using categories and predefined fields. const templateCategories = [ { id : " wedding " , name : " Wedding " }, { id : " engagement " , name : " Engagement " }, { id : " birthday " , name : " Birthday " } .... ] const templateFields = [ { id : " eventTitle " , label : " Event Title " , type : " text " , category : " common " }, { id : " groomName " , label : " Groom Name " , type : " text " , category : " wedding " } .... ] Right now I’ve added categories for weddings, birthdays, engagements, housewarmings, baby showers and several other event types. The field system should make adding future templates a lot easier. Small UI Improvements I also spent some time cleaning up the page and added a footer. The site is slowly starting to look more like an actual product instead of a collection of pages. Next The next step is finishing the template creation page and making the field selection system fully functional. Once that’s done, adding new templates should be much faster than it is right now.
Devlog 6 - Template creation form In this 6h 44m, I made a lot of features but the main highlight was the work on the template creation form ( continuation of previous devlog) Story Time: Basically my project is a wedding invitation page generator. My website will have a lot of prebuild invitation template(HBS) for different different events So the point is different templates require different forms should be filled by the user. Therefore when the admin create different template, the admin should list the require fields for the form of the specific template. Problems faced: My thoughts was to make a prebuild list of fields, from that the admin should list them in specific order. Problem - 1 The first problem was there is no form element to do these. So i used a select element with a ‘Add’ btn. For the sorting, at first i used up/down button, but that wasn’t smooth. After researching I found sortable js. At first sortable js also was not smooth, I fixed that by removing some bootstrap classes from the tag. Problem - 2 The next problem I faced was I cant use required in the custom fields list maker, So I can’t make that field mandatory. Solution (simple) The solution was simple, I made a invisible <textarea required .....> , and add the list of fields to that in json string when the admin edited the list. Thank you for reading ❤️, Mrithul.
Continuing the writting of the first template for the site !!! basically my project is a invitation page builder, it needs a lot of custom template. | ▽ not complete yet
First template design completed !!! fully using Bootstrap , and some css
added a very very cool text area for entering description for each field completely build on bootstrap accordion check it out !!!
new knoledge unlocked: I can use : app . use ( ' /admin ' , requireAdmin , adminRouter ) instead of : app . use ( requireAdmin ) app . use ( ' /admin ' , adminRouter ) I know everybody knows this, but this is a knowledge to me
Added hackclub cdn to the project !!! At first it didn’t worked because of compatibly issue of new nodejs’s fetch and npm form-data module fixed using new build-in formData()
connected the admin only template creation form to the firestore AND also made the template cards load dynamically currently provided image is a placeholder This is admin page , only admin page have create template button
Researching on custom form builder On deep research on making a custom form builder form my each templates , I found : formeo, jquery form builder and survayJS
Switched from formeo to jquery form builder formeo doesn’t support many input types
Added delete template option for admin The delete option will delete the template from the database and also delete the thumbnail image stored in hackclub CDN
Added error messages in data submissions in rendered template form Added a 50 MB file size limit in file upload (for now only frontend checks are implemented, backend check is TODO).
Research: How to limit the total file size in a multipart/formData (Express.js) After many searches I found out that multer don’t support this I am planning to use Busboy directly
Handle multipart uploads with file size limits using busboy i want to limit the max total file upload to 50 MB, multer cant have this feature so I use busboy and wrote long long code to solve this problem code :
Handle multipart uploads with file size limits using busboy formidable ✓ In the last devlog I shared a very large code to limit max total requiest size using busboy. Yesterday , In a simple google search , the Google AI mode suggested me of Formidable previously idk formidable … So I learned about that , it made my code so tiny frontend logic was already there
Connected the form created using jquery forms to HackClub CDN My website is basically a site that have many templates for different kind of event. A user can select a template , this will redirect to a form. Each template have entirely different forms , each form is created by the Admin using a jquery form builder ui. Because these form structures are unknow to the server, the server dont know how much file input fields are there. so we cant set a limit on number of file input fields and per input size. So I set a 50 MB total upload limit using formidable before sending files to hackclub cdn. This makes the usage fair.
Added a option to write the template(HBS) and the form from frontend implemented: option to write the template(HBS) and the form from frontend hbs to CDN script 10 MB fields limit in template creation router (multer) Invitation total file size limit 50 MB (formidable) Invitation data processing and cleanup
added template and form rendering from Database
Reached initial working stage First working template added Added: render of hbs from cdn rendering of custom form from database
Added search option in templates Implemented using Fuse.js *images are placeholders
User experience improvement implemented: made the created invitation url return fron server to frontend removed unwanted console.log used for debugging made the “Get started” button in frontend functional Added: invitation link and copy button in invitation creation form submission page
Added ‘My invitations’ section in website Added My invitations section that shows the invitations created by that user. From here user can see the invitation, creation date, and user can also delete the invitation. Delete option will delete all files that are part of that invitation from the cdn, then delete the complete invitation from the db. And also added some minor fixes such as: webpage title issues added favicon etc…
Added confirmation for logout and Added redirect to the last visited URL in login Added redirect to the last visited URL in login Added confirmation for logout, and made the logout route a long random string
Added the pages such as About, privacy-policies etc… Added About, Privacy policies , Terms of service page in hbs and added the corresponding routers for it
Added README.md !! *Not comleted yet, no images and videos are added yet
Added demo video to the home page Updated README.md and also fixed many minor css and html issues
Fix: Chrome media hub staying active even when video stops fixed this by removing the src and loading the video again into chrome’s memory, this solves the problem .
Minor css fix removed many useless css code. Made it more good. not that the gradients are not generated by AI, instead it is generated by online CSS gradient maker. Don’t this that this is a AI generated/AI styled project. This site doesn’t have that much huge css to use AI. The Login with Google button is copied by some article in Medium. The gradient used in the home page Get Started button is custom made using CSS gradient generator The background image and the animated phone image is generated by Chatgpt. I don’t know whether this is contributing to the AI feel 🥲🥲😭😭 UPDATE: : By asking to shipwrights, they say that it was flagged and AI because it used AI generated images, which is not allowed. So i made it my self using canva, here it is:
full css and ui rework: Changed the background image Made the design and animation minimalistic updated the navbar and footer removed unwanted styling in css removed unwanted gradient from text made minimal footer
Some reworks readme updated added more gap in between the template card added the github link to the navbar changed some fonts in homepage and added some paragraph sections there
Minor security fixes as per GitHub security scan Inclusion of functionality from an untrusted source Client-side URL redirect using query in URL
Ships:
I made a website for creating digital invitation webpages by simply selecting a template and filling out a form. This can help reduce paper usage by decreasing printed inviation lol .. I faced many challenges during the development: Building the logic for creating different different forms for each and every templates Limiting the total file size in http request Building a UI for creating forms by Drag-and-Droping Couldn’t host in vercel because vercel blocks requests more that ~4 MB Admin centralized working (only admin can create templates, this ensures security) I am proud of dedecating 3 months to complete this project, without doing any other project. To run my project my project you will need firebase api key, and hackclub cdn api. But you can’t get the already created templates because those are stored in firebase.
I made a website for creating digital invitation webpages by simply selecting a template and filling out a form. This can help reduce paper usage by decreasing printed inviation lol .. I faced many challenges during the development: Building the logic for creating different different forms for each and every templates Limiting the total file size in http request Building a UI for creating forms by Drag-and-Droping Couldn’t host in vercel because vercel blocks requests more that ~4 MB Admin centralized working (only admin can create templates, this ensures security) I am proud of dedecating 3 months to complete this project, without doing any other project. To run my project my project you will need firebase api key, and hackclub cdn api. But you can’t get the already created templates because those are stored in firebase. what’s new in this ship 2 fixed some security vulnerability as per github code scan Added assets completely handmade with canva replaced many fonts in home page with cursive fonts added our mission section in the home page...
|
1793688850.1849666
|
1793775250.1849666
|
|
26816
|
My first slack bot! by @Sair | Stardance
|
Sair
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T19:04:40Z", "hours": 0.0, "multiplier": 1.01, "payout": 0, "blessing": "neutral", "text": "My own first slack bot Commands: /sairbot-ping - checks bots latency /sairbot-catfact - Cat fact /sairbot-rps + Rock; Paper; Scissors (Example: /sairbot-rps rock) - Rock Paper Scissors game Deployed on Nest", "repo": "https://github.com/Sairsides/Sair-Slack-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BDPJN8ZMF"}]...
|
[{"post_id": 17079, "ts": "202 [{"post_id": 17079, "ts": "2026-06-27T18:47:38Z", "hours": 0.3231, "text": "Added ping, cat fact command. Also added a RPS game. Didn’t log 23min because I forgot to setup Wakatime. Deployed on Nest."}]...
|
Title: My first slack bot! by @Sair | Stardance
D Title: My first slack bot! by @Sair | Stardance
Devlogs:
Added ping, cat fact command. Also added a RPS game. Didn’t log 23min because I forgot to setup Wakatime. Deployed on Nest.
Ships:
My own first slack bot Commands: /sairbot-ping - checks bots latency /sairbot-catfact - Cat fact /sairbot-rps + Rock; Paper; Scissors (Example: /sairbot-rps rock) - Rock Paper Scissors game Deployed on Nest...
|
1793688851.609816
|
1793775251.609816
|
|
29036
|
My very own WebOS by @benny | Stardance
|
benny
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T23:02:53Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A made a personalized web OS called Weby and it includes a couple of apps that allows everyone to have some insights onto who I am! This is the first time I’ve actively used HTML, CSS, and Java in order to make something of this scale so I’m pretty happy how far I was able to go. It does feature a click to enter loading screen that is paired with a startup sound (pretty dope ik). It has 3 apps that will show a variety of things about me ranging from hobbies to projects done. I won’t say anything more so please check it out if you would like! Thank you!", "repo": "https://github.com/bangzishu-huang/Weby", "demo": "https://bangzishu-huang.github.io/Weby/"}]...
|
[{"post_id": 22467, "ts": "202 [{"post_id": 22467, "ts": "2026-07-04T22:52:21Z", "hours": 3.1153, "text": "So today I was able to grind out and basically finish everything I wanted. I started off with making a projects app that was like a little carousel with arrows that showed some of my projects, then I was also able to make a Songs app, where I used spotify embedded to include 9 songs (in a 3x3 grid). I thought everything was going very well and I had to do some research for all the special functions of course. Then, I also added a loading screen where you had to click to enter and made a startup sound that would play. Pretty happy with my progress and loved how it came out!"}, {"post_id": 21911, "ts": "2026-07-04T02:45:22Z", "hours": 0.6467, "text": "Today it was pretty simple as I just worked on the my first app window and it was suppose to be a simple about me page. I had to fix a problem with the text not aligning to the middle at first for some reason and it was because I forgot to add flex into the window. I was also able to figure out how to add my socials along with their respective logos side by side with it all linked up. Next, I will be working on implementing probably more apps on my os!"}, {"post_id": 21237, "ts": "2026-07-03T02:16:54Z", "hours": 1.3383, "text": "I spent a bunch of time just working on creating an app icon inside Weby and I was just trying to figure out once again how html worked. I am not going to lie I did get lost in the sauce with the code when I first opened it up today because I had a mini brain fart, but then I was able to pick up from where I left off yesterday. Making the windows and new classes took me a while to figure out. Then, I had to also work on the orientation of the windows, basically meaning trying to bring the recently clicked window to the top of the section. Lastly, I worked a lot on just making all the code readable by leaving comments so that when other people, including myself, read the code I can follow through pretty easily. I also made sure to put everything to more condensed and simpler versions so I don’t have chunks of code when I can have lines."}, {"post_id": 20441, "ts": "2026-07-02T01:09:26Z", "hours": 1.9119, "text": "Today, I first started to work on the window outline and making the welcome screen pop up thing look good. I was just playing around with a lot of the code because this was my 2nd day actively using html to code an interface. After a while I was also able to get a background and a header up and running. There were a lot of times I had to go google issues; for example, when I was working on the headers the “Weby” was suppose to be directly in the center of the webpage but for some reason it was a little offsetted. After getting all the basic screen set up done I was able to move and do more detailed work for the screen. I made a close and open button, and also blurred the background of my welcome screen to make everything look more pleasing and function better. I’m looking forward to making apps on the OS next!"}, {"post_id": 19590, "ts": "2026-06-30T22:50:41Z", "hours": 0.6792, "text": "Soooo I started the new webos project that I happened to find under the missions tab. I think that it’s such a cool project that I will be able to do. This will also be the first time for me to code in HTML and also CSS so it would be a really good learning experience for me. At first you can see I was just messing around with the fonts and also the possibilities of what you can do with HTML. I imported a shrimp dish on as a computer so I could see how the import picture worked. Then after a bit of figuring out how html functioned I was able to make kind of a basic intro/welcome screen that would include my socials and just a quick introduction to weby (you can see on the blue background pic on the right)."}]...
|
Title: My very own WebOS by @benny | Stardance
De Title: My very own WebOS by @benny | Stardance
Devlogs:
Soooo I started the new webos project that I happened to find under the missions tab. I think that it’s such a cool project that I will be able to do. This will also be the first time for me to code in HTML and also CSS so it would be a really good learning experience for me. At first you can see I was just messing around with the fonts and also the possibilities of what you can do with HTML. I imported a shrimp dish on as a computer so I could see how the import picture worked. Then after a bit of figuring out how html functioned I was able to make kind of a basic intro/welcome screen that would include my socials and just a quick introduction to weby (you can see on the blue background pic on the right).
Today, I first started to work on the window outline and making the welcome screen pop up thing look good. I was just playing around with a lot of the code because this was my 2nd day actively using html to code an interface. After a while I was also able to get a background and a header up and running. There were a lot of times I had to go google issues; for example, when I was working on the headers the “Weby” was suppose to be directly in the center of the webpage but for some reason it was a little offsetted. After getting all the basic screen set up done I was able to move and do more detailed work for the screen. I made a close and open button, and also blurred the background of my welcome screen to make everything look more pleasing and function better. I’m looking forward to making apps on the OS next!
I spent a bunch of time just working on creating an app icon inside Weby and I was just trying to figure out once again how html worked. I am not going to lie I did get lost in the sauce with the code when I first opened it up today because I had a mini brain fart, but then I was able to pick up from where I left off yesterday. Making the windows and new classes took me a while to figure out. Then, I had to also work on the orientation of the windows, basically meaning trying to bring the recently clicked window to the top of the section. Lastly, I worked a lot on just making all the code readable by leaving comments so that when other people, including myself, read the code I can follow through pretty easily. I also made sure to put everything to more condensed and simpler versions so I don’t have chunks of code when I can have lines.
Today it was pretty simple as I just worked on the my first app window and it was suppose to be a simple about me page. I had to fix a problem with the text not aligning to the middle at first for some reason and it was because I forgot to add flex into the window. I was also able to figure out how to add my socials along with their respective logos side by side with it all linked up. Next, I will be working on implementing probably more apps on my os!
So today I was able to grind out and basically finish everything I wanted. I started off with making a projects app that was like a little carousel with arrows that showed some of my projects, then I was also able to make a Songs app, where I used spotify embedded to include 9 songs (in a 3x3 grid). I thought everything was going very well and I had to do some research for all the special functions of course. Then, I also added a loading screen where you had to click to enter and made a startup sound that would play. Pretty happy with my progress and loved how it came out!
Ships:
A made a personalized web OS called Weby and it includes a couple of apps that allows everyone to have some insights onto who I am! This is the first time I’ve actively used HTML, CSS, and Java in order to make something of this scale so I’m pretty happy how far I was able to go. It does feature a click to enter loading screen that is paired with a startup sound (pretty dope ik). It has 3 apps that will show a variety of things about me ranging from hobbies to projects done. I won’t say anything more so please check it out if you would like! Thank you!...
|
1793688852.7496684
|
1793775252.7496684
|
|
24884
|
Art Swap Website by @PEPERI | Stardance
|
PEPERI
|
1
|
12.02
|
69
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T15:44:15Z", "hours": 11.0, "multiplier": 6.5, "payout": 69, "blessing": "neutral", "text": "I made a website about a community art swap I want to start! Challenges were getting it to be accessible for smaller screens and I enjoyed seeing it come from design to life.", "repo": "https://github.com/peppapigX10/ArtSwap", "demo": "https://peppapigx10.github.io/ArtSwap/"}]...
|
[{"post_id": 29889, "ts": "202 [{"post_id": 29889, "ts": "2026-07-17T01:36:23Z", "hours": 0.5747, "text": "Fixed a gap between how to join section and made edits to page2 (home) photo"}, {"post_id": 29678, "ts": "2026-07-16T19:02:20Z", "hours": 0.4453, "text": "Just fixed the menu rect to match the background (added gradient)"}, {"post_id": 28927, "ts": "2026-07-15T15:15:54Z", "hours": 5.7322, "text": "Basically finished the website made it accessible for smaller screens, also the menu rect used to be an image (cause I didn’t know there is a blur function in css) so I changed that, couldn’t fit it all in the screenshot but its a whole website not just this page"}, {"post_id": 16036, "ts": "2026-06-26T01:31:16Z", "hours": 4.8975, "text": "Working on a community art swap! Made the overall website, buttons are functionable! Will work on replacing placeholder imgs in the how to join section"}]...
|
Title: Art Swap Website by @PEPERI | Stardance
De Title: Art Swap Website by @PEPERI | Stardance
Devlogs:
Working on a community art swap! Made the overall website, buttons are functionable! Will work on replacing placeholder imgs in the how to join section
Basically finished the website made it accessible for smaller screens, also the menu rect used to be an image (cause I didn’t know there is a blur function in css) so I changed that, couldn’t fit it all in the screenshot but its a whole website not just this page
Just fixed the menu rect to match the background (added gradient)
Fixed a gap between how to join section and made edits to page2 (home) photo
Ships:
I made a website about a community art swap I want to start! Challenges were getting it to be accessible for smaller screens and I enjoyed seeing it come from design to life....
|
1793688853.9657335
|
1793775253.9657335
|
|
21740
|
Cosmic Bounce by @kk_vun | Stardance
|
kk_vun
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T20:58:50Z", "hours": 1.0, "multiplier": 1.19, "payout": 1, "blessing": "neutral", "text": "I made a flappy bird clone but you are a star with fuel", "repo": "https://github.com/kkv-lang/cosmic-bounce", "demo": "https://kkv-lang.github.io/cosmic-bounce/"}]...
|
[{"post_id": 11445, "ts": "202 [{"post_id": 11445, "ts": "2026-06-18T18:30:36Z", "hours": 0.5228, "text": "Finished the core features for Cosmic Bounce! What I did:Built the layout using HTML and styled the space canvas background with CSS.Wrote the game logic in JavaScript, including gravity physics so the star falls.Added features like player lives, XP, an energy fuel gauge, and custom sound effects for jumping and collecting items.Next steps: Testing the game loop and polishing the mechanics!"}]...
|
Title: Cosmic Bounce by @kk_vun | Stardance
Devlo Title: Cosmic Bounce by @kk_vun | Stardance
Devlogs:
Finished the core features for Cosmic Bounce! What I did:Built the layout using HTML and styled the space canvas background with CSS.Wrote the game logic in JavaScript, including gravity physics so the star falls.Added features like player lives, XP, an energy fuel gauge, and custom sound effects for jumping and collecting items.Next steps: Testing the game loop and polishing the mechanics!
Ships:
I made a flappy bird clone but you are a star with fuel...
|
1793688855.1228147
|
1793775255.1228147
|
|
16140
|
My very own WebOS by @sircheetodust | Stardance
|
sircheetodust
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T22:20:05Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is unnamed OS. Feature list: Custom window system Allows window resizing Easier app creation(one JavaScript command) Completely custom notepad app(No Pad - -) Saving to browser’s localstorage so that notes are saved even through reloads and closing and reopening the website Loading screen simulator Game of the year, source code in its folder This is my first project for hack club so any feedback is appreciated", "repo": "https://github.com/word9317/webOs", "demo": "https://word9317.github.io/webOs/"}]...
|
[{"post_id": 7727, "ts": "2026 [{"post_id": 7727, "ts": "2026-06-12T21:55:44Z", "hours": 0.54, "text": "Updated the readme to be more comprehensive"}, {"post_id": 7697, "ts": "2026-06-12T21:05:35Z", "hours": 1.0128, "text": "Added a notepad app I added NoPad –, it has saving that persists through reloads and text that tells you if its saved or not!"}, {"post_id": 7559, "ts": "2026-06-12T17:14:15Z", "hours": 1.1333, "text": "Added a new app! Ever since i migrated to a new window system, adding apps is so much easier. You create your app as an html file and just add a shortcut to the desktop to open it. I added a very fun game called loading screen simulator. I am going to make some more apps soon!"}, {"post_id": 7204, "ts": "2026-06-12T00:58:04Z", "hours": 1.5847, "text": "Lots of work was done! I redid the background and also completely revised the window system. Now the window has maximizing. Window system is polished so that apps can be launched via a javascript command(scripts are revised versions of scripts i used in a previous project)"}, {"post_id": 7078, "ts": "2026-06-11T21:07:39Z", "hours": 1.6397, "text": "Created a basic window system. Added widgets. Going to continue with the tutorial and then customize it"}]...
|
Title: My very own WebOS by @sircheetodust | Stard Title: My very own WebOS by @sircheetodust | Stardance
Devlogs:
Created a basic window system. Added widgets. Going to continue with the tutorial and then customize it
Lots of work was done! I redid the background and also completely revised the window system. Now the window has maximizing. Window system is polished so that apps can be launched via a javascript command(scripts are revised versions of scripts i used in a previous project)
Added a new app! Ever since i migrated to a new window system, adding apps is so much easier. You create your app as an html file and just add a shortcut to the desktop to open it. I added a very fun game called loading screen simulator. I am going to make some more apps soon!
Added a notepad app I added NoPad –, it has saving that persists through reloads and text that tells you if its saved or not!
Updated the readme to be more comprehensive
Ships:
This is unnamed OS. Feature list: Custom window system Allows window resizing Easier app creation(one JavaScript command) Completely custom notepad app(No Pad - -) Saving to browser’s localstorage so that notes are saved even through reloads and closing and reopening the website Loading screen simulator Game of the year, source code in its folder This is my first project for hack club so any feedback is appreciated...
|
1793688856.2876785
|
1793775256.2876785
|
|
52260
|
E-Commerce by @safwan | Stardance
|
safwan
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T15:59:56Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this simple e-commerce home page only.", "repo": "https://github.com/Ssafwa/E-commerce-KUMO", "demo": "https://e-commerce-kumo.vercel.app/"}]...
|
[{"post_id": 55429, "ts": "202 [{"post_id": 55429, "ts": "2026-08-27T08:02:04Z", "hours": 4.8942, "text": "i am just finished this simple basic e-commerce webite"}]...
|
Title: E-Commerce by @safwan | Stardance
Devlogs: Title: E-Commerce by @safwan | Stardance
Devlogs:
i am just finished this simple basic e-commerce webite
Ships:
this simple e-commerce home page only....
|
1793688857.4421628
|
1793775257.4421628
|
|
9443
|
Better Music by @muntean_andrew | Stardance
|
muntean_andrew
|
2
|
33.0
|
323
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T09:14:00Z", "hours": 20.0, "multiplier": 8.54, "payout": 202, "blessing": "neutral", "text": "I built Better Music, a lightweight music player designed for seamless audio playback and intuitive library management. It features an instant search-as-you-type engine, interactive queue management, customizable playlist/album details, detailed listening activity tracking, can read synced/unsynced lyrics tags from the music files and show them like Spotify, a “Permanent Queue” (PQ) feature for when you want listen to a list of particular songs for just that one moment and don’t want to create a whole new playlist for it and you can customize it’s color palette and even the base border radius to your liking in the settings. To bring this to life, I combined the desktop application capabilities of Electron with a robust local relational database powered by SQLite 3, all wrapped in a sleek, responsive frontend built using HTML5, CSS, SCSS and JavaScript. This is just an update and the majority of the time spent on the project was used to make improvements in the backend management of the song objects and to make the UI better reflect and update according to the data in the backend. But also I’ve added lyrics support and if your music files have lyrics tags embedded in them the app will take full advantage of them by enabling you to see each verse when it is singed and also skip to that one part you like the most just by clicking on your favorite line in the track. Testing the app is incredibly simple—there is no need to clone deep source code dependencies or set up a complex development build environment. Where to get it: Head straight over to the Releases section of this repository. How to run it: Download the compiled .zip file for your platform, extract its contents into any folder on your computer, and double-click the main application executable (e.g., Better-Music.exe). Note on Updates: If you are testing store-packaged builds or encountered deployment errors (like MSIX package revision conflicts in the Partner Center), utilizing the raw ZIP release is the fastest, cleanest way to experience the app right now.", "repo": "https://github.com/AliendsOG/Better-Music", "demo": "https://github.com/AliendsOG/Better-Music/releases/tag/better-music"}, {"ship_num": 2, "ts": "2026-06-15T15:17:37Z", "hours": 13.0, "multiplier": 9.67, "payout": 121, "blessing": "neutral", "text": "I built Better Music, a lightweight music player designed for seamless audio playback and intuitive library management. It features an instant search-as-you-type engine, interactive queue management, customizable playlist/album details, detailed listening activity tracking, a “Permanent Queue” (PQ) feature for when you want listen to a list of particular songs for just that one moment and don’t want to create a whole new playlist for it and you can customize it’s color palette to your liking in the settings. To bring this to life, I combined the desktop application capabilities of Electron with a robust local relational database powered by SQLite 3, all wrapped in a sleek, responsive frontend built using HTML5, CSS, SCSS and JavaScript. The challenging part was the steep learning curve as I hadn’t done anything on this scale before. I had to learn to connect the 2 Electron processes together seamlessly. Furthermore I had to dive into the world of databases with SQLite 3, which was uncharted territory for me. I had to use AI to help me learn these things and also to brainstorm ideas about hoe to optimize the app. For instance, when the idea of the search-as-you-type feature came up to me I envisioned a kind of tree structure with letters and that for every song, album, playlist name the app would create the branches in the tree so it would be a very fast and efficient search algorithm, and when I talked to the AI about it I found out that this kind of structure is called a trie. I am really proud that I’ve managed to build a clean, responsive and fast music player that tracks the user’s listening activity and stores it on device. Also it was very exciting when I tested the search feature and it worked perfectly. I’m also proud of the engineering journey itself. I utilized Gemini as an active learning collaborator to help me unpack the architectural patterns of Electron and master data persistence with SQLite 3. Turning that complex technical guidance into a functional, polished desktop product was incredibly rewarding. Testing the app is incredibly simple—there is no need to clone deep source code dependencies or set up a complex development build environment. Where to get it: Head straight over to the Releases section of this repository. How to run it: Download the compiled .zip file for your platform, extract its contents into any folder on your computer, and double-click the main application executable (e.g., Better-Music.exe). Note on Updates: If you are testing store-packaged builds or encountered deployment errors (like MSIX package revision conflicts in the Partner Center), utilizing the raw ZIP release is the fastest, cleanest way to experience the app right now.", "repo": "https://github.com/AliendsOG/Better-Music", "demo": "https://github.com/AliendsOG/Better-Music/releases/tag/better-music"}]...
|
[{"post_id": 74382, "ts": "202 [{"post_id": 74382, "ts": "2026-09-27T09:04:01Z", "hours": 1.0467, "text": "This is the last devlog before shipping the project update. This has been an exciting journey and I am very satisfied with the result! I do wish there would be a bit more time left for the event to continue so I could ship even more things but all good things must come to an end, and this one is a happy ending. I’ve made the necessary last minute touches to make sure that everything works as it should."}, {"post_id": 74114, "ts": "2026-09-26T18:26:03Z", "hours": 1.6697, "text": "Added new ways to customize the player to the user’s liking and fixed that prevented the app from reading the user_version of the database which in return made the app “update” the DB everytime it started."}, {"post_id": 73281, "ts": "2026-09-24T18:58:58Z", "hours": 0.4853, "text": "YEEEEEESS, FINALLLYYYYYY, we have synced lyrics in the app. I know it’s not the most glamorous UI at the moment, but it is still something, and the other music players don’t even do this, like at most they show the lyrics with the timestamps and that’s it, no scaling of the verse, nothing. In future updates certainly I’ll make the UI more polished because it need a lot of it. Still I am happy that I’ve made it this far and after a bit of clean up and maybe some optimizations I’ll ship the project."}, {"post_id": 73261, "ts": "2026-09-24T18:10:26Z", "hours": 1.5067, "text": "I’ve finally found the culprit that prevented me from getting the synced lyrics, now the app can read the synced lyrics from music filed. YEEEEEEE Now the “only” thing is to make the UI for them, which I hope would be easy and fast. 😅"}, {"post_id": 73191, "ts": "2026-09-24T15:40:21Z", "hours": 2.4517, "text": "Trying to add lyrics to the app. But it is a bit of a mess cause in the Samsung Music and Apple Music apps these files contain time stamps for each verse and so I was thinking to read those time stamps and to highlight the verse that is played at that time, but my app doesn’t read those things and I don’t know why. An explanation might be that those apps ping free open source databases of lyrics based on the song details, but I am not really sure."}, {"post_id": 69252, "ts": "2026-09-16T17:55:55Z", "hours": 4.7486, "text": "Another day, another restructuring I guess. 😅 I’ve decided to give each album an id instead of relying on it’s name as the identifier as I did previously. Also I’ve changed the Play function to work with song ids and album ids instead of names. This is because if the name of the song or the album had any of these 2 characters: ’ or “ it would mess up with the HTML structure and the song would not play if the user clicked on it. Not gonna lie, I think that my code now is a little spaghetti and for sure someone with more experience and knowledge on how to structure a music player would have done a much better job than me at this, but still. The main caveat that I think could appear in the future is that the Play function can’t take numbered ids for playlists and I have to rely in the playlist’s name because the function would have no way to distinguish between them at the moment and I don’t want to make another spaghetti to fix this. 😅 In other news, I have successfully changed the backend to update the DB version for the user of the older version of the app and to add the new “lyrics” column and also the app can read the embedded lyrics from the music files. Now the “only” thing remaining is to add the lyrics to the UI and to parse the strings and make the verses synchronize with the song and this feature would be fully implemented."}, {"post_id": 57422, "ts": "2026-08-29T15:54:13Z", "hours": 2.9864, "text": "After successfully changing the song objects management under the hood from the previous devlog I now added an indicator for which song is currently playing. For now I’ve just set the background of the song to be the primary color selected by the user. Also I’ve changed the border radius for everything to be based on one variable so that the user could change it in the settings (but didn’t yet implement the UI for that) cause everyone has their own preference for these things. The first screenshot is with the border radius set a bit higher (30px) than my default one (23px), and the second one is with the border radius set to 0. Additionally I am changing the SQLite db in the backend to support lyrics because I want to add them to the app."}, {"post_id": 56489, "ts": "2026-08-28T08:43:54Z", "hours": 4.7514, "text": "I am currently working on optimizing the code so that changes like adding songs to a playlist or liking a song update instantly across all pages because this was a flaw of my old architecture of the app cause I didn’t just have 1 list of song objects that every album and artist referenced to but instead every album and artist had their own song objects and the list of favorite songs was also composed of song object. So it was a mess of duplicate song objects. Now I am changing things so that there is only one list of song object and albums have just a list of song ids in them so they reference the song object list, this way each change is global. This would hopefully fix the current synchronization issues that sometimes occur in the current version. This change would also allow me to add an indicator that a song is playing when the user looks at an album from which a song plays currently. Additionally I want to add a listening history page where the user can see their listening activity on the app and also maybe add some rewards depending on how much time they spent listening to an artist or album to gamify the experience a little."}, {"post_id": 8658, "ts": "2026-06-14T11:47:22Z", "hours": 0.4289, "text": "Solving some App Manifest problems"}, {"post_id": 8040, "ts": "2026-06-13T12:20:46Z", "hours": 1.7347, "text": "Updating the package on the Microsoft Store"}, {"post_id": 7956, "ts": "2026-06-13T08:50:15Z", "hours": 1.2564, "text": "Added some customization options and a settings menu"}, {"post_id": 7328, "ts": "2026-06-12T06:33:15Z", "hours": 1.7297, "text": "Updating the interface a little"}, {"post_id": 4874, "ts": "2026-06-08T13:08:06Z", "hours": 3.1572, "text": "Implemented search functionality"}, {"post_id": 3541, "ts": "2026-06-06T15:01:03Z", "hours": 2.7919, "text": "Adding clear queue button and a Permanent Queue or Temporary Playlist feature that saves the songs that you add to the queue even after you listen to them so you can set it to repeat all and still have the songs that you wanted"}, {"post_id": 3394, "ts": "2026-06-06T09:28:56Z", "hours": 1.4672, "text": "I implemented the function of changing the name and cover of a playlist"}]...
|
Title: Better Music by @muntean_andrew | Stardance Title: Better Music by @muntean_andrew | Stardance
Devlogs:
I implemented the function of changing the name and cover of a playlist
Adding clear queue button and a Permanent Queue or Temporary Playlist feature that saves the songs that you add to the queue even after you listen to them so you can set it to repeat all and still have the songs that you wanted
Implemented search functionality
Updating the interface a little
Added some customization options and a settings menu
Updating the package on the Microsoft Store
Solving some App Manifest problems
I am currently working on optimizing the code so that changes like adding songs to a playlist or liking a song update instantly across all pages because this was a flaw of my old architecture of the app cause I didn’t just have 1 list of song objects that every album and artist referenced to but instead every album and artist had their own song objects and the list of favorite songs was also composed of song object. So it was a mess of duplicate song objects. Now I am changing things so that there is only one list of song object and albums have just a list of song ids in them so they reference the song object list, this way each change is global. This would hopefully fix the current synchronization issues that sometimes occur in the current version. This change would also allow me to add an indicator that a song is playing when the user looks at an album from which a song plays currently. Additionally I want to add a listening history page where the user can see their listening activity on the app and also maybe add some rewards depending on how much time they spent listening to an artist or album to gamify the experience a little.
After successfully changing the song objects management under the hood from the previous devlog I now added an indicator for which song is currently playing. For now I’ve just set the background of the song to be the primary color selected by the user. Also I’ve changed the border radius for everything to be based on one variable so that the user could change it in the settings (but didn’t yet implement the UI for that) cause everyone has their own preference for these things. The first screenshot is with the border radius set a bit higher (30px) than my default one (23px), and the second one is with the border radius set to 0. Additionally I am changing the SQLite db in the backend to support lyrics because I want to add them to the app.
Another day, another restructuring I guess. 😅 I’ve decided to give each album an id instead of relying on it’s name as the identifier as I did previously. Also I’ve changed the Play function to work with song ids and album ids instead of names. This is because if the name of the song or the album had any of these 2 characters: ’ or “ it would mess up with the HTML structure and the song would not play if the user clicked on it. Not gonna lie, I think that my code now is a little spaghetti and for sure someone with more experience and knowledge on how to structure a music player would have done a much better job than me at this, but still. The main caveat that I think could appear in the future is that the Play function can’t take numbered ids for playlists and I have to rely in the playlist’s name because the function would have no way to distinguish between them at the moment and I don’t want to make another spaghetti to fix this. 😅 In other news, I have successfully changed the backend to update the DB version for the user of the older version of the app and to add the new “lyrics” column and also the app can read the embedded lyrics from the music files. Now the “only” thing remaining is to add the lyrics to the UI and to parse the strings and make the verses synchronize with the song and this feature would be fully implemented.
Trying to add lyrics to the app. But it is a bit of a mess cause in the Samsung Music and Apple Music apps these files contain time stamps for each verse and so I was thinking to read those time stamps and to highlight the verse that is played at that time, but my app doesn’t read those things and I don’t know why. An explanation might be that those apps ping free open source databases of lyrics based on the song details, but I am not really sure.
I’ve finally found the culprit that prevented me from getting the synced lyrics, now the app can read the synced lyrics from music filed. YEEEEEEE Now the “only” thing is to make the UI for them, which I hope would be easy and fast. 😅
YEEEEEESS, FINALLLYYYYYY, we have synced lyrics in the app. I know it’s not the most glamorous UI at the moment, but it is still something, and the other music players don’t even do this, like at most they show the lyrics with the timestamps and that’s it, no scaling of the verse, nothing. In future updates certainly I’ll make the UI more polished because it need a lot of it. Still I am happy that I’ve made it this far and after a bit of clean up and maybe some optimizations I’ll ship the project.
Added new ways to customize the player to the user’s liking and fixed that prevented the app from reading the user_version of the database which in return made the app “update” the DB everytime it started.
This is the last devlog before shipping the project update. This has been an exciting journey and I am very satisfied with the result! I do wish there would be a bit more time left for the event to continue so I could ship even more things but all good things must come to an end, and this one is a happy ending. I’ve made the necessary last minute touches to make sure that everything works as it should.
Ships:
I built Better Music, a lightweight music player designed for seamless audio playback and intuitive library management. It features an instant search-as-you-type engine, interactive queue management, customizable playlist/album details, detailed listening activity tracking, a “Permanent Queue” (PQ) feature for when you want listen to a list of particular songs for just that one moment and don’t want to create a whole new playlist for it and you can customize it’s color palette to your liking in the settings. To bring this to life, I combined the desktop application capabilities of Electron with a robust local relational database powered by SQLite 3, all wrapped in a sleek, responsive frontend built using HTML5, CSS, SCSS and JavaScript. The challenging part was the steep learning curve as I hadn’t done anything on this scale before. I had to learn to connect the 2 Electron processes together seamlessly. Furthermore I had to dive into the world of databases with SQLite 3, which was uncharted territory for me. I had to use AI to help me learn these things and also to brainstorm ideas about hoe to optimize the app. For instance, when the idea of the search-as-you-type feature came up to me I envisioned a kind of tree structure with letters and that for every song, album, playlist name the app would create the branches in the tree so it would be a very fast and efficient search algorithm, and when I talked to the AI about it I found out that this kind of structure is called a trie. I am really proud that I’ve managed to build a clean, responsive and fast music player that tracks the user’s listening activity and stores it on device. Also it was very exciting when I tested the search feature and it worked perfectly. I’m also proud of the engineering journey itself. I utilized Gemini as an active learning collaborator to help me unpack the architectural patterns of Electron and master data persistence with SQLite 3. Turning that complex technical guidance into a functional, polished desktop product was incredibly rewarding. Testing the app is incredibly simple—there is no need to clone deep source code dependencies or set up a complex development build environment. Where to get it: Head straight over to the Releases section of this repository. How to run it: Download the compiled .zip file for your platform, extract its contents into any folder on your computer, and double-click the main application executable (e.g., Better-Music.exe). Note on Updates: If you are testing store-packaged builds or encountered deployment errors (like MSIX package revision conflicts in the Partner Center), utilizing the raw ZIP release is the fastest, cleanest way to experience the app right now.
I built Better Music, a lightweight music player designed for seamless audio playback and intuitive library management. It features an instant search-as-you-type engine, interactive queue management, customizable playlist/album details, detailed listening activity tracking, can read synced/unsynced lyrics tags from the music files and show them like Spotify, a “Permanent Queue” (PQ) feature for when you want listen to a list of particular songs for just that one moment and don’t want to create a whole new playlist for it and you can customize it’s color palette and even the base border radius to your liking in the settings. To bring this to life, I combined the desktop application capabilities of Electron with a robust local relational database powered by SQLite 3, all wrapped in a sleek, responsive frontend built using HTML5, CSS, SCSS and JavaScript. This is just an update and the majority of the time spent on the project was used to make improvements in the backend management of the song objects and to make the UI better reflect and update according to the data in the backend. But also I’ve added lyrics support and if your music files have lyrics tags embedded in them the app will take full advantage of them by enabling you to see each verse when it is singed and also skip to that one part you like the most just by clicking on your favorite line in the track. Testing the app is incredibly simple—there is no need to clone deep source code dependencies or set up a complex development build environment. Where to get it: Head straight over to the Releases section of this repository. How to run it: Download the compiled .zip file for your platform, extract its contents into any folder on your computer, and double-click the main application executable (e.g., Better-Music.exe). Note on Updates: If you are testing store-packaged builds or encountered deployment errors (like MSIX package revision conflicts in the Partner Center), utilizing the raw ZIP release is the fastest, cleanest way to experience the app right now....
|
1793688858.3477867
|
1793775258.3477867
|
|
31098
|
egraich_dev by @egraich | Stardance
|
egraich
|
1
|
30.95
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T00:23:09Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first website ever! It was so hard to understand the tag structure in html after the familiar function structure in my stack: Python & C++. I dreamed of having a personal website for a beautiful email address :) I made my site in a neon style and I like it. I googled some SVG icons for contact links and they look cool with the custom color style of my website.", "repo": "https://github.com/egraich/egraich_dev", "demo": "https://egraich.dev"}]...
|
[{"post_id": 40613, "ts": "202 [{"post_id": 40613, "ts": "2026-08-04T08:34:59Z", "hours": 5.9519, "text": "Haven’t dropped a devlog in a minute since I was taking a break, but I spent the last few days quietly cleaning up my backend setup. My website is now completely on Cloudflare Pages, hooked right into my DNS management. It’s way more convenient to have everything managed in a single place. Also set up a _redirects file. Now, instead of throwing around ugly, long links like: discord.com/users/1024683767488585819 I can literally just type egraich.dev/ds (or /discord ). Same goes for GitHub, Telegram, ORCID and the rest. To top it off, I enabled Cloudflare email forwarding. Any random mail sent to [email protected] goes straight to my personal Gmail. Boom, free professional email!"}, {"post_id": 26930, "ts": "2026-07-12T00:22:48Z", "hours": 0.5589, "text": "I’ve added my avatar as a favicon, but creating a custom vector logo sounds like a cool project for the future 🤔"}, {"post_id": 26915, "ts": "2026-07-11T23:45:10Z", "hours": 0.7536, "text": "I reworked README and add script fo automatic year-updates in copyright-footer. Now deployed! https://egraich.github.io/egraich_dev/"}, {"post_id": 26896, "ts": "2026-07-11T23:00:07Z", "hours": 23.3711, "text": "I Spent a lot of time to understand web sites structure after Python and C++ 😑"}]...
|
Title: egraich_dev by @egraich | Stardance
Devlog Title: egraich_dev by @egraich | Stardance
Devlogs:
I Spent a lot of time to understand web sites structure after Python and C++ 😑
I reworked README and add script fo automatic year-updates in copyright-footer. Now deployed! https://egraich.github.io/egraich_dev/
I’ve added my avatar as a favicon, but creating a custom vector logo sounds like a cool project for the future 🤔
Haven’t dropped a devlog in a minute since I was taking a break, but I spent the last few days quietly cleaning up my backend setup. My website is now completely on Cloudflare Pages, hooked right into my DNS management. It’s way more convenient to have everything managed in a single place. Also set up a _redirects file. Now, instead of throwing around ugly, long links like: discord.com/users/1024683767488585819 I can literally just type egraich.dev/ds (or /discord ). Same goes for GitHub, Telegram, ORCID and the rest. To top it off, I enabled Cloudflare email forwarding. Any random mail sent to [email protected] goes straight to my personal Gmail. Boom, free professional email!
Ships:
I made my first website ever! It was so hard to understand the tag structure in html after the familiar function structure in my stack: Python & C++. I dreamed of having a personal website for a beautiful email address :) I made my site in a neon style and I like it. I googled some SVG icons for contact links and they look cool with the custom color style of my website....
|
1793688859.644512
|
1793775259.644512
|
|
26610
|
MoSimulator Auto System by @sircheetodust | Starda MoSimulator Auto System by @sircheetodust | Stardance...
|
sircheetodust
|
1
|
5.12
|
39
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T20:54:12Z", "hours": 3.0, "multiplier": 11.56, "payout": 39, "blessing": "neutral", "text": "This is my MoSimulator Auto System. It allows user’s to create their own FRC Auto path in MoSimulator via logging key presses and assigning time stamps. User’s can save these Auto paths and even share them with others. Feedback is welcome!", "repo": "https://github.com/word9317/mosimulatorAutos", "demo": "https://github.com/word9317/mosimulatorAutos/releases/tag/Latest"}]...
|
[{"post_id": 27338, "ts": "202 [{"post_id": 27338, "ts": "2026-07-12T20:33:22Z", "hours": 0.3781, "text": "Started working on a method to get controller support working. This works by using hidHide, and adding the program as an exception, and then creating a virtual game pad and relaying inputs from the controller to the fake gamepad."}, {"post_id": 25637, "ts": "2026-07-10T01:28:52Z", "hours": 1.7436, "text": "Minor update with tkinter ui and ability to change keybinds"}, {"post_id": 17819, "ts": "2026-06-28T19:09:51Z", "hours": 1.5533, "text": "I added saving and loading! Auto’s can be shared now but there are a few requirements to run and share your auto’s such as stable framerate and consistent robot positioning. I also updated the readme. All that is left is improving the GitHub repo’s usability"}, {"post_id": 17357, "ts": "2026-06-28T03:22:33Z", "hours": 1.3317, "text": "Added UI and now playback semi-works UI has some broken parts. First run is my play. The second and third are the program’s. The OBS overlay thinks that im pressing the keys since the python program uses keyboard =D https://youtu.be/uFGnG4JAFzI <-testing video"}, {"post_id": 16579, "ts": "2026-06-26T23:30:42Z", "hours": 0.5053, "text": "I just started I made a basic key logger that tracks the keys used on rebuilt 2026 mosimulator. Currently it gives a bunch of detailed info on what keys you pressed"}]...
|
Title: MoSimulator Auto System by @sircheetodust | Title: MoSimulator Auto System by @sircheetodust | Stardance
Devlogs:
I just started I made a basic key logger that tracks the keys used on rebuilt 2026 mosimulator. Currently it gives a bunch of detailed info on what keys you pressed
Added UI and now playback semi-works UI has some broken parts. First run is my play. The second and third are the program’s. The OBS overlay thinks that im pressing the keys since the python program uses keyboard =D https://youtu.be/uFGnG4JAFzI <-testing video
I added saving and loading! Auto’s can be shared now but there are a few requirements to run and share your auto’s such as stable framerate and consistent robot positioning. I also updated the readme. All that is left is improving the GitHub repo’s usability
Minor update with tkinter ui and ability to change keybinds
Started working on a method to get controller support working. This works by using hidHide, and adding the program as an exception, and then creating a virtual game pad and relaying inputs from the controller to the fake gamepad.
Ships:
This is my MoSimulator Auto System. It allows user’s to create their own FRC Auto path in MoSimulator via logging key presses and assigning time stamps. User’s can save these Auto paths and even share them with others. Feedback is welcome!...
|
1793688860.796336
|
1793775260.796336
|
|
7247
|
Blitz by @abhinavpv | Stardance
|
abhinavpv
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T17:10:27Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Blitz Type is a NASA-inspired typing speed trainer built with pure HTML, CSS, and JavaScript. The project features a real-time typing test with live WPM and accuracy tracking, animated starfield backgrounds, ambient space-themed music, mission-based progression, and a celebration screen with confetti after completing three passages. Users can practice on multiple unique passages while tracking their performance throughout the session. One challenge was implementing accurate typing statistics that count mistakes even if users later correct them. I also spent time refining the UI to create a polished “mission control” experience with smooth animations and responsive interactions. I’m proud of the overall user experience, especially the space-themed design, animated background, mission completion system, and the fact that everything was built without frameworks. To test: • Click “Try Project” • Click anywhere and start typing • Complete 3 passages to see the mission completion screen • Use Tab to skip passages and Esc to restart • Hover over the volume icon to adjust background music volume", "repo": "https://github.com/iamabhinavpv/blitz", "demo": "https://iamabhinavpv.github.io/blitz/"}]...
|
[{"post_id": 2239, "ts": "2026 [{"post_id": 2239, "ts": "2026-06-04T16:59:11Z", "hours": 1.2619, "text": "got the UI"}, {"post_id": 2152, "ts": "2026-06-04T14:22:17Z", "hours": 0.7933, "text": "just started working on UI"}]...
|
Title: Blitz by @abhinavpv | Stardance
Devlogs:
j Title: Blitz by @abhinavpv | Stardance
Devlogs:
just started working on UI
got the UI
Ships:
Blitz Type is a NASA-inspired typing speed trainer built with pure HTML, CSS, and JavaScript. The project features a real-time typing test with live WPM and accuracy tracking, animated starfield backgrounds, ambient space-themed music, mission-based progression, and a celebration screen with confetti after completing three passages. Users can practice on multiple unique passages while tracking their performance throughout the session. One challenge was implementing accurate typing statistics that count mistakes even if users later correct them. I also spent time refining the UI to create a polished “mission control” experience with smooth animations and responsive interactions. I’m proud of the overall user experience, especially the space-themed design, animated background, mission completion system, and the fact that everything was built without frameworks. To test: • Click “Try Project” • Click anywhere and start typing • Complete 3 passages to see the mission completion screen • Use Tab to skip passages and Esc to restart • Hover over the volume icon to adjust background music volume...
|
1793688861.94511
|
1793775261.94511
|
|
28747
|
BlackHole Simulation by @dionysus | Stardance
|
dionysus
|
1
|
7.0
|
105
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T13:34:35Z", "hours": 7.0, "multiplier": 15.67, "payout": 105, "blessing": "neutral", "text": "I built an interactive 3D black hole simulation using pure python using matplotlib, scipy, numba, and numpy! It simulations gravitational lensing, light bending, and accretion disk Doppler beaming, inspired by Jean-Pierre Luminet’s simulation of a black hole in a 1979 IBM computer The hardest part about the project was figuring out the math, the equations and the geometry of a black hole; as well as solving the lag problems and figuring out how to make this thing work without needing WebGL shaders and heavy engines. And that brings me to the part that makes me the most proud about this project, mostly people make a project like this in python using shaders and heavy engines but i didnt, i made it all in a standard window!", "repo": "https://github.com/dionysus887/BlackHoleSimulation", "demo": "https://github.com/dionysus887/BlackHoleSimulation/releases/tag/v.0.0.2"}]...
|
[{"post_id": 35181, "ts": "202 [{"post_id": 35181, "ts": "2026-07-26T13:17:54Z", "hours": 2.3072, "text": "BLACKHOLE SIMULATION #Devlog-5 Howdy everyonee! This afternoon i decided to SCRAP EVERYTHING AND START OVER AND FINISH THIS MUEHEHEHE, with the help of some prior research and experimenting I FINALLY CREATED THE BLACKHOLE SIMULATION. I completely scrapped the stippled IBM 1979 idea instead i used a different method! Enhancements in Visual and Post-Processing High-Energy Glow & Bloom: I added a delicate Gaussian makeup of bloom to the accretion disk for it to appear as though it were made of high-energy plasma, which also emits light. Tone Mapping: The high-contrast areas now remain visible as details rather than turning into glowing blobs. Relativistic Asymmetry: The side of the disk facing the observer emits brighter light while the side moving away appears dimmed. Dynamic Accretion Disk: The radial bands of plasma are animated now and flow smoothly around the horizon instead of appearing as an immovable ring. Smooth Camera Movements The interactive camera movement allows to move it around incidentally without impacting on performance."}, {"post_id": 32997, "ts": "2026-07-22T15:01:17Z", "hours": 1.2183, "text": "BLACKHOLE SIMULATION #Devlog-4 Hii everyone im back with more updates mueheheh! now this looks much more cooler than before ikik im so amazing and… nvm im being weird again lol! anywho! sooo i am using the ray tracer engine like before and i added some changes to the code to make it look even better like promised! Photon ring I added a glowing ring right around the event horizon, so the black hole pops even more! Gradient update Earlier in the code the whole colors looked blotchy but this time i made it look more seamless and better! Cleaner Silhouette you have to admit, this looks WAYYY cleaner than before and more cooler and yayyyy! im so hepy!! Conclusion So in the end we are getting more closer to the agenda of the IBM 1979 Luminet simulation, tho i would not wanna copy it whole since yk i wanna make this a bit of my own! Agenda for next time Make this look even more accurate since the physics engine is working phew"}, {"post_id": 31797, "ts": "2026-07-20T14:02:04Z", "hours": 1.4283, "text": "BLACKHOLE SIMULATION #Devlog-3 Alrighty everyone!sorry didnt post a devlog sooner, yk exams happened. ANYWAYS! i decided that the cereal looking wtv that was really pissing me off and besides looking at that thing was making me really demotivated so today i decided to change everything and instead of that weird thing i changed it to a ray tracer! PHYSICS ENGINE UPDATE the code previously only produced a flat ring, but now it looks like its bending light in the gravitational field. that means that its better than that cereal thing (yes i hated that with my whole heart, idk what made me think it looked cool). COOL RETRO LOOK it looks retro (inspired by luminets IBM supercomputer 1979 simulation yess) i know ball ikik. conclusion i fixed it a bit agenda honestly idk atp lets see what happens (yes i discovered emojis on here js now dont judge me) P.S this thing actually like “rotates” meaning that the dots you see move so like it looks sickk muehehe"}, {"post_id": 22906, "ts": "2026-07-05T15:28:36Z", "hours": 1.0728, "text": "BLACKHOLE SIMULATION #Devlog-2 Today I spent the day learning about the basic maths and fundamentals that i would need to understand how to simulate a black hole since i realized that my simulation rn doesnt look like a blackhole, and instead looks like im playing with cereal ngl. Todays agenda was to understand the geometry and physics behind Black Holes and the math on a high school level understanding, enough to code a bit more accurately, i made a txt file in the Project Folder too so that i could keep track of all the things i understood. THE MEANING BEHIND THE EQUATION I used the Schwarzschild Metric equaiton (yes the brian greene one, i know its inaccurate) in this case, and understood basically how we measure intervals in 4D space, and understanding the coefficients in the equation, although its inaccurate considering black hole actually spins and the equation that Brian Greene had upoladed assumed it as a non spinning and uncharged sphere in space, but all i needed was to know the coefficients so that i could understand the Matrix THE GEOMETRY So basically in this part, in the video i watched, we used Metric Tensors to actually ploth the graph and to define the space-time warping, so that i could simulate the effects on the simulation when im coding INTERSTELLAR CALCULATIONS I used this too muehehe it was a ScienceClic video, couldnt understand much, thought about noting some equations down in my notebook but oh well, i dont think ill be using them, tho to approach the black hole and the simulation of it, i would need to ask AI since again im not a PhD level student and im dumbo too, but oh well im very ambitious so yeahh. my next agenda would be to figure how to incorporate these infos and maths parts into the code to make it look more realistic and accurate, so probably ill be using books and AI to understand that! Conclusion Learnt about the Schwarschild Equation Learnt about how we use the equation as a metric tensor to polt the space-time warping Learnt a bit about the calculations for the black hole in the movie Interstellar Made a txt file about it so that i could keep referencing it as i work"}, {"post_id": 19156, "ts": "2026-06-30T12:26:51Z", "hours": 0.6578, "text": "BLACKHOLE SIMULATION #Devlog-1 Decided to start this project to appear cool, added the main physics part in the code, and had some progress :P will make it look more realistic next time for sure!"}]...
|
Title: BlackHole Simulation by @dionysus | Stardan Title: BlackHole Simulation by @dionysus | Stardance
Devlogs:
BLACKHOLE SIMULATION #Devlog-1 Decided to start this project to appear cool, added the main physics part in the code, and had some progress :P will make it look more realistic next time for sure!
BLACKHOLE SIMULATION #Devlog-2 Today I spent the day learning about the basic maths and fundamentals that i would need to understand how to simulate a black hole since i realized that my simulation rn doesnt look like a blackhole, and instead looks like im playing with cereal ngl. Todays agenda was to understand the geometry and physics behind Black Holes and the math on a high school level understanding, enough to code a bit more accurately, i made a txt file in the Project Folder too so that i could keep track of all the things i understood. THE MEANING BEHIND THE EQUATION I used the Schwarzschild Metric equaiton (yes the brian greene one, i know its inaccurate) in this case, and understood basically how we measure intervals in 4D space, and understanding the coefficients in the equation, although its inaccurate considering black hole actually spins and the equation that Brian Greene had upoladed assumed it as a non spinning and uncharged sphere in space, but all i needed was to know the coefficients so that i could understand the Matrix THE GEOMETRY So basically in this part, in the video i watched, we used Metric Tensors to actually ploth the graph and to define the space-time warping, so that i could simulate the effects on the simulation when im coding INTERSTELLAR CALCULATIONS I used this too muehehe it was a ScienceClic video, couldnt understand much, thought about noting some equations down in my notebook but oh well, i dont think ill be using them, tho to approach the black hole and the simulation of it, i would need to ask AI since again im not a PhD level student and im dumbo too, but oh well im very ambitious so yeahh. my next agenda would be to figure how to incorporate these infos and maths parts into the code to make it look more realistic and accurate, so probably ill be using books and AI to understand that! Conclusion Learnt about the Schwarschild Equation Learnt about how we use the equation as a metric tensor to polt the space-time warping Learnt a bit about the calculations for the black hole in the movie Interstellar Made a txt file about it so that i could keep referencing it as i work
BLACKHOLE SIMULATION #Devlog-3 Alrighty everyone!sorry didnt post a devlog sooner, yk exams happened. ANYWAYS! i decided that the cereal looking wtv that was really pissing me off and besides looking at that thing was making me really demotivated so today i decided to change everything and instead of that weird thing i changed it to a ray tracer! PHYSICS ENGINE UPDATE the code previously only produced a flat ring, but now it looks like its bending light in the gravitational field. that means that its better than that cereal thing (yes i hated that with my whole heart, idk what made me think it looked cool). COOL RETRO LOOK it looks retro (inspired by luminets IBM supercomputer 1979 simulation yess) i know ball ikik. conclusion i fixed it a bit agenda honestly idk atp lets see what happens (yes i discovered emojis on here js now dont judge me) P.S this thing actually like “rotates” meaning that the dots you see move so like it looks sickk muehehe
BLACKHOLE SIMULATION #Devlog-4 Hii everyone im back with more updates mueheheh! now this looks much more cooler than before ikik im so amazing and… nvm im being weird again lol! anywho! sooo i am using the ray tracer engine like before and i added some changes to the code to make it look even better like promised! Photon ring I added a glowing ring right around the event horizon, so the black hole pops even more! Gradient update Earlier in the code the whole colors looked blotchy but this time i made it look more seamless and better! Cleaner Silhouette you have to admit, this looks WAYYY cleaner than before and more cooler and yayyyy! im so hepy!! Conclusion So in the end we are getting more closer to the agenda of the IBM 1979 Luminet simulation, tho i would not wanna copy it whole since yk i wanna make this a bit of my own! Agenda for next time Make this look even more accurate since the physics engine is working phew
BLACKHOLE SIMULATION #Devlog-5 Howdy everyonee! This afternoon i decided to SCRAP EVERYTHING AND START OVER AND FINISH THIS MUEHEHEHE, with the help of some prior research and experimenting I FINALLY CREATED THE BLACKHOLE SIMULATION. I completely scrapped the stippled IBM 1979 idea instead i used a different method! Enhancements in Visual and Post-Processing High-Energy Glow & Bloom: I added a delicate Gaussian makeup of bloom to the accretion disk for it to appear as though it were made of high-energy plasma, which also emits light. Tone Mapping: The high-contrast areas now remain visible as details rather than turning into glowing blobs. Relativistic Asymmetry: The side of the disk facing the observer emits brighter light while the side moving away appears dimmed. Dynamic Accretion Disk: The radial bands of plasma are animated now and flow smoothly around the horizon instead of appearing as an immovable ring. Smooth Camera Movements The interactive camera movement allows to move it around incidentally without impacting on performance.
Ships:
I built an interactive 3D black hole simulation using pure python using matplotlib, scipy, numba, and numpy! It simulations gravitational lensing, light bending, and accretion disk Doppler beaming, inspired by Jean-Pierre Luminet’s simulation of a black hole in a 1979 IBM computer The hardest part about the project was figuring out the math, the equations and the geometry of a black hole; as well as solving the lag problems and figuring out how to make this thing work without needing WebGL shaders and heavy engines. And that brings me to the part that makes me the most proud about this project, mostly people make a project like this in python using shaders and heavy engines but i didnt, i made it all in a standard window!...
|
1793688863.1175106
|
1793775263.1175106
|
|
32563
|
The Lazy One by @nokira | Stardance
|
nokira
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T21:01:05Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The Lazy One Slack Bot I created a Slack Bot which is Live 24/7 and replies to the commands specified in the screenshot. It was quite easy to understand how to create commands and how to use APIs to get data from other applications. I tried to organize the code as much as possible and added the features that I would have liked on a Slack Bot. The custom commands added without using the guide are: /lazy-exchange - This requires 3 arguments (see the screenshot) and can convert any given amount of money from one currency to another. /lazy-reminder - This requires 2 arguments and can set a reminder, pretty simple. /lazy-astronomy - This command gets NASA’s APOD and shows the title, explanation and image (or video link) /lazy-verse - Get a random Bible verse", "repo": "https://github.com/n0kira/TheLazyOne", "demo": "https://hackclub.slack.com/app_redirect?app=A0BFUR20QH3"}]...
|
[{"post_id": 24955, "ts": "202 [{"post_id": 24955, "ts": "2026-07-08T20:46:10Z", "hours": 1.7214, "text": "Devlog 2 New commands! Finally got the Bot to work with some more commands. The new commands are: /lazy-reminder [minutes] [reason] - Sets a reminder for a given amount of minutes and pings you back once the time has run out. /lazy-verse - Gives you a random Bible verse I also formatted the help command to look a little prettier and updated the GitHub repo with a list of all available commands and the steps to run the bot locally. I found this project quite easy, but it was fun! I learned how to manage API responses and obviously how to create a Slack bot. Also I got my Nest Account accepted, so now the Bot runs 24/7!! :)"}, {"post_id": 24730, "ts": "2026-07-08T14:36:19Z", "hours": 1.5242, "text": "Devlog 1 My first bot!! After more than 1 hour I managed to get my Bot running on my machine (Still waiting for Nest approval) and the 2 custom commands I added are: /lazy-exchange [OriginalCurrency] [TargetCurrency] [Amount] - This command lets you convert currency using the Frankfurter public API, just type the currency you want to convert, e.g. “USD”, then type the target currency, e.g. “EUR”, and finally the amount to convert, e.g. “1000”. /lazy-astronomy - to get NASA’s APOD As of now it only does these 2 pretty easy functions, but I’ll work on more commands soon! Fortunately, the code isn’t hard to understand and using APIs is pretty easy :)"}]...
|
Title: The Lazy One by @nokira | Stardance
Devlog Title: The Lazy One by @nokira | Stardance
Devlogs:
Devlog 1 My first bot!! After more than 1 hour I managed to get my Bot running on my machine (Still waiting for Nest approval) and the 2 custom commands I added are: /lazy-exchange [OriginalCurrency] [TargetCurrency] [Amount] - This command lets you convert currency using the Frankfurter public API, just type the currency you want to convert, e.g. “USD”, then type the target currency, e.g. “EUR”, and finally the amount to convert, e.g. “1000”. /lazy-astronomy - to get NASA’s APOD As of now it only does these 2 pretty easy functions, but I’ll work on more commands soon! Fortunately, the code isn’t hard to understand and using APIs is pretty easy :)
Devlog 2 New commands! Finally got the Bot to work with some more commands. The new commands are: /lazy-reminder [minutes] [reason] - Sets a reminder for a given amount of minutes and pings you back once the time has run out. /lazy-verse - Gives you a random Bible verse I also formatted the help command to look a little prettier and updated the GitHub repo with a list of all available commands and the steps to run the bot locally. I found this project quite easy, but it was fun! I learned how to manage API responses and obviously how to create a Slack bot. Also I got my Nest Account accepted, so now the Bot runs 24/7!! :)
Ships:
The Lazy One Slack Bot I created a Slack Bot which is Live 24/7 and replies to the commands specified in the screenshot. It was quite easy to understand how to create commands and how to use APIs to get data from other applications. I tried to organize the code as much as possible and added the features that I would have liked on a Slack Bot. The custom commands added without using the guide are: /lazy-exchange - This requires 3 arguments (see the screenshot) and can convert any given amount of money from one currency to another. /lazy-reminder - This requires 2 arguments and can set a reminder, pretty simple. /lazy-astronomy - This command gets NASA’s APOD and shows the title, explanation and image (or video link) /lazy-verse - Get a random Bible verse...
|
1793688864.3000786
|
1793775264.3000786
|
|
1910
|
Planet Trotter by @Atlus | Stardance
|
Atlus
|
1
|
59.0
|
583
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T19:40:39Z", "hours": 59.0, "multiplier": 9.84, "payout": 583, "blessing": "neutral", "text": "This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D", "repo": "https://github.com/Atlus06/Planet-Trotter", "demo": "https://atlus06.itch.io/planet-trotter"}]...
|
[{"post_id": 56284, "ts": "202 [{"post_id": 56284, "ts": "2026-08-28T00:04:50Z", "hours": 6.2547, "text": "I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that."}, {"post_id": 43368, "ts": "2026-08-08T15:57:40Z", "hours": 8.6789, "text": "Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode"}, {"post_id": 36707, "ts": "2026-07-28T22:47:47Z", "hours": 6.5531, "text": "Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu"}, {"post_id": 32625, "ts": "2026-07-21T22:15:39Z", "hours": 2.1347, "text": "Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet"}, {"post_id": 30765, "ts": "2026-07-18T16:59:21Z", "hours": 2.66, "text": "Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work"}, {"post_id": 29869, "ts": "2026-07-17T00:59:28Z", "hours": 7.8633, "text": "Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions"}, {"post_id": 24941, "ts": "2026-07-08T20:30:51Z", "hours": 3.9625, "text": "Changes Reworked double jump Other small Tweaks"}, {"post_id": 23631, "ts": "2026-07-06T18:23:24Z", "hours": 2.4867, "text": "Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back."}, {"post_id": 19254, "ts": "2026-06-30T14:51:35Z", "hours": 2.7731, "text": "Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again."}, {"post_id": 9581, "ts": "2026-06-15T23:19:01Z", "hours": 1.7408, "text": "Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)"}, {"post_id": 9273, "ts": "2026-06-15T15:57:48Z", "hours": 2.4539, "text": "Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work"}, {"post_id": 7007, "ts": "2026-06-11T19:14:31Z", "hours": 2.5389, "text": "Changes: -organized file system and scene tree"}, {"post_id": 2797, "ts": "2026-06-05T16:43:33Z", "hours": 2.0925, "text": "Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed"}, {"post_id": 2643, "ts": "2026-06-05T09:25:51Z", "hours": 1.1644, "text": "Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier."}, {"post_id": 1702, "ts": "2026-06-03T21:19:03Z", "hours": 3.9031, "text": "Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out."}, {"post_id": 416, "ts": "2026-06-01T20:23:52Z", "hours": 2.0153, "text": "I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder."}]...
|
Title: Planet Trotter by @Atlus | Stardance
Devlo Title: Planet Trotter by @Atlus | Stardance
Devlogs:
I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder.
Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out.
Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier.
Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed
Changes: -organized file system and scene tree
Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work
Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)
Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again.
Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back.
Changes Reworked double jump Other small Tweaks
Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions
Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work
Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet
Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu
Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode
I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that.
Ships:
This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D...
|
1793688868.56373
|
1793775268.56373
|
|
28932
|
Breath Dashboard by @SirYanni | Stardance
|
SirYanni
|
2
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T16:33:11Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Pulse Mission Dashboard This dashboard was made according to the Pulse Missions Guide with an Nasa API call :). Since it’s a mission, I don’t have much to say abt it.", "repo": "https://github.com/siryanni/breath", "demo": "https://siryanni.github.io/breath/"}, {"ship_num": 2, "ts": "2026-06-30T20:16:57Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made this Picture of the Day Dashboard for my Browser this evening focusing on using the guide, altough I faced severe issues while uploading (API Error 403), I made it and am really proud of what I made, especially the error managment. Hope yall enjoy it as much as I do!!", "repo": "https://github.com/siryanni/breath", "demo": "https://siryanni.github.io/breath/"}]...
|
[{"post_id": 20099, "ts": "202 [{"post_id": 20099, "ts": "2026-07-01T16:52:14Z", "hours": 0.7908, "text": "Breath Dashboard Updates First up, I have to excuse me using AI for this project. I let AI take hand of the hosting process, and thus of the JS-Part, wich then caused a problem of me not understanding code, which shouldve been my own. Please excuse my wrongdoing, as it wont happen again Nextup I can happily announce that I have rewrittenn the code, using the skeleton AI gave me before, now, I managed to keep it way simpler and down to earth, actually understanding what I’m writing, while keeping the look (to the best of my skills) the same as before. Lastly I’m really sorry for what happened, but thus even happier of how it turned out now! Thanks for you patience with me. Also please excuse my english, it is not my first language."}, {"post_id": 19482, "ts": "2026-06-30T20:13:30Z", "hours": 1.2908, "text": "NASA APOD Dashboard Deployment Fix Project Overview An interactive space dashboard that displays the daily NASA Astronomy Picture of the Day (APOD). It features an integrated digital clock, an accurate asset age calculator, and a modern design. Deployment Journey and Problem Resolution Major Deployment Hurdles Despite strictly following the guide, the website initially refused to work after deploying to GitHub Pages. While everything executed perfectly in the local environment, the live production site was stuck displaying a frustrating “403 Forbidden” network error. Troubleshooting the Build Pipeline The issue turned out to be an invisible barrier between the automated GitHub Actions pipeline and how Vite injects environment variables (the hidden NASA API key): Incorrect Secret Payload: Due to a minor copy-paste oversight when adding the Secrets to GitHub, a wrong string format was being bundled into the production code. Blocked Environment Access: GitHub Actions initially failed to map the key to Vite correctly, causing the builder to compile the code with an empty value ( undefined ). The NASA API automatically blocks these requests. Mission Accomplished in One Evening By introducing programmatic live tests (such as a temporary browser pop-up to inspect the live key status), the bug was systematically isolated. Once the secret names were perfectly aligned, duplicated to both global and environment levels, and the GitHub build cache was forced to reset via a clean push, the roadblock collapsed. Despite the intense troubleshooting, I managed to fix the entire pipeline and successfully launch the project in a single evening. The direct feed to NASA is stable, and the live dashboard is fully operational."}]...
|
Title: Breath Dashboard by @SirYanni | Stardance
Title: Breath Dashboard by @SirYanni | Stardance
Devlogs:
NASA APOD Dashboard Deployment Fix Project Overview An interactive space dashboard that displays the daily NASA Astronomy Picture of the Day (APOD). It features an integrated digital clock, an accurate asset age calculator, and a modern design. Deployment Journey and Problem Resolution Major Deployment Hurdles Despite strictly following the guide, the website initially refused to work after deploying to GitHub Pages. While everything executed perfectly in the local environment, the live production site was stuck displaying a frustrating “403 Forbidden” network error. Troubleshooting the Build Pipeline The issue turned out to be an invisible barrier between the automated GitHub Actions pipeline and how Vite injects environment variables (the hidden NASA API key): Incorrect Secret Payload: Due to a minor copy-paste oversight when adding the Secrets to GitHub, a wrong string format was being bundled into the production code. Blocked Environment Access: GitHub Actions initially failed to map the key to Vite correctly, causing the builder to compile the code with an empty value ( undefined ). The NASA API automatically blocks these requests. Mission Accomplished in One Evening By introducing programmatic live tests (such as a temporary browser pop-up to inspect the live key status), the bug was systematically isolated. Once the secret names were perfectly aligned, duplicated to both global and environment levels, and the GitHub build cache was forced to reset via a clean push, the roadblock collapsed. Despite the intense troubleshooting, I managed to fix the entire pipeline and successfully launch the project in a single evening. The direct feed to NASA is stable, and the live dashboard is fully operational.
Breath Dashboard Updates First up, I have to excuse me using AI for this project. I let AI take hand of the hosting process, and thus of the JS-Part, wich then caused a problem of me not understanding code, which shouldve been my own. Please excuse my wrongdoing, as it wont happen again Nextup I can happily announce that I have rewrittenn the code, using the skeleton AI gave me before, now, I managed to keep it way simpler and down to earth, actually understanding what I’m writing, while keeping the look (to the best of my skills) the same as before. Lastly I’m really sorry for what happened, but thus even happier of how it turned out now! Thanks for you patience with me. Also please excuse my english, it is not my first language.
Ships:
I made this Picture of the Day Dashboard for my Browser this evening focusing on using the guide, altough I faced severe issues while uploading (API Error 403), I made it and am really proud of what I made, especially the error managment. Hope yall enjoy it as much as I do!!
Pulse Mission Dashboard This dashboard was made according to the Pulse Missions Guide with an Nasa API call :). Since it’s a mission, I don’t have much to say abt it....
|
1793688870.9618535
|
1793775270.9618535
|
|
52298
|
AeroNex - Booking by @Arsen | Stardance
|
Arsen
|
1
|
22.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T21:09:28Z", "hours": 22.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "AeroNex Ship What did you make? I made AeroNex, a flight booking system in C. It works in the terminal. Users can register, log in, and use the booking system to choose ticket options. I also worked on ticket prices, input checks, and the code structure. What was challenging? The hardest part was the booking system. I had some bugs in my code, and the price system did not work correctly. I had to find the problems and fix them. I also used bitwise operations to save booking choices in one byte. It was not easy at first, but I learned more about how bits work in C. What are you proud of? I am proud that I finished the project and learned many new things. I improved my C skills and learned how to find bugs and organize code in different files. The project is not perfect, but I learned a lot while making it. How can people test your project? You can find the code on my GitHub: https://github.com/Arsen-Gevorgyan/AeroNex You need GCC to compile and run the program. You can try to register, log in, and test the booking options. I consider AeroNex finished for now. In the future, I want to add more features and libraries. I also want to make other systems as separate projects and maybe connect them together later.", "repo": "https://github.com/Arsen-Gevorgyan/AeroNex", "demo": "https://arsen-gevorgyan.github.io/AeroNex/"}]...
|
[{"post_id": 83902, "ts": "202 [{"post_id": 83902, "ts": "2026-10-28T21:00:52Z", "hours": 1.3103, "text": "AeroNex - Devlog #4 What I did I finished the main part of AeroNex. I worked on the booking system, ticket prices, login, registration, and terminal design. I also fixed many bugs in my code. I changed the price system and started to put code in different files. This make the project more easy to understand. What I learned I learned more about C programming, bitwise operations, functions, arrays, and fixing bugs. I also learned that program can look good, but the code inside can still have many problems. I need to check both the design and the logic. Future plans For now, I consider AeroNex finished. But I have more ideas for the future. I want to add more features and use some new libraries. I also want to make different systems as separate projects, and later maybe connect them together. This project helped me to learn more about C and prepare for my next projects. I will continue to improve my skills and make more things in the future."}, {"post_id": 83090, "ts": "2026-10-26T21:04:54Z", "hours": 6.1464, "text": "AeroNex - Devlog #3 What I did This update I worked more on AeroNex. I did the price system. I also started to move code into many files. In Devlog #2 I showed the terminal boxes. The program looked nice. But inside the booking logic was broken. So this time I fixed the real code. Old price system (problem in v1) In old version, when user booked a ticket, I saved the choice like this. I added numbers into one char: accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 1 ; // France accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 8 ; // Business accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 32 ; // Today My idea was to save each option in different bit of the byte. It looked smart. But it was broken: char only holds up to 255, so it overflows very fast I never moved currentBooking, so every booking overwrote same slot to read the number back into real ticket was almost impossible New price system This update I fixed it. I use the bit idea correctly now. Every choice has its own bits: Destination - bits 0 to 2 Class - bits 3 to 4 Time - bits 5 to 7 Bits do not overlap. So I can build the code with |: unsigned char code = destination | ( class << 3 ) | ( time << 5 ); And read it back with & and »: unsigned char dest = code & 0x07 ; unsigned char klass = ( code >> 3 ) & 0x03 ; unsigned char when = ( code >> 5 ) & 0x07 ; Then price is just three lookups added together: int count_price ( unsigned char code ) { return basePrice [ dest ] + classPrice [ klass ] + timePrice [ when ]; } One byte for booking. One int for price. No overflow. No collisions. Easy to read. Split into files I also started to move code into different files: one file for checks (login, name, password, phone) one file for printing menus and boxes one file for booking logic one file for saving data main.c stays small and simple Now main.c reads like a story: register, login, book, save. Fixing bugs While I refactored I found many bugs from v1: in checkLogin one condition could never be true (login[0] < 97 && login[0] > 123) dead branches in checkName that never ran the currentBooking counter that never moved time loop in booking() that never exited (I wrote flag = 0 but I need flag1 = 0) one segmentation fault. Program crashed when I read string after loop. Fixing these bugs helped me understand C much better. What I will do next Next update I want to: finish the file split with a good Makefile save bookings to disk so they stay after program closes make terminal boxes cleaner add real ticket printing with new price Project is still not finished. But the new bit price system fixed the core of booking logic."}, {"post_id": 52618, "ts": "2026-08-22T20:41:37Z", "hours": 3.325, "text": "AeroNex — Devlog #2 What I worked on In this update, I worked more on AeroNex . I mainly worked on the booking system and the terminal interface. I wanted to make the program look better and not only work with normal text. So I started making custom boxes for showing information. For example, now I can show: Name Surname Phone number Flight information Booking information I also made the text fit inside the box. If the text is too long, it can go to the next line. Fixing bugs While working on this part, I found some bugs in my C code. Some problems were with strings, loops, and memory . One bug even caused my program to crash with a segmentation fault . I learned that I need to be careful when using functions like strlen() and memset() . Fixing these bugs helped me understand C better. Booking system I also continued working on the booking system . The user can choose different options for a flight, and I am working on more features like: Booking a flight Cancelling a booking Viewing flight information Choosing a flight class Managing the user account There are still some things that I need to finish and improve. What I will do next For the next update, I want to continue working on the booking system and make the interface cleaner. I also want to add more flight information and improve the menus. The project is still not finished, but I am learning a lot by making it step by step."}, {"post_id": 51631, "ts": "2026-08-21T12:39:25Z", "hours": 11.6394, "text": "AeroNex : Devlog #1: Project Start Today I started my new project, AeroNex. AeroNex is an airline booking system that I am making with the C programming language. The program works in the terminal and uses a menu system. The main idea is to make a simple system where a user can: Create an account Log in Choose a destination Choose a flight class Choose a flight date Make a booking Cancel a booking View flight information Block an account Log out At the moment, I have already made the registration and login systems. I also started working on the booking system. The user can choose a destination, class, and date. There are still bugs and unfinished parts, so the project is not finished yet. For the next updates, I want to improve the booking system and add booking cancellation and flight information. I also want to improve the account system and make the terminal interface cleaner. My main goal with this project is not only to make a working booking system, but also to learn more about C programming and build a bigger project by myself. This is only the beginning of AeroNex."}]...
|
Title: AeroNex - Booking by @Arsen | Stardance
De Title: AeroNex - Booking by @Arsen | Stardance
Devlogs:
AeroNex : Devlog #1: Project Start Today I started my new project, AeroNex. AeroNex is an airline booking system that I am making with the C programming language. The program works in the terminal and uses a menu system. The main idea is to make a simple system where a user can: Create an account Log in Choose a destination Choose a flight class Choose a flight date Make a booking Cancel a booking View flight information Block an account Log out At the moment, I have already made the registration and login systems. I also started working on the booking system. The user can choose a destination, class, and date. There are still bugs and unfinished parts, so the project is not finished yet. For the next updates, I want to improve the booking system and add booking cancellation and flight information. I also want to improve the account system and make the terminal interface cleaner. My main goal with this project is not only to make a working booking system, but also to learn more about C programming and build a bigger project by myself. This is only the beginning of AeroNex.
AeroNex — Devlog #2 What I worked on In this update, I worked more on AeroNex . I mainly worked on the booking system and the terminal interface. I wanted to make the program look better and not only work with normal text. So I started making custom boxes for showing information. For example, now I can show: Name Surname Phone number Flight information Booking information I also made the text fit inside the box. If the text is too long, it can go to the next line. Fixing bugs While working on this part, I found some bugs in my C code. Some problems were with strings, loops, and memory . One bug even caused my program to crash with a segmentation fault . I learned that I need to be careful when using functions like strlen() and memset() . Fixing these bugs helped me understand C better. Booking system I also continued working on the booking system . The user can choose different options for a flight, and I am working on more features like: Booking a flight Cancelling a booking Viewing flight information Choosing a flight class Managing the user account There are still some things that I need to finish and improve. What I will do next For the next update, I want to continue working on the booking system and make the interface cleaner. I also want to add more flight information and improve the menus. The project is still not finished, but I am learning a lot by making it step by step.
AeroNex - Devlog #3 What I did This update I worked more on AeroNex. I did the price system. I also started to move code into many files. In Devlog #2 I showed the terminal boxes. The program looked nice. But inside the booking logic was broken. So this time I fixed the real code. Old price system (problem in v1) In old version, when user booked a ticket, I saved the choice like this. I added numbers into one char: accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 1 ; // France accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 8 ; // Business accounts [ index ]. accountsBooked [ accounts [ index ]. currentBooking ] += 32 ; // Today My idea was to save each option in different bit of the byte. It looked smart. But it was broken: char only holds up to 255, so it overflows very fast I never moved currentBooking, so every booking overwrote same slot to read the number back into real ticket was almost impossible New price system This update I fixed it. I use the bit idea correctly now. Every choice has its own bits: Destination - bits 0 to 2 Class - bits 3 to 4 Time - bits 5 to 7 Bits do not overlap. So I can build the code with |: unsigned char code = destination | ( class << 3 ) | ( time << 5 ); And read it back with & and »: unsigned char dest = code & 0x07 ; unsigned char klass = ( code >> 3 ) & 0x03 ; unsigned char when = ( code >> 5 ) & 0x07 ; Then price is just three lookups added together: int count_price ( unsigned char code ) { return basePrice [ dest ] + classPrice [ klass ] + timePrice [ when ]; } One byte for booking. One int for price. No overflow. No collisions. Easy to read. Split into files I also started to move code into different files: one file for checks (login, name, password, phone) one file for printing menus and boxes one file for booking logic one file for saving data main.c stays small and simple Now main.c reads like a story: register, login, book, save. Fixing bugs While I refactored I found many bugs from v1: in checkLogin one condition could never be true (login[0] < 97 && login[0] > 123) dead branches in checkName that never ran the currentBooking counter that never moved time loop in booking() that never exited (I wrote flag = 0 but I need flag1 = 0) one segmentation fault. Program crashed when I read string after loop. Fixing these bugs helped me understand C much better. What I will do next Next update I want to: finish the file split with a good Makefile save bookings to disk so they stay after program closes make terminal boxes cleaner add real ticket printing with new price Project is still not finished. But the new bit price system fixed the core of booking logic.
AeroNex - Devlog #4 What I did I finished the main part of AeroNex. I worked on the booking system, ticket prices, login, registration, and terminal design. I also fixed many bugs in my code. I changed the price system and started to put code in different files. This make the project more easy to understand. What I learned I learned more about C programming, bitwise operations, functions, arrays, and fixing bugs. I also learned that program can look good, but the code inside can still have many problems. I need to check both the design and the logic. Future plans For now, I consider AeroNex finished. But I have more ideas for the future. I want to add more features and use some new libraries. I also want to make different systems as separate projects, and later maybe connect them together. This project helped me to learn more about C and prepare for my next projects. I will continue to improve my skills and make more things in the future.
Ships:
AeroNex Ship What did you make? I made AeroNex, a flight booking system in C. It works in the terminal. Users can register, log in, and use the booking system to choose ticket options. I also worked on ticket prices, input checks, and the code structure. What was challenging? The hardest part was the booking system. I had some bugs in my code, and the price system did not work correctly. I had to find the problems and fix them. I also used bitwise operations to save booking choices in one byte. It was not easy at first, but I learned more about how bits work in C. What are you proud of? I am proud that I finished the project and learned many new things. I improved my C skills and learned how to find bugs and organize code in different files. The project is not perfect, but I learned a lot while making it. How can people test your project? You can find the code on my GitHub: https://github.com/Arsen-Gevorgyan/AeroNex You need GCC to compile and run the program. You can try to register, log in, and test the booking options. I consider AeroNex finished for now. In the future, I want to add more features and libraries. I also want to make other systems as separate projects and maybe connect them together later....
|
1793688874.2279584
|
1793775274.2279584
|
|
10080
|
PawDaily Desktop by @happyshot1010 | Stardance
|
happyshot1010
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T15:17:40Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a desktop website for my mobile app!", "repo": "https://github.com/So10-k/pawdaily-web", "demo": "https://pawdaily.cc"}]...
|
[{"post_id": 4274, "ts": "2026 [{"post_id": 4274, "ts": "2026-06-07T15:06:54Z", "hours": 1.5875, "text": "I just finished my project!"}, {"post_id": 3689, "ts": "2026-06-06T18:52:44Z", "hours": 10.0508, "text": "This is the current mobile app when openned with Catalyst on my mac."}]...
|
Title: PawDaily Desktop by @happyshot1010 | Starda Title: PawDaily Desktop by @happyshot1010 | Stardance
Devlogs:
This is the current mobile app when openned with Catalyst on my mac.
I just finished my project!
Ships:
I made a desktop website for my mobile app!...
|
1793688875.4932117
|
1793775275.4932117
|
|
5330
|
DND initiative Tracker by @Headless48 | Stardance
|
Headless48
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T20:45:10Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a Dnd initiative tracker made foe dms when they run combat, is easy to use and helps keep all the chaos under contol, even when the wizard casts fireball in a 10 foot by 10 foot room", "repo": "https://github.com/Headless48-Ram/Initiative-Tracker", "demo": "https://github.com/Headless48-Ram/Initiative-Tracker/releases/tag/dnd"}]...
|
[{"post_id": 1071, "ts": "2026 [{"post_id": 1071, "ts": "2026-06-02T21:42:46Z", "hours": 2.005, "text": "DONE"}, {"post_id": 982, "ts": "2026-06-02T19:19:16Z", "hours": 0.8553, "text": "Monster object going crazy"}]...
|
Title: DND initiative Tracker by @Headless48 | Sta Title: DND initiative Tracker by @Headless48 | Stardance
Devlogs:
Monster object going crazy
DONE
Ships:
This is a Dnd initiative tracker made foe dms when they run combat, is easy to use and helps keep all the chaos under contol, even when the wizard casts fireball in a 10 foot by 10 foot room...
|
1793688876.6605928
|
1793775276.6605928
|
|
12108
|
LInt Website by @lazerkat | Stardance
|
lazerkat
|
1
|
5.0
|
82
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T22:02:37Z", "hours": 5.0, "multiplier": 15.2, "payout": 82, "blessing": "neutral", "text": "I made a website for a LoRa based intranet called lInt! lInt allows LoRa devices to communicate with each other to send web pages!", "repo": "https://github.com/betelguesestudios/LIntWeb/", "demo": "https://betelguesestudios.github.io/LIntWeb/"}]...
|
[{"post_id": 6660, "ts": "2026 [{"post_id": 6660, "ts": "2026-06-11T05:08:44Z", "hours": 0.935, "text": "added more info"}, {"post_id": 6000, "ts": "2026-06-10T01:58:19Z", "hours": 0.8492, "text": "started making buy page and added more info to the source code page"}, {"post_id": 5947, "ts": "2026-06-09T23:05:30Z", "hours": 0.95, "text": "working on a sources page :)"}, {"post_id": 5360, "ts": "2026-06-09T03:07:49Z", "hours": 0.7356, "text": "Added Downloads page :) lInt is so cool yay"}, {"post_id": 5208, "ts": "2026-06-08T22:16:57Z", "hours": 0.3283, "text": "better website styling and more info :3"}, {"post_id": 4765, "ts": "2026-06-08T07:22:52Z", "hours": 0.8003, "text": "added people page and more styling (and topnav)"}, {"post_id": 4723, "ts": "2026-06-08T04:55:03Z", "hours": 0.4592, "text": "some styling later…"}, {"post_id": 4715, "ts": "2026-06-08T04:19:45Z", "hours": 0.3958, "text": "A short intro to LInt!! If you see this, definitely check out the source code ( https://gitlab.com/walfie308/lint )"}]...
|
Title: LInt Website by @lazerkat | Stardance
Devl Title: LInt Website by @lazerkat | Stardance
Devlogs:
A short intro to LInt!! If you see this, definitely check out the source code ( https://gitlab.com/walfie308/lint )
some styling later…
added people page and more styling (and topnav)
better website styling and more info :3
Added Downloads page :) lInt is so cool yay
working on a sources page :)
started making buy page and added more info to the source code page
added more info
Ships:
I made a website for a LoRa based intranet called lInt! lInt allows LoRa devices to communicate with each other to send web pages!...
|
1793688878.1639907
|
1793775278.1639907
|
|
38927
|
M2H by @vedasm | Stardance
|
vedasm
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T06:50:39Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I had built M2H (Markdown to HTML), a full-stack markdown editor and blog converter app. It enables users to write in Markdown with all the formatting available on the toolbar and view a clean HTML rendered in real time. Features: - Instant HTML Rendering as users type in. Server-side XSS prevention by using bleach. API protection using Flask-Limiter Secure JWT Based authentication Clean Split-view panel, dark/light modes, along with standard keyboard shortcuts The main challenge for me was setting up seamless sync btw the markdown and the live preview panel in the server-side without causing any lag or errors. Also implementing safe authentication. How to Use: Go to the live website Register an account and log in to explore Use the toolbar and keyboard shortcuts Change btw light and dark themes Test by export your markdown into a live html", "repo": "https://github.com/vedasm/M2H", "demo": "https://m2hvsm.vercel.app/"}]...
|
[{"post_id": 62002, "ts": "202 [{"post_id": 62002, "ts": "2026-09-05T06:34:55Z", "hours": 1.6431, "text": "Authentication, Security, and Editor Enhancements Authentication & Session Management A new interface allows user to securely register and login to M2H. Authentication is handled via JSON Web Tokens (JWT) stored at local-storage, making sure user sessions are secure. The Nav Bar have been updated with interaction based on whether the user is logged in or not. Enhanced Security & Backend HTML scrubbing via bleach to prevent XSS attacks Added flask-limiter and CSP/HSTS for API protection Deployment The app is now deployed and accessible live on vercel. Check the App"}, {"post_id": 61256, "ts": "2026-09-04T03:14:44Z", "hours": 1.3042, "text": "UI & Markdown Upgrades UI Refinement and Alignment Fixes Fixed padding and margin inconsistencies between the editor and toolbar. Changed the layout to be balanced and more comfortable for dual writing and previewing. Improved spacing to make the editor look good in light and dark modes, reducing eyestrain. New Formating Toolbar Bold, italicise, or strike-through text without the hassle of syntax typing. Now you can create document hierarchy and quickly highlight snippets with new Heading, quotes, etc. Organize ur throughts with the new bulleted and numbered list option all with one click."}, {"post_id": 59940, "ts": "2026-09-02T00:21:59Z", "hours": 0.9206, "text": "Building Live Preview Added a synchronized real-time preview rendering so MD Formats immediately get a preview HTML Content Automatic ID Assignment for headings such as # This is HI which render with anchor tags like {#17} automatically. Implemented real-time line, word, character and counts alongside an estimated reading time. The Document progress automatically store in localStorage to prevent data loss."}, {"post_id": 54846, "ts": "2026-08-26T00:52:27Z", "hours": 2.3744, "text": "Building M2H UI Developed a clean split view layout with line numbering, a real-time input canvas for MD, and a synchronized live preview panel, which will be implemented in a feature. Added quick buttons to copy HTML code, download the code, clean this MD, and finally switch between themes. Added a line, word, character counter and estimated reading time (future backend implementation is required)"}]...
|
Title: M2H by @vedasm | Stardance
Devlogs:
Buildi Title: M2H by @vedasm | Stardance
Devlogs:
Building M2H UI Developed a clean split view layout with line numbering, a real-time input canvas for MD, and a synchronized live preview panel, which will be implemented in a feature. Added quick buttons to copy HTML code, download the code, clean this MD, and finally switch between themes. Added a line, word, character counter and estimated reading time (future backend implementation is required)
Building Live Preview Added a synchronized real-time preview rendering so MD Formats immediately get a preview HTML Content Automatic ID Assignment for headings such as # This is HI which render with anchor tags like {#17} automatically. Implemented real-time line, word, character and counts alongside an estimated reading time. The Document progress automatically store in localStorage to prevent data loss.
UI & Markdown Upgrades UI Refinement and Alignment Fixes Fixed padding and margin inconsistencies between the editor and toolbar. Changed the layout to be balanced and more comfortable for dual writing and previewing. Improved spacing to make the editor look good in light and dark modes, reducing eyestrain. New Formating Toolbar Bold, italicise, or strike-through text without the hassle of syntax typing. Now you can create document hierarchy and quickly highlight snippets with new Heading, quotes, etc. Organize ur throughts with the new bulleted and numbered list option all with one click.
Authentication, Security, and Editor Enhancements Authentication & Session Management A new interface allows user to securely register and login to M2H. Authentication is handled via JSON Web Tokens (JWT) stored at local-storage, making sure user sessions are secure. The Nav Bar have been updated with interaction based on whether the user is logged in or not. Enhanced Security & Backend HTML scrubbing via bleach to prevent XSS attacks Added flask-limiter and CSP/HSTS for API protection Deployment The app is now deployed and accessible live on vercel. Check the App
Ships:
I had built M2H (Markdown to HTML), a full-stack markdown editor and blog converter app. It enables users to write in Markdown with all the formatting available on the toolbar and view a clean HTML rendered in real time. Features: - Instant HTML Rendering as users type in. Server-side XSS prevention by using bleach. API protection using Flask-Limiter Secure JWT Based authentication Clean Split-view panel, dark/light modes, along with standard keyboard shortcuts The main challenge for me was setting up seamless sync btw the markdown and the live preview panel in the server-side without causing any lag or errors. Also implementing safe authentication. How to Use: Go to the live website Register an account and log in to explore Use the toolbar and keyboard shortcuts Change btw light and dark themes Test by export your markdown into a live html...
|
1793688879.39449
|
1793775279.39449
|
|
16168
|
ChickenBot Slack Bot by @Adammm | Stardance
|
Adammm
|
1
|
2.27
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T23:44:39Z", "hours": 2.0, "multiplier": 2.15, "payout": 4, "blessing": "neutral", "text": "I made a slack bot The most complecated part was making it run 24/7. The best part of making this bot was intergrating AI gemini api into the bot so it is possible to talk with AI via the bot. Pls dm if any problems", "repo": "https://github.com/Halcyon28/ChcknBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BA54WCAGK"}]...
|
[{"post_id": 16125, "ts": "202 [{"post_id": 16125, "ts": "2026-06-26T06:52:57Z", "hours": 0.2667, "text": "Bug fixes"}, {"post_id": 7739, "ts": "2026-06-12T22:25:47Z", "hours": 0.8375, "text": "Adding gemini AI to the bot"}, {"post_id": 7046, "ts": "2026-06-11T20:16:03Z", "hours": 0.7906, "text": "test log"}]...
|
Title: ChickenBot Slack Bot by @Adammm | Stardance Title: ChickenBot Slack Bot by @Adammm | Stardance
Devlogs:
test log
Adding gemini AI to the bot
Bug fixes
Ships:
I made a slack bot The most complecated part was making it run 24/7. The best part of making this bot was intergrating AI gemini api into the bot so it is possible to talk with AI via the bot. Pls dm if any problems...
|
1793688880.555938
|
1793775280.555938
|
|
35058
|
My own site! by @Camc | Stardance
|
Camc
|
1
|
2.54
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T02:20:15Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple personal site about me and some projects. I found that the css was harder than i thought, specifically the display tag for the elements.", "repo": "https://github.com/clownoftheweekcode/personalsite2", "demo": "https://clownoftheweekcode.github.io/personalsite2/"}]...
|
[{"post_id": 39048, "ts": "202 [{"post_id": 39048, "ts": "2026-08-01T18:39:57Z", "hours": 1.2322, "text": "added a window that allows you to view artwork in a window."}, {"post_id": 32362, "ts": "2026-07-21T14:21:23Z", "hours": 0.3119, "text": "fixed typo and pfp + walkcycle image size as well as making the entire site centered"}, {"post_id": 31563, "ts": "2026-07-20T02:17:44Z", "hours": 1.4403, "text": "i forgot to do a devlog so here it is. I finished my personal site! i would have more time logged but my original repo wasnt tracking my time. basically i made a main page with an element that would hold the tab content. when a tab is clicked, that element’s content is changed in javascript. ive never really written devlogs so this is the best i can do…"}]...
|
Title: My own site! by @Camc | Stardance
Devlogs: Title: My own site! by @Camc | Stardance
Devlogs:
i forgot to do a devlog so here it is. I finished my personal site! i would have more time logged but my original repo wasnt tracking my time. basically i made a main page with an element that would hold the tab content. when a tab is clicked, that element’s content is changed in javascript. ive never really written devlogs so this is the best i can do…
fixed typo and pfp + walkcycle image size as well as making the entire site centered
added a window that allows you to view artwork in a window.
Ships:
I made a simple personal site about me and some projects. I found that the css was harder than i thought, specifically the display tag for the elements....
|
1793688881.7462947
|
1793775281.7462947
|
|
51711
|
Pratyush's Personal Portfolio Project by @RedP Pratyush's Personal Portfolio Project by @RedPanda | Stardance...
|
RedPanda
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T15:40:53Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Personal Portfolio! It’s cute,full of red pandas and has some JS. It was quite fun making it and all the pixel art is handmade by yours truly!", "repo": "https://github.com/Pratyush-M-code/Pratyush-M-code.github.io", "demo": "https://pratyush-m-code.github.io/"}]...
|
[{"post_id": 64269, "ts": "202 [{"post_id": 64269, "ts": "2026-09-08T15:23:37Z", "hours": 3.1611, "text": "Final Devlog! Finished with the final touches and added all my own information! I’m going to ship it!"}, {"post_id": 53994, "ts": "2026-08-24T18:39:20Z", "hours": 2.4333, "text": "DevLog #3 What I did. Made a cute red panda and redrew the bamboo multiple times to make it fit continuously. Made said Bamboo, gave up and then proceeded to take the one good section and copy it to make the pole. Finally figured out how to use flex CSS and fixed the margins and padding to make it look smooth as pixels. FINALLY DEPLOYED IT :- https://pratyush-m-code.github.io/ What I learned. Classes and ids are infact ridiculous, i am not going insane. I would like to add that everything should be made into a class and ids should be ** abolished ** . Flex CSS is pretty cool and solves problems that I didn’t know existed like the margins of my tree-project div being too wide that the text cut off. Lorem ipsum text is a life saver. There is no such thing as too much organization. Things can always be over complicated. P.S. Operas while coding are fantastic. Design Ok the panda does not add much, but i expect with further additions, the pixel jungle theme will begin to shine. I might dial down the colours tho. TODO Fix the scroll wheel as it looks hideous Add a lil leaves falling off from the mouse animation Add text about me,myself and I. Fix the test header and footer"}, {"post_id": 51701, "ts": "2026-08-21T15:05:29Z", "hours": 1.1094, "text": "Added base HTML, CSS files and made pixelateCorner Function. Worked on the base of the CSS file,fixing the colour scheme and making a proper base for future stuff. Made the basic website HTML and finalized the ids and classes of the divs (yet to be added). And made a pixlateCorner function to make the divs look nicer and more on theme."}, {"post_id": 50946, "ts": "2026-08-20T12:41:46Z", "hours": 1.1494, "text": "Devlog #1 - Initalized html, fixed hackatime and fooled around with css to make a cohesive theme."}]...
|
Title: Pratyush's Personal Portfolio Project b Title: Pratyush's Personal Portfolio Project by @RedPanda | Stardance
Devlogs:
Devlog #1 - Initalized html, fixed hackatime and fooled around with css to make a cohesive theme.
Added base HTML, CSS files and made pixelateCorner Function. Worked on the base of the CSS file,fixing the colour scheme and making a proper base for future stuff. Made the basic website HTML and finalized the ids and classes of the divs (yet to be added). And made a pixlateCorner function to make the divs look nicer and more on theme.
DevLog #3 What I did. Made a cute red panda and redrew the bamboo multiple times to make it fit continuously. Made said Bamboo, gave up and then proceeded to take the one good section and copy it to make the pole. Finally figured out how to use flex CSS and fixed the margins and padding to make it look smooth as pixels. FINALLY DEPLOYED IT :- https://pratyush-m-code.github.io/ What I learned. Classes and ids are infact ridiculous, i am not going insane. I would like to add that everything should be made into a class and ids should be ** abolished ** . Flex CSS is pretty cool and solves problems that I didn’t know existed like the margins of my tree-project div being too wide that the text cut off. Lorem ipsum text is a life saver. There is no such thing as too much organization. Things can always be over complicated. P.S. Operas while coding are fantastic. Design Ok the panda does not add much, but i expect with further additions, the pixel jungle theme will begin to shine. I might dial down the colours tho. TODO Fix the scroll wheel as it looks hideous Add a lil leaves falling off from the mouse animation Add text about me,myself and I. Fix the test header and footer
Final Devlog! Finished with the final touches and added all my own information! I’m going to ship it!
Ships:
I made a Personal Portfolio! It’s cute,full of red pandas and has some JS. It was quite fun making it and all the pixel art is handmade by yours truly!...
|
1793688882.9169106
|
1793775282.9169106
|
|
6286
|
abeers-macropad by @Abeer | Stardance
|
Abeer
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T20:21:11Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 4-key macropad with a rotary encoder for volume. The trickiest part was routing the switch matrix on a 2-layer board without crossing traces; I had to reroute a few times. I’m proud that I made it this far.", "repo": "https://github.com/abeer-g0t-r00t/abeers-macropad", "demo": ""}]...
|
[{"post_id": 3608, "ts": "2026 [{"post_id": 3608, "ts": "2026-06-06T16:42:40Z", "hours": 0.4192, "text": "Here’s a picture of the macropad model that I successfully made in FUSION 360!! :D"}]...
|
Title: abeers-macropad by @Abeer | Stardance
Devl Title: abeers-macropad by @Abeer | Stardance
Devlogs:
Here’s a picture of the macropad model that I successfully made in FUSION 360!! :D
Ships:
I made a 4-key macropad with a rotary encoder for volume. The trickiest part was routing the switch matrix on a 2-layer board without crossing traces; I had to reroute a few times. I’m proud that I made it this far....
|
1793688884.1103747
|
1793775284.1103747
|